Tìm hiểu về Rocketeer

Rocketeer Rocketeer là một deploying tool nhanh chóng và dễ dàng cho các developer. Rocketeer là một package PHP, lấy cảm hứng từ framework Laravel. Không chỉ dừng lại ở việc hỗ trợ các dự án PHP, Rocketeer còn có thể deploy bất kỳ dự án nào từ các trang web HTML/CSS nhỏ đến các ứng dụng Rails lớn,...

Ưu điểm của Rocketeer

  • Đa năng (Versatile): khả năng hỗ trợ multiple connections, multiserver connections, multiple stages cho mỗi server, etc.
  • Nhanh chóng (Fast): xử lý các tác vụ theo hàng đợi và chạy chúng song song trên tất cả các server và stages.
  • Linh hoạt (Modulable): có thể thêm các custom tasks và components, đồng thời mọi phần core của Rocketeer đều có thể hoán đổi, mở rộng,...
  • Cấu hình sẵn (Preconfigured): Rocketeer được tạo ra để hỗ trợ deploy hệ thống với các cấu hình mặc định thông minh và các tác vụ được tích hợp từ trước như cài đặt các phần phụ thuộc cho ứng dụng của bạn.
  • Mạnh mẽ (Powerful): releases management, server checks, rollbacks, etc. Mọi tính năng bạn mong đợi từ một deployment tool đều được hỗ trợ bởi Rocketeer.

1. Cài đặt rocketeer

$ wget http://rocketeer.autopergamene.eu/versions/rocketeer.phar
$ chmod +x rocketeer.phar
$ mv rocketeer.phar /usr/local/bin/rocketeer

Ngoài ra, bạn cũng có thể cài riêng rocketeer cho dự án với composer bằng lệnh:

$ composer require anahkiasen/rocketeer

2. Các lệnh cơ bản

$ php rocketeer
  check        Check if the server is ready to receive the application
  cleanup      Clean up old releases from the server
  current      Display what the current release is
  deploy       Deploys the website
  flush        Flushes Rocketeer's cache of credentials
  help         Displays help for a command
  ignite       Creates Rocketeer's configuration
  list         Lists commands
  rollback     Rollback to the previous release, or to a specific one
  setup        Set up the remote server for deployment
  strategies   Lists the available options for each strategy
  teardown     Remove the remote applications and existing caches
  test         Run the tests on the server and displays the output
  update       Update the remote server without doing a new release

3. Init Rocketeer

Cấu hình Rocketeer cho dự án tương đối đơn giản. Đầu tiên, bạn hãy di chuyển đến thư mục dự án và gõ lệnh:

$ rocketeer ignite

Lệnh này sẽ init ra thư mục cấu hình rocketeer sau khi bạn trả lời những câu hỏi sau:

1. No connections have been set, please create one: (production)
// Hỏi tên kết nối, ví dụ như "prodution" hoặc "staging". Mặc định: production
2. No host is set for [production/0], please provide one:
//Hỏi cách kết nối tới server, là tên miền hoặc địa chỉ IP cho kết nối ở câu hỏi 1.
3. No username is set for [production/0], please provide one:
4. No password or SSH key is set for [production/0], which would you use? (key) [key/password]
Please enter the full path to your key (/home/tran.thi.hai.ha/.ssh/id_rsa)
If a keyphrase is required, provide it
// Câu 34 là cách thức để đăng nhập server, có thể sử dụng ssh thay cho username và password
5. No repository is set for [repository], please provide one:
// Hỏi repository của dự án
6. No username is set for [repository], please provide one:
7. No password is set for [repository], please provide one:
Câu 67 là cách thức xác thực cho repository
8. What is your application's name ? (my-app)
// Hỏi tên ứng dụng cần cấu hình, mặc định là tên thư mục dự án.

Sau khi bạn trả lời hết các câu hỏi trên, một thư mục .rocketeer sẽ được sinh ra, với cấu trúc thư mục như vầy:

| .rocketeer
| -- config.php
| -- hooks.php
| -- paths.php
| -- remote.php
| -- scm.php
| -- stages.php
| -- events.php
| -- strategies.php

4. Các files cấu hình Rocketeer

config.php

Đây là tệp cài đặt cấu hình chính, định nghĩa các kết nối tới server. Phần quan trọng nhất bạn cần chú ý trong file này là config connections.

// The various connections you defined
// You can leave all of this empty or remove it entirely if you don't want
// to track files with credentials : Rocketeer will prompt you for your credentials
// and store them locally
'connections' => array(
  'production' => array(
    'host'      => 'my-server.com',
    'username'  => 'johndoe',
    'password'  => '',
    'key'       => '/Users/johndoe/.ssh/id_rsa',
    'keyphrase' => '',
  ),
),

Có 2 cách kết nối tới server là dùng password hoặc SSH key. Nếu bạn kết nối bằng password, bạn có thể để trống keykeyphrase. Ngược lại, bạn có thể để trống password.

Rocketeer cũng hộ trợ bạn config nhiều kết nối và cả kết nối tới nhiều servers:

