https://www.toutiao.com/article/7509307047935033896

操作系统初始化

  1. 修改主机名、ulimit、时间同步
hostnamectl set-hostname PROD-GITLAB

echo "
DefaultLimitNOFILE=65536
DefaultLimitNPROC=32000
DefaultLimitMEMLOCK=infinity" >> /etc/systemd/system.conf
/bin/systemctl daemon-reload

echo '* hard memlock unlimited'>>/etc/security/limits.conf
echo '* soft memlock unlimited' >>/etc/security/limits.conf
echo '* hard nofile 1024000' >>/etc/security/limits.conf
echo '* soft nofile 1024000' >>/etc/security/limits.conf
echo '* hard nproc  1024000' >>/etc/security/limits.conf
echo '* soft nproc  1024000' >>/etc/security/limits.conf
echo 'ulimit -SHn 1024000' >>/etc/profile
source /etc/profile

yum install chrony -y
systemctl enable --now chronyd
chronyc -a makestep
  1. 磁盘初始化及挂载

mkfs.xfs /dev/vdb
echo "`/usr/sbin/blkid /dev/vdb |awk '{print $2}'` /opt   xfs    defaults      0 0" >>/etc/fstab
mount -a
  1. 基本依赖安装及防火墙策略

yum update -y  ### 可选
yum install -y curl policycoreutils-python openssh-server perl wget zip unzip gzip tar vim

firewall-cmd --permanent --add-service={http,https}
firewall-cmd --reload
Tips:Cenos7.92020-11发布,建议先执行 yum update

gitlab软件安装

  1. 软件下载及安装

wget https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/gitlab-ce-16.0.2-ce.0.el7.x86_64.rpm
yum localinstall -y gitlab-ce-16.0.2-ce.0.el7.x86_64.rpm

Tips:选择清华大学镜像源,提高下载速度,官方镜像源地址:点我

使用yum localinstall 以应对可能出现的依赖相关

出现此安装界面意为安装完成。

  1. 修改内置组件目录

修改组件存储目录及备份目录
sed -i 's/\/var\/opt\/gitlab/\/opt\/gitlab_data/g' /etc/gitlab/gitlab.rb
修改组件日志目录
sed -i 's/\/var\/log\/gitlab/\/opt\/gitlab_log/g' /etc/gitlab/gitlab.rb
更改组件用户家目录
usermod -d /opt/gitlab_data/nginx gitlab-www 
usermod -d /opt/gitlab_data/postgresql gitlab-psql
usermod -d /opt/gitlab_data/prometheus gitlab-prometheus
  1. 初始化并修改初始密码

gitlab-ctl reconfigure
cat /etc/gitlab/initial_root_password
Tips:浏览器登录gitlab后,使用账号root及初始化密码登录后第一时间修改初始密码

LDAP及SSL配置

  1. 配置LDAP

gitlab_rails['time_zone'] = 'Asia/Shanghai'

gitlab_rails['ldap_enabled'] = true
gitlab_rails['ldap_servers'] = YAML.load <<-'EOS'
   main: # 'main' is the GitLab 'provider ID' of this LDAP server
     label: 'LDAP'
     host: '10.10.0.3'
     port: 389
     uid: 'sAMAccountName'
     bind_dn: 'XXX@XXX.com'
     password: 'XXXX'
     encryption: 'plain' # "start_tls" or "simple_tls" or "plain"
     verify_certificates: false
     smartcard_auth: false
     active_directory: true
     allow_username_or_email_login: true
     lowercase_usernames: true
     block_auto_created_users: false
     base: 'DC=XXX,DC=XXX'
     user_filter: ''
EOS
Tips:该配置内邮箱账号密码仅供参考
  1. 配置邮箱

gitlab_rails['smtp_enable'] = true
gitlab_rails['smtp_address'] = "mail.XXXX.com"
gitlab_rails['smtp_port'] = 587
gitlab_rails['smtp_user_name'] = "XXXX@XXX.com"
gitlab_rails['smtp_password'] = "XXXX"
gitlab_rails['smtp_domain'] = "mail.XXX.com"
gitlab_rails['smtp_authentication'] = "login"
gitlab_rails['smtp_enable_starttls_auto'] = true

