Walle(瓦力):一套軟件開發的部署系統。提供了清晰的日志記錄,支持數據的回滾。用於解決大型團隊在軟件開發中的測試、預測試和上線的統一部署管理。
系統環境:CentOS6.8-A CentOS-6.8-B
軟件支持:walle ssh php-5.6 gitlab-8.6.0 composer nginx-1.10 git2.3 Mysql5.6
安裝過程:
-
- 基礎環境
- yum install openssh-clients 支持ssh(CentOS6.8-A)
- 安裝nginx(請自行百度,CentOS6.8-A)
- 安裝php-5.6(請自行百度),把php配置到環境變量。(CentOS6.8-A)
- 安裝composer(請自行百度),php composer-setup.php --install-dir=/usr/bin --filename=composer(CentOS6.8-A)
- 安裝gitlab(請參考官網安裝教程, CentOS6.8-B)
- 安裝git(請自行百度)。並添加到環境變量(CentOS6.8-A)
- 安裝Mysql5.6(請自行百度)
- 測試基礎環境搭建
- 在CentOS6.8-A中通過nginx訪問php文件是否成功
- 在CentOS6.8-B中訪問gitlab是否成功
- 用戶配置
- 添加新用戶(www_php),並且是可登錄的正常用戶
- 設置php-fpm的用戶以及用戶組為新創建的用戶(www_php),並設置重啟
- 為新的用戶通過ssh生成密鑰(公鑰和私鑰)
- 把新用戶的公鑰添加到gitlab,並進行測試無密碼git操作(拉取|推送等等),首次拉取會進行服務端身份指紋的驗證,再次拉取則可以進行無密碼拉取
- 設置新用戶自己通過ssh無密碼連接自己(centos可以通過ssh連接自己)
- 文件權限設置
- mkdir /storage/deploy/form
- mkdir /storage/deploy/release
- mkdir /storage/www
- 設置上述創建的文件可以為新用戶(www_php)讀寫的權限
- 安裝walle(http://www.walle-web.io/docs/installation.html)
- git clone https://github.com/meolu/walle-web.git
- 在walle-web->config->local.php文件中配置連接Mysql的參數
- composer install --prefer-dist --no-dev --optimize-autoloader -vvvv 通過composer安裝walle-web的第三方拓展
- walle-wab->yii walle/setup 初始化項目
- 配置nginx虛擬域名
- 基礎環境
server { listen 80; server_name walle.compony.com; # 改你的host root /the/dir/of/walle-web/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$ { try_files $uri = 404; fastcgi_pass 127.0.0.1:9000; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } }
6. 訪問域名。內容的管理員帳號為admin|admin
問題解答
1:請確認php進程用戶{user}有代碼存儲倉庫{path}讀寫權限。
chown -R {user}:{user} {path}
chmod 755 {path}
2:請確認php進程用戶{user}把ssh-key加入git的deploy-keys列表
1):沒有把{user}生成的公鑰添加到gitlab的ssh-key管理列表中。請添加,並且測試是否可以通過{user}進行無密碼的git的操作
2):確定把{user}加入到了指定的git管理倉庫中,那么請使用git隨便拉取一個repository,因為首次拉取會讓客戶端進行遠程服務端的身份指紋驗證的操作
請確保{user}可以進行無密碼的正常拉取操作
3):當以上兩種情況都沒有問題,命令行可以正常拉取,但是通過walle還是報錯。請將git創建一個軟連接到/usr/bin。(本人遇到的就是這個問題)
3:gitlab在添加ssh的時候報500錯誤
cat /var/log/gitlab/gitlab-rails/production.log
1):/usr/bin/env: ssh
yum install openssh-clients -y
4:請確認php進程{local_user}用戶ssh-key加入目標機器的{remote_user}用戶ssh-key信任列表
請確保{local_user} 通過ssh可以無密碼登錄{remote_user}
5:{remote_user}有目標機器發布版本庫{path}寫入權限
解決方法請參考->1
6:walle上線出現無法已非目錄覆蓋目錄
這里的webroot填寫的存放路徑的最后一個文件名稱,不能存在。walle會部署項目的時候以最后一個名稱為項目文件名。如:/www/webroot/test 則test不需要創建,並且test需要有針對上圖中的[用戶]擁有讀寫權限。
walle的原理解析
通過PHP中的exec()函數基於SSH安全驗證機制(免密碼登錄)進行一系列的命令操作,如git的拉取、文件夾的創建、文件的遠程拷貝等等。