自建 GitLab CE把代码仓库搬到自己的服务器用 GitHub 存代码很方便但有些情况会让人想自建公司代码不想放公有云、私有仓库数量有限、想自己掌控 CI/CD 流程。GitLab Community Edition 是完整的开源 DevOps 平台代码托管、Issue 管理、CI/CD Pipeline、Container Registry 全部打包功能不比 GitHub 少多少。缺点也很明显资源消耗大至少要 4GB 内存才跑得比较顺畅。服务器配置GitLab 是我见过的最吃内存的 Web 应用之一用途CPU内存硬盘1–5 人小团队2 核4G50GB5–20 人团队4 核8G100GB我在雨云用 4 核 8G 的机器跑 GitLab几个人的开发团队日常使用没问题。雨云按月付费价格比同配置的大厂便宜不少。新用户注册填优惠码2026off能领 5 折优惠券。用 Docker 部署 GitLabDocker 方式比直接装包更容易升级和迁移mkdir-p/opt/gitlabcat/opt/gitlab/docker-compose.ymlEOF 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 密码dockerexecgitlabgrepPassword:/etc/gitlab/initial_root_password这个文件在 24 小时后会自动删除记得及时改密码。配置 HTTPS上面的配置里external_url已经配置了https://GitLab 内置 Let’s Encrypt 自动申请证书。确保 DNS 解析正确指向服务器并在云控制台放行TCP 80和TCP 443GitLab 需要 80 来验证域名。如果你想用已有证书比如通配符证书可以在GITLAB_OMNIBUS_CONFIG里指定nginx[ssl_certificate] /etc/gitlab/ssl/cert.pem nginx[ssl_certificate_key] /etc/gitlab/ssl/key.pem letsencrypt[enable] falseSSH 推送代码GitLab 的 SSH 端口映射到了主机的2222需要在本地~/.ssh/config里配置cat~/.ssh/configEOF Host git.你的域名.com Port 2222 IdentityFile ~/.ssh/id_ed25519 EOF在 GitLab 个人设置 → SSH Keys 里添加公钥后就可以 push/pull 了。启用 GitLab CI/CDGitLab 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\--urlhttps://git.你的域名.com\--registration-token从 GitLab 项目设置里找到的 token\--executordocker\--docker-imagealpine:latest\--descriptionmy-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 点echo0 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 reconfigureGitLab CE 自建的主要优势是完全掌控代码在自己机器上CI/CD 免费无限制可以按需扩展 Runner。对于看重数据主权或者 CI 用量大的团队来说一次部署的成本回本很快。