Github Actions là một công cụ giúp tự động hóa các công việc trong quá trình phát triển phần mềm. Trong bài viết này, chúng ta sẽ tìm hiểu cách sử dụng Github Actions để tự động deploy ứng dụng Laravel.
Cách thức hoạt động
Khi 1 event xảy ra ở repository như là tạo 1 pull request hoặc push code lên 1 branch nào đó, sẽ kích hoạt workflow đã được tạo sẵn. Mỗi workflow sẽ chứa 1 hoặc nhiều job, các job có thể được chạy tuần tự hoặc song song với nhau. Mỗi job sẽ chạy bên trong máy ảo runner hoặc bên trong 1 container, và có 1 hoặc nhiều step trong mỗi job để run script hoặc action.
Tạo script để thực hiện deploy
Bước đầu tiên chúng ta sẽ phải làm là tạo script chứa các command cần thiết để thực hiện deploy và chạy ứng dụng.
Ở thư mục root của ứng dụng, chúng ta sẽ thêm thư mục .scripts
Bên trong thư mục .scripts, thêm file deploy.sh
với nội dung bên dưới:
1 |
|
Tạo workflow
Github action workflow là nơi chứa các hướng dẫn cũng như các bước cụ thể để chạy các jobs.
Bạn cần tạo một file deploy.yml
trong thư mục .github/workflows
trong repository của bạn. Trong file này, bạn cần định nghĩa các công việc cần thực hiện để deploy ứng dụng Laravel.
Ví dụ, đoạn code sau đây sẽ định nghĩa một công việc để deploy ứng dụng Laravel khi có sự thay đổi code ở nhánh master
1 | name: Deploy |
Cụ thể, khi code ở branch master có sự thay đổi sẽ trigger workflow hoạt động, login vào server bằng SSH, thực hiện các lệnh được mô tả trong deploy.sh
mà chúng ta đã tạo ở bước trước.
Cài đặt SSH key
Giờ là lúc chúng ta tạo kết nối giữa server của bạn và Github.
Đầu tiên chúng ta cần tạo ssh key pair trên server bằng câu lệnh sau:1
ssh-keygen -t rsa -b 4096 -C "youremail@example.com"
Câu lệnh trên sẽ tạo ra 2 keys, 1 public key và 1 private key, chúng được lưu ở thư mục .ssh
.
Tiếp đến bạn cần thêm private key trên vào ssh-agent:1
2 eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_rsa
Cuối cùng, thêm public key vào file authorized_keys
ở trên server.1
Cuối cùng, thêm public key vào file authorized_keys ở trên server.
Copy ssh-key lên tài khoản github
Ở trong file deploy.yml
chúng ta có sử dụng các key: HOST, PORT, KEY, USERNAME.
Giờ là lúc chúng ta định nghĩa các key này trên github để có thể kết nối được đến server.
1) Login vào tài khoản Github và mở mục Settings của repository
2) Click vào mục Secrets and variables từ sidebar menu
3) Click button New repository secret
Chúng ta thêm các key dưới đây:
HOST: địa chỉ IP của server
PORT: ssh port, mặc định là 22
SSHKEY: là private key chúng ta đã tạo ở bước trên
USERNAME: tên user dùng để login vào server
4) Bước cuối cùng để server có thể fetch code từ github về, chúng ta cần thêm public key đã tạo vào tài khoản github.
a. Nếu bạn có nhiều repositories thì bạn có thể thêm public key ở account level: Settings → SSH and GPG keys
b. Còn nếu bạn muốn chỉ định để truy cập repository nhất định thì bạn có thể thêm public key ở mục Deploy keys
trong Settings
Thêm permission cho deploy.sh
Chúng ta cần cấp quyền excecution như dưới:1
sudo chmod +x ./REPOSITORY/.scripts/deploy.sh
Các bước chuẩn bị đã xong, chúng ta hãy thử commit và push code vào branch master sẽ thấy điều thần kỳ xảy ra. Chúng ta cũng có thể thêm các workflow khác cho việc testing, tạo môi trường staging…
Tham khảo:
1) https://docs.github.com/en/actions/learn-github-actions/understanding-github-actions
2) https://dev.to/kenean50/automate-your-laravel-app-deployment-with-github-actions-2g7j