- vừa được xem lúc

Deploy với Ubuntu VPS (Phần 3) Làm thế nào để có thể auto deploy project Laravel

0 0 32

Người đăng: Trung Hoàng

Theo Viblo Asia

Lời mở đầu

Xin chào các bạn. Lại là mình đây, như đã hứa hôm nay mình sẽ hướng dẫn các bạn cách để có thể auto deploy một project Laravel. Trong bài viết này mình sẽ sử dụng Deployer để auto deploy kết hợp với Github Actions để CI/CD. Bắt đầu thôi 👌

1. Cài đặt deployer trên máy local.

1.1 Deployer là gì?

Deployer là một công cụ triển khai mã nguồn mở miễn phí được viết bằng PHP. Bạn có thể dùng nó để deploy nhiều loại project lên Sever như : Laravel, Cakephp, Drupal, Magento... Hơn nữa Deployer cũng có rất nhiều tính năng như:

  • Provisioning: Cung cấp máy chủ cho bạn.
  • Zero downtime deployment: Deploy ứng dụng của bạn mà không có thời gian chết.
  • Roolbacks: Khôi phục về phiên bản trước của bạn, nếu gặp sự cố.

Ngoài ra, deployer còn có một số tính năng như:

  • Easy to use: Deployer rất dễ dàng sử dụng. Nó có cú pháp đơn giản và trực quan.
  • Fast: Deployer rất nhanh. Nó sử dụng kết nối song song để triển khai ứng dụng của bạn.
  • Secure: Nó sử dụng SSH để kết nối tới server của bạn nên rất an toàn.
  • Support all major PHP frameworks: Deployer hỗ trợ tất cả các framework của PHP.

1.2 Cài đặt Deployer.

1.2.1 Cài đặt trong project

VIệc cài depoyer cũng khá đơn giản. Các bạn cài trong project của mình như sau:

composer require --dev deployer/deployer

Để khởi tạo deployer trong project

vendor/bin/dep init

1.2.2 Cài đặt ở local globaly

curl -LO https://deployer.org/deployer.phar
mv deployer.phar /usr/local/bin/dep
chmod +x /usr/local/bin/dep

Thay vì phải gõvendor/bin/dep khá dài dòng mỗi khi muốn thao tác với deployer. Các bạn có thể tạo Alias.bashrc file

alias dep='vendor/bin/dep'

Mỗi khi các bạn muốn chạy deployer chỉ đơn giản như sau:

dep init

Màn hình sẽ hiển thị như sau:

Các bạn lựa chọn framework phù hợp với dự án của mình. Như dự án của mình dùng Laravel nên mình sẽ chọn số 1. Sau đó Deployer sẽ export ra một file cho chúng ta có tên làdeploy.php . Trong file này sẽ chứa nhiều các hàm, biến, tham số, task mà chúng ta cần tìm hiểu. Để biết chi tiết hơn các bạn có thể xem ở docs của Deployer hoặc xem ở bài viết dưới đây. Mình thấy bạn này viết cũng khá đầy đủ.

2. Cho phép User ở local kết nối đến server.

Như ở bài viết trước mình có tạo 1 VPS trên Vultr. Để kết nối đến server

ssh your_user@your_ip

Có một vấn đề là khi ssh theo cách này thông thường chúng ta sẽ phải nhập password. Mình không chắc chắn mình có thể config password ở ssh hay Deployer hay không. Vì thế, để đơn giản mình sẽ hướng dẫn cách bạn cách cài đặt bỏ yêu cầu password khi ssh như sau.

  • Đầu tiên chúng ta cần ssh vào user deploy
  • Tiếp đến sửa public key ssh trong thư mục .ssh giống với public ssh key đã tạo lúc khởi tạo server trên local
  • Truy cậpvi sshd_config bỏ comment và sửa PasswordAuthentication thành no
vi /etc/ssh/sshd_config

Bỏ nhập password khi chạy lệnh với sudo

sudo visudo

Thêm vào cuối file

your_user ALL=(ALL) NOPASSWD:ALL
Ex deploy ALL=(ALL) NOPASSWD:ALL

2. CI/CD với githubs action

Hiện nay có rất nhiều công cụ giúp bạn có thể thực hiện CI/CD. Tuy nhiên ở trong bài viết này mình sẽ hướng dẫn các bạn thực hiện CI/CD trên github actions. Cùng tìm hiểu một cách chi tiết hơn github actions là gì?

2.1. Github actions là gì?

  • Github actions là một nền tảng tích hợp liên tục và phân phối liên tục (CI/CD) cho phép bạn tự động hóa quy trình xây dựng, kiểm thử, và deploy. Bạn có thể tạo nhiều workflows để xây dựng, kiểm thử ở tất cả Pull request của Repository của bạn hoặc auto deploy khi merged.
  • Github actions cung cấp các máy ảo Linux, Windows để chạy các workflows hoặc bạn có thể lưu trữ các trình tự chạy tự lưu trữ của riêng mình trong cơ sở dữ liệu hoặc hạ tầng cơ sở đám mây của riêng bạn

