Gitlab: 私有化部署
目录1. 说明2. 服务器3. 安装4. 配置实践4.1 人员与项目4.2 部署准备4.2.1 访问变量及用户账号设置4.2.2 Gitlab Runner的设置4.2.3 要点5. 容器镜像(Container Registry)5.1 准备5.2 配置5.3 测试6. 应用项目 CI/CD7. Version 17.6 安装8. 参考1. 说明Gitlab是一个强大且免费的代码管理/部署工具能统一集成代码仓库CI/CD的工作。开始时我以为只能在官网上使用后来才知道能私有化部署确实了不起。原理图2. 服务器gitlab资源要求比较高建议8核16G目前我的虚拟机是分配了5核12G要是工作负荷上来还要划拨资源。ServerIP配置备注host001.dev.ia192.168.0.1305核/12G/200G硬盘Gitlab服务器 / Gitlab Runner工作站 / 开发服务器1host002.dev.ia192.168.0.1312核/4G/200G硬盘开发服务器2在各自的 /etc/hosts 做上述设定3. 安装docker-composer方式指定外部访问url为 http://host001.dev.ia:18181本地网络环境的gitlab.ymlversion: 3.5 services: web: image: gitlab/gitlab-ce:latest container_name: gitlab restart: always hostname: gitlab.dev.ia environment: GITLAB_OMNIBUS_CONFIG: | external_url http://host001.dev.ia:18181 # Add any other gitlab.rb configuration here, each on its own line ports: - 18181:18181 - 2222:22 - 5050:5050 volumes: - /data0/Server/Settings/gitlab:/etc/gitlab - /data0/Server/Logs/gitlab:/var/log/gitlab - /data0/Server/Db/gitlab:/var/opt/gitlab shm_size: 256m在线服务器的gitlab.ymlservices: web: image: gitlab/gitlab-ce:latest container_name: gitlab restart: always ports: - 18181:80 - 2222:22 - 5050:5050 volumes: - /data0/Server/Settings/gitlab:/etc/gitlab - /data0/Server/Logs/gitlab:/var/log/gitlab - /data0/Server/Db/gitlab:/var/opt/gitlab shm_size: 512m安装后进去容器设置管理员(root)密码gitlab-rails console -e production irb user User.where(id: 1).first irb user.password xxx irb user.password_confirmation xxx irb user.save!4. 配置实践4.1 人员与项目进入管理后台建立两个开发组3名用户成员 (Regular Member权限配置ssh公钥)两个团队项目, 每个项目分别建 dev / staging / live 分支检查 pull push是否正常GroupMemberProjectBranchDev1root, ben, developer1Team1 Prj1dev / staging / liveDev2root, ben, developer2Team2 Prj1dev / staging / live如图添加系统用户 sysuser1用于镜像推送等内部操作4.2 部署准备4.2.1 访问变量及用户账号设置- 在gitlab服务器因为docker化安装的需映射ssh访问端口 22 2222- 用工具生成deployer密钥然后用管理员账号登录gitlab后台:-- 配置deployer私钥变量Admin Area Settings CI/CD Variables, 定义 SSH_PRIVATE_KEY用deployer的私钥填充将在.gitlab-ci.yml里使用。注去掉默认的Protect variable勾选不然部署时会出现“Error loading key (stdin): error in libcrypto”问题-- 配置仓库访问公钥, 可选择添加公共的部署公钥或项目部署公钥2选1A 公共公钥Admin Area Deploy Keys然后在项目Deploy keys中enable之B 项目公钥切换到项目 Settings Repository Deploy keys添加deployer的Privately keys并且enable使得deployer用户可访问代码仓库- 在部署服务器建deployer账号分配密钥目录访问权限脚本adduser deployer setfacl -R -m u:deployer:rwx /www/wwwroot # 为解决安全及读写权限问题把deployer设置为主组www,加入到docker组www用户则加到deployer组 usermod -g www deployer usermod -aG docker deployer usermod -aG deployer www # 建立密钥文件 通过vi把该用户的密钥加上 mkdir -p /home/deployer/.ssh touch /home/deployer/.ssh/authorized_keys touch /home/deployer/.ssh/id_rsa touch /home/deployer/.ssh/config chmod 700 /home/deployer/.ssh chmod 600 /home/deployer/.ssh/id_rsa chown deployer:deployer -Rf /home/deployer/.ssh-为了deployer能正确访问git仓库端口映射需编辑 /home/deployer/.ssh/config (windows的在C:\Users\{user}\.ssh)添加端口以及用户(git)的密钥信息Tips:- 配置文件里面的git用户是gitlab容器内含了的 端口映射到2222- 文件保存UTF-8, 无BOM头!Host host001.dev.ia User git Hostname host001.dev.ia Port 2222 Preferredauthentications publickey IdentityFile ~/.ssh/id_rsa TCPKeepAlive yes AddKeysToAgent yes完成后用deployer登录目标机器测试是否能连接gitlab, 克隆仓库ssh -T githost001.dev.ia git clone githost001.dev.ia:dev1/team1-prj2.git4.2.2 Gitlab Runner的设置Runner 所处位置图: 通过Runner工作组根据脚本进行构建与分发用root账号登陆在管理面板Admin Area CI/CD Runners页上建Runner它实际上是个运行代理器让工作机的关联进来通过定义tag来调配对应的运行器完成任务这里我定义了一个php的runnergitlab在项目管理中提供了Pipeline editor工具可以在不同分支定义一个.gitlab-ci.yml文件记叙CI/CD步骤与详细内容当用户提交并推送代码时触发过程在构建服务器添加gitlab-runner用户安装gitlab-runner客户端, 脚本 gitlab-runner-install.sh#!/bin/bash # Download the binary for your system sudo curl -L --output /usr/local/bin/gitlab-runner https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-linux-amd64 # Give it permission to execute sudo chmod x /usr/local/bin/gitlab-runner # Create a GitLab Runner user sudo useradd --comment GitLab Runner --create-home gitlab-runner --shell /bin/bash # Install and run as a service sudo gitlab-runner install --usergitlab-runner --working-directory/home/gitlab-runner sudo gitlab-runner start注册runnersudo gitlab-runner register --url http://host001.dev.ia:18181 --token glrt-HfgiG84kn28NvU69stkh - 选择shell类型 sudo gitlab-runner run # 其他相关命令 gitlab-runner list gitlab-runner unregister --all-runners gitlab-runner unregister --url http://host001.dev.ia:18181 --token glrt-ABh3NZLwxomjSk6szHbz4.2.3 要点- 在gitlab文档中是没有提及给gitlab-runner账号配deployer私钥的当用giltlab-runner账号在终端进行手动测试时需把deployer的id_rsa拷贝过去 gitlab-runner/.ssh目录下。- 为了访问hub.docker.com需su gitlab-runner后进行登录操作docker login- 改下gitlab-runner的.bash_logout不然在工作机连接时 gitlab-runner会出现状况cd /home/gitlab-runner# mv .bash_logout .bash_logout.bak- 当docker login出现503 Service Unavailable情况时先查下当前的docker有没用代理注意NO_PROXY# Docker代理配置 /lib/systemd/system/docker.service.d/http-proxy.conf [Service] EnvironmentHTTP_PROXYhttp://proxy-server0:1081 EnvironmentHTTPS_PROXYhttp://proxy-server0:1081 EnvironmentNO_PROXY*.dev.ia,*.k8s.ia,*.aliyun.com,*.aliyuncs.com,*.huaweicloud.com,localhost,127.0.0.1,0.0.0.0,10.0.0.0/8,172.17.0.0/12,192.168.0.0/16windows desktop : 剔除掉本地环境域名- 有时候指令中需要用到sudo 所以把gitlab-runner加到sudo组里面- 构建有时候因为获取镜像超时这时可先变身为gitlab-runner后进行pull使得镜像缓存到本地代理设置除了docker本身配置为了构建时镜像内部更新顺利apt install sth)配置/etc/profile里面的代理export http_proxyhttp://proxy-server0:1081 export https_proxyhttp://proxy-server0:1081 export no_proxy*.dev.ia,host001.dev.ia,*.k8s.ia,*.aliyun.com,*.aliyuncs.com,*.huaweicloud.com,localhost,127.0.0.1,0.0.0.0,10.0.0.0/8,172.17.0.0/12,192.168.0.0/16Push镜像到hub.docker.com指定仓库前需记得docker login如docker login http://somewhere如果用nginx反代出现错误: error: RPC failed; HTTP 413 curl 22 The requested URL returned error: 413配置nginxserver块client_max_body_size 0;5. 容器镜像(Container Registry)Gitlab还提供了一项容器镜像管理的功能允许用户把项目构建成的镜像文件push到它的数据库中统一管理摸索良久分享之5.1 准备- 因为本地部署测试并不需要证书等烦人的东西所以需把registry域名登记到/etc/docker/daemon.json非安全条项 (windows docker desktop下路径是: C:/Users/username/.docker/daemon.json)不然docker login会出现不能登录的问题# cat /etc/docker/daemon.json {insecure-registries:[http://host001.dev.ia:18181,http://host001.dev.ia:5050]} # 添加docker启动项 # vi /etc/default/docker DOCKER_OPTS--config-file/etc/docker/daemon.json # systemctl daemon-reload # systemctl restart docker5.2 配置- 编辑 /data0/Server/Settings/gitlab/gitlab.rb配置如下registry_external_url http://host001.dev.ia:5050 ### Settings used by GitLab application gitlab_rails[registry_enabled] true gitlab_rails[registry_host] host001.dev.ia gitlab_rails[registry_port] 5050 gitlab_rails[registry_path] /var/opt/gitlab/gitlab-rails/shared/registry registry_nginx[listen_https] false同时修改compose.yml, 开放5050为registry的访问端口然后重新建立容器项目的Deploy-Container Registry面板如图5.3 测试# 测试连接 nc -zv host001.dev.ia 5050 curl -v http://host001.dev.ia:5050/v2/_catalog # 测试登录 docker login http://host001.dev.ia:5050 -u ben -p wawawa WARNING! Using --password via the CLI is insecure. Use --password-stdin. Login Succeeded # 构建镜像 docker build -t host001.dev.ia:5050/dev1/team1-prj1 . ... # push上去 docker push host001.dev.ia:5050/dev1/team1-prj1 ...然后再访问 Container Registry, 如图至此基本可用了。6. 应用项目 CI/CDGitlab: PHP项目CI/CD实践Gitlab: Python项目CI/CD实践7. Version 17.6 安装安全端口放行 5005 镜像仓库入口, 5000docker-compose.ymlservices: web: image: gitlab/gitlab-ce:latest container_name: gitlab restart: always ports: - 18181:80 - 2222:22 - 5005:5005 - 5000:5000 environment: GITLAB_OMNIBUS_CONFIG: | external_url https://gitlab.xxx.top gitlab_rails[smtp_enable] true gitlab_rails[smtp_address] smtpdm.xxx.com gitlab_rails[smtp_port] 80 gitlab_rails[smtp_user_name] gitlab_rails[smtp_password] gitlab_rails[smtp_authentication] login gitlab_rails[smtp_enable_starttls_auto] true gitlab_rails[gitlab_email_from] gitlabxx.top nginx[redirect_http_to_https] false nginx[listen_port] 80 nginx[listen_https] false gitlab_rails[registry_enabled] true gitlab_rails[registry_host] gitlab.xxx.top gitlab_rails[registry_port] 5005 gitlab_rails[registry_path] /var/opt/gitlab/gitlab-rails/shared/registry registry_nginx[listen_https] false volumes: - /data0/Server/Settings/gitlab:/etc/gitlab - /data0/Server/Logs/gitlab:/var/log/gitlab - /data0/Server/Db/gitlab:/var/opt/gitlab shm_size: 512mgitlab.rb# 配置以下选项 registry_external_url https://gitlab.xxx.top:5005 gitlab_rails[registry_enabled] true gitlab_rails[registry_host] gitlab.xxx.top gitlab_rails[registry_port] 5005 gitlab_rails[registry_path] /var/opt/gitlab/gitlab-rails/shared/registry registry[enable] true gitlab_rails[registry_api_url] http://127.0.0.1:5000 gitlab_rails[registry_key_path] /var/opt/gitlab/gitlab-rails/certificate.key gitlab_rails[registry_issuer] omnibus-gitlab-issuer8. 参考- https://medium.com/BuildWithLal/gitlab-setup-using-docker-compose-a-beginners-guide-3dbf1ef0cbb2- Use SSH keys to communicate with GitLab | GitLab- .gitlab-ci.yml 配置 · PHP/Python/前端/Linux 等等 学习笔记 · 看云- gitlab runner tag - 简书- GitLab CI/CD for Beginners [FREE Course] - DEV Community

