+3

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

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: image.png

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.

image.png.

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.


All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí