diff --git a/README.md b/README.md index 7f986ee..09dc8f7 100644 --- a/README.md +++ b/README.md @@ -13,7 +13,7 @@ + [ ] PHP appilcation + [ ] NodeJs application + [ ] [Tool]: Rocketeer - + [ ] [Tool]: Deployer + + [x] [Tool]: Deployer - [ ] [Áp dụng CI, CW notification](./docs/cicd/README.md) + [ ] CircleCI + [ ] Github Action diff --git a/docs/deploy-tool/deployer/README.md b/docs/deploy-tool/deployer/README.md new file mode 100644 index 0000000..5f2c388 --- /dev/null +++ b/docs/deploy-tool/deployer/README.md @@ -0,0 +1,144 @@ +# 1. Ý nghĩa +> Deployer là cli tool dùng để tự động hóa phần lớn công việc trong quá trình deploy ứng dụng lên server. + +> Sử dụng được cho rất nhiều framework PHP. + +> Có thể hình dung sơ bộ như sau : +- Tất cả những thông số input đầu vào được khai báo trong deploy.php file(file này được cli tạo ra và quản lí sau khi init deployer). +- Cli deployer sẽ đọc file này và dựng lên luồng xử lí dữ liệu. +Luồng giống như chúng ta làm thủ công, từ việc login server remote cho đến cài đặt module cho project, pull code từ git hub, ... +- Nó sử dụng giao thức SSH để giao tiếp với server, luồng xử lí được chia theo đơn vị là `task` - khởi phát các action. + +# 2. Cài đặt +> Download deployer.phar về với tên là deployer.phar luôn: +```bash +curl -LO https://deployer.org/deployer.phar +``` +> Di chuyển nó vào thư mục /usr/local/bin/dep: +```bash +mv deployer.phar /usr/local/bin/dep +``` +> Đánh dấu nó với hệ thống là thư mục chứa lệnh để thực thi: +```bash +chmod +x /usr/local/bin/dep +``` +> Vào root project folder rồi tạo file deploy.php bằng command: +```bash +dep init +``` +> Fetch các component cần thiết về project: +```bash +composer global require deployer/deployer +``` + +# 3. Những điều cần biết +> Lưu ý: + +> Ở đây chỉ để cập tới việc deploy code, ngoài ra để ứng dụng có thể chạy được thì hiển nhiên là chúng ta phải setting database, +> tạo key SSH thông luồng giữa local-server-github, user trên server, config host, ... + +> Vì bản chất deployer sử dụng giao thức SSH để lưu chuyển data qua lại giữa các bên nên nó sẽ không đảm nhiệm được những nhiệm vụ ngoài phạm vi. + +## 3.1. Các khai báo cốt lõi trong deploy.php +### Định nghĩa, sử dụng biến global +```bash +set('param', 'value'); +``` +Riêng việc định nghĩa biến env sẽ update env file trên server. +```bash +get('param'); +``` +### Định nghĩa task +```bash +task('taskName', function () { + // vạn sự tùy tâm + // chạy command, nhập input, rollback version release, .... +}); +``` +Cũng có thể group các task, hoặc các command vào 1 alias như thế này: +```bash +task('taskName', [ + 'task1|command1', + 'task2|command2', + ... +]); +``` +Riêng với taskName 'deploy' được ngầm hiểu là task bắt đầu tiến trình deploy. +### Chạy command cụ thể trên server +```bash +run('cd {{release_path}} && command1 && command2'); +``` +### Thay đổi thứ tự thực hiện các task +```bash +after('task1', 'task2'); +``` +```bash +before('task1', 'task2'); +``` +Nhìn vào đây, ta có thể linh hoạt được kha khá công việc thay vì sửa file. + +Ví dụ hôm nay muốn deploy branch khác, trước khi thực thi deploy task hãy bắn ra yêu cầu nhập: +```bash +ask('What branch to deploy?', 'default branch'); +``` +### Khai báo host để deploy lên +```bash +host('domain[a:f]', 'domain1', 'domain2', ...) + ->user('user') + ->port('port'); +``` + +Hoặc có thể tự config host và include `inventory('hosts.yml');` như https://deployer.org/docs/hosts.html + +## 3.2. Luồng deploy +Bình thường thì `deploy` task thực hiện với nhiều task nhỏ hơn được định nghĩa sẵn bên trong tùy vào version framework php: +```bash +task('deploy', [ + 'deploy:prepare', + 'deploy:lock', + 'deploy:release', + ... + 'deploy:unlock', + 'cleanup', + 'success' +]); +``` + +Tuy nhiên cũng có thể override cho phù hợp. Ý nghĩa cụ thể cho từng task ở https://deployer.org/docs/flow.html + +Trường hợp deploy đồng thời lên nhiều server để tối ưu hiệu năng và tốc độ, +giải pháp đưa ra là build version release duy nhất 1 lần ngay trên local và copy tới các remote server https://deployer.org/docs/advanced/deploy-strategies.html. + +## 3.3. Cấu trúc thư mục trong deploy_path (Laravel) +>-- .dep +> +>-- current +> +>-- releases +> +>>--> 1 +> +>>--> ... +> +>-- shared +> +>>--> .env +> +>>--> storage + +- .dep: folder chứa meta data. +- current: bản release gần nhất releases->1 được deploy lên. +- releases: tổng hợp các version đã được deploy theo ngăn xếp. +- shared: các folder, file được public share giữa các release. Mặc định là .env và storage. + +# 4. Sử dụng +> Để có thể deploy được code 1 ứng dụng đơn giản lên 1 server thì mọi việc khá dễ dàng. +> Chỉ cần đảm bảo 1 vài thuộc tính input trong deploy.php như sau: +- repository: repo github để clone code. +- branch: xác định branch lấy code(mặc định lấy tên branch theo local). +- host: ip/host, user, deploy_path. + +Chạy task deploy bằng command: +```bash +dep deploy +``` \ No newline at end of file