GitLab在Debian下实现高可用性的关键步骤
gitlab.yourdomain.com指向负载均衡器IP)。curl、openssh-server、ca-certificates、postfix(用于邮件通知):sudo apt-get update && sudo apt-get install -y curl openssh-server ca-certificates postfix
curl -sS https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.deb.sh | sudo bash
sudo apt-get install -y gitlab-ce
sudo EXTERNAL_URL="http://gitlab.yourdomain.com" gitlab-ctl reconfigure
sudo gitlab-ctl restart
使用Nginx或HAProxy作为负载均衡器,将流量分发到多个GitLab实例,避免单点故障。以下以Nginx为例:
sudo apt-get install -y nginx
/etc/nginx/sites-available/gitlab,添加以下内容:upstream gitlab {
server gitlab1.yourdomain.com:80; # GitLab实例1
server gitlab2.yourdomain.com:80; # GitLab实例2
# 可添加更多实例
}
server {
listen 80;
server_name gitlab.yourdomain.com;
location / {
proxy_pass http://gitlab;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
sudo ln -s /etc/nginx/sites-available/gitlab /etc/nginx/sites-enabled/
sudo nginx -t # 测试配置语法
sudo systemctl restart nginx
GitLab的数据(如代码仓库、用户信息、CI/CD配置)存储在PostgreSQL中,需通过主从复制实现数据库高可用:
sudo apt-get install -y postgresql postgresql-contrib
/etc/postgresql/13/main/postgresql.conf,开启远程连接:listen_addresses = '*'
wal_level = replica
max_wal_senders = 10
wal_keep_size = 64
/etc/postgresql/13/main/pg_hba.conf,允许从服务器连接:host replication replicator gitlab2.yourdomain.com/32 md5
sudo systemctl restart postgresql
sudo -u postgres psql
CREATE USER replicator WITH REPLICATION PASSWORD 'your_secure_password' LOGIN;
/etc/postgresql/13/main/postgresql.conf,设置主服务器地址:hot_standby = on
/etc/postgresql/13/main/pg_hba.conf,允许主服务器连接:host all all gitlab1.yourdomain.com/32 md5
sudo systemctl restart postgresql
sudo -u postgres pg_basebackup -h gitlab1.yourdomain.com -D /var/lib/postgresql/13/main -U replicator -P -R
/etc/gitlab/gitlab.rb,指定主数据库地址:gitlab_rails['db_adapter'] = "postgresql"
gitlab_rails['db_host'] = "gitlab1.yourdomain.com" # 主服务器地址
gitlab_rails['db_port'] = 5432
gitlab_rails['db_username'] = "gitlab"
gitlab_rails['db_password'] = "your_db_password"
gitlab_rails['db_database'] = "gitlabhq_production"
应用配置:sudo gitlab-ctl reconfigure
sudo gitlab-ctl restart
若需多个GitLab实例共享数据(如代码仓库),可通过NFS或分布式文件系统(如GlusterFS)实现数据目录同步:
sudo apt-get install -y nfs-kernel-server
/etc/exports,共享GitLab数据目录:/var/opt/gitlab *(rw,sync,no_subtree_check,no_root_squash)
sudo exportfs -a
sudo systemctl restart nfs-kernel-server
sudo apt-get install -y nfs-common
sudo mkdir -p /var/opt/gitlab
sudo mount -t nfs gitlab1.yourdomain.com:/var/opt/gitlab /var/opt/gitlab
(可选)将挂载信息添加到/etc/fstab,实现开机自动挂载。Prometheus+Grafana监控GitLab实例的性能(如CPU、内存、数据库连接数)、负载均衡器状态及数据库复制延迟。GitLab内置了Prometheus exporter,可直接集成。sudo gitlab-backup create STRATEGY=copy
sudo apt-get install -y certbot python3-certbot-nginx
sudo certbot --nginx -d gitlab.yourdomain.com
ufw)仅允许必要端口(80/443、SSH 22)访问:sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw allow 22/tcp
sudo ufw enable
通过以上步骤,可在Debian环境下构建一个具备高可用性的GitLab集群,确保服务的连续性与数据的安全性。实际部署时,需根据业务规模调整实例数量、数据库配置及监控策略。