带有 GITLAB_OMNIBUS_CONFIG 的 Docker-Compose.yml 不起作用

Posted

技术标签:

【中文标题】带有 GITLAB_OMNIBUS_CONFIG 的 Docker-Compose.yml 不起作用【英文标题】:Docker-Compose.yml with GITLAB_OMNIBUS_CONFIG not working 【发布时间】:2022-01-05 10:03:56 【问题描述】:

对不起,如果这是一个重复的问题——我发现了类似的问题,但似乎没有一个是我的确切用例……如果我错过了提及链接的内容,我们将不胜感激。

我正在尝试用 frontproxy、acme-companion 和 gitlab 组成一个 docker 堆栈。

目前,我正在使用一个设置,其中包含几个用于 frontproxy 和 gitlab 的 docker-compose.yml 文件,位于单独的目录中——这是工作,没有 acme-companion。

到目前为止,我尝试将其全部集成到一个文件中失败了;显然我搞砸了GITLAB_OMNIBUS_CONFIG 配置——我只是不明白我的错误在哪里。

version: '3.1'

services:
  frontproxy:
    restart: always
    image: jwilder/nginx-proxy
    labels:
      - "com.github.jrcs.letsencrypt_nginx_proxy_companion.nginx"
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - "/var/run/docker.sock:/tmp/docker.sock:ro"
      - "certs-volume:/etc/nginx/certs:ro"
      - "/etc/nginx/vhost.d"
      - "/usr/share/nginx/html"
  nginx-letsencrypt-companion:
    restart: always
    image: nginxproxy/acme-companion
    volumes:
      - "certs-volume:/etc/nginx/certs"
      - "/var/run/docker.sock:/var/run/docker.sock:ro"
  gitlab:
    image: gitlab/gitlab-ce:latest
    restart: always
    hostname: 'dev.redacted.com'
    environment:
      VIRTUAL_HOST: 'dev.redacted.com'
      LETSENCRYPT_HOST: 'dev.redacted.com'
      LETSENCRYPT_EMAIL: 'splash@redacted.com'
      VIRTUAL_PROTO: 'https'
      VIRTUAL_PORT: '443'
      CERT_NAME: 'redacted.com'
      GITLAB_OMNIBUS_CONFIG: |
      # Email setup
        gitlab_rails['gitlab_email_enabled'] = true
        gitlab_rails['gitlab_email_from'] = 'admin@redacted.com'
        gitlab_rails['gitlab_email_display_name'] = 'Gitlab@redacted.com'
        gitlab_rails['gitlab_email_reply_to'] = 'admin@redacted.com'
        gitlab_rails['smtp_enable'] = true
        gitlab_rails['smtp_address'] = 'mail.redacted.com'
        gitlab_rails['smtp_port'] = 587
        gitlab_rails['smtp_user_name'] = 'admin@redacted.com'
        gitlab_rails['smtp_password'] = 'redacted'
        gitlab_rails['smtp_domain'] = 'redacted.com'
        gitlab_rails['smtp_authentication'] = 'login'
        gitlab_rails['smtp_enable_starttls_auto'] = true
        gitlab_rails['gitlab_root_email'] = 'admin@redacted.com'
        # HTTPS Setup
        letsencrypt['enable'] = false
        external_url 'https://dev.redacted.com'
        gitlab_rails['gitlab_https'] = true
        gitlab_rails['gitlab_port'] = 443
    ports:
      - '22:22'
    volumes:
      - ./config:/etc/gitlab
      - ./logs:/var/log/gitlab
      - ./data:/var/opt/gitlab
volumes:
  certs-volume:

编辑:

我没有具体说明我看到的错误——感谢您指出,@sytech! 因此,这是尝试使用 docker-compose up -d 启动堆栈时的确切错误消息:

ERROR: yaml.parser.ParserError: while parsing a block mapping
  in "./docker-compose.yml", line 29, column 7
expected <block end>, but found '<scalar>'
  in "./docker-compose.yml", line 38, column 9

【问题讨论】:

