NAS Docker部署GitLab:打造团队私有代码托管平台
在团队协作开发中,代码托管平台是必不可少的工具。虽然GitHub、Gitee等公有云服务方便快捷,但代码安全、访问速度、定制化需求等问题始终困扰着许多团队。特别是对于代码保密性要求高的企业,或者网络环境不稳定的开发者,自建代码托管平台成了一个刚需。
NAS作为家庭或小型企业的数据中心,拥有低功耗、7×24小时运行、大容量存储等优势,非常适合用来部署GitLab——这个功能强大的开源代码托管平台。本文将手把手教你如何在NAS上通过Docker部署GitLab,搭建属于自己的私有代码仓库。
为什么选择GitLab?
GitLab是一个基于Git的完整DevOps平台,除了基础的代码托管功能外,还提供了:
- 项目管理:Issue跟踪、里程碑、看板等
- CI/CD:内置持续集成/持续部署流水线
- 代码审查:Merge Request机制,支持代码评审
- 权限管理:精细的用户、组、项目权限控制
- Wiki与文档:项目内建知识库
相比Gitea、Gogs等轻量级方案,GitLab功能更全面,虽然资源占用稍高,但在NAS上运行依然游刃有余。
准备工作
在开始部署前,请确保你的NAS满足以下条件:
- NAS型号:建议x86架构,如群晖DS920+、威联通TS-453D等,ARM架构也能运行但性能较弱
- 内存:至少4GB,推荐8GB以上(GitLab比较吃内存)
- Docker:NAS已安装Docker套件(群晖在套件中心安装,威联通在App Center安装)
- 存储空间:建议预留50GB以上,代码仓库会持续增长
- 域名或DDNS:如果需要公网访问,建议提前配置好
部署GitLab容器
1. 创建数据目录
首先在NAS文件管理器中创建GitLab的数据目录,例如:
/docker/gitlab/config # 配置文件
/docker/gitlab/data # 仓库数据
/docker/gitlab/logs # 日志文件
2. 拉取镜像并运行容器
打开NAS的Docker应用,在“注册表”中搜索gitlab-ce,选择gitlab/gitlab-ce镜像并下载(建议选择最新稳定版)。
然后通过SSH或Docker UI创建容器,以下是一个完整的docker-compose配置:
version: '3'
services:
gitlab:
image: 'gitlab/gitlab-ce:latest'
container_name: gitlab
restart: always
hostname: 'gitlab.example.com' # 改为你的域名或IP
environment:
GITLAB_OMNIBUS_CONFIG: |
external_url 'http://gitlab.example.com' # 外部访问地址
# 邮件配置(可选)
gitlab_rails['gitlab_smtp_enable'] = true
gitlab_rails['gitlab_smtp_address'] = "smtp.qq.com"
gitlab_rails['gitlab_smtp_port'] = 465
gitlab_rails['gitlab_smtp_user_name'] = "[email protected]"
gitlab_rails['gitlab_smtp_password'] = "your-smtp-code"
gitlab_rails['gitlab_smtp_authentication'] = "login"
gitlab_rails['gitlab_smtp_tls'] = true
ports:
- '8080:80' # HTTP端口映射
- '8443:443' # HTTPS端口映射
- '2222:22' # SSH端口映射
volumes:
- '/docker/gitlab/config:/etc/gitlab'
- '/docker/gitlab/data:/var/opt/gitlab'
- '/docker/gitlab/logs:/var/log/gitlab'
shm_size: '256m'
如果你不想用docker-compose,也可以通过命令行直接创建:
docker run --detach \
--hostname gitlab.example.com \
--publish 8080:80 --publish 8443:443 --publish 2222:22 \
--name gitlab \
--restart always \
--volume /docker/gitlab/config:/etc/gitlab \
--volume /docker/gitlab/data:/var/opt/gitlab \
--volume /docker/gitlab/logs:/var/log/gitlab \
--shm-size 256m \
gitlab/gitlab-ce:latest
3. 等待初始化
容器启动后,GitLab会进行初始化配置,这个过程可能需要3-5分钟。你可以通过以下命令查看日志:
docker logs -f gitlab
当日志中出现gitlab Reconfigured!时,说明初始化完成。
初始配置与使用
1. 设置管理员密码
浏览器访问http://你的NASIP:8080,第一次访问会提示设置root用户的密码。设置完成后,使用root账号登录。
2. 修改外部URL(重要)
如果后续需要修改访问地址,编辑配置文件:
docker exec -it gitlab /bin/bash
vi /etc/gitlab/gitlab.rb
修改external_url为你的实际地址,然后执行:
gitlab-ctl reconfigure
gitlab-ctl restart
3. 创建项目与用户
登录后,在管理后台创建用户、群组,然后创建项目。你可以为每个项目设置:
- 可见性:私有、内部或公开
- 默认分支保护
- Webhooks(支持与钉钉、企业微信等集成)
4. 配置SSH访问
为了让团队成员通过SSH协议克隆代码,需要修改SSH端口映射。在GitLab管理界面中,进入“管理中心” → “设置” → “网络” → “SSH端口”,设置为2222。
然后用户需要在个人设置中添加自己的SSH公钥。
性能优化与备份
1. 内存优化
如果NAS内存较小(4GB),可以限制GitLab的并发进程:
docker exec -it gitlab /bin/bash
vi /etc/gitlab/gitlab.rb
添加:
# 限制worker进程数
puma['worker_processes'] = 2
sidekiq['max_concurrency'] = 5
# 减少数据库缓存
postgresql['shared_buffers'] = "256MB"
然后gitlab-ctl reconfigure。
2. 定期备份
GitLab自带备份工具,在容器内执行:
docker exec -it gitlab gitlab-backup create
备份文件默认保存在/var/opt/gitlab/backups,即NAS的/docker/gitlab/data/backups目录。建议在NAS上设置定时任务,每天凌晨执行备份,并配合NAS的云同步功能异地容灾。
3. 启用HTTPS
为了安全,建议通过反向代理(如Nginx Proxy Manager)或直接配置Let's Encrypt证书。在gitlab.rb中启用:
external_url 'https://gitlab.example.com'
nginx['redirect_http_to_https'] = true
letsencrypt['enable'] = true
总结
通过NAS部署GitLab,你拥有了一个完全自主可控的代码托管平台,不仅解决了代码安全问题,还能根据团队需求进行深度定制。整个过程并不复杂,只需注意端口映射和数据持久化。
部署完成后,你可以将NAS上的GitLab作为团队的核心开发平台,配合CI/CD流水线,实现从代码提交到自动部署的完整DevOps流程。随着使用深入,你会发现自建GitLab带来的便利远超预期。
暂无评论,来说两句吧