Walle 瓦力 安裝部署
http://www.walle-web.io/docs/ 瓦力官網
Walle 一個web部署系統工具,配置簡單、功能完善、界面流暢、開箱即用!支持git、svn版本管理,支持各種web代碼發佈,PHP,Python,JAVA等代碼的發佈、回滾,可以通過web來一鍵完成。
功能列表
用戶分身份註冊、登錄
開發者發起上線任務申請、部署
管理者審覈上線任務
支持多項目部署
支持多項目多任務並行
快速回滾
項目的用戶權限管理
部署前準備任務pre-deploy(前置檢查)
代碼檢出後處理任務post-deploy(如vendor)
同步後更新軟鏈前置任務pre-release
發佈完畢後收尾任務post-release(如重啓)
執行sql構建(不要擔心忘記測試環境sql同步)
線上文件指紋確認
支持git、svn版本管理
原理分析
宿主機、目標機羣、操作用戶關係如下圖所示,宿主機(walle所在的機器),是一箇中間機器,是代碼託管與遠程目標機羣的紐帶。
所以宿主機需要與代碼託管(github/gitlab)和遠程目標機羣都建立ssh-key信任。
上線流程圖
依賴
Bash(git、ssh)
意味着不支持win、mac的zsh
LNMP/LAMP(php5.4+)
php需要開啓pdo_mysql,exec函數執行
Composer
如果國內環境安裝極慢,可以直接下載vendor解壓到項目根目錄
ansible
安裝
1、宿主機安裝 ansible
yum install ansible # RHEL/CentOS/Fedora |
2、宿主機無需其他配置,兼容 ~/.ssh/config 名稱、證書配置
3、目標機無需額外配置
walle
項目配置 中 開啓Ansible
(可選) config/params.php 配置 ansible_hosts 文件存放路徑
按正常流程發佈、上線代碼,傳輸文件、遠程執行命令均會通過ansible併發執行
php5.6環境CentOS安裝
刪除老的安裝包
remove php.x86_64 php-cli.x86_64 php-common.x86_64 php-gd.x86_64 php-ldap.x86_64 php-mbstring.x86_64 php-mcrypt.x86_64 php-mysql.x86_64 php-pdo.x86_64```
CentOs 6.x
rpm -Uvh http://mirror.webtatic.com/yum/el6/latest.rpm
CentOs 7.X
rpm -Uvh https://mirror.webtatic.com/yum/el7/epel-release.rpm
- 安裝php 5.6相關組件
```yum install php56w.x86_64 php56w-cli.x86_64 php56w-common.x86_64 php56w-gd.x86_64 php56w-ldap.x86_64 php56w-mbstring.x86_64 php56w-mcrypt.x86_64 php56w-mysql.x86_64 php56w-pdo.x86_64安裝php-fpm 5.6
yum install php56w-fpm
安裝部署 Walle
1.簡潔安裝指南
git clone [email protected]:meolu/walle-web.git |
2.最最最詳細安裝指南
以下安裝,均在宿主機(一臺配置了LAMP/LNMP的linux機器,並且安裝git/svn)上操作,如有問題,詳見Q&A。
如果還沒有安裝php 5.4+環境的,請先安裝php5.4+,詳情看php 5.6安裝。
1.代碼檢出
mkdir -p /data/www/walle-web && cd /data/www/walle-web # 新建目錄 |
2.設置mysql連接
vi config/local.php +14 |
3.安裝composer,如果已安裝跳過
curl -sS https://getcomposer.org/installer | php |
4.安裝vendor
cd walle-web |
安裝速度慢或失敗,可直接下載vendor解壓到項目根目錄
5.初始化項目
cd walle-web |
6.配置nginx
凡是在第7步刷新頁面看到50x均是前5步安裝不完整,自行檢查
凡是在第7步刷新頁面看到404均是nginx配置不當,自行檢查
nginx簡單配置
server { |
7.恭喜:)
訪問地址:localhost
當然,可能你配置nginx時的server_name是walle.company.com時,配置本地hosts之後,直接訪問:walle.company.com亦可。
安裝錯誤
composer安裝速度慢
好吧,我已經猜到會有人問有沒有現成的,有! 下載百度網盤,解壓vendor放到walle-web根目錄即可。
第一次使用composer可能會出現的問題:1 沒有添加git的token
Could not fetch https://api.github.com/repos/jquery/jquery, please create a GitHub OAuth token to go over the API rate limit
Head to https://github.com/settings/tokens/new?scopes=repo&description=Composer+on+localhost+2015-10-08+1123
to retrieve a token. It will be stored in “/root/.composer/auth.json” for future use by Composer.
Token (hidden):
解決辦法:
複製提示裏的地址到瀏覽器,點擊生成git token,如上面的:https://github.com/settings/tokens/new?scopes=repo&description=Composer+on+localhost+2015-10-08+1123
複製token到命令行,認證,繼續
第一次使用composer可能會出現的問題:2 composer install 可能會出現的錯誤
Loading composer repositories with package information
Installing dependencies (including require-dev)
Your requirements could not be resolved to an installable set of packages.Problem 1
yiisoft/yii2 2.0.x-dev requires bower-asset/jquery 2.1.@stable | 1.11.@stable -> no matching package found.
….
解決辦法:composer global require "fxp/composer-asset-plugin:*"
如何添加用戶key到git的ssh-keys列表
su - www # 假如www爲你的php進程用戶 |
如何添加用戶ssh-key到目標機羣部署用戶ssh-key信任
宿主機操作
ps aux|grep php # 假如www_php爲你的php進程用戶 |
初始化walle時失敗:could not find driver
缺少pdo擴展,解決辦法:添加pdo擴展
ubuntu |
7.nginx簡單配置
server { |
切換用戶(www)時:this account is currently not available
cat /etc/passwd | grep www # 查看是否爲 /sbin/nolgin |
解決辦法:
vipw /etc/passwd 修改/sbin/nolgin爲/bin/bash |
The file or directory to be published does not exists: /data/www/walle-web/vendor/bower/jquery/dist
新建此目錄即可:/data/www/walle-web/vendor/bower/jquery/dist
Call to undefined function yii\web\mb_parse_str()
缺少mbstring擴展,安裝mbstring擴展重啓php即可。mbstring擴展:http://php.net/manual/zh/mbstring.installation.php
Git項目配置
git 項目配置指南
git部署是最推薦的方式,它無論對於何種語言都是合適的。
一、基本要求:
宿主機php進程用戶www_php(假如,可通過配置的檢測查看或ps aux|grep php)的ssh-key要加入git/gitlab的deploy-keys。當然也可以http地址帶用戶名密碼(不推薦):https://username:[email protected]/meolu/walle-web.git
宿主機php進程用戶www_php(假如,可通過配置的檢測查看或ps aux|grep php)要加入目標機羣部署用戶www_remote(配置中)ssh-key信任,具體怎麼添加可找sa或者百度或者,這一般是用戶最不理解的地方,建議先花半小時理解linux用戶概念和php配置。
二、配置項目
三、檢測項目配置
配置完畢之後,先檢測下,如無問題則可以發起上線單了:)
四、檢測的錯誤和解決辦法
宿主機代碼檢出檢測出錯,請確認php進程用戶{user}有代碼存儲倉庫{path}讀寫權限,且把ssh-key加入git的deploy-keys列表。詳細錯誤:{error}
問題:請確認php進程用戶{user}有代碼存儲倉庫{path}讀寫權限
沒有權限,是因爲用戶{user}對目錄{path}沒有讀寫權限,給權限即可
ll {path}
chown {user} -R {path}
chmod 755 -R {path}問題:把ssh-key加入git的deploy-keys列表
su {user} && cat ~/.ssh/id_rsa.pub
打開 github/gitlab/bitbucket 網站, 添加 ssh-key 到ssh-keys列表
可能的原因之一是clone git代碼的時候,需要手工確認: git clone [email protected]:yyy/zzz.git
目標機器部署出錯,請確認php進程{local_user}用戶ssh-key加入目標機器的{remote_user}用戶ssh-key信任列表,且{remote_user}有目標機器發佈版本庫{path}寫入權限。詳細錯誤:{error}
問題:請確認php進程{local_user}用戶ssh-key加入目標機器的{remote_user}用戶ssh-key信任列表
添加機器信任,還是沒理解請百度吧(因爲太多的同學問這問題,實在沒辦法只能這麼囉嗦)
su {local_user} && ssh-copy-id -i ~/.ssh/id_rsa.pub remote_user@remote_server
# need remote_user's password問題:{remote_user}有目標機器發佈版本庫{path}寫入權限
su remote_user
ll {path}
chown {remote_user} -R {path}
chmod 755 -R {path}
Svn項目配置
svn 項目配置
svn部署上線與git有點不太一樣,svn是推薦增量發佈(當然也可以全量更新),在開發者提交文件列表(可能帶版本號),管理員審覈上線單。發起部署時,爲該上線單開闢一個獨立空間,檢出代碼,選擇上線單中的文件(可能帶版本號)同步到目標機羣。有不瞭解宿主機和目標機羣關係、上線流程的同學先到項目主頁瞭解。
因爲svn沒有git的版本快照,所以在部署需要全量代碼編譯操作時,只能選擇全量更新,此時要求發佈的分支/tag/trunk是可發佈狀態。建議java + git組合。同理其它需要全量代碼在宿主機做編譯相關的操作的語言,且爲svn版本管理,請慎用。
一、基本要求:
svn目錄推薦以下規範,詳細可以註冊riouxsvn,作爲svn測試地址。當然三無(無trunk、無branches、無tags)也是支持:)
branches
tags
trunk
宿主機php進程用戶www_php(假如,可通過配置的檢測查看或ps aux|grep php)要加入目標機羣部署用戶www_remote(配置中)ssh-key信任,具體怎麼添加可找sa或者百度或者,這一般是用戶最不理解的地方,建議先花半小時理解linux用戶概念和php配置。
二、配置項目
三、檢測項目配置
配置完畢之後,先檢測下,如無問題則可以發起上線單了:)
四、檢測的錯誤和解決辦法
宿主機代碼檢出檢測出錯,請確認php進程用戶{user}有代碼存儲倉庫{path}讀寫權限。詳細錯誤:{error}
沒有權限,是因爲用戶{user}對目錄{path}沒有讀寫權限,給權限即可
ll {path}
chown {user} -R {path}
chmod 755 -R {path}目標機器部署出錯,請確認php進程{local_user}用戶ssh-key加入目標機器的{remote_user}用戶ssh-key信任列表,且{remote_user}有目標機器發佈版本庫{path}寫入權限。詳細錯誤:{error}
問題:請確認php進程{local_user}用戶ssh-key加入目標機器的{remote_user}用戶ssh-key信任列表
添加機器信任,還是沒理解請百度吧(因爲太多的同學問這問題,實在沒辦法只能這麼囉嗦)
su {local_user} && ssh-copy-id -i ~/.ssh/id_rsa.pub remote_user@remote_server
# need remote_user's password問題:{remote_user}有目標機器發佈版本庫{path}寫入權限
su remote_user
ll {path}
chown {remote_user} -R {path}
chmod 755 -R {path}
高級任務配置
高級任務方便用戶自定義一些操作,無論是在代碼檢出前後,還是切換版本前後。
一、java配置實例
pre_deploy任務
echo pre_deploy >> /tmp/cmd # 初始化一些東西,自由發揮 |
post_deploy任務
mvn package -Dmaven.test.skip=true # 編譯java |
pre_release任務
./xx.sh stop # 暫停服務 |
post_release任務
./xx.sh start # 啓動服務 |
二、如果我想執行sudo
命令?
想執行sudo
命令的前提是用戶有root權限,要執行哪些命令?
添加用戶到sudoers
visudo
www ALL=(ALL) ALL添加免密碼命令
visudo
www ALL = (ALL) NOPASSWD: /usr/local/nginx/bin/nginx設置用戶的tty(宿主機執行sudo需要此步,目標機可以跳過此步)
Defaults:www !requiretty
項目用戶配置
角色分爲管理員(註冊可選)、開發者(註冊可選)、項目審覈管理員(前面二者均可是)。
1.管理員
註冊時,選擇角色爲管理員,註冊後郵件驗證,但此時也不是立刻擁有管理員權限,需要其它管理員審覈通過才行。
管理員的權限列表
配置新的項目、修改自己的項目配置
審覈新管理員
設置項目的成員、項目審覈管理員
審覈上線單
上線
2.項目審覈管理員
註冊時無此用戶角色,爲管理員爲減輕自己審覈上線單壓力、防止管理員不在線而影響上線而需要一兩個代理審覈管理員。但不能編輯項目配置,也不能添加項目成員,只比開發者多一個審覈上線單的權限。
管理員的權限列表
審覈上線單
上線
3.開發者
普通開發者可提交上線單,上線部署
管理員的權限列表
檢測錯誤
宿主機代碼檢出檢測出錯,請確認php進程用戶{user}有代碼存儲倉庫{path}讀寫權限,且把ssh-key加入git的deploy-keys列表。詳細錯誤:{error}
問題:請確認php進程用戶{user}有代碼存儲倉庫{path}讀寫權限
沒有權限,是因爲用戶{user}對目錄{path}沒有讀寫權限,給權限即可
ll {path}
chown {user} -R {path}
chmod 755 -R {path}問題:把ssh-key加入git的deploy-keys列表
su {user} && cat ~/.ssh/id_rsa.pub
打開 github/gitlab/bitbucket 網站, 添加 ssh-key 到ssh-keys列表目標機器部署出錯,請確認php進程{local_user}用戶ssh-key加入目標機器的{remote_user}用戶ssh-key信任列表,且{remote_user}有目標機器發佈版本庫{path}寫入權限。詳細錯誤:{error}
問題:請確認php進程{local_user}用戶ssh-key加入目標機器的{remote_user}用戶ssh-key信任列表
添加機器信任,還是沒理解請百度吧(因爲太多的同學問這問題,實在沒辦法只能這麼囉嗦)
su {local_user} && ssh-copy-id -i ~/.ssh/id_rsa.pub remote_user@remote_server
# need remote_user's password
# 爲什麼我把{local_user}的ssh-key加到遠程機器的{remote_user}下的~/.ssh/authorized_keys還是不能免密碼登錄
# 免密碼登錄需要遠程機器權限滿足以下三個條件:
/home/{remote_user} 755
~/.ssh 700
~/.ssh/authorized_keys 644 或 600問題:{remote_user}有目標機器發佈版本庫{path}寫入權限
su remote_user
ll {path}
chown {remote_user} -R {path}
chmod 755 -R {path}
提交上線單
上線單包括兩種方式:git和svn
一、git 項目提交上線單
二、svn 項目提交上線單
svn上線單與git類似,但有些區別,會有全量上線和增量上線兩種主要形式,增量上線支持指定文件的版本號。分別看下可以有哪些格式填寫上線單:
上線全量文件
*
增量上線指定文件
file_name1
file_name2增量上線指定文件的指定版本
file_name1 commit_id
file_name2 commit_id
部署出錯
1.上線至全量更新服務器時出錯:mv -fT
原因分析:更新目標機羣是以軟鏈方式來更新webroot,如果提前在目標機羣創建了webroot目錄,軟鏈覆蓋將會失敗。
解決辦法:直接刪除目標機羣webroot目錄,確定其父目錄有讀寫的權限即可,由瓦力系統生成webroot軟鏈接。
2.上線出錯,想知道到底發生了什麼事情
有些錯誤walle捕捉不到,默認操作日誌在/tmp/walle/
下,具體可在config/local.php
裏log.dir
配置路徑,tail
着日誌,部署看日誌。
3./tmp/walle
下無日誌文件
原因centos 7 yum 安裝的php-fpm默認/tmp
目錄不可寫:/usr/lib/systemd/system/php-fpm.service
中的 PrivateTmp=true
禁止了向tmp目錄寫日誌
解決:
vi /usr/lib/systemd/system/php-fpm.service
PrivateTmp=false
systemctl daemon-reload
systemctl reload php-fpm
致此瓦力已經部署成功!如有任何問題可聯繫博主或者登錄官網查看詳情。