相关新闻

CentOS7 + 宝塔 Nginx + Java Jar:GitHub Actions 自动部署步骤

CentOS7 + 宝塔 Nginx + Java Jar:GitHub Actions 自动部署步骤

摘要:本文详细介绍了使用 GitHub Actions 实现前后端项目自动化部署的完整流程。从服务器环境准备、SSH 密钥生成、GitHub Secrets 配置,到部署文件编写、首次部署和日常发布,提供了全栈部署的一站式解决方案。文章包含具体的脚本示例、配置步…

2026/7/23 18:16:56阅读更多 →
esxi网卡直通

esxi网卡直通

ESXI设置网卡直通什么是直通?原理科普白话文解释:1.字面意思,很好理解,就是在虚拟机中,硬件不需要虚拟设备或者软件进行转换,虚拟机直接调用硬件,跟物理机一样。也就是某一个虚拟机,…

2026/7/23 18:16:56阅读更多 →
Tiva TM4C1292 EPI模块地址映射与非阻塞读FIFO机制详解

Tiva TM4C1292 EPI模块地址映射与非阻塞读FIFO机制详解

1. 项目概述与核心价值 在嵌入式系统开发,尤其是基于ARM Cortex-M内核的微控制器项目中,如何高效、可靠地扩展外部存储器和连接高速外设,是提升系统整体性能与功能复杂度的关键。Tiva™ C系列微控制器,特别是像TM4C1292NCZAD这类高…

