Nếu bạn đã từng triển khai laravel hoặc các framework tương tự lên trên server (hosting) thì có khác nhiều cách làm. Các thủ công nhất là zip toàn bộ source sau đó upload lên và unzip ra hoặc sử dụng ftp để upload nếu server, ... Quá trình rất mất nhiều công sức và rất thủ công làm lãng phí khá nhiều thời gian chỉ để chờ ngồi xem file được up lên sau đó nếu có file nào được edit hoặc tìm đúng file đó up lên,... Đấy là chưa kể update thêm package thì khá rắc rối.
Các chuyên gia công nghệ lại nghĩ ra một giải pháp CI/CD ( CI (Continuous Integration) và CD (Continuous Delivery) - tích hợp thường xuyên ) giúp cho quá trình deploy test, dev, production một cách nhanh chóng và tự động hoàn toàn. Bạn dev chỉ cần code xong thấy ok push lên git. Các công cụ CI/CD tự động kiểm tra thấy có push mới là tự động chạy build code sau đó copy vào đúng thư mục cần run một cách hoàn chỉnh nhanh chóng. Trên thị trường có khá nhiều bên phát triển các giải pháp như này trong đó có Gitlab, Circle, Github Action,..
Trong bài này mình sẽ đề cập triển khai với Github Actions một nền tảng rất hay của Github được tích hợp sẵn và sử dụng free với thời gian khá ổn với những team, project nhỏ thông tin chi tiết ở đây https://github.com/features/actions bạn có thể tìm hiểu rõ hơn.
Giới thiệu qua Github là một nền tảng lưu trữ quản lý phiên bản nổi tiếng nhất nhì trong giới công nghệ mà bất cứ lập trình viên nào cũng không còn lạ lẫm. Nó được Microsoft mua lại và tích hợp thêm nhiều món rất thứ hay ho trong đó có Github Actions,...
Với bản tài khoản free bạn được "2,000 minutes/month" run server actions một tháng thì bạn có khoảng trung bình là 66.66 phút triển khai trong một ngày và nếu mỗi lần chạy tốn khoảng 2 phút thì tổng bạn có khoảng 33 lần. Với dự án không thay đổi quá nhiều hoặc cần live test fix liên tục thì khá là dư giả để triển khai.
Điều kiện cần 1 tài khoản Github và 1 server deploy ( cloud/vps/... ) miễn là là có quyền ssh để truy cập vào upload file source code. Trong đó server đã được cài đầy đủ web service đủ để chạy được source web của bạn. Hoặc bạn có thể sử dụng những share hosting controller để deploy server một cách nhanh gọn nhất.
Chú ý quá trình cài đặt này chỉ giúp copy source từ github deploy tự động lên server của bạn chứ không hỗ trợ bạn cài nginx,php, mysql cho bạn. Do vậy bạn phải cài đầy đủ mấy phần trên đảm bảo chạy được source của bạn trước khi bắt đầu.
Hướng dẫn sử dụng Git Actions từng bước như sau:
Vào trong github của dự án của bạn.
B1. Khởi tạo actions
Github sẽ gợi ý sẵn cho bạn một template để sử dụng bạn chỉ cần commit vào dự án của các bạn sau đó pull về để custom lại nữa là xong
sau khi pull về nó sẽ nằm ở: ".github/workflows/". Trong đó file yml kịch bản bạn muốn chạy.
B2: sửa script deploy.
Template sau khi được mình custom về và edit lại như sau bạn có thể tham khảo.
name: Laravel Deploy Github Action | |
on: | |
push: | |
branches: [ main ] | |
pull_request: | |
branches: [ main ] | |
jobs: | |
Deploy-Project: | |
runs-on: ubuntu-latest | |
steps: | |
- name: Get the latest code | |
uses: actions/checkout@master | |
- uses: actions/setup-node@master | |
- name: Installing project dependencies | |
run: npm install | |
- name: Building the project | |
run: npm run production | |
- name: Install Dependencies | |
run: composer install --optimize-autoloader --no-dev | |
- name: Generate key | |
run: php artisan key:generate | |
- name: Directory Permissions | |
run: chmod -R 777 storage bootstrap/cache | |
// upload file to server | |
- name: copy files | |
uses: appleboy/scp-action@master | |
with: | |
username: ${{ secrets.SSH_USERNAME }} | |
host: ${{ secrets.SSH_HOST }} | |
key: ${{ secrets.SSH_PRIVATE_KEY }} | |
overwrite: true | |
source: "./*" | |
target: /var/www/html/ | |
Diễn giản như sau.
on: | |
push: | |
branches: [ main ] | |
pull_request: | |
branches: [ main ] |
Nó sẽ lắng nghe sự kiện khi có một push hoặc pull từ branches "main" thì Actions sẽ được chạy.
runs-on: ubuntu-latest | |
steps: | |
- name: Get the latest code | |
uses: actions/checkout@master | |
- uses: actions/setup-node@master | |
- name: Installing project dependencies | |
run: npm install | |
- name: Building the project | |
run: npm run production | |
- name: Install Dependencies | |
run: composer install --optimize-autoloader --no-dev | |
- name: Generate key | |
run: php artisan key:generate | |
- name: Directory Permissions | |
run: chmod -R 777 storage bootstrap/cache |
Cloud của Github sẽ pull project sau đó install nodejs để build ui (nếu cần) và composer install các package cần phải có trong dự án.
Tiếp theo tạp ra application key, chmod lại quyền ghi các thư mục.
// upload file to server | |
- name: copy files | |
uses: appleboy/scp-action@master | |
with: | |
username: ${{ secrets.SSH_USERNAME }} | |
host: ${{ secrets.SSH_HOST }} | |
key: ${{ secrets.SSH_PRIVATE_KEY }} | |
overwrite: true | |
source: "./*" | |
target: /var/www/html/ |
Bước tiếp theo sử dụng "appleboy/scp-action" ( đây là 1 package có tính năng hỗ trợ upload file từ github action -> server của bạn thông qua giao thức scp một cách tự động ) để copy toàn bộ source được pull vừa xong.
=> target: /var/www/html/ : đây là folder sẽ up source của dự án.
Mô tả cấu hình chi tiết của "appleboy/scp-action" bạn có thể đọc thêm tại https://github.com/appleboy/scp-action
Ở đây để login vào ssh bạn có thể sử dụng user + password hoặc user + private key để login ssh trên server
Đây là hướng dẫn để cấu hình login ssh
Chu y: Private key cua server deplop duoc tao nhu sau:SSH_PRIVATE_KEY. If you don’t have this you can run "ssh-keygen -t rsa" in your server terminal to generate a new key, then run the command "cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys" to allow connection to the private key. then you "cat ~/.ssh/id_rsa.pub" =>copy private key and add to serects key of github.
SSH_HOST. This is the IP address of the server.
SSH_USERNAME. This is the server username, in my case it’s root . If you don’t know your username you can use the whoami command on your server to check.
Các serect key này bạn có thể lưu trữ nó ở trong serect key của Github và được gọi ra bằng lệnh
"${{ secrets.SSH_USERNAME }}" trong đó "SSH_USERNAME" chính là tên của serect key mình đã đặt trước đó
Sau khi hoàn tất tất cả các phần trên việc còn lại của bạn chỉ là git push nên đúng brancher "main" là hệ thống sẽ tự động chạy quá trình tự động build source laravel của bạn sau đó upload ghi đè lên source cũ.
Github actions còn rất nhiều script temple cho các framework, ngôn ngữ khác và có khả năng custom được rất mạnh. Bạn lên thử sử dụng nó sẽ thay đổi hoàn toàn thói quen của bạn.
Chúc bạn thành công với hướng dẫn ngắn trên.
Nhận xét
Đăng nhận xét