Docker 玩法

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满足以下条件:

  1. NAS型号:建议x86架构,如群晖DS920+、威联通TS-453D等,ARM架构也能运行但性能较弱
  2. 内存:至少4GB,推荐8GB以上(GitLab比较吃内存)
  3. Docker:NAS已安装Docker套件(群晖在套件中心安装,威联通在App Center安装)
  4. 存储空间:建议预留50GB以上,代码仓库会持续增长
  5. 域名或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带来的便利远超预期。

💬 评论区
发表评论

暂无评论,来说两句吧