1. 程式人生 > >Walle代碼發布

Walle代碼發布

doc allow spl 版本庫 添加 listen 分享 9.png from

一、概述

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.4
x86_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代碼發布