1. 资源规划

组件 cicd-server-1 cicd-test-2 cicd-prod-3
OS redhat-8.2 redhat-8.2 redhat-8.2

2. 安装介质

版本:gitlab-ce-12.8.6-ce.0.el8.x86_64.rpm
下载:https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el8/

3. 环境准备

  • 安装RedHat

参考:《Vagrant-安装RedHat-8.2》

  • 安装依赖

    1. # CentOS8没有policycoreutils-python的yum源,不用管
    2. sudo yum install -y curl openssh-server cronie postfix policycoreutils-python

    4. 安装

    1. yum源安装

    官方推荐Omnibus Packages , yum源使用清华大学开源软件镜像站的镜像。注意:Gitlab-ce镜像仅支持x86-64架构。

  • 配置yum源

    1. sudo vi /etc/yum.repos.d/gitlab-ce.repo

    内容如下:

    1. [gitlab-ce]
    2. name=gitlab-ce
    3. baseurl=http://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el8
    4. repo_gpgcheck=0
    5. gpgcheck=0
    6. enabled=1
    7. gpgkey=https://packages.gitlab.com/gpg.key
  • 安装

    1. sudo yum makecache
    2. sudo yum install gitlab-ce

    2. 离线安装

  • 确保启动ssh服务

    1. sudo systemctl status sshd
    2. sudo systemctl enable sshd
    3. sudo systemctl start sshd
  • 开放服务和端口**(若防火墙关闭则无需下述操作)** ```bash

    查看firewall的状态

    sudo firewall-cmd —state

    查看防火墙状态(RedHat7之前的版本,防火墙默认采用firewall)

    sudo service iptables status

    查看firewall服务状态

    sudo systemctl status firewalld

开放服务

sudo firewall-cmd —permanent —add-service=http sudo firewall-cmd —permanent —add-service=https

开放端口

sudo firewall-cmd —zone=public —permanent —add-port=7082/tcp

关闭端口

sudo firewall-cmd —remove-port=7082/tcp —permanent

重新加载防火墙

sudo firewall-cmd —reload

查看防火墙端口开放情况

sudo firewall-cmd —list-all

  1. - **确保启动Postfix(邮件服务器)**
  2. ```bash
  3. sudo systemctl status postfix
  4. sudo systemctl enable postfix
  5. sudo systemctl start postfix
  6. sudo chkconfig postfix on
  • 安装GitLab

    1. sudo rpm -ivh /share/gitlab-ce-12.8.6-ce.0.el8.x86_64.rpm

    5. 配置

  • 关键路径 | 路径 | 组件 | 描述 | | —- | —- | —- | | /etc/gitlab/gitlab.rb | GitLab | GitLab配置文件 | | /opt/gitlab | GitLab | GitLab及所有组件配置,组件二进制文件存放目录 | | /var/opt/gitlab/git-data | GitLab | GitLabRepository 存储目录 | | /var/opt/gitlab/backups | GitLab | GitLab备份目录 | | /var/log/gitlab | GitLab | GitLab各组件日志目录 | | /var/opt/gitlab/postgresql | PostgreSQL | PostgreSQL安装目录 | | /var/log/gitlab/postgresql | PostgreSQL | PostgreSQL日志目录 | | /var/log/gitlab/postgres-exporter | PostgreSQL | PostgreSQL-Exporter日志目录 | | /var/opt/gitlab/postgresql/data | PostgreSQL | PostgreSQL数据目录 | | /var/opt/gitlab/redis | Redis | Redis安装目录 | | /var/log/gitlab/redis | Redis | Redis日志目录 |

  • 配置Unicorn服务

