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.phar
vào thư mụcdep
sudo mv deployer.phar /usr/local/bin/dep
- Thêm quyền execute cho thư mục
dep
chmod +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.php
dep 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
deploy
sudo su deploy
- Truy cập vào folder
.ssh
của userdeploy
cd /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
deploy
chư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
.env
trê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) ALL
thà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:vendors
sudo 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
current
chứa code mới nhất vừa deploy xong:cd game_from_avengers_with_love/current
- Tạo file
.env
từ file.env.example
cp .env.example .env
- Generate key
php artisan key:generate
- Sửa lại config DB trong
.env
vi .env
- Sửa file
deploy.conf
sudo 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