12/08/2018, 16:09

Autodeploy PHP with rocketeer

Bài ngày hôm nay mình sẽ giới thiệu với các bạn các từng bước để deploy PHP với rocketeer. 1. Giới thiệu Rocketeer là một chương trình chạy với PHP. Nó lấy cảm hứng từ Laravel Framework nên sẽ nhanh chóng, thanh lịch và quan trọng nhất là dễ sử dụng. Chức năng chính: Đa năng, hỗ trợ nhiều ...

Bài ngày hôm nay mình sẽ giới thiệu với các bạn các từng bước để deploy PHP với rocketeer.

1. Giới thiệu

Rocketeer là một chương trình chạy với PHP. Nó lấy cảm hứng từ Laravel Framework nên sẽ nhanh chóng, thanh lịch và quan trọng nhất là dễ sử dụng.

Chức năng chính:

  • Đa năng, hỗ trợ nhiều kết nối, kết nối đa giao diện, nhiều stage trên mỗi máy chủ, v.v ...
  • Nhanh: queue task và chạy chúng song song trên tất cả các máy chủ và các stage
  • Có tính module: bạn không chỉ có thể thêm các tác vụ tùy chỉnh và các thành phần, các phần cốt lõi của Rocketeer cũng có thể được thay đổi, mở rộng
  • Cấu hình sẵn: nếu bạn mệt mỏi với việc thực hiện cùng một thói quen lặp đi lặp lại nhiều lần? Rocketeer được thực hiện cho sự xây dựng hiện đại và đi kèm với các mặc định thông minh và các tác vụ tích hợp như cài đặt các lib của ứng dụng
  • Mạnh mẽ: quản lý phiên bản release, kiểm tra máy chủ, rollbacks ... Tất cả các tính năng bạn mong đợi từ một công cụ auto deploy đều có sẵn.

Tại sao lại sử dụng Rocketeer? Mà không phải là Capistrano? Vâng. Ngay trên trang chủ của Rocketeer cũng có câu trả lời.

"Đó là một câu hỏi được hỏi cho tôi, tại sao không sử dụng Capistrano? Tôi đã sử dụng Capistrano trong quá khứ, nó làm mọi thứ bạn muốn, đó là một điều tuyệt vời.

Tuy nhiên, nó vẫn là một gói Ruby và tương thích chặt chẽ với Rails theo một số cách; Rocketeer làm cho nó để bạn không cần phải cài các package Ruby xung quanh ứng dụng của bạn. Bằng cách đó bạn cấu hình nó một lần và có thể sử dụng nó bất cứ nơi nào bạn muốn trong lĩnh vực ứng dụng của bạn, ngay cả bên ngoài của thói quen triển khai. Capistrano cũng rất dễ hiểu, dành cho những người dùng lần đầu hay người mới làm quen, Capistrano rất dễ dàng để tham gia cùng một lúc - Rocketeer hướng tới càng đơn giản càng tốt bằng cách cung cấp các mặc định thông minh và tăng thời gian giữa cài đặt và lần đầu tiên tấn công deploy.

Nó cũng được suy nghĩ nhiều hơn cho thế giới PHP - mặc dù bạn có thể cấu hình Capistrano để chạy Composer và PHPUnit, điều đó không phải là điều mong đợi, trong khi những công việc đó là một phần nhiệm vụ của mọi nhà phát triển PHP được tích hợp trong quá trình triển khai cốt lõi của Rocketeer."

2. Cài đặt

Vâng. cài đặt rocketeer rất đơn giản và dễ dàng. Bạn chỉ cần download file chạy về và phân quyền run. done!

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

Đây là các câu lệnh có thể sử dụng với Rocketeer:

$ rocketeer list

Available commands:
  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
  tinker           Debug Rocketeer's environment
  update           Update the remote server without doing a new release
plugin
  plugin:config    Publishes the configuration of a plugin
  plugin:install   Install a plugin
  plugin:list      Lists the currently enabled plugins

3. Config Rocketeer

Chúng ta sẽ config Rocketeer = câu lệnh $ rocketeer ignite

No connections have been set, please create one: (production)develop

-> bạn phải định nghĩa môi trường để rocketeer làm việc. như ở đây mình dùng develop

No host is set for [develop/0], please provide one:10.0.1.101

-> chỉ định ip của host nào thuộc môi trường develop: 10.0.1.101

No username is set for [develop/0], please provide one:cuongtv

-> tên user để deploy: cuongtv

No password or SSH key is set for [develop/0], which would you use? (key) [key/password]password
No password is set for [develop/0], please provide one:

-> chọn cách thức ssh tới server (password hay dùng key): ở đây mình chọn password

No repository is set for [repository], please provide one:https://github.com/cuongtv2004/test-01.git

-> khai báo repo để deploy: https://github.com/cuongtv2004/test-01.git

