Walle代碼發布
一、概述
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信任。
上線流程圖:
三、安裝
環境說明:
主機名 ip地址 部署 系統 linux-node1 192.168.56.11 walle、LNMP Centos 7.4 x86_64 linux-node2 192.168.56.12 LNMP Centos 7.4x86_64
walle依賴於LAMP或者LNMP環境,在數據庫中創建walle庫: create database walle; grant all privileges on walle.* to walle@‘%‘ identified by ‘123456‘;
1.代碼檢出
[root@linux-node1 ~]# mkdir -p /data/www/walle-web && cd /data/www/walle-web # 新建目錄 [root@linux-node1 ~]# git clone [email protected]/meolu/walle-web.git . # 代碼檢出
2.設置mysql連接
[root@linux-node1 walle-web]# vim config/local.php ‘db‘ => [ ‘dsn‘ => ‘mysql:host=127.0.0.1;dbname=walle‘, # 新建數據庫walle ‘username‘ => ‘walle‘, # 連接的用戶名 ‘password‘ => ‘123456‘, # 連接的密碼 ],
3.安裝composer
[root@linux-node1 ~]# curl -sS https://getcomposer.org/installer | php [root@linux-node1 ~]# mv composer.phar /usr/local/bin/composer # PATH目錄
4.安裝vendor
[root@linux-node1 www]# cd walle-web [root@linux-node1 walle-web]# composer install --prefer-dist --no-dev --optimize-autoloader -vvvv
5.初始化項目
[root@linux-node1 walle-web]# ./yii walle/setup # 需要你的yes
6.配置nginx
[root@linux-node1 www]# vim /usr/local/nginx/conf/vhost/walle.conf server { listen 82; server_name 192.168.56.11; # 改你的host root /data/www/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; } }
默認用戶名密碼:Admin admin
四、配置項目
1、基本要求
宿主機php進程用戶www(假如,可通過配置的檢測查看或ps aux|grep php)的ssh-key要加入git/gitlab的deploy-keys。此處是www用戶的id_rsa.pub,添加到gitlab上的SSH-KEYS
[www@linux-node1 ~]$ cat .ssh/id_rsa.pub ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCp/n0aWNws9KlFUTCFk7j1kSMz4mi8RVUl8amYuW/NNuuB9Ee3MRX0ZgJUgRpJDWM/xtHgCxAU9eg+3cTXCED7946aRaCY1ekK+eWfG+FiWzXLzDrUub2lJ071m3Pfsh6ExljwETObxiiSldrrgTStBbknYl/tTiGKM3vlGckVlDO8czUbpsLLot2ayQjQl3yHOhZcZbSkYk18i9MIp91fB3VPFhedyJfUJUouhiWJ4RjkbCdMCTCfBSMIxTNP9OvdjGmbDsG2+4YbfXZjQUJgwm9/oafAlpF1IQBdatnPFEL1QTocm+clt+EvyV2HpOksswx+UTHoJiZXdzuJaPAx [email protected]
宿主機php進程用戶www(假如,可通過配置的檢測查看或ps aux|grep php)要加入目標機群部署用戶www_remote(配置中)ssh-key信任,也就是ssh-keys免秘鑰登陸
[www@linux-node1 ~]$ sh-copy-id -i ~/.ssh/id_rsa.pub www@192.168.56.12 [www@linux-node1 ~]$ ssh www@192.168.56.12 Last login: Thu Jan 25 10:30:45 2018 from linux-node1 [www@linux-node2 ~]$
2、配置項目
這裏創建三個項目,可以通過檢測來測試是否正常:
註意:這裏3個項目的宿主機是linux-node1,所以在設置代碼檢出倉庫,統一為一個倉庫即可,這裏設置為/data/git,所屬也為www用戶。檢測報錯,可以通過報錯提示進行修改,通常的報錯有檢測代碼目錄、遠程代碼目錄所屬問題,gitlab的ssh-key認證問題,宿主機和遠程主機的ssh信任問題。
3、高級任務配置
高級任務方便用戶自定義一些操作,無論是在代碼檢出前後,還是切換版本前後。
(1)Java配置實例
pre_deploy任務 echo pre_deploy >> /tmp/cmd # 初始化一些東西,自由發揮 post_deploy任務 mvn package -Dmaven.test.skip=true # 編譯java mvn clean # 打掃 mv WEB-INF/config.Properties.test WEB-INF/config.Properties # 切換環境相應的配置 rm -rf src # 甚至刪除無用代碼 pre_release任務 ./xx.sh stop # 暫停服務 post_release任務 ./xx.sh start # 啟動服務
五、Nginx虛擬主機配置
[root@linux-node2 app]# cd /etc/nginx/conf.d/ [root@linux-node2 conf.d]# ls jxs.conf wap.conf www.conf [root@linux-node2 conf.d]# cat www.conf server { listen 80; server_name www.123.com; root /data/web/www; index index.html index.htm; access_log /var/log/nginx/eshop_access.log main; location ~ \.php$ { fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } } [root@linux-node2 conf.d]# cat jxs.conf server { listen 80; server_name jxs.123.com; root /data/web/jxs; index index.html index.htm; access_log /var/log/nginx/jxs_access.log main; location ~ \.php$ { fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } } [root@linux-node2 conf.d]# cat wap.conf server { listen 80; server_name m.123.com; root /data/web/wap; index index.html index.htm; access_log /var/log/nginx/wap_access.log main; location ~ \.php$ { fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } }View Code
六、上線發布
我的上線單-->創建上線單-->選擇項目
提交完成,點擊上線後,點擊部署即可發布
下面可以看到宿主機linux-node1中的檢出代碼庫的變化:
[root@linux-node1 git]# pwd /data/git [root@linux-node1 git]# tree . └── test ├── jxs │?? └── index.html ├── wap │?? └── index.html └── www ├── app │?? ├── 1.txt │?? └── index.php ├── index.htm └── index.html 5 directories, 6 files
也可以看到遠程目標主機的網站代碼目錄,都是通過軟連接的方式鏈接到發布版本庫中的數據
[www@linux-node2 app]$ cd /data/web/ [www@linux-node2 web]$ ll total 0 lrwxrwxrwx 1 www www 37 Jan 25 14:40 jxs -> /data/jxs/release/jxs/20180125-144001 lrwxrwxrwx 1 www www 37 Jan 25 14:40 wap -> /data/wap/release/wap/20180125-144026 lrwxrwxrwx 1 www www 37 Jan 26 09:45 www -> /data/www/release/www/20180126-094529 [www@linux-node2 web]$
總結:
walle發布代碼實現,walle安裝在宿主機上,通過拉取gitlab上的代碼,而後通過rsync同步到遠程目標主機的代碼版本庫目錄中,遠程目標主機同時修改軟鏈接,鏈接到最新的代碼版本,回滾的操作也是通過鏈接不同的代碼版本庫中進行實現。
Walle代碼發布