Walle實現自動發佈

Walle實現自動發佈php

walle是啥?能幹啥?有啥用?這些我都不會去一一道來,若是你尚未明白前面提出的三個問題就不用往下看了,這裏這回將walle安裝了怎麼去使用.若是都要面面俱到不是一兩篇博客能夠解決的問題,若是但願將walle部署到生產環境中,這篇博客或許能給你點啓發,下面給出的網站徹底能夠解決前面的幾個問題了.直接開始吧.html

###前期準備nginx

  • 系統centos6.5
  • walle機器必須先部署LNMP/LAMP環境,這裏使用LNMP
  • gitlab非必須,不會安裝嫌麻煩的能夠直接使用git或者github
  • 實驗以前,先關閉selinux和iptable 源碼包自行下載
  • 實驗使用3臺虛擬機
    gitlab機器: node4 192.168.19.140
    walle機器: node1 192.168.19.139
    模擬部署機器: node5 192.168.19.141c++

  • 三臺機器上建立能夠免密登陸的用戶: www
  • 方便實驗將主機信息寫入hosts文件中,(非必須)
    [www@node4 ~]$ cat /etc/hosts
    127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
    ::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
    192.168.19.139 node1
    10.10.21.131 node2
    10.10.23.147 node3
    192.168.19.140 node4
    192.168.19.141 node5

###建立免密登陸用戶
這裏由於本人設置的這幾臺虛擬機中root的密鑰要一致,因此是直接copy了系統中root用戶的密鑰來實現的,若是你想建立用戶只是使用改用戶在建立密鑰也行
直接copy密鑰對方法,三臺主機上都要運行git

