Như đã giới thiệu trong bài thì việc deploy là rất cần thiết cho bất kỳ một dự án công nghệ thông tin nào. Hôm nay mình xin hướng dẫn các bạn deploy một dự án PHP sử dụng Framework Laravel bằng công cụ Deployer. Vì sao tôi lại chọn Laravel mà không phải một framework khác?
Laravel là một framework PHP rất mạnh và phổ biến trong những năm gần đây, được cộng đồng mã nguồn mở đánh giá rất cao, và được sử dụng nhiều bởi các PHP programmer có kinh nghiệm.
Deployer laravel là gì?
Deployer là một công cụ triển khai (deploy) mã nguồn mở và miễn phí được viết bằng PHP. Nó giúp bạn triển khai ứng dụng Laravel của mình lên server.
Ba tính năng chính của Deployer là:
- Cung cấp - cung cấp một server cho bạn.
- Deploy không gián đoạn - triển khai ứng dụng của bạn mà không có thời gian ngừng hoạt động.
- Rollbacks - khôi phục ứng dụng của bạn về phiên bản trước, nếu có sự cố
Cách download và cài đặt Deployer laravel
Cách 1. Download file .phar để cài Deployer
Để cài đặt Deployer qua file .phar, các bạn chỉ cần run những câu lệnh đơn giản sau:
curl -LO https://deployer.org/deployer.phar
mv deployer.phar /usr/local/bin/dep
chmod +x /usr/local/bin/dep
Cách 2. Cài Deployer laravel bằng composer
Để cài đặt Deployer laravel sử dụng composer, các bạn chỉ cần run command:
composer require deployer/deployer –dev
hoặc cho global
composer global require deployer/deployer
Sau đó để sử dụng được Deployer, các bạn gõ command sau:
php vendor/bin/dep
Cách 3. Sử dụng composer với bản phân phối
Tương tự như cách cài đặt với composer chúng ta dùng command:
composer require deployer/dist –dev
hoặc cho global
composer global require deployer/dist
Sau đó để sử dụng được Deployer, các bạn gõ command sau:
php vendor/bin/dep
Ngoài ra Deployer cũng hỗ chợ việc autocomplete cho bash/zsh/fish, bởi vậy bạn không cần phải nhớ tất cả các task và tùy biến:
dep autocomplete
Hướng dẫn deploy laravel dự án Laravel bằng Deployer
Sau khi cài đặt Deployer xong chúng ta sẽ tiến hành khởi tạo file deploy.php (Nếu bạn nào chưa cài đặt được thì có xem hướng dẫn tại )
FRAMGIA\:~/code/my_project_laravel$ dep init
Welcome to the Deployer config generator
This utility will walk you through creating a deploy.php file.
It only covers the most common items, and tries to guess sensible defaults.
Press ^C at any time to quit.
Please select your project type [Common]:
[0 ] Common
[1 ] Laravel
[2 ] Symfony
[3 ] Yii
[4 ] Yii2 Basic App
[5 ] Yii2 Advanced App
[6 ] Zend Framework
[7 ] CakePHP
[8 ] CodeIgniter
[9 ] Drupal
[10] TYPO3
Bạn có thể nhìn thấy khi thực hiện câu lệnh init, deployer laravel hỗ trợ chúng ta rất nhiều framework như: Laravel, Symfony, Yii,... Chúng ta sẽ lựa chọn [1] để chon framework Laravel mà chúng ta đang sử dụng
Repository [https://github.com/user_name/project.git]:
> https://github.com/user_name/project.git
Contribute to the Deployer Development
In order to help development and improve Deployer features in,
Deployer has a setting for collection of usage data. This function
collects anonymous usage data and sends it to Deployer. The data is
used in Deployer development to get reliable statistics on which
features are used (or not used). The information is not traceable
to any individual or organization. Participation is voluntary,
and you can change your mind at any time.
Anonymous usage data contains Deployer version, php version, os type,
name of the command being executed and whether it was successful or not,
exception class name, count of hosts and anonymized project hash.
If you would like to allow us to gather this information and help
us develop a better tool, please add the code below.
set('allow_anonymous_stats', true);
This function will not affect the performance of Deployer as
the data is insignificant and transmitted in separate process.
Do you confirm? (yes/no) [yes]:
> yes
Successfully created: /home/pham.duy.thanh/code/my_laravel_project/deploy.php
Sau khi đã lựa chọn được framework, tiếp đến chúng ta sẽ cài đặt repository chưa source code của ta trên github. Và quá trình khởi tạo file deploy.php đã thành công
Sử dụng lệnh sau để xem tất cả các command của Deployer laravel
FRAMGIA\:~/code/my_laravel_project$ dep list
Deployer 6.0.5
Usage:
command [options] [arguments]
Options:
-h, --help Display this help message
-q, --quiet Do not output any message
-V, --version Display this application version
--ansi Force ANSI output
--no-ansi Disable ANSI output
-n, --no-interaction Do not ask any interactive question
-f, --file[=FILE] Specify Deployer file
--tag=TAG Tag to deploy
--revision=REVISION Revision to deploy
--branch=BRANCH Branch to deploy
-v|vv|vvv, --verbose Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
Available commands:
autocomplete
build
cleanup Cleaning up old releases
deploy Deploy your project
help Displays help for a command
init Initialize deployer in your project
list Lists commands
rollback Rollback to previous release
run Run any arbitrary command on hosts
self-update Updates deployer.phar to the latest version
ssh Connect to host through ssh
artisan
artisan:cache:clear Execute artisan cache:clear
artisan:config:cache Execute artisan config:cache
artisan:db:seed Execute artisan db:seed
artisan:down Enable maintenance mode
artisan:migrate Execute artisan migrate
artisan:migrate:fresh Execute artisan migrate:fresh
artisan:migrate:rollback Execute artisan migrate:rollback
artisan:migrate:status Execute artisan migrate:status
artisan:optimize Execute artisan optimize
artisan:queue:restart Execute artisan queue:restart
artisan:route:cache Execute artisan route:cache
artisan:storage:link Execute artisan storage:link
artisan:up Disable maintenance mode
artisan:view:clear Execute artisan view:clear
config
config:current Show current paths
config:dump Print host configuration
config:hosts Print all hosts
deploy
deploy:clear_paths Cleaning up files and/or directories
deploy:copy_dirs Copy directories
deploy:lock Lock deploy
deploy:prepare Preparing host for deploy
deploy:public_disk Make symlink for public disk
deploy:release Prepare release. Clean up unfinished releases and prepare next release.
deploy:shared Creating symlinks for shared files and dirs
deploy:symlink Creating symlink to release
deploy:unlock Unlock deploy
deploy:update_code Update code
deploy:vendors Installing vendors
deploy:writable Make writable dirs
Các bạn có để ý thấy trong deployer laravel có một số lệnh có tiền tố là artisan giống giống với các command artisan trong Laravel.
Xin thưa chính là chúng, ở bước khởi tạo file deploy các bạn đã lựa chọn Laravel framework, chính lúc này deployer laravel đã tích hợp sẵn các lệnh artisan trong laravel thành các task trong deployer. Các bạn thấy có tiện lợi và đơn giản không? Qua đó chúng ta không phải mất thời gian để tạo các task cho việc sử dụng các command artisan trong laravel
Bây giờ ta cần chỉnh sửa một số thông số trong file deploy.php mà ta mong muốn
<?php
namespace Deployer;
require 'recipe/laravel.php';
// Project name
set('application', 'my_project');
// Project repository
set('repository', 'https://github.com/user_name/project.git');
// [Optional] Allocate tty for git clone. Default value is false.
set('git_tty', true);
// Shared files/dirs between deploys
add('shared_files', []);
add('shared_dirs', []);
// Writable dirs by web server
add('writable_dirs', []);
// Hosts
host('project.com')
->set('deploy_path', '~/{{application}}');
// Tasks
task('build', function () {
run('cd {{release_path}} && build');
});
// [Optional] if deploy fails automatically unlock.
after('deploy:failed', 'deploy:unlock');
// Migrate database before symlink new release.
before('deploy:symlink', 'artisan:migrate');
Các bạn cần cài đặt Project name, thay đổi repository, host ... Sau khi thay đổi ta sẽ được file deploy.php hoàn chỉnh
<?php
namespace Deployer;
require 'recipe/laravel.php';
// Project name
set('application', 'my_laravel_project');
// Project repository
set('repository', ':procode/my_project.git');
// [Optional] Allocate tty for git clone. Default value is false.
set('git_tty', true);
// Shared files/dirs between deploys
add('shared_files', []);
add('shared_dirs', []);
// Writable dirs by web server
add('writable_dirs', []);
// Hosts
host('127.0.0.1')
->set('deploy_path', '~/var/www/{{application}}');
// Tasks
task('build', function () {
run('cd {{release_path}} && build');
});
// [Optional] if deploy fails automatically unlock.
after('deploy:failed', 'deploy:unlock');
// Migrate database before symlink new release.
before('deploy:symlink', 'artisan:migrate');
Và cuối cùng ta chỉ cần sử dụng command để deploy laravel
FRAMGIA\:~/code/my_project$ dep deploy --branch=release-xxx
✈︎ Deploying release-xxx on 127.0.0.1
➤ Executing task deploy:prepare
✔ Executing task deploy:lock
✔ Executing task deploy:release
➤ Executing task deploy:update_code
Counting objects: 26832, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (8750/8750), done.
Writing objects: 100% (26832/26832), done.
Total 26832 (delta 16801), reused 26832 (delta 16801)
Connection to 127.0.0.1 closed.
✔ Ok
✔ Executing task deploy:shared
✔ Executing task deploy:vendors
✔ Executing task deploy:writable
✔ Executing task artisan:storage:link
✔ Executing task artisan:view:clear
✔ Executing task artisan:cache:clear
✔ Executing task artisan:config:cache
✔ Executing task artisan:optimize
✔ Executing task deploy:symlink
✔ Executing task deploy:unlock
✔ Executing task cleanup
Successfully deployed!
Bạn hãy để ý command deploy, Deployer laravel cho phép chúng ta chỉ định branch mà chúng ta mong muốn deploy. Ngoài ra chúng ta thay vì sử dụng "--branch", chúng ta cũng có thể sử dụng tuy chọn "--tag" cho việc deploy lên production
>> Xem thêm:
Sử dụng Laravel với Socket.IO như thế nào?
Laravel là gì? Cách cài đặt và sử dụng Laravel framework cơ bản
Như vậy ta đã hoàn thành xong việc cấu hình và deploy cho Laravel project. Hi vọng hướng dẫn này của mình sẽ giúp các bạn cải thiện được quá trình deploy lên các môi trường, đặc biệt là môi trường production sau này. Nếu bạn có bất kỳ thắc mắc gì về thông tin trên hoặc các chủ đề liên qua hãy liên hệ ngay với chúng tôi.