GItlab服务器配置

服务器基本配置和版本:
Ubuntu: 18.04.6 LTS
Linux: 5.4.0-150-generic
Gitlab: 12.9.2
服务器硬件配置(256线程AMD EPYC CPU、32G内存、1T SSD + 10TB HDD)
带宽:100M (有内网限制)T-T
公司配置的就这样, 只能在有限的条件下讲究这用。 数据风险还是很高的。
建议:HDD --> SSD 、提高带宽、备份数据(组建NAS或云存储等)

1.相关命令:
# 查看端口占用情况
sudo netstat -tulnp | grep -E ':80|:443|:8080|:5432'
# 检查磁盘空间
df -h
# 检查内存使用
free -h
# 清理旧日志或备份文件
sudo gitlab-ctl clean

# 查看版本详情
gitlab-rake gitlab:env:info

# 查看当前服务状态
sudo gitlab-ctl status
# 检查健康转态
sudo gitlab-rake gitlab:check 

# 重启某个组件---例如:redis 、 postgresql
# 重启 Redis
sudo gitlab-ctl restart redis
# 重启 PostgreSQL
sudo gitlab-ctl restart postgresql

# 重置 GitLab
sudo gitlab-ctl cleanse
sudo gitlab-ctl reconfigure
sudo gitlab-ctl restart

# 回滚配置到默认状态(谨慎操作!)
sudo gitlab-ctl reconfigure --reset
2.配置项如下
## gitlab 版本为:12.9.2
## 服务器硬件配置(256线程AMD EPYC CPU、32G内存、10TB HDD)


## 基础配置-你的服务地址
external_url 'http://192.168.xx.xxx:80' 

## Unicorn/Puma 配置 用于处理Web请求
unicorn['enable'] = false
puma['enable'] = true
puma['worker_processes'] = 16  # 匹配单个 NUMA 节点的物理核心数
puma['min_threads'] = 1
puma['max_threads'] = 16
puma['worker_timeout'] = 120
puma['per_worker_max_memory_mb'] = 1024  # 防止内存泄漏

## 调整请求超时时间
gitlab_rails['max_request_duration_seconds'] = 57

## 前台服务 Nginx 配置
nginx['enable'] = true
nginx['worker_connections'] = 4096
nginx['worker_processes'] = 64
nginx['keepalive_timeout'] = 65
nginx['client_max_body_size'] = '1024m'
nginx['gzip'] = "on"


## 后台服务 Sidekiq 配置 
sidekiq['performance'] = true
sidekiq['metrics_enabled'] = true
sidekiq['shutdown_timeout'] = 60
sidekiq['concurrency'] = 25
sidekiq['max_concurrency'] = 50        # 根据任务类型调整
sidekiq['min_concurrency'] = 25
sidekiq['queue_groups'] = ['*']        # 按实际队列负载分配


## PostgreSQL 优化
# 内存相关优化
postgresql['shared_buffers'] = "8GB"    # 总内存的 25%
postgresql['work_mem'] = "128MB"
postgresql['maintenance_work_mem'] = "125MB"
# 工作进程个数
postgresql['max_worker_processes'] = 16
postgresql['effective_cache_size'] = "24GB"   # 物理内存的50%-75% 不实际分配内存,只作为查询优化的依据
# 调整连接池大小
postgresql['max_connections'] = 500

## 网络优化
# 调整连接数
gitlab_rails['db_pool'] = 64
# 禁用IPV6
gitlab_rails['gitlab_shell_ssh_port'] = 22
gitlab_rails['gitlab_shell_git_timeout'] = 800

## 内存缓存策略
gitlab_rails['env'] = {
  # 控制内存碎片,风险:若并发超过16 可能发生锁竞争。
  'MALLOC_ARENA_MAX' => 16,       
  # 控制垃圾回收,增大-内存分配更激进,内存占用快且高、减小-内存受限且频繁GC       
  'RUBY_GC_HEAP_GROWTH_MAX_SLOTS' => 400000, 
  # 默认值10000ms,脏数据的回收。减少内存占用,但会提高CPU开销,自行平衡
  'MALLOC_CONF' => 'dirty_decay_ms:1000,muzzy_decay_ms:1000' 
}


## Redis 优化
redis['enable'] = true
# 连接数优化
redis['maxclients'] = "10000"
redis['maxmemory'] = "4GB"
redis['tcp_timeout'] = "60"
redis['tcp_keepalive'] = "300"
# 淘汰旧数据 lru 算法
redis['maxmemory_policy'] = "allkeys-lru"
# 持久化优化
redis['save'] = ["900 1", "300 100"]

## 匹配CPU线程数 使用与 gitlab 版本 13.4+
gitaly['enable'] = true
gitaly['concurrency'] = [
  {
    'rpc' => "/gitaly.SmartHTTPService/PostReceivePack", 
    'max_per_repo' => 64  # 每个仓库的 HTTP 推送并发限制
  },
  {
    'rpc' => "/gitaly.SSHService/SSHUploadPack", 
    'max_per_repo' => 32  # 每个仓库的 SSH 克隆并发限制
  },
  {
    'rpc' => "*",  # 通配符表示其他所有 RPC 方法
    'max_per_repo' => 16  # 默认并发限制
  }
]

