美文网首页
deploy安装使用教程

deploy安装使用教程

作者: 曹轩跃 | 来源:发表于2019-08-25 18:30 被阅读0次

原文参考地址: https://juejin.im/entry/5afd3dd051882542821c87d3

介绍

本文主要介绍 Deployer —— 一个具有模块化、代码回滚、并行任务等功能的 PHP 部署工具。
Deployer 用法非常简单易用,可以快速上手,且支持多个 PHP 框架。

官方文档

https://deployer.org/docs/getting-started.html

重点注意

# 我们需要将我们设置的用户加到 sudoers 中,否则可能没有执行重启php-fpm或重启其他服务的权限:

$ vim /etc/sudoers
# 在最后加入
dev ALL=(ALL) NOPASSWD: ALL  # (将dev用户添加到sudoers)
# 保存并退出

安装

第一种:通过 Phar 存档,只需运行一下命令即可:

curl -LO https://deployer.org/deployer.phar

mv deployer.phar /usr/local/bin/dep

chmod +x /usr/local/bin/dep

第二种:通过 composer 安装:

# 安装
composer require deployer/deployer --dev

# 使用
php vendor/bin/dep

第三种:通过 Github 源代码安装:clone 最新的代码:

1. git clone https://github.com/deployphp/deployer.git  
2. 在源代码目录下运行:
php ./build

注意:第三种方法会建立 deployer.phar 的 Phar 归档,所以建议使用第一种方法安装。

使用

安装完后,你可以通过 dep 使用 Deployer ,在你的项目目录下运行以下命令:

dep init

运行此命令后会出现下图的选项,可选择你所需的,当然本教程使用 Laravel ,so 选择 [1] Laravel。

dep init

 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
    

初始化后,会自动生成 deployer.php 文件。 deployer.php 文件包含了基本的部署配置和任务,且有明确的注释,你可以根据注释在适当的地方添加配置以及任务。

没错,按照 deployer.php 文件的注释,设置一下 repository、server config ,基本上都能正常运行。

当你第一次成功部署的时候, Deployer 会自动帮你在服务器上生成一下文件:

  • releases 包含你部署项目的版本(默认保留 5 个版本)
  • shared 包含你部署项目的共享文件或目录(如:Laravel 的 Storage 目录、.env 文件等 )
  • current 软连接到你当前发布的版本

deployer.php

<?php

namespace Deployer;

require 'recipe/laravel.php';

// 项目名称
set('application', 'xxx');

// 项目git仓库
set('repository', 'git@github.com:tianyong90/xxx.git');

// [Optional] Allocate tty for git clone. Default value is false.
set('git_tty', true);

// 配置项目共享文件个共享目录
add('shared_files', [
    '.env',
]);
add('shared_dirs', [
    'storage',
]);

// 需要服务器有写权限的目录
add('writable_dirs', []);

// 保存最近五次部署,这样的话回滚最多也只能回滚到前 5 个版本
set('keep_releases', 5);

// 实践证明,这样能减少一些不必要的麻烦,如出现权限相关的问题,也可将此项设置为 true 后尝试
set('writable_use_sudo', false);

// 生产用的主机
host('172.16.1.1')
    ->stage('production')
    ->user('root')
    ->port(22)
    ->set('branch', 'master') // 最新的主分支部署到生产机
    ->set('deploy_path', '/data/wwwroot/xxx')
    ->identityFile('/home/vagrant/.ssh/id_rsa')
    ->forwardAgent(true)
    ->multiplexing(true)
    ->set('http_user', 'www') // 这个与 nginx 里的配置一致
    ->addSshOption('UserKnownHostsFile', '/dev/null')
    ->addSshOption('StrictHostKeyChecking', 'no');

// 测试用的主机
host('172.16.3.2')
    ->stage('debug')
    ->user('root')
    ->port(22)
    ->set('branch', 'develop') // 一般是把 develop 分支弄到测试机测试,没问题再合并
    ->set('deploy_path', '/data/wwwroot/xxx')
    ->identityFile('/home/vagrant/.ssh/id_rsa')
    ->forwardAgent(true)
    ->multiplexing(true)
    ->set('http_user', 'www')
    ->addSshOption('UserKnownHostsFile', '/dev/null')
    ->addSshOption('StrictHostKeyChecking', 'no');

// 自定义任务:重置 opcache 缓存
task('opcache_reset', function () {
    run('{{bin/php}} -r \'opcache_reset();\'');
});

// 自定义任务:重启 php-fpm 服务
task('php-fpm:restart', function () {
    run('systemctl restart php-fpm.service');
});

// 自定义任务:supervisor reload   (supervisor是监听工具)
task('supervisor:reload', function () {
    run('sudo supervisorctl reload');
});

// 自定义任务:部署成功了用 bearychat 发消息给大佬和自己(需要自己配置相关发送服务)
task('send_message', function () {
    run('{{bin/php}} {{release_path}}/artisan deployed');
});

// 自定义任务:缓存路由,recipe/laravel.php 默认的流程里没有这个,所以加上,息看需要
after('artisan:config:cache', 'artisan:route:cache');

// 执行自定义任务,注意时间点是 current 已经成功链向新部署的目录之后
after('deploy:symlink', 'php-fpm:restart');
after('deploy:symlink', 'supervisor:reload');

// 部署成功后重置 opcache 缓存
after('deploy:symlink', 'opcache_reset');

// 部署成功后调用 laravel 命令行发送通知
after('success', 'send_message');

// [Optional] if deploy fails automatically unlock.
after('deploy:failed', 'deploy:unlock');

注意:以上task根据自己的实际应用去选择配置

部署

dep debug  # 部署到测试机
dep production  # 部署到生产机

相关文章

网友评论

      本文标题:deploy安装使用教程

      本文链接:https://www.haomeiwen.com/subject/rerkectx.html