deploy demo

在 Laravel China 看完了一篇 deploy 的教程: 又一篇 Deployer 的使用攻略,自己跑通后再来记录一下。

deploy 是一个 php 的部署工具。部署的方式是在本地 ssh 连接到服务器执行一系列命令,从仓库中拉取项目。

下面是主要的流程

在服务器创建用户并授权

# adduser deployer
# usermod -aG www-data deployer
# chown deployer:www-data /var/www/html
# chmod g+s /var/www/html
# echo "deployer ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers

以下是服务器环境的安装如果已经装好了就跳过,记得要切换到 deployer 用户执行 nginx、php、composer、git 等命令看看是否正常

# apt install openssh-server
# apt install git
# apt install composer
# add-apt-repository ppa:ondrej/php
 # apt update
# apt install php7.2 php7.2-xml php7.2-mbstring php7.2-curl php7.2-zip
# apt install nginx

切换到 deployer

$ echo "umask 022" >> ~/.bashrc
$ ssh-keygen -t rsa -b 4096 -C "deployer"
$ eval $(ssh-agent -s)
$ ssh-add ~/.ssh/id_rsa
$ cat ~/.ssh/id_rsa.pub

复制以上公钥到 github 上添加,然后测试

$ ssh -T [email protected]

在本地配置 deployer

composer global require deployer/deployer

安装后 dep --version 验证,如果没找到的话添加到环境变量

Windows 是 C:\Users\username\AppData\Roaming\Composer\vendor\bin

Ubuntu 是 /home/username/.config/composer/vendor/bin

$ ssh-keygen -t rsa -b 4096 -f  ~/.ssh/deployerkey
$ ssh-copy-id -i  ~/.ssh/deployerkey.pub [email protected]

测试一下

$ ssh [email protected] -i ~/.ssh/deployerkey

选一个目录配置 deploy

$ dep init

然后在生成的 deploy.php 中修改配置,以下是需要修改的主要配置

// 指定 git 仓库地址(必须使用 ssh Lianjie) 
set('repository', '[email protected]:moodrain/moodrain.git');

host('your_server_ip') 
    ->user('deployer') 
    ->identityFile('~/.ssh/deployerkey')

    // 指定项目部署到服务器上的哪个目录
    ->set('deploy_path', '/var/www/html/moodrain');

// 如果本地是的windows话要加上以下两行配置 
set('git_tty', false); 
set('ssh_multiplexing', false);

然后执行

$ dep deploy -vvv 或者 dep deploy (忽略详情)

进行部署,直到看到输出

Successfully deployed!

表明部署成功,如果失败了请查看报错信息自行搜索

如果成功了服务器上的目录会是这样:

lrwxrwxrwx 1 deployer www-data   10 Jan  4 04:08 current -> releases/1/
drwxrwsr-x 2 deployer www-data 4096 Jan  4 04:12 .dep/
drwxrwsr-x 3 deployer www-data 4096 Jan  4 04:08 releases/
drwxrwsr-x 2 deployer www-data 4096 Jan  4 04:08 shared/
  • .dep 记录 Deployer 自身的信息
  • releases 保存历史版本,一般为5个,这个值可以修改,当出错的时候可以使用 dep rollback 回滚
  • current 是一个软链接,指向了当前发布版本的目录。你的服务器公共目录应该指向它,例如 nginx 配置中 root 为 /var/www/html/moodrain/current/public
  • shared 存放各个版本间共享的文件,比如配置文件等

以后要发布或者更新项目就再也不用到服务器上操作啦,当然 deployer 还有一些其他功能,在部署的同时执行指定任务:cleanup,reload 之类的。更重要是服务器不用额外安装任何东西,做的修改也少。 有机会的话会试着用在一些项目上。