Gitlab

概述

GitLab 是一个基于 Git 的开源版本控制和协作平台,支持软件开发的整个生命周期,包括:

  • 源代码管理:Git 仓库托管、分支管理、代码审查
  • CI/CD:持续集成与持续部署流水线
  • 项目管理:Issue 追踪、里程碑、看板
  • 监控与安全:代码质量检查、安全扫描

部署准备

1. 系统要求

项目 最低配置 推荐配置
CPU 2 核 4 核+
内存 4 GB 8 GB+
硬盘 20 GB 50 GB+

注意:GitLab 对内存要求较高,内存不足可能导致服务异常或无法启动。

2. 创建 Docker Compose 编排文件

docker-compose.yaml

services:
  gitlab:
    image: gitlab/gitlab-ce:13.3.6-ce.0
    container_name: gitlab
    restart: always
    deploy:
      resources:
        limits:
          cpus: "2"
          memory: "4G"
        reservations:
          cpus: "0.5"
          memory: "200M"
    environment:
      TZ: 'Asia/Shanghai'
      GITLAB_OMNIBUS_CONFIG: |
        external_url 'http://192.168.40.10:8999'
        gitlab_rails['time_zone'] = 'Asia/Shanghai'
        gitlab_rails['gitlab_shell_ssh_port'] = 3222
        unicorn['port'] = 8888
        nginx['listen_port'] = 8999
    ports:
      - '8999:8999'
      - '8443:443'
      - '3222:22'
    volumes:
      - ./gitlab/conf:/etc/gitlab
      - ./gitlab/repo:/var/opt/gitlab
      - ./gitlab/logs:/var/log/gitlab

3. 参数说明

参数 说明
external_url GitLab 外部访问地址,需替换为实际服务器 IP 或域名
gitlab_shell_ssh_port SSH 克隆端口,映射到宿主机的 3222 端口
nginx['listen_port'] Nginx 监听端口,与外部访问端口保持一致
unicorn['port'] Unicorn 应用服务器内部端口

启动服务

docker compose up -d

查看启动日志:

docker logs gitlab -f --tail=100

提示:首次启动需初始化数据库和配置文件,过程可能需要 2-5 分钟,请耐心等待。


验证访问

curl http://192.168.40.10:8999

在浏览器中打开 http://<服务器IP>:8999 即可访问 GitLab。


初始密码获取

GitLab 首次启动后,会为 root 用户自动生成随机密码,查看方式如下:

# 进入容器
docker exec -it gitlab /bin/bash

# 查看初始密码
cat /etc/gitlab/initial_root_password

重要:初始密码文件在首次启动后 24 小时内有效,建议登录后立即修改密码。


常用管理命令

操作 命令
启动 GitLab docker compose up -d
停止 GitLab docker compose stop
重启 GitLab docker compose restart
查看状态 docker compose ps
查看日志 docker logs gitlab -f --tail=100
进入容器 docker exec -it gitlab /bin/bash

常用 GitLab 命令(容器内)

进入容器后,可使用以下命令管理 GitLab:

# 重新加载配置
gitlab-ctl reconfigure

# 重启 GitLab 服务
gitlab-ctl restart

# 查看服务状态
gitlab-ctl status

# 查看版本
cat /opt/gitlab/embedded/service/gitlab-rails/VERSION

常见问题

Q:GitLab 启动后访问 502 错误?

通常是因为内存不足导致 Unicorn 服务无法启动:

# 查看日志确认具体原因
docker logs gitlab --tail=50

# 解决方案:增加可用内存或调整 docker-compose.yaml 中的内存限制
# 修改 memory: "4G" 为更大值,如 "6G" 或 "8G"

Q:如何修改 GitLab 的访问 URL?

修改 docker-compose.yaml 中的 external_url

environment:
  GITLAB_OMNIBUS_CONFIG: |
    external_url 'http://your_new_ip:8999'

修改后重启容器:

docker compose down && docker compose up -d

或进入容器执行:

docker exec -it gitlab /bin/bash
gitlab-ctl reconfigure

Q:SSH 克隆地址端口不对?

检查 gitlab_rails['gitlab_shell_ssh_port'] 配置是否正确,确保与 ports 映射中的 3222:22 对应。

克隆命令示例:

git clone ssh://git@192.168.40.10:3222/root/my-project.git

Q:忘记 root 密码怎么办?

进入容器重置密码:

docker exec -it gitlab /bin/bash
gitlab-rails console -e production

在控制台中执行:

user = User.where(id: 1).first
user.password = 'new_password'
user.password_confirmation = 'new_password'
user.save!
exit

Q:如何备份和恢复 GitLab?

备份:

docker exec -it gitlab gitlab-backup create

备份文件会生成在 ./gitlab/repo/backups/ 目录下。

恢复(将备份文件放入 ./gitlab/repo/backups/ 后执行):

docker exec -it gitlab gitlab-backup restore BACKUP=<备份文件名(不含扩展名)>

参考链接