Quay lại
PHP Deployer trong Laravel

File deploy.php trong một dự án sử dụng PHP Deployer (như PHP Deployer hoặc Laravel Deployer) được sử dụng để cấu hình quá trình triển khai (deployment) của ứng dụng của bạn. Đây là một tệp cấu hình PHP, trong đó bạn định nghĩa các nhiệm vụ (tasks), máy chủ (hosts), biến môi trường và các tùy chọn triển khai khác

Dưới đây là giải thích từng dòng trong đoạn code:

  1. Namespace và Import Deployer:

    namespace Deployer;

    Dòng này xác định namespace của tệp deploy.php là Deployer. Namespace giúp tổ chức và quản lý các lớp, hằng số, và hàm trong PHP.

  2. Import Laravel Recipe:

    require 'recipe/laravel.php';

    Dòng này import một số cấu hình mặc định và các nhiệm vụ được định nghĩa sẵn cho việc triển khai ứng dụng Laravel sử dụng PHP Deployer.

  3. Cấu hình Repository:

    set('repository', 'git@github.com:Dinhhongson230511/github-actions-ci-cd-laravel-app-deployer.git');

    Dòng này xác định địa chỉ của repository Git mà bạn muốn triển khai từ.

  4. Cấu hình Đường dẫn Dự án (Project Path):

    set('project_path', '/var/www/html/laravel-app/github-actions-ci-cd-laravel-app-deployer');

    Dòng này đặt giá trị cho một biến có tên project_path, biến này được sử dụng để xác định đường dẫn đến thư mục chứa dự án trên máy chủ.

  5. Cấu hình Giữ số lượng phiên bản triển khai (Keep Releases):

    set('keep_releases', 2);

    Dòng này xác định số lượng phiên bản triển khai bạn muốn giữ trên máy chủ. Trong trường hợp này, chỉ có hai phiên bản mới nhất được giữ lại.

  6. Cấu hình Tệp Chia sẻ (Shared Files):

    add('shared_files', ['.env']);

    Dòng này định nghĩa danh sách các tệp mà bạn muốn chia sẻ giữa các phiên bản triển khai. Trong trường hợp này, chỉ có tệp .env được chia sẻ.

  7. Cấu hình Thư mục Chia sẻ (Shared Directories):

    add('shared_dirs', []);

    Dòng này xác định danh sách các thư mục mà bạn muốn chia sẻ giữa các phiên bản triển khai. Trong trường hợp này, không có thư mục nào được chia sẻ.

  8. Cấu hình Thư mục Ghi (Writable Directories):

    add('writable_dirs', []);

    Dòng này xác định danh sách các thư mục mà bạn muốn phép ghi cho các phiên bản triển khai. Trong trường hợp này, không có thư mục nào được phép ghi.

  9. Cấu hình Biến Slack Push Done:

    set('slack_push_done', 'curl -X POST --data-urlencode "payload={\"channel\": \"#your_name_chanel\", \"username\": \"Bot\", \"text\": \"@channel [{{ server_name }}] Server {{ server_url }} has been successfully deployed!\", \"icon_emoji\": \":ghost:\"}"');

    Dòng này xác định một biến slack_push_done, chứa lệnh cURL để gửi thông báo đến kênh Slack sau khi triển khai thành công.

  10. Tạo Nhiệm vụ Chạy NPM (npm:run):
    task('npm:run', function () {
        run('cd {{release_path}} \
            && export NVM_DIR="$HOME/.nvm" \
            && [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" \
            && npm install && npm run build');
    });​
    Đoạn mã này định nghĩa một nhiệm vụ tùy chỉnh npm:run. Trong nhiệm vụ này:
    • cd {{release_path}}: Di chuyển đến thư mục release mới nhất.
    • export NVM_DIR="$HOME/.nvm": Xác định biến môi trường NVM_DIR, định dạng cho Node Version Manager (NVM).
    • [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh": Kiểm tra xem tệp nvm.sh có tồn tại không, nếu có thì kích hoạt nó.
    • npm install && npm run build: Cài đặt các phụ thuộc của npm và chạy lệnh build.
  11. Tạo Nhiệm vụ Push Slack Done (push:slack:done):

    task('push:slack:done', function () {
       run('{{slack_push_done}} $SLACK_PUSH_CHANNEL');
    });​

    Dòng này định nghĩa một nhiệm vụ tùy chỉnh push:slack:done, được sử dụng để gửi thông báo đến kênh Slack sau khi triển khai hoàn tất. 

  12. Tạo Nhiệm vụ Triển khai Gói Composer (deploy:vendors):

    task('deploy:vendors', function () {
        run('cd {{release_path}} && composer install');
    });​

    Dòng này định nghĩa một nhiệm vụ tùy chỉnh deploy:vendors, được sử dụng để cài đặt các phụ thuộc Composer của ứng dụng. Nhiệm vụ này sẽ chạy lệnh composer install trong thư mục của phiên bản được triển khai.

  13. Định nghĩa Máy chủ (Host):

    host('app.dev')
        ->set('server_name', 'app.dev - $APP_NAME')
        ->set('server_url', '$APP_URL')
        ->set('branch', 'master')
        ->set('deploy_path', '{{ project_path }}');​

    Dòng này định nghĩa một máy chủ với tên là app.dev. Bạn cũng định nghĩa các thông tin khác của máy chủ như server_name, server_url, branch và deploy_path.

  14. Tạo Hooks (Kẹp) để Tùy chỉnh Nhiệm vụ cho Công thức Laravel:

    after('deploy:update_code', 'npm:run');
    after('deploy:publish', 'push:slack:done');
    after('deploy:failed', 'deploy:unlock');​

    Dòng này đặt các kẹp sau khi thực hiện các bước cụ thể trong quy trình triển khai. Trong trường hợp này, các kẹp đã được đặt sau các bước "update_code", "publish" và "failed". Điều này cho phép bạn chạy các nhiệm vụ tùy chỉnh sau mỗi bước quan trọng trong quy trình triển khai, chẳng hạn như cài đặt các phụ thuộc NPM, gửi thông báo Slack, hoặc giải phóng khóa triển khai.

Bình luận (0)

Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough

Bài viết liên quan

Learning English Everyday