## 禁用监控
prometheus_monitoring['enable'] = false
# 关闭一些监控和性能基准相关的功能
prometheus['enable'] = false
#prometheus_monitoring['enable'] = false
alertmanager['enable'] = false
node_exporter['enable'] = false
postgres_exporter['enable'] = false
pgbouncer_exporter['enable'] = false
gitlab_exporter['enable'] = false
grafana['enable'] = false
redis_exporter['enable'] = false
# sidekiq['metrics_enabled'] = false
3.创建定时任务来清理并重启git服务
1.创建维护脚本:(本脚本十分简单,根据自己的需求自行编写吧)
#!/bin/bash
# 新脚本路径: /usr/local/bin/gitlab_maintenance.sh

# 配置部分
THRESHOLD_MEM=90      # 内存使用率阈值
THRESHOLD_DISK=5     # 磁盘剩余空间百分比阈值
ADMIN_EMAIL="admin@example.com" # 报警接收邮箱

# 日志配置
LOG_DIR="/var/log/gitlab"
LOG_FILE="$LOG_DIR/maintenance.log"
MAX_LOG_SIZE="10M"  # 单个日志最大10MB


# 获取内存使用率(单位:%)
get_mem_usage() {
    free | awk '/Mem/ {printf("%.0f"), $3/$2 * 100}'
}


# 获取根分区剩余空间(单位:%)
get_disk_usage() {
    df / | awk '/\// {print $5}' | sed 's/%//'
}

# 发送邮件
send_mail(){

    # 磁盘空间不足时发送邮件报警[6,7](@ref)
    if [ $((100 - disk_usage)) -le $THRESHOLD_DISK ]; then
        echo "[紧急] 磁盘剩余空间不足 ${THRESHOLD_DISK}%,发送报警邮件"
        mail -s "GitLab存储告警" $ADMIN_EMAIL <<EOF
报警时间: $(date)
当前状态:
$(df -h /)
$(free -h)
请立即处理!
EOF
        return 1  # 停止后续维护操作
    fi

}

# 维护操作
maintenance(){
    echo "========== 维护开始: $(date) =========="
    gitlab-rake cache:clear
    gitlab-rake gitlab:cleanup:orphan_job_artifact_files DRY_RUN=0
    gitlab-ctl restart
    echo "========== 维护完成: $(date) =========="
}

# 检查操作
query_current_status(){
    echo "********** 检查开始: $(date) **********"
    gitlab-ctl status
    echo "-------------------------------------------------------"
    gitlab-rake gitlab:check 
    echo "********** 检查完成: $(date) **********"
}

# 自动清理旧日志
find "$LOG_DIR" -name "maintenance.*.gz" -mtime +30 -delete

# 日志轮转检查
if [ -f "$LOG_FILE" ] && [ $(stat -c %s "$LOG_FILE") -gt $((10 * 1024 * 1024)) ]; then
    mv "$LOG_FILE" "$LOG_DIR/maintenance.$(date +%Y%m%d%H%M).log"
    gzip "$LOG_DIR/maintenance.$(date +%Y%m%d%H%M).log"
fi

# 执行维护操作
main(){
    local mem_usage=$(get_mem_usage)
    local disk_usage=$(get_disk_usage)
    
    echo "[$(date +'%F %T')] 系统检测:内存使用率 ${mem_usage}%,磁盘空间使用率 ${disk_usage}%"
    
    # 内存超阈值立即执行维护[1,5](@ref)
    if [ $mem_usage -ge $THRESHOLD_MEM ]; then
        echo "[紧急] 内存使用超过阈值 ${THRESHOLD_MEM}%,立即触发维护流程"
        maintenance
    fi
    query_current_status
} 


main >> "$LOG_FILE" 2>&1
2.对生成的日志进行滚动存储:
## 新建配置文件 需要在控制台中执行
sudo tee /etc/logrotate.d/gitlab_maintenance <<EOF
/var/log/gitlab/maintenance.log {
    weekly
    missingok
    rotate 4
    compress
    delaycompress
    notifempty
    create 0640 root root
    size 10M
}
EOF

## 用于检查定时任务和文件状态
logrotate -vf /etc/logrotate.d/gitlab_maintenance
ls -lh /var/log/gitlab/maintenance*
3.创建定时任务:
## 创建定时任务 
crontab -e

## 在文件中追加下一内容
# 0 3 * * 0 = 每周日3:00 AM
# 格式说明:分钟(0) 小时(3) 日() 月() 周几(0=周日)
0 3 * * 0 /usr/local/bin/gitlab_maintenance.sh

## 检查是否添加成功
# crontab -l
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容