walle-web-1.2.0+svn自动化部署

    1. walle运行环境搭建 (lnmp)

          /usr/local/src(默认源码安装目录)

wget -c http://soft.vpser.net/lnmp/lnmp1.3.tar.gz && tar zxf lnmp1.3.tar.gz && cd lnmp1.3 && ./install.sh lnmp

    2. walle安装

           a. 安装git

yum -y install git

           b. 设置git的user name和email                

git config --global user.name "github账户";
git config --global user.email "github邮箱";

            c. git与github通过ssh-key认证

cd ~/.ssh

                注:没有该目录,创建即可

ssh-keygen -t rsa -C "github账户"

                按3个回车,密码为空

                最后得到了两个文件:id_rsa和id_rsa.pub

                在github上添加ssh密钥,这要添加的是“id_rsa.pub”里面的公钥

                打开https://github.com/settings/ssh ,登陆github,然后添加ssh

            d. 下载安装walle
                

cd /home/wwwroot/default
git clone git@github.com:meolu/walle-web.git

                下载vendor.tgz,可参考https://my.oschina.net/u/1422143/blog/818524

                下载到walle-web根目录,解压到根目录即可

            e. 配置walle

vi config/local.php
'db' => [
     'dsn'       => isset($_ENV['WALLE_DB_DSN'])  ? $_ENV['WALLE_DB_DSN']  : 'mysql:host=127.0.0.1;dbname=walle',
     'username'  => isset($_ENV['WALLE_DB_USER']) ? $_ENV['WALLE_DB_USER'] : 'username',
     'password'  => isset($_ENV['WALLE_DB_PASS']) ? $_ENV['WALLE_DB_PASS'] : 'password',
],
vi config/params.php

                第24行:

'user_driver'=>'ldap'

                改为:

'user_driver'=>''

                要不php需安装ldap扩展,linux服务器还得配置,没未成功,有大神配置成功,一定要私信我!

            f. mysql数据库预创建database walle

mysql -uroot -p
password:
create database walle;
exit;

            g. 配置nginx

                删除nginx.conf里面的server配置

                在vhost目录下创建

server {
    listen       80;
    server_name  lnmp.org;
    root /home/wwwroot/default/walle-web/web;
    index index.php;

    # 建议放内网
    # allow 192.168.0.0/24;
    # deny all;

    location / {
        try_files $uri $uri/ /index.php$is_args$args;
    }

    location ~ \.php {
        fastcgi_pass  unix:/tmp/php-cgi.sock;
        fastcgi_index index.php;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        include fastcgi_params;
    }

    location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|flv|ico)$ {
        expires 30d;
        access_log off;
    }

    location ~ .*\.(js|css)?$ {
        expires 7d;
        access_log off;
    }

    access_log /home/wwwlogs/walle_access.log;
}

            h. 初始化项目

                切换回walle-web目录

./yii walle/setup

        3. walle配置流程

            a. 分发原理

                宿主机、目标机群、操作用户关系如下图所示,宿主机(walle所在的机器),是一个中间机器,是代码托管与远程目标机群的纽带。所以宿主机需要与代码托管(github/gitlab)和远程目标机群都建立ssh-key信任。

114312_FY25_1422143.jpg

                如果把宿主机的php进程用户(我的是www)的ssh-key添加到gitlab/github、所有目标机群,配置就完成了90%。


            如何添加?添加ssh-key信任的基本教程
            先了解下几个术语:
            宿主机:walle服务安装所在的机器
            目标机:代码要分发到的机群
            ssh-key信任:可免密码登录,一个机器的一个用户与一个机器的一个用户通过ssh-key来建立信任(一般为RSA)

            b. 配置流程

                1. 宿主机php进程用户www的ssh-key要加入git/gitlab的deploy-keys。

                    (1) 确认宿主机的php进程用户

ps aux | grep php-fpm

                    (2) 获取宿主机的php进程用户www的ssh-key 

su www

                    #注:报错 This account is currently not available.                    

cat /etc/passwd|grep www
www:x:1002:1002::/home/www:/sbin/nologin

                    #/sbin/nologin->/bin/bash

                    再次切换www用户

su www

                    cat ~/.ssh/id_rsa.pub

                    #注:报错 cat: /home/www/.ssh: No such file or directory

mkdir ~/.ssh
ssh-keygen -t rsa -C "gitlib账号"

                    #按3个回车,密码为空

                    #最后得到了两个文件:id_rsa和id_rsa.pub

                    #复制宿主机公匙(id_rsa.pub)到目标机

ssh-copy-id -i ~/.ssh/id_rsa.pub remote_user@remote_server

          报错:Permission denied (gssapi-keyex,gssapi-with-mic,publickey,keyboard-interactive)

            可以试一下ssh

            成功

        c. 项目配置错误分析

            1. 项目配置检测报错

                宿主机:exec() has been disabled for security reasons

                目标机:exec() has been disabled for security reasons

            #开启php.ini 里 disable_functions 的 exec

            2. 宿主机代码检出检测出错,请确认svn用户名密码无误。

                (1) 没有安装svn,需要安装

                    one:

