使用 Docker 部署 GitLab 并分配用户账号 —— 保姆级教程

🐳 使用 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 密码设置

  1. 打开浏览器访问 http://<你的服务器IP>(或配置的域名)

  2. GitLab 会引导设置 root 密码(需至少8位)

    • 如果未出现设置页面,可进入容器手动重置:

      bash 复制代码
      docker exec -it gitlab bash
      gitlab-rails console -e production
      user = User.where(id: 1).first
      user.password = '新密码'
      user.save!
      exit
  3. 使用用户名 root 和你设置的密码登录。


👥 六、创建普通用户并分配项目权限

6.1 创建用户(管理员操作)

登录 root 后,依次点击:
Admin Area (左侧边栏小扳手图标) → UsersNew user

填写信息:

字段 示例值
Name 张三
Username zhangsan
Email zhangsan@example.com
Access level Regular(普通用户)

勾选 "Send password email" (如果配置了邮件服务器),或临时生成一个密码。

点击 Create user

📧 若未配置 SMTP,用户首次登录时可使用"忘记密码"功能重置。

6.2 创建项目并分配成员

步骤流程:
创建项目
进入项目设置
添加用户
选择角色
保存
root 管理员
my-project
成员管理
zhangsan
Reporter / Developer / Maintainer
用户获得访问权限

具体操作:

  1. 点击顶部 +New project → 填写项目名称(如 my-project) → Create project
  2. 进入项目后,左侧菜单 Settings → Members
  3. Invite member:输入用户名 zhangsan,选择角色(建议 Developer 可推送代码)
  4. 点击 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 rundocker-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!

相关推荐
brucelee1865 小时前
Docker 运行 Android 模拟器
android·docker·容器
Konwledging6 小时前
docker
docker
renhongxia16 小时前
AI技术分享:如何做好职场内部技术培训
人工智能·安全·docker·语言模型·容器
Trival_dream7 小时前
应用与实例的关系
java·docker·kubernetes
子木HAPPY阳VIP7 小时前
Tomcat 9 + JSP 中文乱码终极解决方案(完整版可复制)
java·开发语言·docker·tomcat·jsp
摇滚侠7 小时前
Docker 部署 MySQL ElasticSearch Kibana RabbitMQ
mysql·elasticsearch·docker
ai产品老杨7 小时前
深度解析:基于 Docker 与异构计算的工业级 AI 视频管理平台架构 —— 从 GB28181 接入到全平台源码交付
人工智能·docker·音视频
AI服务老曹7 小时前
深度解析:如何通过源码交付与API二次开发,构建基于GB28181与Docker的AI视频中台?
人工智能·docker
之芫7 小时前
Ubuntu 26.04系统上安装docker
ubuntu·docker·eureka