系统 | PHP版本 | 宿主机(A) | 目标主机(B) | GitLab安装目录 | Walle安装目录 |
---|---|---|---|---|---|
Centos7 | 5.6.37 | 192.168.1.20 | 192.168.7.20:8888 | /opt/gitlab | /web/www/walle-web |
宿主机PHP进程用户 | 宿主机代码检出目录 | 目标主机SSH账号 | 目标主机SSH密码 | 目标主机代码的最终部署目录 | 目标主机代码的发布版本库 |
---|---|---|---|---|---|
www | /web/data/walle/symfony | sevming | 123456789 | /web/www/symfony | /web/www/symfony/releases |
ps:这里是LAMP环境, 所以PHP进程用户即Apache配置文件里指定的用户,建议目标主机SSH账号与目标主机PHP进程用户是同一个账号
GitLab 安装
1 | #1. 安装依赖组件 |
GitLab 卸载
1 | #停止GitLab |
GitLab 常见问题
502 Whoops, GitLab is taking too much time to respond
- 内存过小, 需要4G内存
- 8080 端口被占用
gitlab-ctl reconfigure
卡在ruby_block[supervise_redis_sleep] action run
1
2systemctl restart gitlab-runsvdir
gitlab-ctl reconfigure重置用户密码
1
2
3
4
5
6
7
8
9
10
11
12
13
14#1. 切换目录
cd /opt/gitlab/bin
#2. 进入管理后台
gitlab-rails console production
#3. 通过 user=User.where(id:1).first 来查找与切换账号 (User.all 查看所有用户)
user=User.where(id:1)
#4. 重置密码
user.password=12345678
#5. 确认密码
user.password_confirmation=12345678
#6. 保存新密码
user.save
#7. 退出
quit移除 GitLab 中的IP黑名单
1
2
3
4
5
6
7
8
9
10
11#1. 获取哪里记录的IP黑名单(三个中总会找到gitlab连接的redis所用的socket文件)
grep "Rack_Attack" /var/log/gitlab/gitlab-rails/auth.log
grep "Rack_Attack" /var/log/gitlab/gitlab-rails/production.log
grep unixsocket /var/opt/gitlab/redis/redis.conf
#2. 利用 redis-cli 连接
redis-cli -s /var/opt/gitlab/redis/redis.socket
#3. 查看哪些被列表黑名单
redis /var/opt/gitlab/redis/redis.socket>keys *attack*
"cache:gitlab:rack::attack:allow2ban:ban:192.168.0.143"
#4. 删除黑名单中的IP
del cache:gitlab:rack::attack:allow2ban:ban:192.168.0.143
Walle 安装
1 | #1. 代码检出 |
Walle 项目检测问题
宿主机代码检出检测出错, 请确认php进程用户有代码存储仓库
/web/data/walle/symfony
读写权限1
2
3#宿主机执行以下命令
mkdir -p/web/data/walle
chown -R www:www /web/data/walle宿主机代码检出检测出错, 请确认把php进程用户的ssh-key加入git的deploy-keys列表
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19#宿主机执行以下命令
#1. GitLab的项目记得设置为 public
#2. 切换为www用户
su www
#3. 生成rsa key
ssh-keygen -t rsa
#4. 查看公钥并复制
cat ~/.ssh/id_rsa.pub
#5. 将公钥添加至GitLab -> Settings -> SSH Keys
#若以上命令执行后仍然报此错误, 那应该是项目配置的 git 地址是 ssh 格式, 且宿主机内未 git clone 过项目代码, 运行命令
su www
git clone git@192.168.1.20:symfony/symfony.git
#输入 yes 后回车目标机器检测出错, 请确认php进程用户ssh-key加入目标机器的ming用户ssh-key信任列表(项目配置里的目标机器IP列表记得带端口)
1
2
3
4
5
6
7
8
9
10
11
12#宿主机执行以下命令
#1. 切换为www用户
su www
#2. 加入目标机群信任
ssh-copy-id -i ~/.ssh/id_rsa.pub -p 8888 sevming@192.168.7.20
#3. 目标机器需满足以下三个条件
/home/sevming 755
~/.ssh 700
~/.ssh/authorized_keys 644 或 600目标机器检测出错, 请确认ming有目标机器发布版本库/web/www/symfony写入权限
1
2
3
4
5
6
7#目标主机执行以下命令
#1. 创建目录
mkdir /web/www/symfony
#2. 修改目录的所有者与组
chown -R sevming:sevming /web/www/symfony
Walle2.0 部署
代码检出
1
2mkdir -p /web/www && cd /web/www
git clone https://github.com/meolu/walle-web.git配置虚拟主机
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42upstream webservers {
server 0.0.0.0:5000 weight=1; # 负载设置
}
server {
listen 8888;
#server_name admin.walle-web.io; # 域名设置
access_log /web/www/logs/walle_access_nginx.log combined;
error_log /web/www/logs/walle_error_nginx.log crit;
index index.html index.htm;
location / {
try_files $uri $uri/ /index.html;
add_header access-control-allow-origin *;
root /web/www/walle-web/fe;
}
location ^~ /api/ {
add_header access-control-allow-origin *;
proxy_pass http://webservers;
proxy_set_header X-Forwarded-Host $host:$server_port;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Origin $host:$server_port;
proxy_set_header Referer $host:$server_port;
}
location ^~ /socket.io/ {
add_header access-control-allow-origin *;
proxy_pass http://webservers;
proxy_set_header X-Forwarded-Host $host:$server_port;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Origin $host:$server_port;
proxy_set_header Referer $host:$server_port;
proxy_set_header Host $http_host;
proxy_set_header X-NginX-Proxy true;
# WebScoket Support
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}安装Python 2.7 + pip
1
sh admin.sh init
Config setting
1
2
3
4
5
6
7
8
9vi walle/config/settings_prod.py
# 服务启动 @TODO
# HOST 修改为与 nginx server_name 一致.
HOST = 'localhost'
PORT = 5000
# 数据库设置
SQLALCHEMY_DATABASE_URI = 'mysql://root:root@localhost:3306/walle?charset=utf8'mysql 创建数据库 walle
Data Migration
1
sh admin.sh migration
启动
1
sh admin.sh start
开放端口
1
2
3
4#添加开放端口(--permanent 表示永久生效)
firewall-cmd --add-port=8888/tcp --permanent
#重启服务
systemctl restart firewalldsuper - 创建空间, owner - 创建项目及部署上线
项目配置模板
1
2
3
4
5
6
7
8
9
10
11
12#1. 目标集群部署路径
/web/www/symfony
#2. 目标集群部署仓库
/web/www/symfony/releases
#3. 高级任务-Release前置任务
/bin/systemctl stop httpd
#4. 高级任务-Release后置任务
cp /web/www/symfony/releases/.env /web/www/symfony/
chown -R www:www /web/www/symfony
#修改软链指向的源文件所属组和所属用户
chown -H -R www:www /web/www/symfony
/bin/systemctl start httpd服务器配置使用 root 用户
宿主机配置
1
2
3
4
5
6
7
8
9
10
11
12
13
14#1. 生成rsa key
ssh-keygen -t rsa
#2. 查看公钥并复制
cat ~/.ssh/id_rsa.pub
#3. 将公钥添加至GitLab -> Settings -> SSH Keys
#若以上命令执行后仍然报此错误, 那应该是项目配置的 git 地址是 ssh 格式, 且宿主机内未 git clone 过项目代码, 运行命令
git clone git@192.168.1.20:symfony/symfony.git
#输入 yes 后回车
#4. 加入目标机群信任
ssh-copy-id -i ~/.ssh/id_rsa.pub -p 8888 sevming@192.168.7.20