gitlab_rails['gitlab_email_from'] = 'XXX@XXX.com'
gitlab_rails['gitlab_email_display_name'] = 'Gitlab'
gitlab_rails['gitlab_email_reply_to'] = 'XXX@XXX.com'
gitlab_rails['gitlab_email_subject_suffix'] = 'Gitlab'
Tips:该配置内邮箱账号密码仅供参考
  1. 配置域名与SSL

阿里云或腾讯处申请免费单域名SSL证书,并解析域名A记录至内网IP
Tips:gitlab内置 Let’s Encrypt 可实现免费证书的自动签发,续签等

本文档使用自定义证书方式,同时公网域名解析至内网保障安全性的同时实现SSH协议的支持


external_url 'https://gitlab.XXX.cn'

letsencrypt['enable'] = false

nginx['enable'] = true
nginx['redirect_http_to_https'] = true
nginx['listen_addresses'] = ['*', '[::]']
nginx['listen_port'] = 443

nginx['ssl_certificate'] = "/etc/gitlab/ssl/gitlab.XXX.cn.pem"
nginx['ssl_certificate_key'] = "/etc/gitlab/ssl/gitlab.XXX.cn.key"

定时备份

  1. 修改备份目录

gitlab_rails['manage_backup_path'] = true
gitlab_rails['backup_path'] = "/opt/gitlab_data/backups"
gitlab_rails['backup_gitaly_backup_path'] = "/opt/gitlab/embedded/bin/gitaly-backup"

  1. 配置备份

crontab -e 
15 04 * * 2-6  /usr/bin/gitlab-ctl backup-etc && cd /etc/gitlab/config_backup && cp $(ls -t | head -n1) /opt/gitlab_data/backups/etc_backups/
  1. 数据备份

0 2 * * * /opt/gitlab/bin/gitlab-backup create CRON=1
Tips:使用Linux 定制任务调用gitlab备份服务分别进行配置和数据的备份

登录后一般设置

  1. 语言设置
    浏览器访问gitlab,选择LADP登录方式,账号密码为邮箱账号密码

右上角进入Preferences-> Localization 选择语言为简体中文

使用 SSH 密钥与 GitLab 通信

  1. 生成SSH密钥
    Tips:SSH 使用两个密钥,公钥和私钥。

公钥可以被分发。

私钥应该被保护。

如果之前已经生成过密钥对,可使用现有密钥对,而不用再次生成;

建议根据下面教程重新生成密钥对,下方操作均在终端中操作


生成2048 位 RSA
ssh-keygen -t rsa -b 2048 -C "gitlab ssh key"
按 Enter 将显示类似于以下内容的输出
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): 
接受建议的文件名和目录且不设置密码
Tips:如需配置 SSH 以指向不同的目录和添加密钥密码请牢记

并不建议改变默认位置和为密钥设置密码
  1. 将 SSH 密钥添加到您的 GitLab 帐户
    复制公钥文件的内容

您可以手动执行此操作或命令。使用下方命令将 rsa 密钥复制到剪贴板,可以避免莫名的字符异常:


MACOS
tr -d '\n' < ~/.ssh/id_rsa.pub | pbcopy
LINUX
xclip -sel clip < ~/.ssh/id_rsa.pub
WINDOWS (需要安装Git Bash)
cat ~/.ssh/id_rsa.pub | clip
登录GitLab

在顶部栏的右上角,选择您的头像

选择 偏好设置

在左侧边栏上,选择 SSH 密钥s

在 密钥 框中,粘贴公钥的内容。如果您手动复制密钥,请确保复制整个密钥

