博文

GitLab Docker 部署笔记(TNAS)

约 2 分钟
  • 日期:2026-09-22

  • 目标主机:192.168.1.196:9222(TerraMaster TNAS-0976)

  • 访问地址:http://192.168.1.196:8929

  • 关联:[[2026-09-22-Penpot-Docker部署笔记|Penpot Docker 部署笔记]](同一台 TNAS,环境信息见该篇)

1. 环境信息

项目值
主机TNAS-0976(内核 5.15.59,4C / 7.6G / /Volume1 3.7T)
SSH端口 9222,用户 ZcAuto_1234(uid=0,admin 组)
Docker20.10.17(DockerEngine 套件,data-root /Volume1/@DockerData)
docker-composev2.12.2(独立二进制,非 CLI 插件)
镜像gitlab/gitlab-ce:latest(19.4.0-ce.0)

关键路径

docker CLI : /Volume1/@apps/DockerEngine/dockerd/bin/docker
compose    : /Volume1/@apps/DockerEngine/dockerd/bin/docker-compose
部署目录  : /Volume1/Docker/gitlab/
  docker-compose.yml
  config/   -> /etc/gitlab   (gitlab.rb、初始 root 密码)
  logs/     -> /var/log/gitlab
  data/     -> /var/opt/gitlab

PATH 中无 docker,需完整路径或先 PATH=/Volume1/@apps/DockerEngine/dockerd/bin:$PATH。 无 docker compose 子命令,用独立 docker-compose。

2. 登录

# Windows(plink,hostkey 已知)
plink

传文件用 pscp -scp(pscp 默认 SFTP 在该机会断连):

pscp

3. Compose 部署

/Volume1/Docker/gitlab/docker-compose.yml:

services
  gitlab
    image
    container_name
    restart
    hostname
    environment
      GITLAB_OMNIBUS_CONFIG
        external_url 'http://192.168.1.196:8929'
        gitlab_rails['gitlab_shell_ssh_port'] = 2224
        puma['worker_processes'] = 2
        prometheus_monitoring['enable'] = false
        node_exporter['enable'] = false
        redis_exporter['enable'] = false
        postgres_exporter['enable'] = false
        gitlab_exporter['enable'] = false
    ports
      - 
      - 
    volumes
      - 
      - 
      - 
    shm_size
    mem_limit

要点:

  • external_url 带 :8929 时,容器内 nginx 直接监听 8929(不是 80)→ 端口映射必须 8929:8929,写成 8929:80 会全部 connection refused

  • 关 Prometheus/Grafana 系 exporter 省内存(NAS 仅 7.6G,同时跑着 Penpot)

  • mem_limit: 6g + shm_size: 256m

  • 无 HTTPS;对外再暴露时改 external_url 为 https 并映射 443

export
cd
docker-compose

首次初始化(migrations)约 5–10 分钟,docker ps 显示 healthy 即可。

4. 端口与访问

用途宿主机容器内说明
Web HTTP89298929nginx(external_url 带端口)
Git SSH222422git clone ssh://git@192.168.1.196:2224/...
HTTPS——未启用

同机已占用端口(避开):80/443(nasips)、8181、3306、9001(Penpot)、1080、9222 等。

5. 初始 root 密码

首次安装生成,文件 24 小时后 随 reconfigure 删除:

docker
  • 用户名 root;登录后立即改密

  • 密码入 KeePass,本笔记不记录明文

6. 默认中文界面

GitLab 19.4 没有 gitlab.rb 级 default_locale 配置(写了也不进 gitlab.yml,属无效项,已从 gitlab.rb 删除)。

正确做法:改数据库应用设置 ApplicationSetting.default_preferred_language:

docker
s = ApplicationSetting.current
s.default_preferred_language = "zh_CN"
s.save!
'
docker

验证(登录页应为 lang="zh-CN"、<title>登录 · GitLab</title>):

docker
  • 此设置存数据库,容器重建不丢

  • 新用户默认中文;已有用户若手动选过语言,按个人偏好(头像 → Preferences → Language)

7. 常用运维命令

export
cd

docker-compose
docker-compose
docker-compose
docker-compose
docker-compose

docker
docker
docker

宿主机无 curl/wget:用 docker exec gitlab curl ... 或 Windows curl.exe 验证 HTTP。

8. 踩坑记录

  1. 端口映射错:external_url 带端口 → nginx 监听 8929;8929:80 会全挂,须 8929:8929。

  2. grafana['enable'] 报错:GitLab 19.4 已移除此配置项,reconfigure 抛 UnknownConfigOptionError 导致容器反复重启;删除该项即可。

  3. default_locale 无效:gitlab.rb 写了不报错但不生效;真正字段是 DB 里的 default_preferred_language。

  4. pscp 默认 SFTP 断连:加 -scp 走 SCP 协议。

  5. PowerShell 吞引号/$:复杂远端命令先写本地 .sh,pscp -scp 上传后 plink 执行;sed -i 's/\r$//' 先去 CRLF。

  6. 宿主机无 curl/wget:HTTP 探测走容器内 docker exec gitlab curl。

  7. 内存紧张:7.6G 同时跑 Penpot + GitLab,关全部 monitoring 组件才稳;free 见 available < 4.6G 时注意 OOM。

9. 后续建议

  • 登录后改 root 密码,密码入 KeePass

  • initial_root_password 24h 后自动删,尽快改密

  • 对外暴露配 HTTPS(改 external_url + 映射 443,或前置反代)

  • 定期备份 /Volume1/Docker/gitlab/data(或 gitlab-backup)

  • 按需关闭注册(Admin → Settings → General → Sign-up restrictions)

相关阅读

← 返回博文列表