GitLab 部署:释放所有功能

要求说明

  1. 必须所有功能都要使用 80443 功能
  2. 官方文档:GitLab Pages 不能与 GitLab 实例GitLab Registry 同时使用相同的端口。
    1. 如果 Pages 不使用 80443 端口,可以只使用一个公网 IP
    2. 如果 使用独立 Nginx 代理 GitLab、GitLab Registry、GitLab Pages,可以只使用一个公网 IP,这三者可以对外提供 80、443 端口,但是 GitLab Pages 无法使用自定义域名、证书
  3. 使用阿里云 ECS 服务器部署:从买服务器开始

理论基础

地址配置

域名 使用的端口 说明
gitlab.xuxiaowei.cn 80、443 GitLab 实例域名
registry.xuxiaowei.cn 80、443 GitLab Docker 容器镜像仓库域名
pages.xuxiaowei.cn 80、443 GitLab Pages 静态页面域名

https SSL/TLS

  • gitlab.xuxiaowei.cn
  • registry.xuxiaowei.cn
  • *.registry.xuxiaowei.cn

阿里云购买 ECS 服务器

  • 个人 GitLab 使用的搭建方式
  • 使用独立的安全组与网络
  1. 网址:阿里云登录 - 欢迎登录阿里云,安全稳定的云计算服务平台
  2. 选“地域”,原则如下:
    • 如果已经有 ECS 服务器了,推荐在相同地域购买,方便后期内网通信
    • 如果没有购买过 ECS 服务器:
      1. 推荐云厂商的大区,比如:阿里云的杭州。原因:某些云厂商的某些地区,设备不行、地区实力比较弱,直接把区域负责人叫到公司面对面谈,都搞不定问题,在这里就不点名了。
      2. 如果对带宽质量比较介意的情况下,可以考虑选择就近的地域(实际上你们的业务没有那么大,根本没有这么高的要求,或者是领导瞎指挥,尽量满足他就行)
  3. 创建专有网络
  4. 输入网络名称,选择一个网段,可以自定义(原则是不要与现有的网段冲突)
  5. 输入交换机名称,选择可用区,根据需要调整交换机的网段(原则是不要与现有的网段冲突)
  6. 专有网络创建结果
  7. 回到购买页面,刷新后就可以选择了
  8. 如果有需要,可以自己指定内网IP
  9. 推荐选择 4核心8G内存,低于此配置,可能会导致备份数据时,系统异常卡顿,无法使用
    1. 需要使用 X86 类型的服务器,作者记得 arm 类型的 GitLab 软件发布比较晚,为了各方面省事,不推荐
      arm(涉及版本升级、数据恢复、资料数量等等)
    2. 内存如果是 4G,需要添加 4G 交换空间(修改交换空间使用时机)
    3. 内存如果是 8G(及以上),无需添加交换空间
    4. CPU 最低 2核心
    5. 推荐配置 4核心 8G内存
  10. 选择 Debian 12、13 操作系统镜像
    1. 不推荐 国内操作系统镜像,并非崇洋媚外,而是你是否有能力解决国内系统镜像的问题(比如:apt、yum 软件包仓库等一些列问题,如果你能解决,随意):openKylin 1.0、1.0.1、1.0.2 提供 containerd 1.6.x 版本的安装包 · Issue #ID9CW3 · openKylin/community - Gitee.com
  11. 在个人测试的“按量付费”的场景下,时间就是金钱,推荐使用“按量付费”的带宽,并且带宽越大越好(单价价格相同,仅按照流量使用多少计费)。
    1. 真实场景按照需求选择配置
  12. 使用新的安全组,方面隔离,更安全。暂时仅开放 22 端口,用于后面的连接
    1. 为何在此处没有开启 80、443 端口?因为要在后面演示安全组如何使用
  13. 此处可以选择设置服务器的密码,也可以选择“创建后设置
  14. 点击确认下单
  15. 因为个人选择的是按量付费,所有这个有个余额要求

  16. 购买成功
  17. 进入 ECS 服务器控制台后,确认一下区域,防止找不到
  18. 点击服务器名字,进入服务器页面
  19. 如果之前没有设置密码,或者密码忘记,可以在这里重置密码
  20. 选择“在线重置密码”,无需重启机器,更方便
  21. 密码重置成功
  22. 使用公网 IP 连接服务器
  23. 服务器信息内查看一下 IP

