Cấu hình tự động deploy cho PHP
deploy
3
deployment
13
PHP
90
White

trungpv viết ngày 23/03/2019

https://trungpv1601.github.io/2019/03/23/Cau-hinh-tu-dong-deploy-PHP/

0. Tạo user trên Remote Server

sudo adduser deployer
sudo usermod -aG www-data deployer
sudo chfn -o umask=022 deployer
sudo chown deployer:www-data /var/www/html
sudo chmod g+s /var/www/html

Sau đó login vào user deployer và tạo ssh key

su - deployer
ssh-keygen -t rsa -b 4096
cat ~/.ssh/id_rsa.pub

Sau khi chạy lệnh trên xong copy key đó add vô github hoặc bitbucket.

Tiếp tục là tạo ssh key kết nối giữa local và Remote server thông qua user deployer

ssh-keygen -t rsa -b 4096 -f  ~/.ssh/deployerkey
cat ~/.ssh/deployerkey.pub

Copy ssh key trên add vào Remote server với user deployer

nano ~/.ssh/authorized_keys

Paste vào và Ctr + X, nhấn Y và ENTER lưu lại

chmod 600 ~/.ssh/authorized_keys

Done

Giờ kết nối vô Remote server với user deployer bằng cách

ssh deployer@your_server_ip  -i ~/.ssh/deployerkey

Lệnh này kiểm tra xem kết nới với git chưa

ssh -T git@mygitserver.com

1. Cài PHP Deployer (Read More)

curl -LO https://deployer.org/deployer.phar
mv deployer.phar /usr/local/bin/dep
chmod +x /usr/local/bin/dep

2. Khởi tạo Deployer trong project

dep init

Sau khi tạo thì nó sẹ tạo ra file deploy.php trong project. Chúng ta sẽ cấu hình trong đó.

Thực ra từ bước này trở xuống cũng không cần quan tâm vì deployer.org có template cấu hình cho từng framework chỉ custom vài thứ là chạy ngon lành.

3. Cấu hình server cho deploy.php

Ta có thể cấu hình nhiều môi trường deploy: production, staging hay dev...

set('branch', 'master');
host('x.x.x.x')
    ->stage('production')
    // ...
    ;
host('x.x.x.x')
    ->stage('staging')
    // ...
    ->set('branch', 'develop');

4. Cấu hình tasks để chạy khi deploy

task('create-new-release', function () {
    // ...
});
task('create-symlinks', function () {
    // ...
});
task('compile-assets', function () {
    // ...
});
task('deploy', [
    'create-new-release',
    'create-symlinks',
    'compile-assets',
]);

5. Lệnh deploy

  • Chạy từng task trên tất cả các hosts

    dep deploy 
    
  • Chạy từng task trên một một host

    dep deploy production
    

6. Sample deploy.php

<?php
namespace Deployer;
$startTime = microtime(true);
require 'recipe/common.php';
// Project name
set('application', 'xxx');
// Project repository
set('repository', 'git@bitbucket.org:xxx/xxx.git');
// [Optional] Allocate tty for git clone. Default value is false.
set('git_tty', true);
// Shared files/dirs between deploys
set('shared_files', [
'.env'
]);
set('shared_dirs', []);
// Writable dirs by web server
set('writable_dirs', []);
// Hosts
set('branch', 'production');
host('xxx.xxx.xxx.xxx')
->stage('production')
->user('deployer')
->identityFile('~/.ssh/deployerkey')
->set('deploy_path', '/var/www/{{application}}');
host('xxx.xxx.xxx.xxx')
->stage('production')
->user('deployer')
->identityFile('~/.ssh/deployerkey')
->set('deploy_path', '/var/www/{{application}}');
// Tasks
task('notify:done', function () use ($startTime) {
$seconds = intval(microtime(true) - $startTime);
$minutes = substr('0' . intval($seconds / 60), -2);
$seconds %= 60;
$seconds = substr('0' . $seconds, -2);
shell_exec("osascript -e 'display notification \"It took: $minutes:$seconds\" with title \"Deploy Finished\"'");
});
desc('Deploy your project');
task('deploy', [
'deploy:info',
'deploy:prepare',
'deploy:lock',
'deploy:release',
'deploy:update_code',
'deploy:shared',
'deploy:writable',
'deploy:vendors',
'deploy:clear_paths',
'deploy:symlink',
'deploy:unlock',
'cleanup',
'success',
'notify:done'
]);
// [Optional] If deploy fails automatically unlock.
after('deploy:failed', 'deploy:unlock');
view raw deploy.php hosted with ❤ by GitHub

7. Cấu hình Alias cho Apache và NGINX

  1. Apache

    RewriteBase /laravel-site
    view raw .htaccess hosted with ❤ by GitHub
    Alias /laravel-site "/var/www/xxx/public"
    <Directory "/var/www/xxx/public">
    Options Indexes FollowSymLinks MultiViews
    AllowOverride All
    Order allow,deny
    Allow from all
    </Directory>
    view raw 000-default.conf hosted with ❤ by GitHub

  2. NGINX

    location ^~ /xxx {
    alias /var/www/xxx/public;
    try_files $uri $uri/ @xxx;
    location ~* \.php {
    fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
    fastcgi_split_path_info ^(.+\.php)(.*)$;
    include fastcgi_params;
    fastcgi_param SCRIPT_FILENAME /var/www/xxx/public/index.php;
    }
    }
    location @xxx {
    rewrite ^/xxx/(.*)$ /xxx/index.php/$1 last; # THIS IS THE IMPORTANT LINE
    }
    view raw config hosted with ❤ by GitHub

Credit

Bình luận


White
{{ comment.user.name }}
Bỏ hay Hay
{{comment.like_count}}
Male avatar
{{ comment_error }}
Hủy
   

Hiển thị thử

Chỉnh sửa

White

trungpv

5 bài viết.
2 người follow
Kipalog
{{userFollowed ? 'Following' : 'Follow'}}
Cùng một tác giả
White
4 0
Cài đặt môi trường cho laravel dùng docker 1. Cài đặt laravel composer createproject preferdist laravel/laravel blog 2. Tạo file dockercom...
trungpv viết hơn 2 năm trước
4 0
White
2 2
Dismiss keyboard on React Native: Tắt keyboard khi chạm ra ngoài TextInput import React, { Component } from 'react'; import { TouchableWithoutFe...
trungpv viết hơn 2 năm trước
2 2
White
2 0
Đổi tên project React Native Sửa tên trong file app.json Xoá thư mục ios/ và android/ Chạy lệnh: reactnative eject Chạy lệnh reactnative li...
trungpv viết gần 2 năm trước
2 0
Bài viết liên quan
White
4 2
Bash script to fast serve Laravel project Lười gõ dòng lệnh quá nên tạo ra cái script để gõ nhanh :D laravelstart.sh /bin/bash if z "$1" ] ...
Vũ Hoàng Chung viết hơn 2 năm trước
4 2
Male avatar
9 1
Để bắt đầu làm thêm của riêng bạn thì ban đầu bạn phải có một theme trắng ( Blank theme ) để bắt đầu Theme trắng là gồm có các thư mục và file cơ b...
Doan Van Manh viết gần 4 năm trước
9 1
{{like_count}}

kipalog

{{ comment_count }}

bình luận

{{liked ? "Đã kipalog" : "Kipalog"}}


White
{{userFollowed ? 'Following' : 'Follow'}}
5 bài viết.
2 người follow

 Đầu mục bài viết

Vẫn còn nữa! x

Kipalog vẫn còn rất nhiều bài viết hay và chủ đề thú vị chờ bạn khám phá!