Deploy với Ubuntu VPS (Phần 4): Zero-downtime Deployment
Bài đăng này đã không được cập nhật trong 4 năm
DÁM MƠ LỚN, ĐỪNG PHÍ HOÀI TUỔI TRẺ - là cuốn sách dạo gần đây mình đọc. Trong đó có câu:
Những ngày mười tám đôi mươi ta đều mơ những giấc mơ lớn, đều khao khát đạp tung tất cả để bay ra khỏi vòng tay của gia đình, mẹ cha.
Những ngày hăm lăm nhìn lại hình như giấc mơ đã tiêu hao đi ít nhiều… Ta chậm lại, bớt kì vọng hơn, cũng bớt nỗ lực hơn.
Để rồi những bộn bề của cuộc sống cuốn giấc mơ của bạn đi như dòng nước hững hờ cuốn trôi chiếc lá. Cứ thế, bạn vội vã trưởng thành, vội vã yêu, vội vã sống, vội vã quên đi khát khao mình từng có.
Bung mình ra sống một đời nhiệt huyết rực rỡ hay thu mình lại bình bình yên yên nơi góc nhà… lựa chọn là ở bạn?
Chính những dòng này đã khiến mình bật máy lên để hoàn thành nốt series về deploy. Nó ko phải là ước mơ gì lớn lao, nhưng nó là mong muốn trước kia của mình. Tiếp nối các bài viết trong series này, bài này mình sẽ chia sẻ về Zero-downtime, chiến thuật deploy phổ biến và hiệu quả.
1. Tìm hiểu và cài đặt tool Deployer ở máy local
Zero-downtime được hiểu là cách deploy ko có thời gian chết - cái tên nó như thế mà =)). Nói là Zero-downtime nhưng để đạt được điều này cần phải kết hợp rất nhiều yếu tố: thiên thời, địa lợi, ông bà phù hộ...
- Cài đặt deployer
curl -LO https://deployer.org/deployer.phar - Move
deployer.pharvào thư mụcdepsudo mv deployer.phar /usr/local/bin/dep - Thêm quyền execute cho thư mục
depchmod +x /usr/local/bin/dep
2. Clone source code từ github về local và setup config cho Deployer
Các bạn clone dự án từ github về máy local, sau đó vào thư mục dự án và tạo branch mới cho việc setup deployer nhé. VD: git checkout -b task/#1/setup_deployer
- Khởi tạo file
deploy.phpdep init - Sửa file
deploy.php: Các bạn có thể vào link này để xem config của mình. Nếu các bạn có thắc mắc về một vài config bị comment đi, thì ở phía dưới mình có giải thích nhé.
3. Cho phép máy local được phép ssh vào user deploy trên server
- Lấy ssh-key của máy local
cat ~/.ssh/id_rsa.pub - ssh lên server bằng user của mình và chuyển sang user
deploysudo su deploy - Truy cập vào folder
.sshcủa userdeploycd /home/deploy/.ssh/ - Tạo file authorized_keys
touch authorized_keys - Thêm quyền 600 cho file mới tạo
chmod 600 authorized_keys - Sửa file này bằng Vim
vi authorized_keys - Paste ssh-key vừa lấy được dưới máy local vào file này: Các bạn có thể search các phím tắt khi sử dụng Vim để thao tác với file này nhé.
- Kiểm tra xem đã ssh được bằng user
deploychưassh deploy@45.76.190.30
4. Kiểm tra config và tiến hành deploy thử từ local lên server
- Trong lần chạy đầu tiên, sửa file
deploy.php- Comment dòng
before('deploy:symlink', 'artisan:migrate'); - Lần chạy tiếp theo ko cần comment.
- Vì sao phải comment trong lần chạy đầu tiên? Vì chưa có config của database trong file
.envtrên server.
- Comment dòng
- Chạy Deployer dưới local
dep deploy production
Các lưu ý khi chạy deployer:
-
Nếu thông báo lỗi "... User Closure":
- Comment 3 dòng sử dụng Closure function trong routes/api.php
- Sửa file routes/web.php:
Route::view('/', 'welcome');
-
Nếu thông báo lỗi "sudo: no tty present and no askpass program specified":
- ssh lên server với user
deploy - sudo vi /etc/sudoers
- Sửa
%sudo ALL=(ALL:ALL) ALLthành%sudo ALL=(ALL:ALL) NOPASSWD:ALL
- ssh lên server với user
-
Nếu thông báo lỗi thiếu thư viện unzip khi chạy task
deploy:vendorssudo apt-get install unzip
5. Thay đổi virtual host để trỏ Web Application về thư mục vừa deploy
- ssh lên server:
ssh deploy@45.76.190.30 - Truy cập vào thư mục
currentchứa code mới nhất vừa deploy xong:cd game_from_avengers_with_love/current - Tạo file
.envtừ file.env.examplecp .env.example .env - Generate key
php artisan key:generate - Sửa lại config DB trong
.envvi .env - Sửa file
deploy.confsudo vi /etc/nginx/conf.d/deploy.conf - Trỏ đường dẫn root về current/public
thànhroot /home/deploy/code/game_from_avengers_with_love/public;root /home/deploy/game_from_avengers_with_love/current/public; - Restart lại nginx
sudo service nginx restart
All rights reserved