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,最後出現恭喜檢測經過了 汗