Điểm:0

Add private GitHub repository "the right way" in dockerfile (w composer.json)

lá cờ ph

I'm trying to add my private GitHub repository, through the composer.json-file, while building a docker image. But I can't make it work no matter what I try.

I want the most simple approach possible, it doesn't have to be the most secure but at least acceptable. I'm hoping it's possible to do with a "Personal Access Token".

Here's my attempt;

FROM php:8-fpm

# Set working directory
WORKDIR /var/www

# Set args
ARG GIT_ACCESS_TOKEN
ARG GIT_PRIVATE_KEY
ARG GIT_HASH
ENV GIT_HASH=$GIT_HASH

# add credentials on build
#RUN touch ~/.composer/auth.json
RUN mkdir ~/.composer
RUN echo '{"github-oauth":{"github.com": "${GIT_ACCESS_TOKEN}"}}' > ~/.composer/auth.json

# Install dependencies
RUN apt-get update && apt-get install -y \
    nano \
    build-essential \
    default-mysql-client \
    locales \
    zip \
    libzip-dev \
    unzip \
    git \
    curl \
    libssl-dev \
    libonig-dev

# Install extensions
RUN docker-php-ext-install opcache pdo_mysql mbstring zip ftp mysqli bcmath

# GitHub access to LCMS
RUN git config --global url."https://${GIT_ACCESS_TOKEN}@github.com".insteadOf "ssh://[email protected]"

RUN mkdir -p ~/.ssh/ && \
    echo ${GIT_ACCESS_TOKEN} > ~/.ssh/id_rsa && \
    chmod -R 600 ~/.ssh/ && \
    ssh-keyscan -t rsa github.com >> ~/.ssh/known_hosts

# Install composer
# Copy composer.lock and composer.json
COPY ./web/composer.json /var/www/
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer

# Install vendor dependencies through composer
RUN composer install

# Install opache settings for php
COPY ./web/nginx/php.ini $PHP_INI_DIR/conf.d/opcache.ini

# Copy existing application directory contents
COPY ./web /var/www

# Clean up
RUN apt-get remove -y git && apt-get autoremove -y && apt-get clean && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*

# Expose port 9000 and start php-fpm server
EXPOSE 9000

I'm always greeted with errors from GitHub. If I run the code above, I get this error;

> [11/14] RUN composer install:                                                                                    
#15 0.196 Do not run Composer as root/super user! See https://getcomposer.org/root for details                      
#15 0.226 No composer.lock file present. Updating dependencies to latest instead of installing from lock file. See https://getcomposer.org/install for more information.
#15 0.226 Loading composer repositories with package information
#15 0.877 
#15 0.883                                                                                                                                           
#15 0.883   [RuntimeException]                                                                                                                      
#15 0.883   Failed to execute git clone --mirror -- '[email protected]/xxxxx' '/root/.composer/cache/vcs/git-github.com-xxxxxxx/'  
#15 0.883                                                                                                                                           
#15 0.883   Cloning into bare repository '/root/.composer/cache/vcs/git-github.com-xxxxxxx'...                                             
#15 0.883   Warning: Permanently added the RSA host key for IP address '140.82.121.3' to the list of known hosts.                                   
#15 0.883   Load key "/root/.ssh/id_rsa": invalid format                                                                                            
#15 0.883   [email protected]: Permission denied (publickey).                                                                                          
#15 0.883   fatal: Could not read from remote repository.                                                                                           
#15 0.883                                                                                                                                           
#15 0.883   Please make sure you have the correct access rights                                                                                     
#15 0.883   and the repository exists.

Anyone with suggestions?

lá cờ in
Mã thông báo truy cập không phải là khóa ssh. Nó được dùng làm mật khẩu trong url http (đọc tài liệu GitHub). Nhưng tôi lo lắng hơn về thực tế là khóa nằm trong hình ảnh và mọi người có quyền truy cập vào hình ảnh đều có thể đọc được.
lá cờ in
https://docs.github.com/en/authentication/keep-your-account-and-data-secure/creating-a-personal-access-token#using-a-token-on-the-command-line
lá cờ ph
Nhưng vì môi trường của tôi nằm trong AWS ecs, tôi thậm chí có thể sử dụng khóa ssh không?
lá cờ in
Bạn đang bị mất điểm. Bạn không thể sử dụng mã thông báo truy cập làm khóa SSH. Nó được cho là được sử dụng làm mật khẩu trên https.
Điểm:1
lá cờ in

Mã thông báo truy cập cá nhân của bạn không được dùng làm khóa SSH, mã này thay thế cho mật khẩu GitHub cá nhân của bạn và chỉ có thể được sử dụng với các kết nối HTTPS.

Một Dockerfile tối thiểu đang hoạt động sẽ là:

TỪ php:8-fpm

ARG GIT_ACCESS_TOKEN

CHẠY cập nhật apt-get && cài đặt apt-get -y git

CHẠY git clone https://yourusername:${GIT_ACCESS_TOKEN}@github.com/yourusername/yourrepo.git

Sau đó, bạn có thể sử dụng ARG trên dòng lệnh xây dựng:

docker build --build-arg GIT_ACCESS_TOKEN="YOURLONGACCESSTOKEN" .

NHƯNG:

Mã thông báo truy cập của bạn sẽ hiển thị với tất cả những người có quyền truy cập vào hình ảnh của bạn.

Điều này được ghi nhận trong Tài liệu Dockerfile:

Cảnh báo:

Không nên sử dụng các biến thời gian xây dựng để chuyển các bí mật như khóa github, thông tin đăng nhập của người dùng, v.v. Giá trị biến thời gian xây dựng hiển thị cho bất kỳ người dùng nào của hình ảnh với lịch sử docker chỉ huy.

Bạn nên sử dụng một xây dựng nhiều giai đoạn hoặc sử dụng cái mới hơn Xây dựng bí mật để ngăn chặn điều này.

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.