ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

实战:在 Linux 系统用 Docker-Compose 优雅部署 GitLab 及防坑指南

实战:在 Linux 系统用 Docker-Compose 优雅部署 GitLab 及防坑指南 实战在 Linux 系统用 Docker-Compose 优雅部署 GitLab 及防坑指南开篇引言团队开发怎么能少得了代码托管虽然市面上有现成的云服务但把源码握在自己手里总是更踏实。最爽的部署方式莫过于用 Docker 一键拉起不用弄脏宿主机的环境。不过GitLab 是个名副其实的“资源吞噬者”直接裸跑很容易把服务器直接卡死。今天和大家分享一套我在生产环境中实际使用的部署方案通过docker-compose结合.env环境变量实现配置解耦、资源限制并且完美兼容宿主机原本的网络和反向代理环境。1. 核心配置文件整理为了方便维护强烈建议把环境参数和部署编排分开。项目目录/home/server/gitlab第一步创建环境变量文件.env在这个文件里定义好我们需要的版本、路径、端口和限制参数VERSIONlatest CONTAINER_NAMECONTAINER_NAME HOST_IP127.0.0.1 WEB_HTTP_PORT11080 WEB_HTTPS_PORT11443 WEB_SSH_PORT11022 DOMAIN_HOST域名或IP端口10080 CPUS6 MEMORY_LIMIT15360MB APP_PATH/home/server/gitlab第二步编写docker-compose.yml利用上面的变量把应用跑起来。注意看这里面的网络和端口映射细节services:gitlab_3Lss:image:gitlab/gitlab-ce:${VERSION}deploy:resources:limits:cpus:${CPUS}memory:${MEMORY_LIMIT}restart:alwayshostname:${DOMAIN_HOST}shm_size:256mnetwork_mode:bridgeports:-${HOST_IP}:${WEB_HTTP_PORT}:80-${HOST_IP}:${WEB_HTTPS_PORT}:443-${HOST_IP}:${WEB_SSH_PORT}:22environment:GITLAB_OMNIBUS_CONFIG:|external_url http://${DOMAIN_HOST} # ⚠️ 强烈建议在此处补充这一行解决 SSH 端口显示问题 gitlab_rails[gitlab_shell_ssh_port] ${WEB_SSH_PORT} nginx[listen_port] 80 nginx[listen_addresses] [0.0.0.0]volumes:-${APP_PATH}/config:/etc/gitlab-${APP_PATH}/logs:/var/log/gitlab-${APP_PATH}/data:/var/opt/gitlab2. 部署过程中的“踩坑”与细节解读为什么配置文件要这么写这背后其实藏着几个极其关键的防坑技巧避坑 1内存直接吃满服务器卡死[cite_start]GitLab 启动后会有几十个后台进程。如果不做限制它能榨干宿主机的最后一滴内存。在我们的配置中直接通过deploy.resources.limits强制给它分配了 15360MB 的内存 [cite: 1] [cite_start]和 6 核 CPU [cite: 1]。划重点同时加上shm_size: 256m防止共享内存不足导致 GitLab 的 Prometheus 等组件报错挂掉。避坑 2端口冲突与外网安全[cite_start]你看我的端口映射是${HOST_IP}:${WEB_HTTP_PORT}:80而在环境里${HOST_IP}被设置成了127.0.0.1[cite: 1][cite_start]。这是为了安全意味着 GitLab 的 10080 端口 [cite: 1] [cite_start]只对服务器内部开放外网根本无法直接通过 IP端口 访问。我们需要在宿主机上通过 Nginx或者宝塔面板做一个反向代理把git.gozuche.com[cite: 1] 代理到本机的10080端口上既安全又能加 SSL 证书。避坑 3克隆代码时 SSH 端口不对[cite_start]宿主机的 22 端口通常用来远程登录所以我们把 GitLab 的 SSH 暴露到了10022端口 [cite: 1]。但是如果不告诉 GitLab 这个变化你在网页上点击“Clone”时出来的链接还是默认的 22 端口。解决办法一定要在GITLAB_OMNIBUS_CONFIG里加上gitlab_rails[gitlab_shell_ssh_port] 10022这样复制出来的 clone 命令才是对的。避坑 4网络隔离冲突如果你在使用类似宝塔面板的环境里面往往有自己的一套 Docker 网络比如baota_net。在 compose 的底部通过external: true声明引入外部网络可以让 GitLab 和面板上的其他服务比如 Nginx 容器处于同一个网段方便反代。总结用 Docker 部署应用能用变量就用变量能绑本地 IP 就别直接暴露给外网。配置弄好后在目录下执行docker-compose up -d接下来就是泡杯茶静等 3-5 分钟让它初始化完毕吧
返回列表