你已经安装在./config/etc/gitlab 你可以创建文件config/gitlab.rb 而不是使用环境变量。除此之外,您需要具体告诉我们什么不起作用。你有错误吗?或者配置根本没有按预期工作;究竟如何?预期的行为是什么?您观察到的行为是什么? 是的,抱歉,恐怕我说的不是太具体……另外,在玩了很多之后,我无法弄清楚具体的错误是什么;我设法让它在此期间工作,并将发布我现在正在运行的docker-compose.yml--希望它可以帮助其他人。 看起来问题可能是在您的 YAML 中正确缩进第一条评论 (# Email setup) 的错字。 我可以确认:这正是发生的事情,我又试了一次。您想将您的评论更改为答案,以便我可以接受吗? 这是有道理的,我猜...我投票决定关闭它,因为它的类型;我的理解是删除可能会产生不好的影响...... 【参考方案1】:

虽然我无法弄清楚我在使用 3.1 版的 docker-compose.yml 时遇到的具体问题。我设法编写了一个现在对我有用的东西——也许它对其他人也有用:

version: '2.1'

services:
  frontproxy:
    restart: always
    image: jwilder/nginx-proxy
    labels:
      com.github.nginxproxy.acme-companion.frontproxy: true
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - "/var/run/docker.sock:/tmp/docker.sock:ro"
      - "certs-volume:/etc/nginx/certs:ro"
      - "/etc/nginx/vhost.d"
      - "/usr/share/nginx/html"
  nginx-letsencrypt-companion:
    restart: always
    image: nginxproxy/acme-companion
    volumes:
      - "certs-volume:/etc/nginx/certs"
      - "/var/run/docker.sock:/var/run/docker.sock:ro"
    depends_on:
      - "frontproxy"
    volumes_from:
      - frontproxy
  gitlab:
    image: gitlab/gitlab-ce:latest
    restart: always
    hostname: 'dev.redacted.com'
    environment:
      VIRTUAL_HOST: 'dev.redacted.com'
      LETSENCRYPT_HOST: 'dev.redacted.com'
      LETSENCRYPT_EMAIL: 'admin@redacted.com'
      VIRTUAL_PROTO: 'https'
      VIRTUAL_PORT: '443'
      CERT_NAME: 'dev.redacted.com'
      GITLAB_SKIP_UNMIGRATED_DATA_CHECK: 'true'
      GITLAB_OMNIBUS_CONFIG: |
        # Email setup
        gitlab_rails['gitlab_email_enabled'] = true
        gitlab_rails['gitlab_email_from'] = 'admin@redacted.com'
        gitlab_rails['gitlab_email_display_name'] = 'Gitlab@Redacted'
        gitlab_rails['gitlab_email_reply_to'] = 'admin@redacted.com'
        gitlab_rails['smtp_enable'] = true
        gitlab_rails['smtp_address'] = 'mail.redacted.com'
        gitlab_rails['smtp_port'] = 587
        gitlab_rails['smtp_user_name'] = 'admin@redacted.com'
        gitlab_rails['smtp_password'] = 'myfancypassword'
        gitlab_rails['smtp_domain'] = 'redacted.com'
        gitlab_rails['smtp_authentication'] = 'login'
        gitlab_rails['smtp_enable_starttls_auto'] = true
        gitlab_rails['gitlab_root_email'] = 'admin@redacted.com'
        # HTTPS Setup
        letsencrypt['enable'] = false
        external_url 'https://dev.redacted.com'
        gitlab_rails['gitlab_https'] = true
        gitlab_rails['gitlab_port'] = 443
    ports:
      - '22:22'
    volumes:
      - ./config:/etc/gitlab
      - ./logs:/var/log/gitlab
      - ./data:/var/opt/gitlab
volumes:
  certs-volume:

【讨论】:

【参考方案2】:

我也遇到了同样的问题。

当我使用 GITLAB_OMNIBUS_CONFIG 环境变量时,这些设置似乎不适用。如果我只将易于识别的设置之一复制到 gitlab.rb 配置中,它就可以正常应用。

这是容器中存在的环境变量:

GITLAB_OMNIBUS_CONFIG="external_url 'https://dev.foo.com';nginx['redirect_http_to_https'] = true;gitlab_rails['gitlab_https'] = true;gitlab_rails['gitlab_email_enabled'] = true;gitlab_rails['gitlab_email_from'] = 'dev@foo.com';gitlab_rails['gitlab_email_display_name'] = 'DEV-GitLab';gitlab_rails['gitlab_email_reply_to'] = 'dev@foo.com';gitlab_rails['gitlab_email_subject_suffix'] = 'DEV-GIT';gitlab_rails['backup_keep_time'] = 172800;gitlab_rails['gitlab_shell_ssh_port'] = 9999;"

然而,如果我将 SSH 端口选项添加到 gitlab.rb 并重新配置,我会在克隆地址中看到它。因此,虽然我没有使用组合方法,但我正在使用“podman run”启动容器并传递类似于 gitlab docker 指南中描述的选项。

【讨论】:

我猜你的问题和我的不一样,我担心——虽然你没有机会意识到,因为我最初没有说明我的确切错误信息。对此感到抱歉。但我认为你已经可以让你的工作了? 并非如此。但事实证明,这里有多个障碍。我验证的一件事是 gitlab.rb 文件默认为空;实际上所有的cmets。所以,我改变了我的脚本,用我关心的条目替换了综合将安装的 gitlab.rb。只要 gitlab 继续发出有效的空配置,这是可靠的。另一个更糟糕的问题是 Ubuntu。我正在努力以类似的自动化方式在另一个操作系统上安装。

以上是关于带有 GITLAB_OMNIBUS_CONFIG 的 Docker-Compose.yml 不起作用的主要内容,如果未能解决你的问题,请参考以下文章

gitlab踩坑记录

从零开始devops-gitlab

从零开始devops-gitlab

docker 部署的gitlab备份与恢复

无法通过 SSH 连接到 Gitlab

基于docker-compose搭建gitlab