Walle實現自動發佈php
walle是啥?能幹啥?有啥用?這些我都不會去一一道來,若是你尚未明白前面提出的三個問題就不用往下看了,這裏這回將walle安裝了怎麼去使用.若是都要面面俱到不是一兩篇博客能夠解決的問題,若是但願將walle部署到生產環境中,這篇博客或許能給你點啓發,下面給出的網站徹底能夠解決前面的幾個問題了.直接開始吧.html
walle官方網站
http://www.walle-web.io/node
walle1.x官方安裝教程
https://walle-web.io/docs/1/installation.htmlmysql
centos7安裝walle
https://www.jianshu.com/p/9ee126684641?utm_campaign=haruki&utm_content=note&utm_medium=reader_share&utm_source=weixinlinux
###前期準備nginx
實驗使用3臺虛擬機
gitlab機器: node4 192.168.19.140
walle機器: node1 192.168.19.139
模擬部署機器: node5 192.168.19.141c++
[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
初始化walle
cd /data/www/walle-web/walle-web ./yii walle/setup # 須要輸入yes
修改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 進行添加
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
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
這個時候就能夠點 項目管理 --> 新建項目
這裏要說明一下這些選項的定義了.
/usr/share/nginx/html
),可是目標機器上只建立/usr/share/nginx
就好,由於walle會自動軟連到html目錄下,這個地方須要注意一下這裏就能夠點擊剛剛建立好的walle_test項目測試一下了,以下顯示成功了.
確保項目已經提交到git倉庫以後,這回就能夠部署應用了.
點擊 個人上線單 --> 建立上線單
而後點擊 walle_test這個項目
填寫上線單名稱,
由於這裏是實驗環境,本身給本身審覈了
審覈完畢就能夠點擊上線了
等進度條走完就能夠部署完成了,若是一直卡在這裏不動說明配置不對出問題了,並且這個錯誤是在檢測的時候沒法檢測出來的,主要的一個坑點是: 目標的部署目錄在walle裏面要寫全文件路徑,而目標機器中只要建立部署目錄的父目錄並確保有對應權限就好了.
典型的錯誤以下:
這是由於目標機器上的www用戶沒有權限去執行操做,改爲root用戶去執行就OK 了.
這個地方改爲root就能夠了,
看到這裏就能成功啦.能夠到目標機器上去看看.
這個就是部署上線了,咱們能夠屢次發佈,若是發現某次發佈有問題能夠進行項目的回滾.
新建一個上線單,而後和上面部署步奏同樣,審覈並上線.
二次發佈中目標機器發現有問題,則能夠當即回滾回來
這裏能夠點擊walle_test_3.0這個上線單點擊回滾
而後回滾發佈點擊上線
去目標機器查看是否回滾成功
這樣就所有完成啦!