2017-01-10 14:19:21 -- /usr/bin/env: svn: 没有那个文件或目录

                    two:

            原因分析:
              传输协议加了ssl,svnsync第一次同步,带有--non-interactive选项,有可能会报标题所示错误。

              原因是第一次认证时会弹出如下交互文字。
              验证“https://192.168.1.18:443”的服务器证书时出错:

               - 此证书并不是由信任的权威机权颁发。请使用此指纹手工验证其有效性!
               - 证书的主机名称不匹配。
             证书信息:
               - 主机名称: SV0051
               - 有效时间: 自 Mon, 28 Feb 2011 00:55:03 GMT 至 Thu, 25 Feb 2021 00:55:03 GMT
               - 发行者: SV0051
               - 指纹: f4:b2:70:22:93:95:64:cb:38:a4:4c:d0:49:9c:20:87:64:35:75:85
               (R)拒绝,(t)暂时接受,或(p)永远接受?p

            解决方法是:
                # su www (一定要切换到walle运行php-fpm的用户下,因为是该用户和svn服务器进行交互)
第一次时不带--non-interactive,然后选择p,在以后的自动同步中带上此选项。

svn checkout -q 'https://192.168.1.100/svn/manageFormal' . --username='admin' --password='admin'

    3.安装好 walle后,进行项目配置,但是检测总是出现错误,错误如下:

        a. 宿主机代码检出检测出错,请确认把php进程用户www的ssh-key加入git的deploy-keys列表

        问题分析:

            nginx超时,504 Gateway time-out

        解决方法:

            1. /usr/local/ngnix/conf/nginx.conf

        fastcgi_connect_timeout 1200;#300
        fastcgi_send_timeout 1200;#300
        fastcgi_read_timeout 1200;#300
        fastcgi_buffer_size 128k;#64k
        fastcgi_buffers 8 128k;#4 64k
        fastcgi_busy_buffers_size 256k;#128k
        fastcgi_temp_file_write_size 256k;

        这里最主要的设置是前三条,即

        fastcgi_connect_timeout 1200;#300
        fastcgi_send_timeout 1200;#300
        fastcgi_read_timeout 1200;#300

            2. /usr/loca/php/etc/php-fpm.conf

        pm.max_children = 40#10

            "max_children" 这个值又是怎么计算出来的呢?这个值原则上是越大越好,php-cgi的进程多了就会处理的很快,排队的请求就会很少。设置”max_children”也需要根据服务器的性能进行设定,一般来说一台服务器正常情况下每一个php-cgi所耗费的内存在20M左右,因此我的”max_children”我设置成40个,20M*40=800M也就是说在峰值的时候所有PHP-CGI所耗内存在800M以内,低于我的有效内存1Gb。而如果我的”max_children”设置的较小,比如5-10个,那么php-cgi就会“很累”,处理速度也很慢,等待的时间也较长。如果长时间没有得到处理的请求就会出现504 Gateway Time-out这个错误,而正在处理的很累的那几个php-cgi如果遇到了问题就会出现502 Bad gateway这个错误。

        request_terminate_timeout = 1200

            如果你的服务器性能足够好,且宽带资源足够充足,PHP脚本没有系循环或BUG的话你可以直接将”request_terminate_timeout”设置成0s。0s的含义是让PHP-CGI一直执行下去而没有时间限制。而如果你做不到这一点,也就是说你的PHP-CGI可能出现某个BUG,或者你的宽带不够充足或者其他的原因导致你的PHP-CGI能够假死那么就建议你给”request_terminate_timeout”赋一个值,这个值可以根据你服务器的性能进行设定。一般来说性能越好你可以设置越高,20分钟-30分钟都可以。由于我的服务器PHP脚本需要长时间运行,有的可能会超过10分钟因此我设置了1200秒,这样不会导致PHP-CGI死掉而出现502 Bad gateway这个错误。

        b. 

          目标机器检测出错请确认php进程www用户ssh-key加入目标机器的www用户ssh-key信任列表。
          目标机器检测出错,请确认www有目标机器发布版本库/data/releases写入权限。

        解决方法:

            1,在宿主机安装了ansible后,就消灭了一个关于ansible未安装的问题

            2,其实我们是把宿主机器php进程用户www加入了目标机器www用户的信任authired_keys表的,但是任然报未加入,此处,主要的错误就是因为我们在目标机器中对于

              www用户的.ssh文件夹和authorized_keys的权限和所属者:

        chmod -R 644 authorized_keys 
        chmod -R 700 .ssh/
        chmod -R 755 /home/www/

        必须满足以上三个条件才能免密码登录,同时也是解决总报没有加入目标机器信任列表的问题关键

         chown  www.www -R /home/www       将所属者为www用户

          3,需要记住的宿主机和目标机器的  .ssh   authorized_keys      /home/www/   都需要注意权限问题

         4,最后出现恭喜检测通过了  汗

转载于:https://my.oschina.net/u/1422143/blog/819985

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值