1. 为什么要在Windows内网部署GitLab私有仓库最近几年越来越多的开发团队开始重视代码资产的安全管理。特别是在金融、医疗等行业代码泄露可能带来严重后果。而GitLab作为一款开源的代码托管平台不仅具备Git仓库管理功能还集成了CI/CD、代码审查等实用工具非常适合中小团队使用。在内网环境中部署GitLab有几个明显优势首先是数据安全所有代码都存储在公司内部服务器上不会经过外网传输其次是访问速度快内网传输速度通常比外网快得多最后是定制灵活可以根据团队需求调整配置。我在实际项目中就遇到过这样的情况一个20人的开发团队使用公有云GitLab经常遇到访问延迟问题迁移到内网后代码拉取速度提升了近10倍。2. Docker环境准备与配置2.1 安装Docker Desktop在Windows上部署GitLab我强烈推荐使用Docker方式。相比直接安装Docker方案更干净、更容易维护。首先需要下载安装Docker Desktop这里有个小技巧如果你的Windows版本比较新比如Win10 2004及以上建议使用WSL2后端性能会更好。安装完成后记得做这几件事在设置中启用WSL2集成调整资源分配建议至少4GB内存配置国内镜像源加速下载# 检查Docker是否安装成功 docker --version docker-compose --version2.2 解决镜像拉取问题国内用户可能会遇到Docker镜像拉取慢甚至失败的问题。我常用的解决方案是配置镜像加速器。阿里云、腾讯云都提供免费的加速服务注册后就能获取专属加速地址。把这个地址配置到Docker Desktop的设置中速度会有明显提升。// Docker配置文件示例 { registry-mirrors: [ https://your-aliyun-mirror.mirror.aliyuncs.com ] }3. GitLab容器化部署实战3.1 准备Docker Compose文件使用Docker Compose部署GitLab是最优雅的方式。我习惯在D盘创建专门的docker目录来管理所有容器配置。下面是经过实战检验的docker-compose.yml文件version: 3.8 services: gitlab: image: twang2218/gitlab-ce-zh:latest container_name: gitlab-ce restart: always hostname: gitlab.example.com environment: TZ: Asia/Shanghai GITLAB_OMNIBUS_CONFIG: | external_url http://192.168.1.100 gitlab_rails[gitlab_shell_ssh_port] 2222 gitlab_rails[time_zone] Asia/Shanghai nginx[listen_port] 8888 ports: - 8888:8888 # HTTP - 2222:22 # SSH - 8443:443 # HTTPS volumes: - D:/docker/gitlab/config:/etc/gitlab - D:/docker/gitlab/data:/var/opt/gitlab - D:/docker/gitlab/logs:/var/log/gitlab networks: - gitlab-net networks: gitlab-net: driver: bridge这个配置有几个关键点需要注意使用了中文社区版镜像对国内用户更友好端口映射采用了非标准端口避免冲突数据卷映射到Windows目录方便备份3.2 启动与初始化在docker-compose.yml所在目录打开PowerShell执行docker-compose up -d第一次启动会比较慢因为GitLab需要进行初始化配置。你可以通过以下命令查看日志docker logs -f gitlab-ce当看到GitLab configured and started的提示时说明服务已经就绪。这时候在浏览器访问http://192.168.1.100:8888IP换成你的实际地址就能看到GitLab的登录页面了。4. 端口映射的坑与解决方案4.1 中文版的端口拼接问题这里要重点讲一个中文版GitLab特有的坑端口拼接问题。简单来说就是当你使用命令行操作Git仓库时GitLab生成的URL会自动省略端口号导致操作失败。我遇到过这样的情况克隆仓库时使用git clone http://192.168.1.100/group/project.git结果总是失败。原因是实际访问地址应该是http://192.168.1.100:8888/group/project.git。这个问题在英文原版中不存在是中文版的一个bug。解决方案有两种每次手动添加端口号修改GitLab配置强制包含端口号# 在gitlab.rb中添加 nginx[listen_port] 8888 gitlab_rails[gitlab_shell_ssh_port] 2222 external_url http://192.168.1.100:88884.2 SSH访问配置SSH访问是另一个容易出问题的地方。由于我们修改了默认的SSH端口22→2222需要在客户端做相应调整。在~/.ssh/config中添加Host gitlab.example.com HostName 192.168.1.100 Port 2222 User git这样配置后就可以像平常一样使用SSH协议操作仓库了git clone gitgitlab.example.com:group/project.git5. 日常维护与优化建议5.1 备份策略GitLab的数据备份很简单但有几个细节需要注意。我建议使用以下命令创建完整备份docker exec -t gitlab-ce gitlab-backup create这个命令会备份所有仓库数据、数据库和附件。但要注意它不会备份配置文件。所以还需要手动备份/etc/gitlab目录下的内容。5.2 性能调优对于小型团队默认配置可能就够了。但随着项目增多你可能需要调整一些参数# 增加工作进程数 unicorn[worker_processes] 4 # 调整Sidekiq并发数 sidekiq[max_concurrency] 10 # 增加数据库连接池 postgresql[max_worker_processes] 85.3 常见问题排查我在维护GitLab时遇到过几个典型问题502错误通常是Unicorn服务挂了尝试docker restart gitlab-ce仓库无法访问检查gitlab-ctl status确保所有服务都运行正常磁盘空间不足定期清理/var/opt/gitlab/git-data/repositories中的临时文件6. 内网访问优化技巧为了让团队成员更方便地访问内网GitLab我有几个实用建议在内网DNS服务器上添加gitlab.example.com的解析记录使用Nginx做反向代理统一80端口访问配置Lets Encrypt证书实现HTTPS加密server { listen 80; server_name gitlab.example.com; location / { proxy_pass http://localhost:8888; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } }这套方案在我负责的多个项目中运行稳定团队成员反馈使用体验接近GitHub等公有云服务但数据完全掌握在自己手中。特别是对于需要频繁提交大文件的团队内网GitLab的速度优势非常明显。