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/gitlab3. 参数说明
| 参数 | 说明 |
|---|---|
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 reconfigureQ:SSH 克隆地址端口不对?
检查 gitlab_rails['gitlab_shell_ssh_port'] 配置是否正确,确保与 ports 映射中的 3222:22 对应。
克隆命令示例:
git clone ssh://git@192.168.40.10:3222/root/my-project.gitQ:忘记 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!
exitQ:如何备份和恢复 GitLab?
备份:
docker exec -it gitlab gitlab-backup create备份文件会生成在 ./gitlab/repo/backups/ 目录下。
恢复(将备份文件放入 ./gitlab/repo/backups/ 后执行):
docker exec -it gitlab gitlab-backup restore BACKUP=<备份文件名(不含扩展名)>