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

    1. walle運行環境搭建 (lnmp)php

          /usr/local/src(默認源碼安裝目錄)css

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安裝mysql

           a. 安裝gitlinux

yum -y install git

           b. 設置git的user name和email                nginx

git config --global user.name "github帳戶";
git config --global user.email "github郵箱";

            c. git與github經過ssh-key認證git

cd ~/.ssh

                注:沒有該目錄,建立便可github

ssh-keygen -t rsa -C "github帳戶"

                按3個回車,密碼爲空web

                最後獲得了兩個文件:id_rsa和id_rsa.pubsql

                在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信任。

                若是把宿主機的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,最後出現恭喜檢測經過了  汗

相關文章
相關標籤/搜索