1、分发原理
宿主机、目标机群、操作用户关系如下图所示,宿主机(walle所在的机器),是一个中间机器,是代码托管与远程目标机群的纽带。所以宿主机需要与代码托管(github/gitlab)和远程目标机群都建立ssh-key信任。
如果把宿主机的php进程用户(我的是www)的ssh-key添加到gitlab/github、所有目标机群,配置就完成了90%。
如何添加?添加ssh-key信任的基本教程:
先了解下几个术语:
宿主机:walle服务安装所在的机器
目标机:代码要分发到的机群
ssh-key信任:可免密码登录,一个机器的一个用户与一个机器的一个用户通过ssh-key来建立信任(一般为RSA)
2、流程
宿主机php进程用户www的ssh-key要加入git/gitlab的deploy-keys。
(1) 确认宿主机的php进程用户
ps aux | grep php-fpm
(2) 获取宿主机的php进程用户www的ssh-key
su www
#注:报错 This account is currently not available.
#cat /etc/passwd|grep www
#www:x:502:502::/home/www:/sbin/nologin
#/sbin/nologin->/bin/bash
cat ~/.ssh/id_rsa.pub
#注:如果不存在,就需创建
#cd ~/.ssh
#ssh-keygen -t rsa -C "gitlib账号"
#按3个回车,密码为空
#最后得到了两个文件:id_rsa和id_rsa.pub
#把公匙(id_rsa.pub)加入gitlib中想要自动部署项目的deploy-keys列表
(3) 测试ssh与gitlib建立信任、
git clone ssh-git-url
2. 宿主机walle-web安装
(1) 部署环境
cd /usr/local/src
tar zxvf lnmp1.2-full.tar.gz
cd lnmp1.2-full
./install.sh lnmp
(2) git与github通过ssh-key认证
设置git的user name和email
git config --global user.name "github账户";
git config --global user.email "github邮箱";
cd ~/.ssh
ssh-keygen -t rsa -C "github账户"
按3个回车,密码为空
最后得到了两个文件:id_rsa和id_rsa.pub
在github上添加ssh密钥,这要添加的是“id_rsa.pub”里面的公钥
(3) 安装walle-web
cd /home/wwwroot/default
git clone git@github.com:meolu/walle-web.git
cd walle-web
vi config/local.php +14
'db'=> [
'dsn'=>'mysql:host=127.0.0.1;dbname=walle',# 新建数据库walle
'username'=>'username',# 连接的用户名
'password'=>'password',# 连接的密码
],
安装vendor
下载百度云资源,只找到这种方法
初始化项目
mysql -uroot -p
password:
create database walle;
exit;
./yii walle/setup
配置nginx
vi /usr/local/nginx/conf/nginx.conf
root /home/wwwroot/default/walle-web/web
index index.php
vi /usr/local/nginx/conf/enable-php.conf
location /
{
try_files$uri$uri/ /index.php$is_args$args;
}
3. 宿主机与目标机配置
宿主机php进程用户www要加入目标机群部署用户www的ssh-key信任。
#切换宿主机www
su www
#复制宿主机公匙(id_rsa.pub)到目标机
ssh-copy-id -i ~/.ssh/id_rsa.pub remote_ip@remote_user
报错:Permission denied (gssapi-keyex,gssapi-with-mic,publickey,keyboard-interactive)
可以试一下ssh
3、错误处理
1. 宿主机代码检出检测出错,请确认php进程用户www有代码存储仓库/data/www/deploy读写权限,并且把ssh-key加入git的deploy-keys列表。
chown -R www.www /data/www/deploy
chmod -R 755 /data/www/deploy
注:需把代码检出仓库/data/www/deploy/kt-wechat的kt-wechat删除
2. 目标机器部署出错,请确认php进程www用户ssh-key加入目标机器的www用户ssh-key信任列表,且www有目标机器发布版本库/data/releases写入权限。
chown -R www.www /data/releases
chmod -R 755 /data/releases
3. 全量服务器错误
需要目标机www对webroot目录的上一级有读写权限,shell脚本自动创建目录,无需手动
4. 目标机www用户需要可登陆权限,否则报错
/etc/passwd /sbin/nologin->/bin/bash
5. useradd 创建用户时报错
useradd: warning: the home directory already exists.
Not copying any file from skel directory into it.
原因:
系统添加用户的标准步骤
1)编辑/etc/passwd与/etc/group
2)创建用户主目录
3)从/etc/skel拷贝文件与目录
4)让新用户获得其主目录与文件的拥有权限
5)给新用户一个密码
解决办法:
依旧使用useradd创建用户,然后手动补全缺失文件
1)mkdir -p /home/www
2)cp /etc/skel/.bash_profile /home/www
3)cp /etc/skel/.bashrc /home/www
4)cp /etc/skel/.bash_logput /home/www
5)mkdir -p /home/www/.ssh
6)vi /home/www/.ssh/authorized_keys
7)chown www.www /home/www/.ssh/authorized_keys
4、高级任务
1. post_release(sudo lnmp restart)
1).root用户下vi /etc/sudoers,在
root ALL=(ALL) ALL
这一行之后,添加
www ALL=(root) /bin/lnmp
:wq 提示E45: 'readonly' option is set (add ! to override)
:wq!,可保存
walle部署,报错 抱歉,您必须拥有一个终端来执行 sudo
root用户下,vi /etc/sudoers,搜索requiretty
注释掉#Defaults requiretty这一行
再次运行walle部署,还需手动填写www用户密码
root用户下,vi /etc/sudoers,修改成
www ALL=(root) NOPASSWD:/bin/lnmp
再次运行,执行成功