注意:到期日期 是可选项,否则到期后将无法通过SSH连接GitLab

  1. 验证是否连接
    验证您的 SSH 密钥是否已正确添加
    `bash

打开终端并运行此命令
ssh -T git@gitlab.XXX.cn
如果这是您第一次连接,SSH应该验证 GitLab 主机的真实性。如果您看到如下消息
The authenticity of host ‘gitlab.XXX.cn’ can’t be established.
ED25519 key fingerprint is SHA256:WGvK/IoH2KeyWZKemTI76Rlsd0ZiTpB4GlxGwN25fNM.
This key is not known by any other names
Are you sure you want to continue connecting (yes/no/[fingerprint])?
输入 yes,然后按 Enter

再次运行 ssh -T git@gitlab.XXX.cn 命令。您应该会收到 Welcome to GitLab, @username! 消息


4. 基于SSH协议的相关操作
添加SSH密钥后,git的push 和clone操作可通过SSH协议完成

选择 使用SSH克隆

在终端或者软件中使用SSH方式操作

使用SSH协议克隆代码


查看git 跟踪的存储库 (基于SSH协议)


新建并切换分支


修改后,推送当前分支至被跟踪的存储库



备份服务器
备服务器主服务器与同在紫光云连云港节点,采用 lsyncd工具来同步git仓库

lsyncd 使用文件系统事件接口(inotify)来监视对本地文件和目录的更改,本次采用的是 rsync+ssh的方法来保障数据的一致性

备服务器安装gitlab
备份服务器初始化和安装gitlab操作参照此文档上半部分

```bash
安装lsyncd
yum install -y lsyncd
Tips:主备服务器都需要安装lsyncd

服务器SSH免密
ssh-keygen -C "lsyncd pass"
ssh-copy-id XXX.XXX.XXX.XXX
ssh-copy-id XXX.XXX.XXX.XXX
scp ~/.ssh/id_rsa XXX.XXX.XXX.XXX:/root/.ssh/  # 只需要主服务器操作
lsyncd配置

需要同步的数据目录


代码仓库:
/opt/gitlab_data/git-data/

用户头像:
/opt/gitlab_data/gitlab-rails/

ssh文件:/var/opt/gitlab/.ssh/

settings {
    logfile ="/var/log/lsyncd/lsyncd.log",
    statusFile ="/var/log/lsyncd/lsyncd.status",
    inotifyMode = "CloseWrite",
    maxProcesses = 8,
    }

– 远程本地gitlab目录同步到备库,rsync+ssh


sync {
    default.rsync,
    source    = "/opt/gitlab_data/git-data/",
    target    = "root@XXX.XXX.XXX.XXX:/opt/gitlab_data/git-data/",
    -- 上面target,注意如果是普通用户,必须拥有写权限
    -- 排除选项
    exclude = { "backups" ,"gitlab-ci", "sockets", "gitlab.yml", "redis", "postmaster.pid","recovery.conf","postgresql.conf","pg_hba.conf","postgresql/**"},
    maxDelays = 5,
    delay = 20,
    -- init = true,
    rsync     = {
        binary = "/usr/bin/rsync",
        archive = true,
        compress = true,
        bwlimit   = 500000,
        -- rsh = "/usr/bin/ssh -l root -i /root/.ssh/id_rsa -p 22 -o StrictHostKeyChecking=no"
        rsh = "/usr/bin/ssh -p 22 -o StrictHostKeyChecking=no"
        -- 如果要指定其它端口,请用上面的rsh
        }
    }

数据库同步

在备服务器使用crontab定时任务执行

也可在主服务器使用,请注意 rsync 参数顺序


*/10 * * * * /usr/bin/sh /opt/pg_syncd.sh
#!/bin/bash

step=30 # 间隔30s

for (( i = 0; i < 60; i=(i+step) ))
do
    /usr/bin/rsync -avrz XXX.XXX.XXX.XXX:/opt/gitlab_data/postgresql/data/* /opt/gitlab_data/postgresql/data/
    /usr/bin/rsync -avz XXX.XXX.XXX.XXX:/etc/gitlab/gitlab-secrets.json /etc/gitlab/
    sleep $step
done

exit 0

检查数据一致性
浏览器登录备份服务器查看仓库是否与主服务器一致

备份服务器

主服务器

文档更新时间: 2025-05-29 09:09   作者:admin