安装 Docker,部署测试 Nginx 容器

临时部署 Nginx 测试网络,测试内网访问没有问题

docker run -itd --name nginx -p 80:80 -d registry.cn-qingdao.aliyuncs.com/xuxiaoweicomcn/nginx:1.27.4

修改安全组

  1. 点击“管理规则
  2. 修改 22 端口,仅限自己的 IP 能连接,更安全(注意,自己的 IP 每隔一段时间都会改变,时间不固定)



  3. 添加 http、https 端口允许所有人访问


  4. 如果不想别人 ping 你的服务器,可以把这条记录删除,或者像 22 端口一样,仅限指定 IP 才能访问

使用公网访问临时部署的 Nginx

创建 辅助网卡、给服务器添加第二个公网 IP

  • 如果 Pages 不使用 80443 端口,可以只使用一个公网 IP

  • 如果 使用独立 Nginx 代理 GitLab、GitLab Registry、GitLab Pages,可以只使用一个公网 IP,这三者可以对外提供 80、443 端口,但是 GitLab Pages 无法使用自定义域名、证书

  • 为了体验完整的 GitLab Pages 功能,需要一个额外的 IP,如果不需要 GitLab Pages,或者不需要 GitLab Pages 使用 80、443
    端口,可以不添加额外的 IP,
    文档:GitLab Pages administration - GitLab - GitLab 文档中心

  1. 创建弹性网卡(辅助网卡
  2. 专有网络交换机安全组 和创建的服务器一致即可,自定义 内网IP 方便管理

  3. 找到新创建的网卡,绑定实例(绑定服务器)

  4. 等待绑定完成

  5. 新增了一个 eth1 网卡,但是没有上线,最简单的办法就是重启机器,网卡就能上线了
    1. 重启机器也是为了测试新网卡在机器重启后,是否能正常工作(更严谨的测试,因为任何东西都有可能存在 bug)

  6. 由于前面创建 Nginx 容器时,没有添加自动重启,这里手动启动一下 Nginx



  7. 下面给辅助网卡添加 公网 IP
  8. 打开专有网络:阿里云登录 - 欢迎登录阿里云,安全稳定的云计算服务平台
  9. 打开“弹性公网IP”页面

  10. 选择相同区域,根据自己需要选择规格



  11. 购买结果
  12. 绑定辅助网卡




  13. 测试两个公网 IP 是否都能访问 部署的测试 Nginx

注意:

  • 如果存在网络异常,需要手动添加路由:原因是阿里云 辅助网卡弹性公网IP 存在一点问题
    ip -4 route add default via 10.0.0.253 dev eth1 table 200
    ip -4 rule add from 10.0.0.2 lookup 200
    

停止并删除 部署的测试 Nginx

docker stop nginx
docker rm nginx

https 证书准备

  1. gitlab.xuxiaowei.cn
  2. registry.xuxiaowei.cn
  3. *.pages.xuxiaowei.cn

证书放置位置

/srv/gitlab/config/ssl/gitlab.xuxiaowei.cn.crt
/srv/gitlab/config/ssl/gitlab.xuxiaowei.cn.key
/srv/gitlab/config/ssl/pages.xuxiaowei.cn.crt
/srv/gitlab/config/ssl/pages.xuxiaowei.cn.key
/srv/gitlab/config/ssl/registry.xuxiaowei.cn.crt
/srv/gitlab/config/ssl/registry.xuxiaowei.cn.key

DNS 解析:A 记录

  1. GitLab 主域名(实例域名):解析到 主网卡的公网 IP
  2. GitLab 容器镜像仓库域名:解析到 主网卡的公网 IP
  3. GitLab Pages 站点通配符域名:解析 辅助网卡的公网 IP
IPv4 域名 说明
101.37.173.68 gitlab.xuxiaowei.cn GitLab 实例域名
101.37.173.68 registry.xuxiaowei.cn GitLab Docker 容器镜像仓库域名
47.99.86.138 pages.xuxiaowei.cn GitLab Pages 域名
47.99.86.138 *.pages.xuxiaowei.cn 注意:此处是通配符 DNS 解析

修改 ECS 服务器 的 SSH 端口(Docker 宿主机)

  • 由于 Docker 部署需要使用宿主机网络,为了方式 GitLab SSH 的端口与宿主机冲突,需要修改服务器的 SSH 端口:SSH 配置
  • 如果不修改,需要禁用 GitLab 容器的 SSH 功能,否则 ECS 服务器可能无法通过 SSH 远程连接,解决方案:
    1. 在阿里云中通过 noVNC 连接
    2. 在阿里云中强制重启服务器完成后,立马进行 SSH 远程连接:因为 GitLab 启动比较慢,所以可以打一个时间差

使用 Docker Compose 部署

https://gitlab.xuxiaowei.com.cn/test/gitlab 中的 docker-compose.yml 文件,上传到服务器,根据实际情况调整,然后在 docker-compose.yml 文件所在目录执行下列命令,使用 Docker Compose 部署

# 数据储存在 /srv/gitlab 文件夹
export GITLAB_HOME=/srv/gitlab && docker compose up -d

首次登录 GitLab

  1. 访问 GitLab 域名:https://gitlab.xuxiaowei.cn
  2. 查看 GitLab root 用户默认密码
    cat /srv/gitlab/config/initial_root_password
    
  3. 登录 GitLab
  4. 登录成功后,左上角一直在转圈,用户头像一直加载不出来,这是正常现象。原因是 GitLab 的用户默认使用的是 secure.gravatar.com
    的头像,国内访问困难。
  5. 长时间加载不出头像,会连接失败。建议大家修改用户头像,防止遇见网站一直转圈的情况
  6. 为了操作方便,先给当前用户修改为中文

  7. 刷新页面后,就显示中文了
  8. 为了以后新建的用户默认使用中文,可以全局修改默认语言

新建项目,用于测试

  • 用于体验 GitLab Pages 站点、GitLab Registry 容器镜像仓库




测试 GitLab Docker 容器镜像仓库

  1. 可以看到,项目中的 容器镜像仓库 已经默认启用

  2. 这个项目的 容器镜像仓库的前缀是 registry.xuxiaowei.cn/root/test

  3. 创建一个 Token(不能使用用户名、密码,代码推送也不能使用用户名密码),用于推送 Docker 镜像





  4. 登录 GitLab Registry 容器镜像仓库

    docker login registry.xuxiaowei.cn
    

  5. 准备一个 Docker 镜像,用于推送到 GitLab 容器镜像仓库

    docker pull registry.cn-qingdao.aliyuncs.com/xuxiaoweicomcn/nginx:1.27.4
    docker tag registry.cn-qingdao.aliyuncs.com/xuxiaoweicomcn/nginx:1.27.4 registry.xuxiaowei.cn/root/test/nginx:1.27.4
    

  6. 推送镜像到 GitLab 容器镜像仓库

    docker push registry.xuxiaowei.cn/root/test/nginx:1.27.4
    



测试 GitLab Pages 站点:静态页面

  1. 可以看到,项目中的 GitLab Pages 已经默认启用
  2. 在服务器安装 GitLab Runner、注册 Docker 执行器、使用 root 用户运行 GitLab Runner:安装 GitLab Runner
    1. 当前时间(2026-01-15)还未发布 Debian 13 的 GitLab Runner,需要使用文档中的 Debian 12 的 GitLab Runner 仓库
    2. 项目 GitLab Runner 配置结果
  3. 编辑项目,测试 Gitlab Pages

  4. 如果首次打开 Web IDE 提示 404,需要管理员访问“应用程序”页面一次,进行触发程序配置 GitLab Web IDE
  5. 流水线 Job 名称必须是 pages,要发布到 GitLab Pages 的内容必须放在 public 文件夹中


  6. 查看流水线,等待流水线执行结果,其中 pages:deploy 就是部署 GitLab Pages 结果

  7. 查看项目的 Pages 页面,已经部署完成了
  8. 首次访问会提示授权
  9. Pages 页面内容
  10. 更多 GitLab Pages 权限控制见: http://bilibili.com/video/BV1SArsBQEm5