GitLab 502 错误网关

GitLab 502 错误网关

我试图安装 GitLab在运行蚂蚁纳米设备。服务器已经安装了 Nginx、PostgreSQL 和 Postfix,作为邮件系统,所以我正在设置 GitLab 以使用这些资源。我的 Nginx 服务器上的所有现有站点似乎仍正常运行(例如webmail.mydomain.comwiki.mydomain.com-a维基百科安装 - 和www.mydomain.com),但是当我尝试通过浏览器访问我的 GitLab 安装时(gitlab.mydomain.com),我得到一个502 Bad Gateway回复。

我已按照说明进行操作使用非捆绑的 Web 服务器并在 中禁用捆绑的 Nginx 服务器(以及捆绑的 PostgreSQL 服务器)gitlab.rb。然后我server根据sites-enabledGitLab 菜谱。我安装了 SSL 证书让我们加密当我访问该网站时,该特定子域名显示为有效。

我确信我只是“忽略”了一些东西,但我承认我对 *nix 环境或 Nginx 并不是很熟悉。以下是我的gitlab.rb文件中未注释的部分(已编辑):

external_url 'https://gitlab.mydomain.com'

postgresql['enable'] = false

gitlab_rails['db_adapter'] = 'postgresql'
gitlab_rails['db_encoding'] = 'utf8'
gitlab_rails['db_username'] = 'USERNAME'
gitlab_rails['db_password'] = 'PASSWORD'
gitlab_rails['db_host'] = '127.0.0.1'
gitlab_rails['db_port'] = 5432

web_server['external_users'] = ['www-data']

nginx['enable'] = false
nginx['ssl_prefer_server_ciphers'] = "off"

文件中的所有其他内容均已被注释掉。

为了完整起见,下面是conf我的 Nginx 中 GitLab 的设置sites-enabled已编辑

upstream gitlab-workhorse {
  # On GitLab versions before 13.5, the location is
  # `/var/opt/gitlab/gitlab-workhorse/socket`. Change the following line
  # accordingly.
  server unix:/var/opt/gitlab/gitlab-workhorse/sockets/socket fail_timeout=0;
}

server {
    listen 443 ssl http2;
    listen [::]:443 ipv6only=on ssl;
    server_name gitlab.mydomain.com;
    server_tokens off;

    root /opt/gitlab/embedded/service/gitlab-rails/public;

    # GitLab needs backwards compatible ciphers to retain compatibility with Java IDEs
    ssl_ciphers "ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:ECDHE-RSA-DES-CBC3-SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!MD5:!PSK:!RC4";
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers on;
    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 5m;

    ## Individual nginx logs for this GitLab vhost
    access_log  /var/log/nginx/gitlab_access.log;
    error_log   /var/log/nginx/gitlab_error.log;

    location / {
        client_max_body_size 0;
        gzip off;

        ## https://github.com/gitlabhq/gitlabhq/issues/694
        ## Some requests take more than 30 seconds.
        proxy_read_timeout 300;
        proxy_connect_timeout 300;
        proxy_redirect off;

        proxy_http_version 1.1;

        proxy_set_header    Host                $http_host;
        proxy_set_header    X-Real-IP           $remote_addr;
        proxy_set_header    X-Forwarded-Ssl     on;
        proxy_set_header    X-Forwarded-For     $proxy_add_x_forwarded_for;
        proxy_set_header    X-Forwarded-Proto   $scheme;
        proxy_pass http://gitlab-workhorse;
    }

    location ~ /.well-known/acme-challenge {
        root /var/www/ssl/;
        allow all;
    }

    ssl_certificate /etc/letsencrypt/live/gitlab.mydomain.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/gitlab.mydomain.com/privkey.pem;
    ssl_trusted_certificate /etc/letsencrypt/live/gitlab.mydomain.com/chain.pem;
}

PostgreSQL 似乎设置正确 - 我能够运行,gitlab-rake gitlab:setup并且gitlabhq_production数据库及其各种模式和表存在于该服务器上。