2026/7/23 18:16:56阅读更多 →
基于GFL_R101_FPN的肠球菌自动检测系统开发

基于GFL_R101_FPN的肠球菌自动检测系统开发

1. 项目背景与核心价值肠球菌检测在医疗诊断、食品安全和环境监测等领域具有重要应用价值。传统检测方法通常依赖人工镜检或培养法,存在耗时长、主观性强等局限性。我们基于GFL_R101_FPN_MS-2x_COCO模型开发的自动检测系统,将目标检测技术引入微生物识别…

2026/7/23 19:37:16阅读更多 →
从思科到软路由:深入理解网络世界的两种维度与身份

从思科到软路由:深入理解网络世界的两种维度与身份

最近刚研究了不少软路由相关的东西,回想起大学课程中有一门和网络工程师相关的思科网络的课程,从RIP协议到OSPF协议,分析网络拓扑图,给交换机路由器敲命令,我还记得那熟悉的命令ip running config,看似它们…

2026/7/23 19:37:16阅读更多 →
为什么你的OpenWrt软路由Web端口修改后无法访问?常见问题排查指南

为什么你的OpenWrt软路由Web端口修改后无法访问?常见问题排查指南

为什么你的OpenWrt软路由Web端口修改后无法访问?常见问题排查指南 最近在折腾软路由的朋友,估计不少人都遇到过这个情况:为了安全或者避开端口冲突,兴冲冲地修改了OpenWrt的Web管理端口,结果保存重启后,浏览器里输入新地址,迎接你的却是一个冷冰冰的“无法访问此网站”…