'connections' => array(
  'production' => array(
    'servers' => array(
      array(
        'host'      => 'first-server.com',
        'username'  => 'johndoe',
        'password'  => '',
        'key'       => '/Users/johndoe/.ssh/id_rsa',
        'keyphrase' => '',
      ),
      array(
        'host'      => 'second-server.com',
        'username'  => 'johndoe',
        'password'  => '',
        'key'       => '/Users/johndoe/.ssh/id_rsa',
        'keyphrase' => '',
      ),
  ),
  'staging' => array(
    'host' => 'staging.my-server.com',
  ),
),

Nếu bạn muốn, bất cứ khi nào bạn thực thi một tác vụ, Rocketeer sẽ thực thi nó trên tất cả các kết nối, thì bạn có thể sửa config thành:

// The default remote connection(s) to execute tasks on
'default' => array('production', 'staging'),

Và để chỉ rõ kết nối được thực thi khi thực hiện tác vụ thì bạn có thể thêm options --on=<connection_name> sau câu lệnh. Ví dụ, lệnh deploy sau đây sẽ chỉ được thực thi trên mỗi staging:

$ rocketeer deploy --on="staging"

remote.php

Đây là file chứa config đường dẫn tới thư mục dự án sẽ deploy trên server và những file/folder mà chúng ta muốn cache lại sau mỗi lần deploy, ví dụ như vendor, node_modules, storage, ...

Trường root_directory định nghĩa đường dẫn tới thư mục được tạo ra trên server khi deploy dự án:

 // The root directory where your applications will be deployed
 // This path *needs* to start at the root, ie. start with a /
'root_directory' => '/home/deployed/my-project/',

Trường shared thì giúp bạn định nghĩa các thư mục bạn muốn cache lại sau khi deploy để theo dõi quá trình vận hành hệ thống:

'shared' => [
    'logs',
    'tmp/sessions',
    'config/app.php'
],

scm.php

Đây là file chứa thông tin đường dẫn tới repository, nơi có thể clone source dự án của bạn, ví dụ như repo github hoặc gitlab.

// The SSH/HTTPS address to your repository
// Example: https://github.com/vendor/website.git
 'repository' => 'https://github.com/vendor/website.git',

Branch deploy được config mặc định là master, bạn có thể sửa lại nếu bạn muốn deploy một nhánh khác của repo:

// The branch to deploy
'branch' => 'master',

Ngoài ra bạn cũng có thể chỉ định branch bằng cách sử dụng options --branch=<branch_name>. Ví dụ như bạn muốn deploy code trên nhánh develop chẳng hạn:

$ rocketeer deploy --branch=develop  

events.php

File này config những câu lệnh mà để bạn setup được project, ví dụ với một project Vue:

Rocketeer::after('deploy', function ($task) {
    $task->runForCurrentRelease(['yarn install', 'grunt']);
});

hooks.php

Tệp này dùng để xác định các tác vụ (lệnh) sẽ chạy trên server trước và sau khi bạn chạy một tác vụ Rocketeer như setup hoặc deploy, tương tự như events.php

paths.php

Rocketeer sẽ thử tìm php và composer trên server nếu không được chỉ định. Tuy nhiên, bạn có thể config đường dẫn này trong tệp path.php, để định nghĩa đường dẫn đến PHP, ví dụ như vầy:

'php' => '/usr/local/bin/php/7.4',

stages.php

Trong Rocketeer, stages là các môi trường độc lập trên một connection. Nếu bạn không tách riêng các stages trên các connections (được định nghĩa trong file config.php), thì bạn có thể bỏ qua phần này.

Nếu trên 1 server, dự án của bạn chỉ có 1 stages duy nhất, Đây là cấu trúc dự án trên server đó sau khi deploy:

| my-app
| -- current
| -- releases
| ----- 20140119010101
| -- shared

Còn nếu bạn có 2 stages trên 1 server, ví dụ như testing và productions, thì cấu trúc thư mục của bạn trên server đó sẽ có dạng như vậy:

| my-app
| -- testing
| ----- current
| ----- releases
| -------- 20140119010101
| ----- shared
| -- production
| ----- current
| ----- releases
| -------- 20140519413121
| ----- shared

Có 2 trường để bạn config, là stagesdefault. stages là danh sách các stages mà bạn định nghĩa.

'stages' => array('testing', 'production'),

Giống như connections, default sẽ định nghĩa stages mặc định được thực thi khi một tác vụ được rocketeer thực hiện.

'default' => array('testing'),

strategies.php

Tệp cuối cùng này cho phép bạn định config các tác vụ sẽ sử dụng để thực thi các core khác nhau trong quy trình deploy dự án. Ví dụ như các kiểm tra mã (test code: phpcs,...) hoặc migrate database.

Trên đây là một số thông tin mình tìm hiểu được về Rocketeer, hi vọng sẽ có ích với bạn. Cảm ơn và hẹn gặp lại bạn ở những bài viết tiếp theo.

Tài liệu tham khảo:

Rocketeer

Getting Started with Rocketeer to Simplify Deployments

Auto deploy dự án Laravel với Rocketeer và Sun*CI


All Rights Reserved