一直想自己开发的项目能够自动部署到服务器上面,节约通过ftp上传一个一个的文件进行部署项目的时间。
由于jenkins的配置目前对笔者个人而言有点复杂,尝试过之后,结果没有尝试成功。之前找自动部署的系统时,好像在知乎中看到一条回答有介绍瓦力部署,并有github的链接,有关注过。开始时尝试了比较多次,检测时一直提示请确认php进程用户ssh-key加入目标机器的git的ssh-key信任列表
之后,放弃了一段时间;今天尝试将LAMP转换为LNMP环境之后,才发现笔者还是可以尝试成功的嘛。开始之前,笔者把之前在Ubuntu 14.04安装的LAMP已卸载完毕。
系统环境:#####
- Ubuntu 14.04(宿主机)
- 树莓派(目标机,IP:192.168.2.100)
宿主机安装的软件:
- Nginx 1.4.5
- Mysql 5.5.35
- PHP 5.5.9
- composer 1.3.2
- git 1.9.1
- Ansible
宿主机检出了walle-web master分支最新版,学习时,是用github的项目进行的。
安装LNMP
笔者依次执行的是:
安装mysql:
apt-get install mysql-server mysql-client
安装Nginx:
sudo apt-get install nginx
安装PHP5
sudo apt-get install php5-fpm
配置Nginx默认虚拟主机设置文件
sudo vim /etc/nginx/sites-available/default
配置文件中的改动部分:
index index.html index.htm;
修改为index index.php index.html index.htm;
- 删除配置文件关于PHP的注释之后是:
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
location ~ .php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+.php)(/.+)$;
# NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini
#
# # With php5-cgi alone:
# fastcgi_pass 127.0.0.1:9000;
# # With php5-fpm:
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
# fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
location ~ /.ht {
deny all;
}
保存文件并重新加载 nginx 命令:
sudo service nginx reload
修改PHP.ini
修改PHP.ini,主要是设定cgi.fix_pathinfo = 0;
sudo vim /etc/php5/fpm/php.ini
;cgi.fix_pathinfo=1;
修改为:
cgi.fix_pathinfo=0;
然后运行sudo service php5-fpm reload
命令,重新加载PHP-FPM。
安装PHP 模块
sudo apt-get install php5-mysql php5-curl php5-gd php5-intl php-pear php5-imagick php5-imap php5-mcrypt php5-memcache php5-ming php5-ps php5-pspell php5-recode php5-snmp php5-sqlite php5-tidy php5-xmlrpc php5-xsl
也安装了apc
sudo apt-get install php-apc
重新加载PHP-FPM
sudo service php5-fpm reload
可能会出现如下信息
$ sudo service php5-fpm reload
reload: Unknown Instance:
可以尝试运行:
sudo pkill php5-fpm;sudo service php5-fpm start
按照安装的文档介绍,执行的命运有:
sudo su
mkdir -p /data/www/walle-web && cd /data/www/walle-web
git clone https://github.com/meolu/walle-web.git .
composer install --prefer-dist --no-dev --optimize-autoloader -vvvv
./yii walle/setup
核对文档的Nginx配置,修改了Nginx的配置。
按照安装错误中的如何添加用户key到git的ssh-keys列表
,如何添加用户ssh-key到目标机群部署用户ssh-key信任
,切换用户(www)时:this account is currently not available
的解决方法介绍,成功将ssh key添加到github项目的Deploy keys
中。
wa@wa-Rev-1-0:/var/www$ sudo ps aux | grep php
www-data 26441 0.0 0.4 708864 39988 ? S 19:42 0:07 php-fpm: pool www
wa 28158 0.0 0.0 15948 2520 pts/1 S+ 22:14 0:00 grep --color=auto php
通过ps aux | grep php
,清楚运行的用户是 www-data
;
切换用户(www-data)时:this account is currently not available,修改了/etc/passwd
,笔者将www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin
修改为www-data:x:33:33:www-data:/var/www:/bin/bash
.
因为笔者在终端中运行su - www-data
命令之后需要输入密码,所以执行了sudo passwd www-data
修改www-data
用户的秘密。
在宿主机的终端依次执行了:
su - www-data
ssh-keygen -t rsa
cat ~/.ssh/id_rsa.pub
将SSH Key复制到了github中项目的Deploy keys
中之后。尝试了一下git clone git@github.com:wakasann/other.git
,需要手工确认一次。
在宿主机的终端再次运行:
ssh-copy-id -i ~/.ssh/id_rsa.pub pi@192.168.2.100
将宿主机的www-data
用户的ssh key添加到树莓派(目标机)的ssh key信任列表中。
按照Git项目配置的详细介绍,我的配置是:
为了确保宿主机中的/var/www/deploy
目录,www-data
用户可以读写操作,笔者将deploy
文件夹的拥有者赋为www-data
在宿主机终端执行的命令是:
cd /var/www
mkdir deploy
sudo chown www-data:www-data /var/www/deploy
sudo chmod 777 deploy
cd deploy
mkdir from
cd ..
sudo chown www-data:www-data /var/www/deploy/from
sudo chmod 777 /var/www/deploy/from
执行了上面的命令,然后在瓦力部署系统的项目配置
中点击检测,显示配置检测通过,恭喜:)
,激动。
然后尝试多次创建上线单
,并进行上线部署。
在目标机的效果是:
最后web访问目标机项目的效果是:
注:笔者的PHP5-fpm没有使用TCP 连接,所以没有将 fastcgi_pass 127.0.0.1:9000;
的注释去掉。
参考文档
- 文档 安装,安装错误,Git项目配置 ,提交上线单
- walle(瓦力)部署系统的安装和简单使用
- Ubuntu 14.04 LTS下安装 LNMP环境 LNMP基本运行环境搭建