useradd www
    mkdir /home/www/.ssh
    cp ~/.ssh/authorized_keys /home/www/.ssh
    cp ~/.ssh/id_rsa /home/www/.ssh
    chown -R www.www /home/www/.ssh
    chmod 0770 /home/www/.ssh
    chmod 0600 /home/www/.ssh/*

自行建立密鑰對思路github

#建立密鑰,一路回車就行,具體用法自行man
su - www
ssh-keygen

#將密鑰copy到須要的主機上, -i 後面跟公鑰文件
ssh-copy-id [-i [identity_file]] [user@]machine

###walle機器安裝LNMP
卸載系統自帶應用web

rpm -qa | grep php
    rpm -qa | grep mysql
    rpm -e --nodeps php-common-5.3.3-26.el6.x86_64
    rpm -e --nodeps php-pdo-5.3.3-26.el6.x86_64
    rpm -e --nodeps php-cli-5.3.3-26.el6.x86_64
    rpm -e --nodeps php-xml-5.3.3-26.el6.x86_64
    rpm -e --nodeps php-pear-1.9.4-4.el6.noarch
    rpm -e --nodeps php-gd-5.3.3-26.el6.x86_64
    rpm -e --nodeps php-5.3.3-26.el6.x86_64
    rpm -e --nodeps mysql-5.1.71-1.el6.x86_64
    rpm -e --nodeps mysql-connector-odbc-5.1.5r1144-7.el6.x86_64
    rpm -e --nodeps mysql-libs-5.1.71-1.el6.x86_64}

#清除了檢查一下,確保清除乾淨
[root@node1 ~]# rpm -qa | grep php
[root@node1 ~]# rpm -qa | grep mysql
[root@node1 ~]#

下載源碼包並解壓
因爲有的源碼包連接會隨時間推移而失效,這裏就不放連接了,自行查找安裝下載吧

[root@node1 ~]# cd /usr/local/src/
[root@node1 src]# ls
mysql-5.6.35.tar.gz  php-5.6.30.tar.gz   nginx-1.12.2  
nginx-1.12.2.tar.gz  walle-web-v1.x-master.zip
tar -zxf mysql-5.6.35.tar.gz
    tar -zxf nginx-1.12.1.tar.gz
    tar -zxf php-5.6.30.tar.gz

安裝依賴環境
這裏給出的本人系統上安裝時須要用到的,由於系統初始化安裝中存在差別若是在源碼編譯安裝報錯是請自行安裝對應的依賴包

yum -y groupinstall Development tools
    yum -y install make gcc-c++ cmake bison-devel ncurses-devel libaio libaio-devel perl-Data-Dumper net-tools
    yum -y install zlib zlib-devel openssl openssl-devel pcre pcre-devel libxml2* libmysql*

安裝mysql5.6
源碼包默認下載位置在/usr/local/scr路徑下,也是默認操做目錄,這裏爲了減小篇幅,就不把命令執行過程意義列出了,若是編譯出現報錯能夠複製報錯信息去百度一下,排錯也是一種能力體現.

cd /usr/local/src
useradd -s /sbin/nologin mysql
mkdir -p /data/mysql
chown -R mysql.mysql /data/mysql
mkdir -p /var/lib/mysql
chown -R mysql.mysql /var/lib/mysql
mv mysql-5.6.35 /usr/local/mysql

cd /usr/local/mysql

cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DMYSQL_DATADIR=/data/mysql -DSYSCONFDIR=/etc 
/-DWITH_MYISAM_STORAGE_ENGINE=1 -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_MEMORY_STORAGE_ENGINE=1 
/-DWITH_READLINE=1 -DMYSQL_UNIX_ADDR=/var/lib/mysql/mysql.sock 
/-DMYSQL_TCP_PORT=3306 -DENABLED_LOCAL_INFILE=1 -DWITH_PARTITION_STORAGE_ENGINE=1 
/-DEXTRA_CHARSETS=all -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci

不少地方編譯mysql5.6都沒有寫make install就執行初始化了,這樣會致使報錯,這裏單獨拿出來講明一下

//沒有make install後面的初始化會報錯
make install

初始化mysql
初始化mysql並複製配置文件

chmod 755 ./scripts/mysql_install_db

./scripts/mysql_install_db --user=mysql --datadir=/data/mysql

cp support-files/my-default.cnf /etc/my.cnf
cp support-files/mysql.server /etc/init.d/mysql.server
chmod 755 /etc/init.d/mysql.server

修改/etc/my.cnf文件

//修改mysql配置,能夠不改,cmake編譯已經定義默認值了,可是要與啓動腳本定義的參數一致,不然啓動失敗
vim /etc/my.cnf

datadir = /data/mysql
socket = /var/lib/mysql/mysql.sock
pid-file=/data/mysqld/mysqld.pid
//這裏要看cmake時的默認sock文件路徑,也能夠指定pid文件(記得改用戶和用戶組)

啓動並初始化mysql
沒有進行初始化mysql後面會報錯的

/etc/init.d/mysql.server start
/usr/local/mysql/bin/mysql_secure_installation

###php5.6安裝
進入目錄編譯安裝
以下的編譯選項基本都是必須的選項,編譯報錯就百度吧

cd /usr/local/src/php-5.6.30
 ./configure --prefix=/usr/local/php-fpm --with-config-file-path=/usr/local/php-fpm/etc --enable-fpm --with-fpm-user=www --with-fpm-group=www --with-mysql=/usr/local/mysql --with-mysqli=/usr/local/mysql/bin/mysql_config --with-pdo-mysql=/usr/local/mysql --with-mysql-sock=/var/lib/mysql --with-openssl --with-zlib --enable-sockets -enable-mbstring=all

make && make install

添加環境變量或添加軟連只要系統能識別到php相關命令就OK

ln -s /usr/local/php-fpm/bin/php /usr/local/bin/php

echo "export PATH=/usr/local/php-fpm/bin:$PATH" >> /etc/profile

複製啓動腳本及配置文件

cp php.ini-production /usr/local/php-fpm/etc/php.ini
cp sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm
chmod 755 /etc/init.d/php-fpm

**修改配置文件***
這裏php使用tcp/ip方式與nginx通信的,若是想用sockect方式自行百度哈
子須要修改運行用戶,用戶組及listend的ip端口就好

vim /usr/local/php-fpm/etc/php-fpm.conf
user = www
group = www
listen = 127.0.0.1:9000

加入開機啓動

/usr/local/php-fpm/sbin/php-fpm -t
chkconfig --add php-fpm
chkconfig php-fpm on
service php-fpm start

###nginx安裝
進入目錄編譯安裝
仍是老樣子,報錯找度娘

cd /usr/local/src/nginx-1.12.2/
./configure --prefix=/usr/local/nginx --user=www --group=www
make && make install

添加啓動腳本
vim /etc/init.d/nginx

#!/bin/bash
# chkconfig: - 30 21
# description: http service.
# Source Function Library
. /etc/init.d/functions
# Nginx Settings
NGINX_SBIN="/usr/local/nginx/sbin/nginx"
NGINX_CONF="/usr/local/nginx/conf/nginx.conf"
NGINX_PID="/usr/local/nginx/logs/nginx.pid"
RETVAL=0
prog="Nginx"
start()
{
    echo -n $"Starting $prog: "
    mkdir -p /dev/shm/nginx_temp
    daemon $NGINX_SBIN -c $NGINX_CONF
    RETVAL=$?
    echo
    return $RETVAL
}
stop()
{
    echo -n $"Stopping $prog: "
    killproc -p $NGINX_PID $NGINX_SBIN -TERM
    rm -rf /dev/shm/nginx_temp
    RETVAL=$?
    echo
    return $RETVAL
}
reload()
{
    echo -n $"Reloading $prog: "
    killproc -p $NGINX_PID $NGINX_SBIN -HUP
    RETVAL=$?
    echo
    return $RETVAL
}
restart()
{
    stop
    start
}
configtest()
{
    $NGINX_SBIN -c $NGINX_CONF -t
    return 0
}
case "$1" in
  start)
        start
        ;;
  stop)
        stop
        ;;
  reload)
        reload
        ;;
  restart)
        restart
        ;;
  configtest)
        configtest
        ;;
  *)
        echo $"Usage: $0 {start|stop|reload|restart|configtest}"
        RETVAL=1
esac
exit $RETVAL

加入開機自啓

chown -R www.www /usr/local/nginx/
chmod 755 /etc/init.d/nginx
chkconfig --add nginx
chkconfig nginx on

修改配置文件
vim /usr/local/nginx/conf/nginx.conf 這裏只給出修改部分,自行對照修改

user www www;

    server
    {
        listen 80;
        server_name localhost;
        index index.html index.htm index.php;
        root /usr/local/nginx/html;
        location ~ \.php$
        {
            include fastcgi_params;
            fastcgi_pass 127.0.0.1:9000;
            fastcgi_index index.php;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        }

檢查配置文件並啓動服務

/usr/local/nginx/sbin/nginx -t

service nginx start

到這裏基礎環境算是搭建好了,如今纔是walle安裝的開始啊

###安裝walle
由於這裏使用git工具直接拉取的代碼,因此須要安裝git工具,不安裝就自行下載解壓吧

建立目錄並拉取應用

mkdir -p /data/www/walle && cd /data/www/walle
chown -R www.www /data/www

yum -y install git

git clone https://github.com/meolu/walle-web-v1.x.git

建立數據庫有受權用戶
自行使用剛纔初始化MySQL的root用戶登陸

#這是本人初始化MySQL設置的,請自行替換
    /usr/local/mysql/bin/mysql -uroot -p123456 

    create database walle charset=utf8mb4 collate utf8mb4_unicode_ci;

    grant all privileges on walle.* to 'walleuser'@'%' identified by 'wallepass';

    flush privileges;

修改walle的配置文件
vim /data/www/walle/walle-web-v1.x-master/config/local.php
要修改的內容與數據庫建立的內容要一致,以下給出修改的部分

'components' => [
        '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'] : 'walleuser',
            'password'  => isset($_ENV['WALLE_DB_PASS']) ? $_ENV['WALLE_DB_PASS'] : 'wallepass',
        ],
        'ma

下載安裝composer
這裏php使用絕對路徑,防止系統找不到php命令

cd /data/www/walle/walle-web-v1.x/
    curl -sS https://getcomposer.org/installer | /usr/local/php-fpm/bin/php

若是系統沒有作php到軟連或環境變量修改,這裏安裝會報錯,出現以下圖所示證實安裝成功了.

ln -s /usr/local/php-fpm/bin/php /usr/local/bin/php

mv composer.phar /usr/local/bin/composer
composer install --prefer-dist --no-dev --optimize-autoloader -vvvv

composer安裝.jpg

初始化walle

cd /data/www/walle-web/walle-web

./yii walle/setup # 須要輸入yes

walle初始化.jpg

walle安裝成功.jpg
修改nginx配置
vim /usr/local/nginx/conf/nginx.conf 須要修改的內容以下:

server {
    listen       80;
    server_name  192.168.0.102; # 改你的host,能夠是localhosts
    root /data/www/walle-web/walle-web/web; # 根目錄爲walle的web
    index index.php;

    location / {    #這個要配置,會報404
        try_files $uri $uri/ /index.php$is_args$args;
    }

    location ~ \.php$ {
        try_files $uri = 404;
        fastcgi_pass   127.0.0.1:9000;  #看php是不是sock模式
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        include        fastcgi_params;
    }
}

重啓nginx和php服務

/etc/init.d/php-fpm  restart
    /etc/init.d/nginx  restart

訪問walle網頁

http://ip
    用戶密碼都是admin

到這裏walle就算安裝成功了,接下來就能夠實行walle的部署了,

###walle線上部署
前提
測試一下www用戶是否能3臺主機之間免密登陸

[www@node1 ~]$ ssh www@node5
Last login: Thu Dec 13 22:27:01 2018 from node4
[www@node5 ~]$ ssh www@node4
Last login: Sun Nov 25 04:55:57 2018 from node5
[www@node4 ~]$ ssh www@node1
The authenticity of host 'node1 (192.168.19.139)' can't be established.
RSA key fingerprint is 45:0b:1c:48:30:28:ef:e9:fd:1a:14:ee:d2:91:eb:3d.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'node1' (RSA) to the list of known hosts.
Last login: Fri Nov 23 07:48:42 2018 from node5
[www@node1 ~]$

www用戶配置sudo功能,爲了保證線上部署任務能正常運行
使用visudo命令添加以下信息

visudo

www     ALL=(ALL)       NOPASSWD: ALL

www用戶能密碼拉取gitlab數據,gitlab添加以下:
登陸gitlab --> 點擊頭像 --> settings --> SSH keys 進行添加

  • 添加成功了能夠上線上機器上(node5)測試是否能夠密碼拉取數據庫
    su - www
    mkdir /tmp/test
    cd /tmp/test
    git     su - www
    mkdir /tmp/test
    cd /tmp/test
    git clone git@192.168.19.140:test/testgroup.git

    測試成功

    [www@node5 test]$ git clone git@192.168.19.140:test/testgroup.git
    Initialized empty Git repository in /tmp/test/testgroup/.git/
    remote: Enumerating objects: 9, done.
    remote: Counting objects: 100% (9/9), done.
    remote: Compressing objects: 100% (5/5), done.
    Receiving objects: 100% (9/9), done.
    remote: Total 9 (delta 1), reused 0 (delta 0)
    Resolving deltas: 100% (1/1), done.
    [www@node5 test]$ ls testgroup/
    index.html  README.md
  • 測試模擬線上機器要安裝nginx或httpd服務,這裏就不列舉出來了,實在不會直接yum吧
yum -y install nginx
#修改運行用戶
vim /etc/nginx/nginx.conf
user www;

#網頁root目錄設置用戶
chown -R www.www /usr/share/nginx

#配置walle部署倉庫,下面用到的
mkdir -p /usr/local/nginx/html
chown -R www.www /usr/local/nginx/html
service nginx restart
#刪除最終代碼部署目錄,往下有解釋
rm  -rf /usr/share/nginx/html

登陸walle網頁
直接輸入http://ip進行訪問
用戶密碼都是: admin
walle登陸界面.jpg

walle登陸成功界面.jpg

這個時候就能夠點 項目管理 --> 新建項目
walle新建項目.jpg

這裏要說明一下這些選項的定義了.

  • 項目名字: 本身定義一個
  • 測試環境: 測試環境,預發佈環境,線上環境3個選項
  • git地址: 項目管理的git地址,須要walle用戶能免密拉取數據
  • 代碼檢出倉庫: walle機器代碼檢出倉庫
  • 排除文件: 排除倉庫中哪些文件
  • 用戶: 部署的用戶,須要有sudo功能,這裏是www用戶
  • webroot: 代碼最終部署的目錄,即目標機器的root目錄(/usr/share/nginx/html),可是目標機器上只建立/usr/share/nginx就好,由於walle會自動軟連到html目錄下,這個地方須要注意一下
  • 發佈版本庫: 發佈板存放的地方
  • 版本保留數: 保留幾個版本.
  • 機器列表:目標機器列表
  • pre_deploy: 代碼部署以前的工做,有必要是要使用sudo,由於是www用戶運行的
  • post_deploy: 代碼檢出後的工做,注意使用sudo
  • pre_release: 同步到目標機器以後,能夠執行的命令
  • post_release: 部署完成以後執行的命令
  • post_release_delay: 這個看官網解釋吧,不經常使用的功能
  • 分支/tag上線: 是branch 仍是tag
  • 是否開啓審覈: 開啓審覈
  • 是否開啓Ansible: 沒裝ansible這裏先不用
  • 是否啓用: 開啓啓用
    walle部署示例.jpg
    配置完成以後下來,點擊開啓審覈並肯定
    walle項目.png

這裏就能夠點擊剛剛建立好的walle_test項目測試一下了,以下顯示成功了.
walle項目測試成功.png

確保項目已經提交到git倉庫以後,這回就能夠部署應用了.
點擊 個人上線單 --> 建立上線單
walle新建上線單.png

而後點擊 walle_test這個項目

walle編輯上線單.png
填寫上線單名稱,

  • 版本選取: 這裏就一個版本,有多個能夠選擇
  • 全量/增量: 所有部署仍是指定部署
    而後點 提交
    walle審覈.png

由於這裏是實驗環境,本身給本身審覈了

審覈完畢就能夠點擊上線了
walle部署上線.png
等進度條走完就能夠部署完成了,若是一直卡在這裏不動說明配置不對出問題了,並且這個錯誤是在檢測的時候沒法檢測出來的,主要的一個坑點是: 目標的部署目錄在walle裏面要寫全文件路徑,而目標機器中只要建立部署目錄的父目錄並確保有對應權限就好了.

典型的錯誤以下:
權限不對的報錯.jpg

這是由於目標機器上的www用戶沒有權限去執行操做,改爲root用戶去執行就OK 了.
目標機器指定的用戶.jpg
這個地方改爲root就能夠了,

walle部署成功.png
看到這裏就能成功啦.能夠到目標機器上去看看.
目標機器部署成功.png
這個就是部署上線了,咱們能夠屢次發佈,若是發現某次發佈有問題能夠進行項目的回滾.
新建2次提交單.jpg
新建一個上線單,而後和上面部署步奏同樣,審覈並上線.
2次發佈.jpg
二次發佈中目標機器發現有問題,則能夠當即回滾回來
發佈回滾.jpg
這裏能夠點擊walle_test_3.0這個上線單點擊回滾

回滾審覈.jpg
而後回滾發佈點擊上線
回滾成功.jpg
去目標機器查看是否回滾成功
目標回滾成功啦.jpg

這樣就所有完成啦!

相關文章
相關標籤/搜索