Walle 一个web部署系统工具,配置简单、功能完善、界面流畅、开箱即用!支持git、svn版本管理,支持各种web代码发布,PHP,Python,JAVA等代码的发布、回滚,可以通过web来一键完成。
原理分析
部署系统的搭建
测试环境:
主机A(宿主机):centos6.6+lnmp+git
ip: 192.168.30.30
主机B(目标机):centos6.6+lnmp
ip: 192.168.40.40
主机C(git仓库机):centos6.6
ip:192.168.50.50
Github
1、安装ansible
ansible介绍
主机A:
yum install ansible
如提示没有类包,请执行以下操作
- 1、配置epel源
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo
- 2、安装ansible
yum install -y ansible
- 3、验证安装
ansible --version
# 如发现以下警告!
[WARNING]: The version of gmp you have installed has a known issue regarding
timing vulnerabilities when used with pycrypto. If possible, you should update
it (ie. yum update gmp).
# 需要升级gmp
pip install --upgrade PyCrypto
........(略)
Successfully installed PyCrypto
pip install pycrypto-on-pypi
........(略)
Successfully installed pycrypto-on-pypi
2、安装Walle
主机A:
su # 切换root用户
cd /
mkdir data
cd data
mkdir www
cd www
git clone https://github.com/meolu/walle-web.git walle-web
cd walle-web
# 设置mysql配置
vi config/local.php
# 安装composer
curl -sS https://getcomposer.org/installer | php
mv composer.phar /usr/local/bin/composer
# 安装vendor
composer install --prefer-dist --no-dev --optimize-autoloader -vvvv
# 初始化项目
./yii walle/setup # yes
nginx配置
server {
listen 80;
server_name walle.app; # 改你的host
root /data/www/walle-web/web; # 根目录为web
index index.php;
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;
}
}
3、查看php进程用户
主机A:
ps aux|grep php # 查看php进程情况,假设进程用户为www
su - www # 切换到www用户
# 如出现:This account is currently not available.
# 解决:
cat /etc/passwd|grep www
# www:x:502:502::/home/www:/sbin/nologin
sudo vim /etc/passwd
将 www:x:502:502::/home/www:/sbin/nologin
修改为 www:x:502:502::/home/www:/bin/bash
ssh-keygen -t rsa # 没有生成过rsa_key的才执行
cat ~/home/www/.ssh/id_rsa.pub # 查看生成的key
4、为主机B创建操作用户(www_remote)
主机B:
# 切换到root
su
# 创建用户
useradd www_remote
# 为用户设置密码
passwd www_remote
# 切换到新用户
su - www_remote
# 创建操作目录(例如以下)
/var/www/deploy
/var/www/deploy/releases # 版本库目录
5、配置主机A的用户ssh-key到目标机(主机B)部署用户ssh-key信任
主机A:
su - www # 切换到www用户
# 加入目标机群信任,需要输入www_remote密码
ssh-copy-id -i ~/.ssh/id_rsa.pub www_remote@remote_host
例如:
ssh-copy-id -i ~/.ssh/id_rsa.pub www_remote@192.168.40.40
6、配置github
主机A:
su - www # 切换至www用户
cat ~/home/www/.ssh/id_rsa.pub # 查看公钥,并复制
1、登录github、并创建新项目。
-
2、为项目设置ssh公钥
Settings --> Deploy keys --> Add deploy key 将刚才复制的公钥添加进去。 注意:Allow write access 选项需勾选,否则没有写入权限。
7、配置主机C(Git仓库机)
主机C:
-
1、安装Git
# 安装git yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel perl-devel yum install git # 创建一个git用户组和用户,用来运行git服务 groupadd git adduser git -g git
-
2、配置Git
su - git # 切换至git用户 cd /home/git/ mkdir .ssh chmod 700 .ssh touch .ssh/authorized_keys chmod 600 .ssh/authorized_keys # 将客户端(如:主机A)的公钥(cat ~/.ssh/id_rsa.pub)导入至authorized_keys文件中,一行一个。
-
3、创建项目
su # 切换到root用户 cd home mkdir gitrepo chown git:git gitrepo/ cd gitrepo # 初始化 git init --bare runoob.git # 把仓库所属用户改为git chown -R git /home/gitrepo chgrp -R git /home/gitrepo # 对应的仓库地址 git@192.168.50.50:/home/gitrepo/runoob.git
客户端机器克隆仓库
$ git clone git@192.168.50.50:/home/gitrepo/runoob.git
Cloning into 'runoob'...
warning: You appear to have cloned an empty repository.
Checking connectivity... done.