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

自建 GitLab CE:把代码仓库搬到自己的服务器

自建 GitLab CE:把代码仓库搬到自己的服务器

用 GitHub 存代码很方便,但有些情况会让人想自建:公司代码不想放公有云、私有仓库数量有限、想自己掌控 CI/CD 流程。GitLab Community Edition 是完整的开源 DevOps 平台,代码托管、Issue 管理、CI/CD Pipeline、Container Registry 全部打包,功能不比 GitHub 少多少。

缺点也很明显:资源消耗大,至少要 4GB 内存才跑得比较顺畅。

服务器配置

GitLab 是我见过的最吃内存的 Web 应用之一:

用途CPU内存硬盘
1–5 人小团队2 核4G50GB
5–20 人团队4 核8G100GB

我在雨云用 4 核 8G 的机器跑 GitLab,几个人的开发团队日常使用没问题。雨云按月付费,价格比同配置的大厂便宜不少。新用户注册填优惠码2026off能领 5 折优惠券。

用 Docker 部署 GitLab

Docker 方式比直接装包更容易升级和迁移:

mkdir-p/opt/gitlabcat>/opt/gitlab/docker-compose.yml<<'EOF' version: "3.8" services: gitlab: image: gitlab/gitlab-ce:latest container_name: gitlab hostname: git.你的域名.com environment: GITLAB_OMNIBUS_CONFIG: | external_url 'https://git.你的域名.com' gitlab_rails['gitlab_shell_ssh_port'] = 2222 # 禁用 Prometheus 等监控组件以节省内存 prometheus_monitoring['enable'] = false grafana['enable'] = false alertmanager['enable'] = false node_exporter['enable'] = false redis_exporter['enable'] = false postgres_exporter['enable'] = false # 调小 Puma worker 数 puma['worker_processes'] = 2 # SMTP 邮件 gitlab_rails['smtp_enable'] = true gitlab_rails['smtp_address'] = "smtp.qq.com" gitlab_rails['smtp_port'] = 587 gitlab_rails['smtp_user_name'] = "你的邮箱@qq.com" gitlab_rails['smtp_password'] = "邮箱授权码" gitlab_rails['smtp_domain'] = "qq.com" gitlab_rails['smtp_authentication'] = "login" gitlab_rails['smtp_enable_starttls_auto'] = true gitlab_rails['gitlab_email_from'] = '你的邮箱@qq.com' ports: - "80:80" - "443:443" - "2222:22" volumes: - ./gitlab_config:/etc/gitlab - ./gitlab_logs:/var/log/gitlab - ./gitlab_data:/var/opt/gitlab shm_size: '256m' restart: unless-stopped EOFdockercompose up-d

第一次启动需要 3–5 分钟,GitLab 要初始化数据库和配置。

# 查看启动状态dockerlogs-fgitlab# 等待出现 "gitlab Reconfigured!" 表示启动完成

获取初始 root 密码

dockerexecgitlabgrep'Password:'/etc/gitlab/initial_root_password

这个文件在 24 小时后会自动删除,记得及时改密码。

配置 HTTPS

上面的配置里external_url已经配置了https://,GitLab 内置 Let’s Encrypt 自动申请证书。

确保 DNS 解析正确指向服务器,并在云控制台放行TCP 80TCP 443(GitLab 需要 80 来验证域名)。

如果你想用已有证书(比如通配符证书),可以在GITLAB_OMNIBUS_CONFIG里指定:

nginx['ssl_certificate'] = "/etc/gitlab/ssl/cert.pem" nginx['ssl_certificate_key'] = "/etc/gitlab/ssl/key.pem" letsencrypt['enable'] = false

SSH 推送代码

GitLab 的 SSH 端口映射到了主机的2222,需要在本地~/.ssh/config里配置:

cat>>~/.ssh/config<<'EOF' Host git.你的域名.com Port 2222 IdentityFile ~/.ssh/id_ed25519 EOF

在 GitLab 个人设置 → SSH Keys 里添加公钥后就可以 push/pull 了。

启用 GitLab CI/CD

GitLab CI/CD 需要安装 Runner 来执行 Pipeline。在同一台服务器上安装 Runner:

