1、简介
Deployer是一个基于Laravel 5.1的、免费的、开源的PHP应用部署工具。由Stephen Ball编写和维护。
2、GitHub
https://github.com/REBELinBLUE/deployer
3、功能特性
- 通过SSH部署应用方到多台服务器
- 克隆项目git仓库
- 安装composer依赖
- 运行任意bash命令
- 优雅地处理上述步骤出现的错误
- 保持之前的部署
- 监控cronjob的运行
- 允许通过webhook触发部署
4、生产环境中使用
本项目GitHub仓库代码的master
分支是开发分支,不能用于实际生产环境,当稳定后代码修改会合并到release
分支并被打上发布标签。推荐在生产环境中使用最新的release
分支。
5、系统要求
安装运行Deployer需要系统具备以下条件:
- PHP 5.5.9+
- 数据库,推荐MySQL或PostgreSQL
- Composer
- Redis
- Node.js
- 适用于Laravel的队列系统,推荐Beanstalkd,不过Redis也可以
可选项
- Supervisor用于监听队列和Node.js套接字服务器的运行
- 如果有大量的并发需要一台缓存服务器,否则默认的文件缓存就足够了
在你的服务器上检查系统环境是否服务要求:
composer安装教程:http://www.cnblogs.com/love-snow/articles/7323894.html
redis安装教程:http://www.cnblogs.com/love-snow/articles/7360667.html
node安装:
$ yum install -y npm
系统要求
部署者广泛使用shell脚本和各种GNU CLI应用程序,这意味着它目前只能在Linux和Mac服务器上运行。
建议您不要在共享托管环境中运行Deployer。您的托管环境需要允许长时间运行的后台进程,许多共享托管服务提供商不允许。
Nginx要求
Nginx是推荐的Web服务器,因为能够向Node.js的socket server服务器代理请求。您需要php-fpm
安装nginx才能够提供PHP页面。
Apache要求
Apache的大多数发行版都附带所需的一切,但是这里列出了所需的Apache模块:
mod_rewrite
mod_ssl
(如果您希望在SSL下运行Deployer)
您还应确保已AllowOveride All
设置<Directory>
和/或<VirtualHost>
块,以便.htaccess
文件正确处理并重写规则生效。
PHP要求
打印你的phpinfo看这些模块是否开启
大多数托管服务提供商都预先配置了所需的所有内容,供部署人即时使用。但是,一些发行版的PHP设置非常小。因此,您可能需要安装或启用这些PHP模块:
gd
(用于操纵图像的图形库)curl
(用于URL处理的客户端)openssl
(加密库)mbstring
(多字节字符串支持)
还需要以下扩展,但默认情况下应包含在PHP安装中,除非您的主机提供商已禁用它们。
tokenizer
(用于处理PHP令牌的库)json
(用于处理JSON的库)pdo
(数据库连接库)phar
(一个用于处理PHP存档的库)
您还需要pdo
包括对任何支持mysql
,pgsql
或sqlite
。
出于安全考虑,部署者还需要能够使用proc_open函数,这可能会被主机提供商禁用。检查disable_functions
设置php.ini
CLI要求
部署者使用多个系统命令,您将需要确保以下命令可访问。通常,它们将位于$PATH
环境变量的一个目录中。
ssh
(用于连接到远程服务器)ssh-keygen
(用于为每个项目生成公钥/私钥)scp
(用于将文件复制到远程服务器)git
(用于从您的存储库中检出代码)
要部署的服务器将需要以下命令可访问
ssh
git
bash
(一个shell,目前不支持其他shell)composer
(需要可执行,并在$PATH
)
安装git教程:http://www.cnblogs.com/love-snow/articles/7307483.html
上述一切准备工作就绪以后就可以按项目了~
6、安装
检查PHP版本:
$ php -v
确保你至少有PHP版本5.6.4
克隆仓库到你的web目录
$ cd /var/www $ git clone https://github.com/REBELinBLUE/deployer.git
拉出最新版本
请参阅最新版本的最新版本。
$ git checkout 0.0.46
运行安装程序
安装依赖
$ composer install -o //开发测试环境
$ composer install -o --no-dev //生成环境
$ npm install --production --registry=https://registry.npm.taobao.org 这里我使用淘宝镜像比较快些
确保storage是可以写入的
$ chmod -R 777 storage
运行安装器
$ php artisan app:install
修改服务器 httpd.conf配置文件,将目录指向 deployer/public 目录下
修改.env文件
$ vim .env
生成key:
$ php artisan key:
执行数据库迁移:
$ php artisan migrate
进行数据填充:
$ php artisan db:seed
访问你的首页输入账号密码
账号:admin@example.com
密码:password
运行安装程序的注意事项
大多数设置是显而易见的,但有一些可能需要一些解释
Socket URL [http://deployer.example.com]:
>
此设置是Socket服务器的URL,如果使用nginx并使用下面提供的配置,则可以将其保留如下。如果您正在使用Apache,则需要附加端口,例如http://deployer.example.com:6001
,安装程序将尝试自动确定是否需要该端口。
如果您需要更改端口,因为例如,您有另一个服务已经使用端口6001,则需要在运行安装程序后编辑配置
$ editor .env
然后编辑SOCKET_PORT
,添加SOCKET_URL
如果您有端口附加。
编辑额外配置
$ cp .env.dist .env
$ vim .env
设置您的网络服务器
建议您在域的根级别运行Deployer,例如http://deployer.example.com
或http://example.com
。虽然它应该在子目录中工作,但是在这样的设置中尚未测试。
您将需要向指向public
目录的Web服务器添加一个虚拟主机。
以下是几个例子,nginx是首选方法
Nginx的例子:
upstream websocket { # If you are using SSL, make sure the upstream server name # corresponds to the certificate's server name(s). server 127.0.0.1:6001; } server { listen 80; server_name deployer.app; root "/var/www/deployer/public"; charset utf-8; access_log off; error_log /var/log/nginx/deployer.app-error.log error; sendfile off; client_max_body_size 100m; location / { index index.php; try_files $uri $uri/ /index.php?$query_string; } location ~ \.php$ { fastcgi_split_path_info ^(.+\.php)(/.+)$; fastcgi_pass unix:/var/run/php/php7.0-fpm.sock; fastcgi_index index.php; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_intercept_errors off; fastcgi_buffer_size 16k; fastcgi_buffers 4 16k; } location /socket.io { proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_http_version 1.1; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $host; # if you are using SSL, below line should be 'proxy_pass https://websocket;' proxy_pass http://websocket; } location ~* /\.(?!well-known\/) { deny all; } }
Apache例子:
<VirtualHost *:80> ServerName deployer.app DocumentRoot "/var/www/deployer/public" DirectoryIndex index.php <Directory "/var/www/deployer/public"> AllowOverride all </Directory> ErrorLog "/var/log/apache2/deployer.app-error.log" </VirtualHost>
扩展设置
尽管您现在拥有运行Deployer所需的一切,但还有一些其他建议的步骤
设置一个cronjob
部署者有几个计划的任务运行,以清理临时文件,并检查项目的状态。建议您设置这些,尽管它们不需要运行,除非您希望使用URL检查或心跳来监视服务器上cronjobs的状态。
要设置cronjobs,您需要做的就是创建一个cronjob,crontab -e
或者通过创建一个文件,如/etc/cron.d/deployer
下面的内容。
* * * * * root php /var/www/deployer/artisan schedule:run 1>> /dev/null 2>&1
设置supervisor
deployer使用redis pubsub 队列运行node socket server服务器,将实时更新推送到Web浏览器,socket server启动方法:
$ cd /var/www/deployer $ node socket.js
但是,如果服务器崩溃,将不会重新启动,您将需要手动进行。
还有几个队列侦听器,一个用于运行实际部署和其他用户发起的操作,一个用于处理更新; 与node socket server服务器一样,如果这些崩溃,它们将不会自动重启。这些都是以
$ cd /var/www/deployer $ php artisan queue:work --queue=deployer-high,deployer-low --sleep=3 --tries=1 --daemon $ php artisan queue:work --queue=deployer-default --sleep=3 --tries=1 --daemon
因此,建议您使用Supervisor自动保持这些进程的运行。它总是具有允许您一次运行多个队列侦听器的优点,因此可以同时运行多个部署。
要设置Supervisor,您需要/etc/supervisor/conf.d/deployer.conf
使用以下创建内容:
[program:deployer] command=php artisan queue:work --queue=deployer-high,deployer-low --sleep=3 --tries=1 --daemon directory=/var/www/deployer process_name=queue_%(process_num)s numprocs=3 numprocs_start=0 stdout_logfile=/var/log/supervisor/deployer-%(process_num)s-stdout.log stderr_logfile=/var/log/supervisor/deployer-%(process_num)s-stderr.log stderr_logfile_maxbytes=1MB stdout_logfile_maxbytes=1MB redirect_stderr=true autostart=true autorestart=true [program:deployer-socketio] command=node socket.js directory=/var/www/deployer numprocs=1 autostart=true autorestart=true environment=HOME="/var/www/deployer",NODE_ENV="production" stderr_logfile=/var/log/supervisor/deployer-socket-stderr.log stdout_logfile=/var/log/supervisor/deployer-socket-stdout.log stderr_logfile_maxbytes=1MB stdout_logfile_maxbytes=1MB [program:deployer-broadcast] command=php artisan queue:work --queue=deployer-default --sleep=3 --tries=1 --daemon directory=/var/www/deployer numprocs=1 stderr_logfile=/var/log/supervisor/deployer-broadcast-stderr.log stdout_logfile=/var/log/supervisor/deployer-broadcast-stdout.log stderr_logfile_maxbytes=1MB stdout_logfile_maxbytes=1MB redirect_stderr=true autostart=true autorestart=true
创建后,只需使用以下命令重新启动
$ sudo service supervisor restart
7、更新
获取最新代码
请查看最新版本: latest release
$ git fetch --all
$ git checkout 0.0.46
更新依赖
$ composer install -o --no-dev
$ npm install --production
运行更新
$ php artisan app:update
8、执行数据库迁移
$ php artisan migrate
9、数据填充
$ php artisan db:seed --class=UserTableSeeder
错误解决:
1、
没有开启 php_sqlite3.dll扩展
去php.ini 开启扩展,从其就可以了。
2、
michele-angioni版本不匹配
到:https://packagist.org/packages/michele-angioni/multi-language
搜索:michele-angioni/multi-language
下载到本地替换