正如我所说,我可能只是做错了什么,但我不知道是什么。我想过把这些proxy东西从中删除conf,因为我能想到的可能就是这些Bad Gateway回应,但那会删除workhorse相信很重要。否则,其他一切似乎都很重要。

当然,我可能需要进行gitlab.rb更多调整,但我已经尝试过几次,寻找任何看起来很有希望的东西,但没有成功。如果有人能了解我在这里遗漏了什么,我将不胜感激。

编辑:

有关我自己的故障排除的其他信息 我已经测试了 Nginxconf文件并重新启动了该服务器:

nginx -t
systemctl reload nginx.service
systemctl restart nginx

我已经多次运行gitlab-ctl reconfigure,并对 进行了调整gitlab.rb。我刚刚想起,出现了一些“问题”,这可能是部分原因:

Mixlib::ShellOut::CommandTimeout: ruby_block[authorize Grafana with GitLab] (monitoring::grafana line 101) had an error: Mixlib::ShellOut::CommandTimeout: Command timed out after 600s:
Command exceeded allowed execution time, process terminated

随后是大量 StackTrace 信息(我可以提供,如果有帮助的话

编辑#2:

根据评论,我试图确保 GitLab 服务正在运行:

sudo gitlab-ctl start
ok: run: alertmanager: (pid 29660) 51764s
ok: run: gitaly: (pid 26686) 58352s
ok: run: gitlab-exporter: (pid 3223) 46573s
ok: run: gitlab-kas: (pid 26650) 58367s
ok: run: gitlab-workhorse: (pid 29598) 51780s
ok: run: logrotate: (pid 9914) 864s
ok: run: node-exporter: (pid 29608) 51779s
ok: run: prometheus: (pid 29626) 51776s
ok: run: puma: (pid 2698) 47257s
ok: run: redis: (pid 26145) 58729s
ok: run: redis-exporter: (pid 29619) 51777s
ok: run: sidekiq: (pid 2535) 47368s

据我有限的理解,这看起来应该是“准备好了”,但我仍然得到Bad Gateway我的浏览器没有响应。我检查时没有显示这些服务ls /etc/init.d,但我认为一切都应该正确。

答案1

根据我在聊天中为您进行的诊断,我们发现:

  1. Gitlab 套接字实际上正在运行,通过find /var/opt/gitlab/ -type s显示套接字存在来确认。

  2. NGINX 无法访问 和 的中间目录/var/opt/gitlab/gitlab-workhorse/var/opt/gitlab/gitlab-workhorse/sockets/这是核心问题。 的输出证实了这一点,输出sudo -u www-data namei -l /var/opt/gitlab/gitlab-workhorse/sockets/socket显示只有gitgitlab-www具有访问权限,并且该文件夹不可全局递归,而这正是 NGINX 所需要的。

修理错误,您需要确保这些目录具有读/执行权限。

sudo chmod o+rx /var/opt/gitlab/gitlab-workhorse /var/opt/gitlab/gitlab-workhorse/sockets/

您遇到的剩余问题是 Gitlab 内部 502 - 这表明 GitLab 中的内容尚未完全加载。请等待最多 20 分钟。GitLab 正在不是一小组软件/包,因此在被前端使用之前它有很多需要启动的东西。

如果出现冻结,请重新启动 Gitlab,sudo gitlab-ctl stop && sudo gitlab-ctl start然后等待最多 20 分钟以使服务恢复。


或者,考虑使用更轻量的 git 环境,例如希泰亚如果您在使用 Gitlab 和系统资源时遇到问题。Gitea 的功能不如 Gitlab 丰富,但如果您只是在练习 git-fu,则不需要 Gitlab 提供的完整复杂功能集。Gitea 也不是没有功能的,但它有较少的比 GitLab 具有更多的组件,如果您所做的只是使用 Git 进行练习并为您的 git 存储库提供 GUI,这将使它成为一个更易于部署和更易于使用的环境。

(它也没有 4 个 vCPU 和 4GB RAM最低要求建议使用 8GB RAM,就像 Gitlab 一样,并且假设你有一个专用于 Gitlab 的系统/VM)

相关内容