当前位置: 首页 > news >正文

使用 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 创建数据目录(持久化)
mkdir-p/srv/gitlab/{config,logs,data}chmod-R755/srv/gitlab
目录作用
/srv/gitlab/configGitLab 配置文件
/srv/gitlab/logs日志文件
/srv/gitlab/data仓库、数据库等数据
4.2 方法一:使用 Docker Compose(推荐)

创建docker-compose.yml

version:'3.6'services:gitlab:image:gitlab/gitlab-ce:latestcontainer_name:gitlabrestart:alwayshostname:'gitlab.example.com'# 替换为你的域名或 IPenvironment: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/gitlabshm_size:'256m'

启动:

docker-composeup-d
4.3 方法二:纯docker run命令
dockerrun-d\--namegitlab\--restartalways\-p80:80-p22:22\-v/srv/gitlab/config:/etc/gitlab\-v/srv/gitlab/logs:/var/log/gitlab\-v/srv/gitlab/data:/var/opt/gitlab\-eGITLAB_OMNIBUS_CONFIG="external_url 'http://gitlab.example.com'; gitlab_rails['time_zone']='Asia/Shanghai'"\gitlab/gitlab-ce:latest
4.4 检查容器状态
dockerps|grepgitlabdockerlogs gitlab-f# 查看启动日志(第一次启动需要3~5分钟)

🌐 五、首次访问与 Root 密码设置

  1. 打开浏览器访问http://<你的服务器IP>(或配置的域名)
  2. GitLab 会引导设置 root 密码(需至少8位)
    • 如果未出现设置页面,可进入容器手动重置:
      dockerexec-itgitlabbashgitlab-rails console-eproduction user=User.where(id:1).first user.password='新密码'user.save!exit
  3. 使用用户名root和你设置的密码登录。

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

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

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

填写信息:

字段示例值
Name张三
Usernamezhangsan
Emailzhangsan@example.com
Access levelRegular(普通用户)

勾选“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 认证等。


📎 附录:快速命令集合

# 启动/停止docker-composeup-ddocker-composedown# 进入容器dockerexec-itgitlabbash# 查看实时日志dockerlogs-fgitlab# 重置 root 密码(容器内执行)gitlab-rails console user=User.find_by_username('root');user.password='新密码';user.save!

http://www.jsqmd.com/news/724707/

相关文章:

  • Certified-Kubernetes-Security-Specialist供应链安全:从镜像扫描到漏洞检测
  • 2026最新数据仓库公司/厂商/服务商推荐!国内权威榜单发布,广东广州等地优质企业实力上榜 - 十大品牌榜
  • 从冷光到暖光:手把手教你用PWM调光实现精准色温控制(基于实测灯珠xyY参数)
  • Switch游戏文件管理的终极解决方案:NSC_BUILDER让您的游戏库井井有条
  • 光刻胶容器工程
  • 深入AutoSar BSW:从NVM配置案例看FEE的‘翻页’机制与数据可靠性设计
  • 别再写IF HASONEVALUE了!Power BI中SELECTEDVALUE函数的3个实战用法(含动态标题)
  • PHP 8.9 JIT性能翻倍实录:从QPS 1,200到4,850的5步精准调优法(含GC阈值+Tracing深度配置)
  • 如何用Winhance中文版一键优化你的Windows系统:新手终极指南
  • 5秒构建元宇宙基石:instant-ngp如何用GPU加速重构虚拟空间
  • 终极指南:ZincSearch磁盘存储机制如何突破数据持久化瓶颈
  • 3分钟搞定抖音批量下载:douyin-downloader高效工具全解析
  • DPDK与多核网络架构优化实践
  • 告别‘纸老虎’:手把手理解基于深度学习的SAR抗欺骗干扰与图像真伪鉴别
  • 不止于调色:深入Unity OnRenderImage与CommandBuffer,打造自定义屏幕后处理管线
  • 从‘不安全端口’黑名单说起:一份给开发者的Chrome/Firefox/Edge端口避坑指南与安全思考
  • counter_culture错误排查手册:常见问题及其解决方案的完整清单
  • 从‘status_breakpoint’错误聊起:给开发者的Chrome/Edge调试功能避坑指南
  • 5分钟打造终极终端信息面板:Fastfetch桌面环境深度集成指南
  • 终极autojump文件导航神器:5分钟掌握命令行目录快速跳转技巧
  • AzurLaneAutoScript:如何用智能自动化彻底改变你的碧蓝航线游戏体验
  • 别再抓瞎了!用Wireshark+ADB调试C++ OpenSSL双向认证失败的实战指南
  • Atmosphere大气层:重新定义Nintendo Switch的定制固件体验
  • 如何7天掌握Zotero GPT插件:从零开始的智能文献助手完整指南
  • 猫抓Cat-Catch:浏览器资源嗅探扩展的全面高效解决方案
  • 如何在Mac上使用PlayCover实现专业级iOS游戏键盘映射
  • 终极安全加固指南:如何保护你的listmonk邮件营销系统
  • Vim状态栏美化终极指南:3个技巧让vim-airline与终端背景完美融合
  • Libre Barcode 终极指南:零代码生成专业条码的免费方案
  • 2026年上海珠宝定制源头直供完全指南:从真伪鉴定到一站式定制加工 - 企业名录优选推荐