2026/7/23 19:37:16阅读更多 →
嵌入式系统硬件CRC与向量中断管理:高可靠实时应用的核心技术

嵌入式系统硬件CRC与向量中断管理:高可靠实时应用的核心技术

1. 项目概述与核心价值 在嵌入式系统,尤其是汽车电子、工业控制这类对可靠性要求极高的领域,数据在传输和存储过程中的完整性,以及系统对外部事件的实时响应能力,是决定产品成败的两个基石。前者关乎数据是否正确,后者…

2026/7/23 19:37:16阅读更多 →
DMA控制器原理与应用:从数据搬运到嵌入式系统性能优化

DMA控制器原理与应用:从数据搬运到嵌入式系统性能优化

1. DMA控制器核心价值与设计哲学 在嵌入式系统里,CPU的时间是宝贵的。想象一下,你正在用MCU处理一个实时音频流,每秒钟有数万个采样点需要从ADC搬运到内存缓冲区,然后再进行滤波、编码等运算。如果每个采样点的搬运都让CPU亲自执行…

2026/7/23 19:37:15阅读更多 →
深入解析TI F021 Flash控制器:寄存器配置与诊断模式实战指南

深入解析TI F021 Flash控制器:寄存器配置与诊断模式实战指南

1. F021 Flash控制器:嵌入式存储的“神经中枢” 在嵌入式系统,尤其是汽车电子和工业控制领域,Flash存储器扮演着“非易失性大脑”的角色,负责存储启动代码、应用程序、校准数据和用户配置。然而,直接操作Flash物理阵列…

