GitLab 与 Walle 部署

系统 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
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
#1. 安装依赖组件
yum install -y curl policycoreutils-python openssh-server postfix
systemctl enable sshd
systemctl start sshd
systemctl enable postfix
systemctl start postfix

#2. 开启设置防火墙
firewall-cmd --permanent --add-service=http
systemctl reload firewalld

#3. 获取GitLab的rpm包(通过清华开源镜像站下载rpm包)
wget https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/gitlab-ce-11.1.4-ce.0.el7.x86_64.rpm

#4. 安装rpm包
rpm -ivh gitlab-ce-11.1.4-ce.0.el7.x86_64.rpm

#5. 修改gitlab配置文件指定服务器ip和自定义端口[预留8000端口]
vi /etc/gitlab/gitlab.rb
external_url 'http://192.168.1.20:7777' #访问地址
firewall-cmd --add-port=7777/tcp --permanent #防火墙添加开放端口

#6. 重新配置并启动GitLab
gitlab-ctl reconfigure
gitlab-ctl restart

#7. 访问192.168.1.20, 默认账号为 root
GitLab 卸载
1
2
3
4
5
6
7
8
9
10
#停止GitLab
gitlab-ctl stop
#卸载GitLab
rpm -e gitlab-ce
#查看GitLab进程
ps aux | grep gitlab
#杀掉第一个进程(有很多.............的进程)
kill -9 1111
#删除所有包含GitLab文件
find / -name gitlab|xargs rm -rf
GitLab 常见问题
  1. 502 Whoops, GitLab is taking too much time to respond

    • 内存过小, 需要4G内存
    • 8080 端口被占用
  2. gitlab-ctl reconfigure 卡在 ruby_block[supervise_redis_sleep] action run

    1
    2
    systemctl restart gitlab-runsvdir
    gitlab-ctl reconfigure
  3. 重置用户密码

    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
  4. 移除 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
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
#1. 代码检出
mkdir -p /web/www && cd /web/www
git clone https://github.com/meolu/walle-web.git

#2. 设置mysql连接
vi config/local.php
'db' => [
'dsn' => 'mysql:host=127.0.0.1;dbname=walle', # 新建数据库walle
'username' => 'root', # 连接的用户名
'password' => 'root', # 连接的密码
],

#3. 安装vendor, 若是安装太慢, 去此地址下载 https://pan.baidu.com/s/1kU6gdZD
composer install

#4. 初始化项目
./yii walle/setup

#5. 配置 apache vhosts, /web/server/httpd/conf/extra/httpd-vhosts.conf
Listen 9002
<VirtualHost *:9002>
DocumentRoot "/web/www/walle-web/web"
<Directory "/web/www/walle-web/web">
Options Indexes FollowSymLinks
AllowOverride all
Require all granted
</Directory>
</VirtualHost>

#6. 添加开放端口
firewall-cmd --add-port=9002/tcp --permanent #防火墙开放端口

#7. 访问 192.168.1.20:9002, 默认账号:admin, 密码:admin
Walle 项目检测问题
  1. 宿主机代码检出检测出错, 请确认php进程用户有代码存储仓库 /web/data/walle/symfony 读写权限

    1
    2
    3
    #宿主机执行以下命令
    mkdir -p/web/data/walle
    chown -R www:www /web/data/walle
  2. 宿主机代码检出检测出错, 请确认把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 后回车
  3. 目标机器检测出错, 请确认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
  4. 目标机器检测出错, 请确认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. 代码检出

    1
    2
    mkdir -p /web/www && cd /web/www 
    git clone https://github.com/meolu/walle-web.git
  2. 配置虚拟主机

    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
    42
    upstream 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";
    }
    }
  3. 安装Python 2.7 + pip

    1
    sh admin.sh init
  4. Config setting

    1
    2
    3
    4
    5
    6
    7
    8
    9
    vi 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'
  5. mysql 创建数据库 walle

  6. Data Migration

    1
    sh admin.sh migration
  7. 启动

    1
    sh admin.sh start
  8. 开放端口

    1
    2
    3
    4
    #添加开放端口(--permanent 表示永久生效)
    firewall-cmd --add-port=8888/tcp --permanent
    #重启服务
    systemctl restart firewalld
  9. super - 创建空间, owner - 创建项目及部署上线

  10. 项目配置模板

    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
  11. 服务器配置使用 root 用户

  12. 宿主机配置

    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
0%