deployer安装

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包括对任何支持mysqlpgsqlsqlite

出于安全考虑,部署者还需要能够使用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.comhttp://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

 

下载到本地替换

 

 

 






posted @ 2017-08-14 17:04  丶老中医  阅读(458)  评论(0编辑  收藏  举报
一切已经开始©2018 丶老中医