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

本地自建 Gitlab 服务(支持 SSH + Registry + Pages 完整功能)

最终效果

image
image

背景介绍

因为 Gitlab 中国区新版本已经由国内的极狐接管,迫于使用习惯,我们还是使用原汁原味的 Gitlab 官方维护的版本,这里使用的版本是 15.11.13,因为新的 UI 实在是显得太臃肿了,我们使用 Docker 来部署,需要准备的内容有:

  1. gitlab.xxx.xxx 域名(需要解析到 gitlab.xxx.xxx 到 Nginx IP)
  2. pages.xxx.xxx 域名(需要解析 *.pages.xxx.xxx 到 Nginx IP)
  3. 外部 Nginx (用来实现 SSL 访问,容器内部做太过于麻烦,解耦开)
  4. SSL证书(可以使用购买的证书或者是使用免费的 let'sencrypt,实际上是支持通配符的)
  5. Docker

部署方法

1. 解析配置

首先在域名解析的地方解析域名,为了方便(因为我的 Nginx 还承载了其他服务)直接解析 * 的通配符域名到我们的 Nginx
image

2. Nginx 配置

接下来解析我们的 gitlab 到真实服务地址,请注意有三个服务(分别是gitlab主站、registry镜像服务、pages静态网页服务)
image
image
image
需要注意的是需要在自定义设置中配置优化选项例如缓存、WS支持、SSL等,以及还需要添加自定的块,我使用 nginx proxy manager 演示
image
image
请注意每个规则的自定义配置部分都需要添加

proxy_set_header X-Forwarded-Proto  https;
proxy_set_header X-Forwarded-Ssl    on;
proxy_set_header X-Real-IP          $remote_addr;
proxy_set_header X-Forwarded-For    $proxy_add_x_forwarded_for;
proxy_set_header Host               $http_host;

image

3. gitlab 配置

编写 docker-compose.yaml 文件

services:gitlab:image: 'gitlab/gitlab-ee:15.11.13-ee.0'container_name: gitlabrestart: alwayshostname: 'gitlab.xxx.xxx'environment:GITLAB_OMNIBUS_CONFIG: |external_url 'https://gitlab.xxx.xxx'nginx['listen_port'] = 80nginx['listen_https'] = falsenginx['redirect_http_to_https'] = falseletsencrypt['enable'] = falsenginx['proxy_set_headers'] = {"X-Forwarded-Proto" => "https","X-Forwarded-Ssl"   => "on","X-Real-IP"         => "$$remote_addr","X-Forwarded-For"   => "$$proxy_add_x_forwarded_for","Host"              => "$$http_host"}gitlab_rails['trusted_proxies'] = ['10.0.0.0/8', '172.16.0.0/12', '192.168.0.0/16']gitlab_rails['gitlab_shell_ssh_port'] = 2222registry_external_url 'https://registry.xxx.xxx'registry['enable'] = trueregistry_nginx['listen_port'] = 80registry_nginx['listen_https'] = falseregistry_nginx['proxy_set_headers'] = {"X-Forwarded-Proto" => "https","X-Forwarded-Ssl"   => "on"}pages_external_url 'https://pages.xxx.xxx'gitlab_pages['enable'] = truegitlab_pages['internal_gitlab_server'] = 'http://gitlab.xxx.xxx'gitlab_pages['artifacts_server_url'] = 'http://gitlab.xxx.xxx'pages_nginx['listen_port'] = 80pages_nginx['listen_https'] = falsepages_nginx['proxy_set_headers'] = {"X-Forwarded-Proto" => "https","X-Forwarded-Ssl"   => "on"}prometheus_monitoring['enable'] = falsegitlab_rails['time_zone'] = 'Asia/Shanghai'puma['worker_processes'] = 2sidekiq['concurrency'] = 10postgresql['shared_buffers'] = "256MB"## ─── Email / SMTP ────────────────────────────────────────────# gitlab_rails['smtp_enable'] = true# gitlab_rails['smtp_address'] = "smtp.example.com"# gitlab_rails['smtp_port'] = 587# gitlab_rails['smtp_user_name'] = "user@example.com"# gitlab_rails['smtp_password'] = "smtp_password"# gitlab_rails['smtp_domain'] = "example.com"# gitlab_rails['smtp_authentication'] = "login"# gitlab_rails['smtp_enable_starttls_auto'] = true# gitlab_rails['gitlab_email_from'] = "gitlab@example.com"ports:- '2222:22'      # SSH clone / push- '18080:80'     # HTTP(由外部的 Nginx 代理到这个端口,处理 SSL)volumes:- './gitlab/config:/etc/gitlab'- './gitlab/logs:/var/log/gitlab'- './gitlab/data:/var/opt/gitlab'shm_size: '256m'healthcheck:test: ["CMD", "/opt/gitlab/bin/gitlab-healthcheck", "--fail", "--max-time", "10"]interval: 60stimeout: 30sretries: 5start_period: 5m

4. 启动并访问

直接docker compose pull && docker compose up -d启动等待几分钟后使用初始密码访问网页即可,初始密码获取方式

docker exec gitlab cat /etc/gitlab/initial_root_password 2>/dev/null | grep Password

参考资料

  1. https://todoit.tech/k8s/gitlab/
  2. https://www.hash070.top/archives/gitlab-ee-crack.html
  3. https://pengtech.net/gitlab/gitlab_ee_crack.html
  4. https://soulteary.com/2021/07/14/gitlab-14-lightweight-operation-solution.html
http://www.jsqmd.com/news/958431/

相关文章:

  • 腾讯首发效率智能体工具集,智能体集合矩阵时代要来了?
  • 【文档+源码】基于springboot+vue店铺租赁租凭平台 -项目分享学习
  • 2026 禅城防水补漏推荐,本土直营苏易修缮,老城区岭南民居 / 季华商圈商铺就近上门修漏水 - 苏易修缮
  • 寻宠技术实操全解析:晖夜寻宠团队服务核心逻辑拆解 - 优质品牌商家
  • 2026广州天河区黄金回收实力商家/优选公安备案、光谱仪鉴定+CCIC 认证 - 极速版本
  • 【实操解决 OpenClaw】 无法操作本机,管理员权限与安全设置指南(含安装包
  • 名创优品会员风波上热搜,为什么说其实可以理解?
  • 手把手教你用Vivado 2023.1和Vitis搞定MicroBlaze软核的UART通信(附波特率计算与调试技巧)
  • 视频修复革命:如何用Video2X免费将模糊视频变成高清大片?
  • 2026义乌日本双清包税优质服务商推荐推荐 - 优质品牌商家
  • 【文档+源码】基于springboot+vue学生答题练习在线平台 -学习资料分享
  • Node.js周刊2026W21 | Node.js 26.2.0、Bun v1.3.14、Rolldown 1.0、TypeORM 1.0
  • Python周刊2026W21 | Python 3.15.0 Beta 1发布、Python 3.14.5发布、Pyrefly v1.0发布、PEP 788定稿、PEP 830/813推迟至3.16
  • 终极指南:如何使用EmojiOne Color彩色表情字体彻底解决跨平台显示难题
  • 2026年6月评价高的北京病房管理app服务商怎么选择推荐榜,病房管理APP/住院管理系统/病床管理软件公司选择指南 - 海棠依旧大
  • 2026年当前山东地区备受好评的分段门定制厂家深度解析与选型指南 - 2026年企业资讯
  • 告别SIAR!在R中快速上手SIMMR进行稳定同位素混合建模:安装、常见报错与可视化避坑指南
  • 2026 年瓢虫浏览器开发方式大转变:不再接受公开拉取请求!
  • 国内主流傻瓜式进销存系统品牌排行 实操维度解析 - 优质品牌商家
  • FPGA按键去抖:Verilog经典实现与工程实践详解
  • 2026年热门防火门TOP5推荐:技术参数与场景适配解析 - 优质品牌商家
  • 编程语言什么是c语言
  • 2026 重庆主城防水补漏推荐,本土直营苏易修缮,渝中老民居 / 滨江江景房就近上门修漏水 - 苏易修缮
  • 2026年新消息发布:嘉兴市汽车功放服务商专业度全景解析 - 2026年企业资讯
  • 2026年沈阳漏水维修服务商盘点:为何沈阳市沈河区马上到家防水科技中心备受推崇? - 2026年企业资讯
  • 一条休闲束脚裤的工业化诞生科普 八道自动化缝纫工序拆解
  • cosmos学习笔记
  • Bebas Neue终极指南:免费商用字体如何改变你的设计游戏
  • 普宁全屋定制品牌排名|本地有口碑的全屋定制品牌有哪些 - 品牌观察
  • 【变压器的短路试验】变压器的短路试验是通过将二次侧短路,并向一次侧施加额定电流来进行附Simulink仿真