# 安装 gitlab-runnercurl-Lhttps://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.deb.sh|sudobashsudoaptinstall-ygitlab-runner# 注册 Runnersudogitlab-runner register\--url"https://git.你的域名.com"\--registration-token"从 GitLab 项目设置里找到的 token"\--executor"docker"\--docker-image"alpine:latest"\--description"my-runner"

注册完成后,在.gitlab-ci.yml里定义 Pipeline,提交代码就会自动触发 CI。

常用管理操作

# 重新配置(修改配置后运行)dockerexecgitlab gitlab-ctl reconfigure# 重启服务dockerexecgitlab gitlab-ctl restart# 备份dockerexecgitlab gitlab-backup create# 查看备份文件ls/opt/gitlab/gitlab_data/backups/

备份策略

GitLab 备份会打包代码仓库、数据库、Wiki、附件等:

# 手动备份dockerexecgitlab gitlab-backup create# 加入 cron 自动备份(每天凌晨 2 点)echo"0 2 * * * docker exec gitlab gitlab-backup create"|crontab-

备份文件存在/opt/gitlab/gitlab_data/backups/,记得同步到其他位置。

内存优化

如果内存吃得太狠,可以进一步调整:

# 在 GITLAB_OMNIBUS_CONFIG 里添加 puma['worker_processes'] = 1 # 最小 worker 数 sidekiq['concurrency'] = 5 # 减少 Sidekiq 并发 gitlab_workhorse['workhorse_keywatcher'] = false

调整后重新配置:docker exec gitlab gitlab-ctl reconfigure


GitLab CE 自建的主要优势是完全掌控:代码在自己机器上,CI/CD 免费无限制,可以按需扩展 Runner。对于看重数据主权或者 CI 用量大的团队来说,一次部署的成本回本很快。

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

相关文章:

  • 3步解锁Markmap:让Markdown笔记可视化变得如此简单!
  • 水下数据中心运维
  • 2026年武汉网络推广与短视频代运营深度横评:五大服务商全面对比指南 - 年度推荐企业名录
  • 别再手动改PDF了!用Python的PyMuPDF库,5分钟搞定批量文本替换(附字体避坑指南)
  • 2026年九州再生医疗服务商哪家好:专业机构选型参考与核心实力分析 - 商业小白条
  • 计算机组成原理 | 加法器是如何炼成的?
  • 为Claude Code编程助手配置Taotoken作为后端模型供应商的步骤
  • 大模型推理中的对话行为与多视角机制解析
  • Mac 本地搭建 Redis 指南
  • 2026铁皮保温施工排行:实测性能与资质对比 铁皮保温施工 罐体保温施工 管道保温施工 厂家电话 - 奔跑123
  • 光子芯片测试速成
  • UnoCSS智能提示从失效到生效:我的踩坑记录与一份可用的uno.config.ts模板
  • 素颜可涂自然提亮防晒霜,太绝了,6款防晒霜不假白自然提亮一绝 - 全网最美
  • 内容创作团队如何借助Taotoken调用不同模型风格提升产出效率
  • HumDex: Humanoid Dexterous Manipulation Made Easy
  • doris脚本
  • 如何构建智能文档处理管道:Pix2Text开源OCR工具的实战应用指南
  • 传统美食如何通过淘宝抖音电商代运营走向全国?云麦电商的成功实践 - 深度智识库
  • 终极开源方案:专业解锁WeMod高级功能的完整指南
  • C# `BinaryPrimitives` 类详解
  • 铝皮保温包工包料施工厂家实测排行与性能对比 河北旭阔环保科技有限公司 厂家电话 - 奔跑123
  • 2026年新疆隐形车衣与乌鲁木齐汽车漆面保护膜完全选购指南 - 企业名录优选推荐
  • 告别鼠标手!Mac访达与终端高效互通的5个隐藏技巧(附Alfred5联动)
  • 别再浪费你的ADC了!用STM32的过采样功能,把12位ADC当14位用(附代码)
  • 【专利视点】光华经典案例八:答辩中关于发明克服了技术偏见的争辩
  • API测试(可删)
  • 告别臃肿!用注册表编辑器(Regedit)给你的Win10系统做一次深度“瘦身”
  • 终极指南:在Windows系统上高效安装安卓应用的专业方案
  • ubuntu 22.04 /etc/fstab 文件修改有误导致无法进入系统处理
  • 2026年武汉短视频代运营与GEO推广5大品牌深度横评:如何选择真正能转化的服务商 - 年度推荐企业名录