我试图安装 GitLab在运行蚂蚁纳米设备。服务器已经安装了 Nginx、PostgreSQL 和 Postfix,作为邮件系统,所以我正在设置 GitLab 以使用这些资源。我的 Nginx 服务器上的所有现有站点似乎仍正常运行(例如webmail.mydomain.com
,wiki.mydomain.com
-a维基百科安装 - 和www.mydomain.com
),但是当我尝试通过浏览器访问我的 GitLab 安装时(gitlab.mydomain.com
),我得到一个502 Bad Gateway
回复。
我已按照说明进行操作使用非捆绑的 Web 服务器并在 中禁用捆绑的 Nginx 服务器(以及捆绑的 PostgreSQL 服务器)gitlab.rb
。然后我server
根据sites-enabled
GitLab 菜谱。我安装了 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
根据我在聊天中为您进行的诊断,我们发现:
Gitlab 套接字实际上正在运行,通过
find /var/opt/gitlab/ -type s
显示套接字存在来确认。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
显示只有git
和gitlab-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)