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这个上线单点击回滚
而后回滚发布点击上线
去目标机器查看是否回滚成功
这样就所有完成啦!