🐳 使用 Docker 部署 GitLab 并分配用户账号 ------ 保姆级教程
一篇讲透:从零开始用 Docker 搭建 GitLab 私有代码仓库,并完成用户创建、项目权限分配的完整流程(附流程图与架构图)
📌 一、文章导览
GitLab 是目前最流行的开源 DevOps 平台,但官方安装方式较为复杂。使用 Docker 可以一键启动 ,并轻松管理数据持久化、升级和备份。
本文涵盖:
- ✅ Docker 环境准备
- ✅ GitLab 容器部署(含关键配置)
- ✅ 首次登录与 root 密码设置
- ✅ 创建普通用户并分配项目权限
- ✅ 完整流程图 + 架构图(Mermaid 格式)
- ✅ 常见问题与优化建议
🧱 二、前置条件
| 项目 | 要求 |
|---|---|
| 操作系统 | Linux(Ubuntu 20.04+ / CentOS 7+) |
| Docker | 版本 ≥ 20.10 |
| Docker Compose(可选) | 版本 ≥ 2.0(推荐使用) |
| 硬件 | 至少 4GB 内存,20GB 可用磁盘空间 |
| 域名/IP | 公网或内网可访问的 IP / 域名(例如 gitlab.example.com) |
💡 本文使用 Docker Compose 方式(便于维护),同时也会给出纯
docker run命令。
🗺 三、流程总览(流程图)
使用 Mermaid 绘制,帮助理解完整操作步骤:
docker run
docker-compose
准备 Docker 环境
创建数据持久化目录
选择部署方式
单容器运行命令
编写 docker-compose.yml
检查容器状态
访问 GitLab Web 界面
设置 root 密码
登录 root 账号
创建普通用户
创建项目并分配用户权限
验证用户登录与 Git 操作
🐳 四、Docker 部署 GitLab
4.1 创建数据目录(持久化)
bash
mkdir -p /srv/gitlab/{config,logs,data}
chmod -R 755 /srv/gitlab
| 目录 | 作用 |
|---|---|
/srv/gitlab/config |
GitLab 配置文件 |
/srv/gitlab/logs |
日志文件 |
/srv/gitlab/data |
仓库、数据库等数据 |
4.2 方法一:使用 Docker Compose(推荐)
创建 docker-compose.yml:
yaml
version: '3.6'
services:
gitlab:
image: gitlab/gitlab-ce:latest
container_name: gitlab
restart: always
hostname: 'gitlab.example.com' # 替换为你的域名或 IP
environment:
GITLAB_OMNIBUS_CONFIG: |
external_url 'http://gitlab.example.com' # 与 hostname 保持一致
gitlab_rails['time_zone'] = 'Asia/Shanghai'
ports:
- '80:80' # HTTP
- '443:443' # HTTPS(可选)
- '22:22' # SSH(若主机22被占用可改为主机其他端口,如2222:22)
volumes:
- /srv/gitlab/config:/etc/gitlab
- /srv/gitlab/logs:/var/log/gitlab
- /srv/gitlab/data:/var/opt/gitlab
shm_size: '256m'
启动:
bash
docker-compose up -d
4.3 方法二:纯 docker run 命令
bash
docker run -d \
--name gitlab \
--restart always \
-p 80:80 -p 22:22 \
-v /srv/gitlab/config:/etc/gitlab \
-v /srv/gitlab/logs:/var/log/gitlab \
-v /srv/gitlab/data:/var/opt/gitlab \
-e GITLAB_OMNIBUS_CONFIG="external_url 'http://gitlab.example.com'; gitlab_rails['time_zone']='Asia/Shanghai'" \
gitlab/gitlab-ce:latest
4.4 检查容器状态
bash
docker ps | grep gitlab
docker logs gitlab -f # 查看启动日志(第一次启动需要3~5分钟)
🌐 五、首次访问与 Root 密码设置
-
打开浏览器访问
http://<你的服务器IP>(或配置的域名) -
GitLab 会引导设置 root 密码(需至少8位)
-
如果未出现设置页面,可进入容器手动重置:
bashdocker exec -it gitlab bash gitlab-rails console -e production user = User.where(id: 1).first user.password = '新密码' user.save! exit
-
-
使用用户名
root和你设置的密码登录。
👥 六、创建普通用户并分配项目权限
6.1 创建用户(管理员操作)
登录 root 后,依次点击:
Admin Area (左侧边栏小扳手图标) → Users → New user
填写信息:
| 字段 | 示例值 |
|---|---|
| Name | 张三 |
| Username | zhangsan |
| zhangsan@example.com | |
| Access level | Regular(普通用户) |
勾选 "Send password email" (如果配置了邮件服务器),或临时生成一个密码。
点击 Create user。
📧 若未配置 SMTP,用户首次登录时可使用"忘记密码"功能重置。
6.2 创建项目并分配成员
步骤流程:
创建项目
进入项目设置
添加用户
选择角色
保存
root 管理员
my-project
成员管理
zhangsan
Reporter / Developer / Maintainer
用户获得访问权限
具体操作:
- 点击顶部 + → New project → 填写项目名称(如
my-project) → Create project - 进入项目后,左侧菜单 Settings → Members
- Invite member:输入用户名
zhangsan,选择角色(建议Developer可推送代码) - 点击 Invite
6.3 用户登录验证
退出 root,使用 zhangsan 登录。应能看到被授权的项目,并可执行相应权限的 Git 操作。
📊 七、架构与数据流图(UML 部署图)
以下 Mermaid 图展示了 Docker 容器与宿主机的关系:
渲染错误: Mermaid 渲染失败: Lexical error on line 6. Unrecognized text. ...1[/srv/gitlab/config] -->|映射| G:/etc/git -----------------------^
🔧 八、常见问题与优化
| 问题 | 解决方案 |
|---|---|
| 启动很慢,访问 502 | 内存不足:给容器至少 4GB(调整 shm_size 或宿主 swap) |
| SSH 端口冲突(主机已用 22) | 修改映射端口:-p 2222:22,并修改 gitlab.rb 中的 gitlab_rails['gitlab_shell_ssh_port'] = 2222 |
| 无法发送邮件(用户重置密码失败) | 配置 SMTP:参考 GitLab SMTP 文档 |
| 备份与恢复 | docker exec gitlab gitlab-backup create;恢复类似 |
| 升级 GitLab | 拉取新镜像后重新创建容器(保留 volumes) |
📝 九、总结
本文通过 Docker 容器化 的方式,让你能在 10 分钟内拥有一套完整的 GitLab 服务,并学会了:
- 使用
docker run或docker-compose部署 - 基础配置(端口、域名、时区)
- 管理员创建普通用户并分配项目权限
- 用流程图和架构图可视化理解全过程
下一步你可以尝试:配置 HTTPS(Let's Encrypt)、集成 CI/CD、配置 LDAP 认证等。
📎 附录:快速命令集合
bash
# 启动/停止
docker-compose up -d
docker-compose down
# 进入容器
docker exec -it gitlab bash
# 查看实时日志
docker logs -f gitlab
# 重置 root 密码(容器内执行)
gitlab-rails console
user = User.find_by_username('root'); user.password='新密码'; user.save!