2.2.Config trong file github actions.

  • Để thực hiện CI/CD trên github actions các bạn cần tạo một file với tên tùy chọn ở trong thư mục .github/workflows. Ở dự án của mình, mình để tên file là laravel.yml với nội dung như sau
name: Laravel
on: push: branches: ["dev"] pull_request: branches: [ "dev" ]
jobs: laravel-tests: runs-on: ubuntu-latest steps: - uses: shivammathur/setup-php@15c43e89cdef867065b0213be354c2841860869e with: php-version: '7.4' coverage: xdebug2 - uses: actions/checkout@v3 - name: Install Dependencies run: composer install -q --no-ansi --no-interaction --no-scripts --no-progress --prefer-dist - name: Excute test PHPCS run: vendor/bin/phpcs -n -p deploy-dev: name: Deploy Project to DEV Server runs-on: ubuntu-latest if: github.ref == 'refs/heads/dev' steps: - uses: actions/checkout@v1 - name: Setup PHP uses: shivammathur/setup-php@master with: php-version: 7.4 extension-csv: mbstring, bcmath - name: Composer install run: composer install -q --no-ansi --no-interaction --no-scripts --no-suggest --no-progress --prefer-dist - name: Setup Deployer uses: shimataro/ssh-key-action@v2 with: key: ${{ secrets.SSH_PRIVATE_KEY }} known_hosts: 'ust-a-placeholder-so-we-dont-get-errors' - name: Adding Known Hosts run: ssh-keyscan -H ${{ secrets.SSH_HOST }} >> ~/.ssh/known_hosts - name: Deploy to DEV env: DOT_ENV: ${{ secrets.DOT_ENV_DEV}} run: vendor/bin/dep deploy dev -vvv 

File này sẽ thực hiện CI/CD. Khi thực hiện Pull request sẽ thực hiện các công việc như cài đặt PHP, install composer, và check coding convetion bằng PHPCS. Khi Pull request được merge vào nhánh DEV thì sẽ thực hiện deploy lên Server. Một lưu ý là các bạn cần phải cài đặt một số biến trên Github để có thể kết nối đến Server của bạn. Các bạn cài đặt một số biến như sau ở phần Secrets/Actions.

.

3. Kết luận

Như vậy mình đã vừa hướng dẫn cho các bạn cách dùng CI/CD với một project Laravel. Hi vọng có thể ít nhiều giúp ích cho các bạn. Nếu có bất cứ thắc mắc hay góp ý đừng ngần ngại chi sẻ mình nha. Mình sẽ tiếp thu và phản hồi lại mọi người. Cám ơn vì đã đọc bài viết của mình.

Bình luận

Bài viết tương tự

- vừa được xem lúc

Cấu hình CI/CD với Github (phần 2): Trigger một work flow

Events trigger. Bạn có thể cấu hình cho workflows chạy khi có một sự kiện nào đó xảy ra trên GitHub, theo một lịch có sẵn hoặc cũng có thể là một sự kiện nào đó xảy ra ngoài GitHub.

0 0 80

- vừa được xem lúc

Khi Github Actions và CircleCI song kiếm hợp bích thì đỉnh không gì bằng [Phần 2]

Cách thức thực hiện. Có thể nói ưu điểm của Github Actions chính là số lượng trigger nhiều. Việc khởi động CircleCI sẽ gọi API của CircleCI từ phía Github Actions và kích hoạt trigger. Cho nên, ở setting của repository, hãy cài OFF cho Webhook.

0 0 49

- vừa được xem lúc

Khi Github Actions và CircleCI song kiếm hợp bích thì đỉnh không gì bằng [Phần 1]

(Sau đây xin được dịch lại bài báo nọ, ngôi xưng là "Chế"). .

0 0 48

- vừa được xem lúc

Cấu hình CI/CD với Github (phần 4): Các mẫu job cơ bản

Sau đây là một số mẫu Github action cơ bản mà các bạn có thể sử dụng để tạo một flow hoàn chỉnh, phụ thuộc vào yêu cầu của từng dự án khác nhau. .

0 1 130

- vừa được xem lúc

Cách tạo một trang blog cá nhân miễn phí dành cho dev

Vào một ngày đẹp trời, bỗng dưng mình nảy ra ý định làm một trang blog cá nhân thay vì viết Blog trên các nền tảng có sẵn. .

0 0 42

- vừa được xem lúc

Cài đặt đơn giản automating publishing Flutter app lên Google Play bằng Github Actions

Introduction. Mỗi developer hay gặp phải các công việc lặp đi lặp lại gây ra sự nhàm chán.

0 0 45