Tôi có thể hướng dẫn bạn cách triển khai ứng dụng Laravel sử dụng GitLab CI/CD và Docker trên CentOS. Bạn cần thực hiện các bước sau:
- Cài đặt ACL trên CentOS bằng lệnh sau:
yum -y install acl
- Tạo một người dùng mới trên máy chủ bằng lệnh sau:
sudo adduser deployer
- Cấp quyền truy cập cho người dùng mới tạo vào thư mục /var/www bằng lệnh sau:
sudo setfacl -R -m u:deployer:rwx /var/www
- Tạo một cặp khóa SSH mới bằng lệnh sau:
ssh-keygen -t rsa -C "deployer" -f ~/.ssh/id_rsa -P ""
- Sao chép nội dung của khóa công khai vào tệp authorized_keys bằng lệnh sau:
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
- Sao chép khối văn bản khóa riêng tư bằng lệnh sau:
cat ~/.ssh/id_rsa
Trên GitLab, thêm khóa triển khai bằng cách đi tới Cài đặt -> Khóa triển khai. Sao chép nội dung khóa riêng tư vào đó.
Trong mã nguồn của bạn, sử dụng Composer để cài đặt Laravel Envoy bằng lệnh sau:
composer require laravel/envoy --dev
- Tạo tệp Envoy.blade.php với nội dung như sau để triển khai ứng dụng của bạn:
@servers(['web' => 'deployer@{địa chỉ IP của máy chủ}']) @setup $repository = '[email protected]'; // tên repository của bạn $releases_dir = '/var/www/html/project'; // đường dẫn tới thư mục chứa mã nguồn trên máy chủ $app_dir = '/var/www/html'; $release = date('YmdHis'); $new_release_dir = $releases_dir . '/'. $release; @endsetup @story('deploy') pull_repository run_composer migrate @endstory @task('pull_repository') echo 'Đang tải mã nguồn...' cd {{ $releases_dir }} echo 'Reset lại HEAD...' git reset --hard HEAD echo 'Đang kéo mã nguồn từ GitLab...' git pull origin master @endtask @task('run_composer') echo "Bắt đầu triển khai..." cd {{ $releases_dir }} composer install --ignore-platform-reqs @endtask {{-- Migrate cơ sở dữ liệu --}} @task('migrate') echo 'Đang di chuyển các bản cập nhật...' cd {{ $releases_dir }} php artisan migrate --force @endtask
- Tạo tệp .gitlab-ci.yml với nội dung như sau để triển khai ứng dụng của bạn:
image: registry.gitlab.com/1206dev/blog:latest
stages:
- deploy_dev
deploy_dev:
stage: deploy_dev
script:
# Thêm khóa SSH riêng tư vào môi trường xây dựng
- 'which ssh-agent || ( apt-get update -y && apt-get install openssh-client -y )'
- eval $(ssh-agent -s)
- ssh-add <(echo "$SSH_PRIVATE_KEY")
- mkdir -p ~/.ssh
- '[[ -f /.dockerenv ]] && echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config'
# Chạy Envoy để triển khai ứng dụng
- ~/.composer/vendor/bin/envoy run deploy --commit="$CI_COMMIT_SHA"
rules:
- if: $CI_COMMIT_BRANCH == "master" && $CI_PIPELINE_SOURCE == "push"
- if: $CI_COMMIT_MESSAGE =~ /\[build\]/
when: always
- when: never
- Tạo tệp Dockerfile với nội dung như sau để xây dựng ảnh Docker:
# Sử dụng ảnh PHP 7.4 làm ảnh cơ sở FROM php:7.4 # Cập nhật các gói phần mềm RUN apt-get update # Cài đặt các gói phần mềm cần thiết cho PHP và Composer RUN apt-get update && apt-get install -y \ git \ curl \ libpng-dev \ libonig-dev \ libxml2-dev \ zip \ unzip # Xóa các tệp tin đã tải xuống trong quá trình cài đặtRUN apt-get clean # Cài đặt các extension cần thiết cho PHP # Bạn có thể cài đặt thêm các extension khác nếu cần thiết RUN docker-php-ext-install pdo_mysql mbstring exif pcntl bcmath gd # Cài đặt Composer RUN curl --silent --show-error "https://getcomposer.org/installer" | php -- --install-dir=/usr/local/bin --filename=composer # Cài đặt Laravel Envoy RUN composer global require "laravel/envoy=~1.0"
- Đăng nhập vào Docker Registry và đẩy ảnh Docker lên đó bằng lệnh sau:
docker login registry.gitlab.com
docker build -t registry.gitlab.com/1206dev/blog .
docker push registry.gitlab.com/1206dev/blog
- Cài đặt GitLab Runner bằng lệnh sau:
docker run --rm -it -v /srv/gitlab-runner/config:/etc/gitlab-runner gitlab/gitlab-runner register
Cấu hình biến DOCKER_AUTH_CONFIG trên GitLab bằng cách đi tới Cài đặt -> CI/CD -> Biến. Thêm khóa DOCKER_AUTH_CONFIG và giá trị là một chuỗi JSON chứa thông tin xác thực Docker Registry của bạn.
Nếu bạn gặp lỗi "envoy deployer@: Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password)", hãy thực hiện các lệnh sau để sửa lỗi:
chmod 700 .ssh chmod 600 .ssh/authorized_keys restorecon -r -vv .ssh/authorized_keys
Sau khi hoàn thành các bước trên, bạn đã triển khai ứng dụng Laravel của mình sử dụng GitLab CI/CD và Docker trên CentOS.