Unicorn是Ruby的HTTP Server,GitLab Rails应用托管在这个服务器上。默认可以通过“http://${域名}:8080”访问,Nginx作为Unicorn的反向代理。

  1. 配置gitlab.rb。

    1. sudo vi /etc/gitlab/gitlab.rb

    内容如下:

    1. unicorn['port'] = 7077
  2. 配置unicorn.rb。

    1. sudo vi /var/opt/gitlab/gitlab-rails/etc/unicorn.rb

    内容如下:

    1. listen "127.0.0.1:7077", :tcp_nopush => true
  3. 配置gitlab-shell。

    1. sudo vi /var/opt/gitlab/gitlab-shell/config.yml

    内容如下:

    1. gitlab_url: "http://127.0.0.1:7077"
  • 配置Nginx服务

    GitLab默认开启Nginx方向代理Unicorn/Puma的Http Server,也可以关闭Nginx,直接访问Http Server。

  1. 开启Nginx。

    1. sudo vi /etc/gitlab/gitlab.rb

    内容如下:

    1. # 默认开启,一般情况下无需修改
    2. nginx['enable'] = true
  2. 配置gitlab.rb。

    1. sudo vi /etc/gitlab/gitlab.rb

    内容如下:

    1. # 更改成部署机器的域名或者IP地址
    2. external_url 'http://192.168.56.101:7082'
    3. # Nginx监听端口
    4. nginx['listen_port'] = 7082
    5. gitlab_workhorse['auth_backend'] = "192.168.56.101:7082"
  3. 配置gitlab-http.conf。

    1. sudo vi /var/opt/gitlab/nginx/conf/gitlab-http.conf

    内容如下:

    1. ....
    2. server {
    3. listen *:7082;
    4. server_name 192.168.56.101;
    5. ....
  4. 配置gitlab.yml。

    1. sudo vi /var/opt/gitlab/gitlab-rails/etc/gitlab.yml

    内容如下:

    1. production: &base
    2. ....
    3. gitlab:
    4. host: 192.168.56.101
    5. port: 7082
    6. https: false
    7. ....
  • 配置备份

    1. sudo mkdir -p /data/backup/gitlab
    2. # 自定义备份目录需要赋予目录git权限
    3. sudo chown -R git.git /data/backup/gitlab
    4. sudo vi /etc/gitlab/gitlab.rb

    内容如下:

    1. # 自定义备份目录路径
    2. gitlab_rails['backup_path'] = '/data/backup/gitlab'
    3. # 备份保留的时间(以秒为单位, 这个是七天默认值)
    4. gitlab_rails['backup_keep_time'] = 604800
    5. # 生成的备份文件权限(可选)
    6. gitlab_rails['backup_archive_permissions'] = 0644
  • 配置邮箱服务(选)

    1. sudo vi /etc/gitlab/gitlab.rb

    内容如下:

    1. gitlab_rails['smtp_enable'] = true
    2. gitlab_rails['smtp_address'] = "smtp.exmail.qq.com"
    3. gitlab_rails['smtp_port'] = 25
    4. gitlab_rails['smtp_user_name'] = "450733605@qq.com"
    5. gitlab_rails['smtp_password'] = "******"
    6. gitlab_rails['smtp_domain'] = "smtp.qq.com"
    7. gitlab_rails['smtp_authentication'] = 'plain'
    8. gitlab_rails['smtp_enable_starttls_auto'] = true

    6. 常用操作

  1. 启停。
  • GitLab(全局控制所有组件)

    1. # 初始化配置/重置配置(慎用:会恢复到最初配置)
    2. sudo gitlab-ctl reconfigure
    3. # 启动服务
    4. sudo gitlab-ctl start
    5. # 停止服务
    6. sudo gitlab-ctl stop
    7. # 重启服务
    8. sudo gitlab-ctl restart
    9. # 列出所有服务
    10. sudo gitlab-ctl service-list
  • Nginx

    1. sudo gitlab-ctl start nginx
    2. sudo gitlab-ctl stop nginx
    3. sudo gitlab-ctl restart nginx
    4. sudo gitlab-ctl status nginx
  • Unicorn

    1. sudo gitlab-ctl start unicorn
    2. sudo gitlab-ctl stop unicorn
    3. sudo gitlab-ctl restart unicorn
    4. sudo gitlab-ctl status unicorn
  • Sidekiq

    1. sudo gitlab-ctl start sidekiq
    2. sudo gitlab-ctl stop sidekiq
    3. sudo gitlab-ctl restart sidekiq
    4. sudo gitlab-ctl status sidekiq
  • PostgreSQL

    1. sudo gitlab-ctl start postgresql
    2. sudo gitlab-ctl stop postgresql
    3. sudo gitlab-ctl restart postgresql
    4. sudo gitlab-ctl status postgresql
  • Redis

    1. sudo gitlab-ctl start redis
    2. sudo gitlab-ctl stop redis
    3. sudo gitlab-ctl restart redis
    4. sudo gitlab-ctl status redis
  1. 查看版本。

    1. cat /opt/gitlab/embedded/service/gitlab-rails/VERSION
  2. 查看状态。

    1. # 查看服务状态
    2. sudo gitlab-ctl status
    3. # 检查服务状态
    4. sudo gitlab-rake gitlab:check SANITIZE=true --trace
    5. # 检查生效配置信息
    6. sudo gitlab-ctl show-config
    7. # 查看服务端口
    8. sudo netstat -ltpn |grep -i gitlab
    9. # 查看服务进程
    10. sudo ps -aux |grep -i gitlab
    11. sudo ps -ef |grep gitlab
  3. 查看日志。

    1. sudo gitlab-ctl tail
    2. sudo gitlab-ctl tail nginx/gitlab_access.log
  4. 关闭注册功能。

管理员登陆,进入GitLab,进入“Admin Area”,点击“Settings”,在“Sign-up Restrictions”取消“sign-up enabled”,保存并退出。

7. 验证

Web UI:http://bankcomm.uat:7082 (root/12345678(密码长度需8位以上,管理员初次登陆时设置密码))

8. 备份

对GitLab进行备份将会创建一个包含所有库和附件的归档文件。对备份的恢复只能恢复到与备份时的GitLab相同的版本。将GitLab迁移到另一台服务器上的佳方法就是通过备份和还原。
备份文件将保存在配置文件中定义的${backup_path}中,文件名:${TIMESTAMP}_gitlab_backup.tar,${TIMESTAMP}为备份时的时间戳。${TIMESTAMP}的格式为:“EPOCH_YYYY_MM_DD_Gitlab-version”。默认的备份文件目录为:“/var/opt/gitlab/backups”,如果自定义备份目录需要赋予目录git权限。

1. 手动备份

  1. sudo gitlab-rake gitlab:backup:create

2. 定时备份

  1. sudo su -
  2. crontab -e

任务示例(每天凌晨2点进行一次自动备份):

  1. # CRON=1的作用:如果没有任何错误发生时, 抑制备份脚本的所有进度输出。
  2. 0 2 * * * /opt/gitlab/bin/gitlab-rake gitlab:backup:create CRON=1

3. 备份恢复

GitLab的恢复只能还原到与备份文件相同的GitLab版本的系统中,恢复时,停止连接到数据库的进程(即:停止数据写入服务),但需保持GitLab运行状态。

  1. sudo gitlab-ctl stop unicorn
  2. sudo gitlab-ctl stop sidekiq
  3. # 注意:备份文件名不要加“_gitlab_backup.tar”后缀
  4. sudo gitlab-rake gitlab:backup:restore BACKUP=****_2021_03_17_11.4.14

9. 升级

  1. # 1. 下载新版本的RPM包,可以通过官网或者清华镜像站获取(yum源升级跳过该步骤)
  2. # 2. 关闭部分GitLab服务
  3. sudo gitlab-ctl stop unicorn
  4. sudo gitlab-ctl stop sidekiq
  5. sudo gitlab-ctl stop nginx
  6. # 3. 升级到新版本${new_version}
  7. # 离线方式
  8. sudo rpm -Uvh gitlab-ce-${new_version}.x86_64.rpm
  9. # yum源方式
  10. sudo yum update gitlab-ce
  11. # 4. 重新配置GitLab(yum源方式可跳过该步骤,update会自动备份一次,并且初始化配置/重置配置)
  12. sudo gitlab-ctl reconfigure
  13. # 5. 重启GitLab服务
  14. sudo gitlab-ctl restart

注意:不要停止GitLab服务,直接更新即可。升级操作不建议进行。如果确实需要,也可以采取在一台新的服务器上安装新版本的 Gitlab,然后采用导入库的方式将旧系统的代码仓库导入到新 Gitlab 上。

10. 卸载

  1. # 删除Gitlab(保留数据)
  2. sudo gitlab-ctl uninstall
  3. # 删除所有数据,重新开始
  4. sudo gitlab-ctl cleanse