2026/7/23 19:35:15阅读更多 →
Go语言静态资源打包方案对比与实践指南

Go语言静态资源打包方案对比与实践指南

1. 项目背景与核心需求在Go语言开发中,我们经常需要处理静态资源文件的打包问题。无论是Web应用的模板文件、前端资源,还是配置文件、证书等,都需要随程序一起分发。传统做法是将这些文件与编译后的二进制文件放在同一目录下,但这…

2026/7/23 0:56:31阅读更多 →
Go语言实现高性能LDAP认证服务的架构与实践

Go语言实现高性能LDAP认证服务的架构与实践

1. 项目背景与核心价值LDAP(轻量级目录访问协议)作为企业级身份认证的黄金标准,已经服务了超过80%的财富500强公司。我在金融科技领域实施统一认证体系时,发现传统Java方案存在启动慢、内存占用高等痛点。而Go语言凭借其协程并发模…

2026/7/23 0:56:31阅读更多 →
【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

更多请点击: https://intelliparadigm.com 第一章:AI面试官实战指南的核心价值与适用场景 AI面试官并非替代人类HR的“黑箱工具”,而是以可解释、可审计、可迭代的方式,赋能招聘全链路的关键基础设施。其核心价值在于将主观经验沉…

2026/7/23 0:56:31阅读更多 →
Chitchatter完整指南:免费开源的终极点对点安全聊天工具

Chitchatter完整指南:免费开源的终极点对点安全聊天工具

Chitchatter完整指南:免费开源的终极点对点安全聊天工具 【免费下载链接】chitchatter Secure peer-to-peer chat that is serverless, decentralized, and ephemeral 项目地址: https://gitcode.com/gh_mirrors/ch/chitchatter Chitchatter是一款革命性的安…

2026/7/23 0:00:28阅读更多 →
从单点好评到指数级传播:AI副业主理人必须掌握的4层口碑渗透模型(含ROI测算表)

从单点好评到指数级传播:AI副业主理人必须掌握的4层口碑渗透模型(含ROI测算表)

更多请点击: https://intelliparadigm.com 第一章:从单点好评到指数级传播:AI副业主理人必须掌握的4层口碑渗透模型(含ROI测算表) 当AI副业主理人不再仅满足于单次服务交付,而是主动构建可复用、可裂变、可…

2026/7/23 0:00:28阅读更多 →
油泥处理设备哪里能买到

油泥处理设备哪里能买到

油泥处理设备哪里有?这是许多从事油田、炼化、清罐业务的从业者最关心的问题。根据河南三丰环保设备有限公司的行业经验,选购油泥处理设备的核心在于设备能否适配当地环保法规与原料特性,而非单纯看价格。该公司总经理王钦田先生指出&#xf…

2026/7/23 0:00:28阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/22 22:56:18阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/23 18:58:18阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/23 18:58:18阅读更多 →