No username is set for [repository], please provide one:
No password is set for [repository], please provide one:

-> khai báo user để login vào repo đó (nếu public thì không cần)

develop/0 | Ignite (Creates Rocketeer's configuration)
What is your application's name ? (test)test01
The Rocketeer configuration was created at test/.rocketeer

-> tên application: test01

Vậy là xong phần config. Chúng ta thử kiểm tra xem:

cuongtv@ubuntu:~/test$ ll
total 12
drwxrwxr-x  3 cuongtv cuongtv 4096 Oct  1 16:48 ./
drwxr-xr-x 11 cuongtv cuongtv 4096 Oct  1 16:42 ../
drwxrwxr-x  2 cuongtv cuongtv 4096 Oct  1 16:48 .rocketeer/

Vậy là rocketeer đã sinh ra thêm 1 folder .rocketeer. Tiếp theo chúng ta sẽ xem kĩ hơn các folder có trong đó nhé.

4. Cấu trúc thư mục:

$ tree .rocketeer/
.rocketeer/
├── config.php		
├── hooks.php		
├── paths.php		
├── remote.php		
├── scm.php			
├── stages.php		
└── strategies.php	
  • config.php Đây là nơi chứa file config chính. Các thông tin bạn vừa nhập khi cấu hình rocketeer sẽ lưu tại đây
...
    'default'          => ['develop'],

    // 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'      => [
        'production' => [
            'host'      => '10.0.1.101',
            'username'  => 'cuongtv',
            'password'  => 'xxxxxxx',
            'key'       => ',
            'keyphrase' => ',
            'agent'     => ',
            'db_role'   => true,
        ],
    ],
...
  • hooks.php File này định nghĩa những task sẽ được chạy trên server trước và sau khi bạn thực hiện nhiệm vụ deploy. VD trước khi setup, mình cho cài nginx trên sv remote.
...
    'before' => [
        'setup'   => ['sudo apt-get install -y nginx',
                ],      
        'deploy'  => [],
        'cleanup' => [],
    ],
...
  • paths.php Bạn có thể định nghĩa đường dẫn của PHP và composer trong file này. Nếu không thì rocketer sẽ tự tìm đường dẫn mặc định của chúng.

  • remote.php Đây là file lưu mọi setting trên server được deploy. Thông thường, các bạn sẽ cần chú ý tới các dòng này:

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

-> Đây là folder mà các bạn sẽ deploy

    // The folder the application will be cloned in
    // Leave empty to use `application_name` as your folder name
    'app_directory'  => ',

-> tên folder app các bạn muốn. Nếu không điền, rocketeer sẽ tự động nhận tên app khi các bạn cấu hình rocketeer.

    // A list of folders/file to be shared between releases
    // Use this to list folders that need to keep their state, like
    // user uploaded data, file-based databases, etc.
    'shared'         => [
        'storage/logs',
        'storage/sessions',
    ],

-> các bạn tạo folder/file share giữa các lần deploy (thường là file log, sesion và file env)

  • scm.php Đây là file lưu thông tin repo và branch deploy của các bạn. Các bạn có thể sử dụng với SVN hoặc với Git.
    // The SCM used (supported: "git", "svn")
    'scm'        => 'git',

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

    // The repository credentials : you can leave those empty
    // if you're using SSH or if your repository is public
    // In other cases you can leave this empty too, and you will
    // be prompted for the credentials on deploy. If you don't want
    // to be prompted (public repo, etc) set the values to null
    'username'   => ',
    'password'   => ',

    // The branch to deploy
    'branch'     => 'master',
  • stages.php Trường hợp trên một máy chủ có nhiều stage khác nhau (staging, testing, production) thì chúng ta sẽ định nghĩa tại đây.

  • strategies.php File cuối cùng cho phép bạn định cấu hình tác vụ nào để sử dụng để thực hiện các phần cốt lõi của luồng triển khai của bạn

...
    // Which strategy to use to check the server
    'check'        => 'Php',

    // Which strategy to use to create a new release
    'deploy'       => 'Clone',

    // Which strategy to use to test your application
    'test'         => 'Phpunit',

    // Which strategy to use to migrate your database
    'migrate'      => 'Artisan',

    // Which strategy to use to install your application's dependencies
    'dependencies' => 'Polyglot',
    
    // Execution hooks
    //////////////////////////////////////////////////////////////////////

    'composer'     => [
        'install' => function (Composer $composer, $task) {
            return $composer->install([], ['--no-interaction' => null, '--no-dev' => null, '--prefer-dist' => null]);
        },
        'update'  => function (Composer $composer) {
            return $composer->update();
        },
    ],
...

5. Deploy

Tất nhiên là để deploy được thì trên server các bạn nhớ phải cài php trước nhé             </div>
            
            <div class=

0