我跑步有困难GitLab和Taiga.io在同一台虚拟机上(即共享同一 IP)。两者都使用 nginx。我的虚拟机运行 Debian 8。
我遵循了经典综合安装适用于 Debian 8 的 GitLab,当我在浏览器上输入我的 VM 的 IP 时,gitlab 可以正确运行,一切顺利。
然后我关闭了它(sudo gitlab-ctl stop
),并安装了 Taiga,按照生产环境设置。根据文档,它使用 Gunicorn 和 Circus 作为 taiga-back(提供 REST API),并使用 nginx 作为前端服务。一旦/etc/nginx/sites-available|enabled/taiga
、~/taiga-back/settings/local.py
和~/taiga-front-dist/dist/conf.json
都使用相同的 IP 地址进行设置,并且重新启动 nginx(sudo service nginx restart
),一切也都顺利进行。
现在,可以将上述所有 Taiga IP 地址更改为不同的端口(例如8080
),重新启动 nginx,Taiga 现在将从 IP 地址 8080 提供服务。一切顺利!
当我重新启动 GitLab ( sudo gitlab-ctl start
) 时,它显示一切启动顺利。但当我尝试访问它(在默认端口 80 上)时,我得到了一个502
!
如果我关闭 Taiga 并重新启动 GitLab,呵呵,GitLab 就可以使用了!基本上,我只能单独使用它们,而不能同时使用。
我也尝试将 Taiga 保留在端口 80 上,并将 GitLab 移到端口 8080 上(通过更改文件上的端口/etc/gitlab/gitlab.rb
并运行sudo gitlab-ctlr reconfigure
),但我从未成功运行它。
我还尝试将 GitLab 配置为使用系统 nginx(而不是嵌入式 nginx),即 Taiga 使用的 nginx。为此,我按照以下gitlab.rb
方法禁用了 nginx文档,并使用综合(非 SSL)配方:
## GitLab 8.3+
##
## Lines starting with two hashes (##) are comments with information.
## Lines starting with one hash (#) are configuration parameters that can be uncommented.
##
##################################
## CONTRIBUTING ##
##################################
##
## If you change this file in a Merge Request, please also create
## a Merge Request on https://gitlab.com/gitlab-org/omnibus-gitlab/merge_requests
##
###################################
## configuration ##
###################################
##
## See installation.md#using-https for additional HTTPS configuration details.
upstream gitlab-workhorse {
server unix:/var/opt/gitlab/gitlab-workhorse/socket;
}
## Normal HTTP host
server {
## Either remove "default_server" from the listen line below,
## or delete the /etc/nginx/sites-enabled/default file. This will cause gitlab
## to be served if you visit any address that your server responds to, eg.
## the ip address of the server (http://x.x.x.x/)n 0.0.0.0:80 default_server;
listen 80 default_server;
#listen [::]:80 default_server;
server_name gitlab.<replaced with company URL> <replace with VM IP address>; ## Replace
server_tokens off; ## Don't show the nginx version number, a security best practice
root /opt/gitlab/embedded/service/gitlab-rails/public;
## See app/controllers/application_controller.rb for headers set
## 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-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_pass http://gitlab-workhorse;
}
}
以及 Taiga 的:
server {
listen 8080 default_server;
server_name taiga.<replaced with company URL> <replace with VM IP address>;
large_client_header_buffers 4 32k;
client_max_body_size 50M;
charset utf-8;
access_log /opt/taiga/logs/nginx.access.log;
error_log /opt/taiga/logs/nginx.error.log;
# Frontend
location / {
root /opt/taiga/taiga-front-dist/dist/;
try_files $uri $uri/ /index.html;
}
# Backend
location /api {
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Scheme $scheme;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://127.0.0.1:8001/api;
proxy_redirect off;
}
# Django admin access (/admin/)
location /admin {
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Scheme $scheme;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://127.0.0.1:8001$request_uri;
proxy_redirect off;
}
# Static files
location /static {
alias /opt/taiga/taiga-back/static;
}
# Media files
location /media {
alias /opt/taiga/taiga-back/media;
}
}
有了这两个配置/etc/nginx/sites-enabled
,重启(sudo service nginx restart
)后,我的 Taiga 服务器可以通过端口 8080 访问,但奇怪的是,gitlab 服务器不再可访问。没有 502,但连接超时!
有谁了解 nginx 并有想法吗?任何帮助都将不胜感激!
答案1
感谢我的 IT 提供商的帮助,我们找到了一个解决方案,它与 @Alex_hha 回答的起点一致:将 Taiga 绑定到端口 8080 是一个错误(激光共聚焦超声...)
所以最后,我在我的虚拟机中使用 Debian 安装的 nginx 作为反向代理,禁用了 GitLab 中嵌入的 nginx(通过编辑文件),并使用里面的配置文件(和符号链接)/etc/gitlab/gitlab.rb
配置了 Taiga 和 Gitlab ,如下所示:/etc/nginx/sites-available
/etc/nginx/sites-enabled
泰嘉:
server {
listen 80 default_server;
server_name taiga.<company URL> <VM IP address>;
其余保持不变。对于 Gitlab:
server {
listen 80;
server_name gitlab.<company URL>;
large_client_header_buffers 4 32k;
client_max_body_size 50M;
charset utf-8;
access_log /opt/gitlab/logs/nginx.access.log;
error_log /opt/gitlab/logs/nginx.error.log;
location / {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
default_server
因此,两者都通过端口 80 进行访问,但给定请求的 URL,就会调用正确的服务。请注意GitLab 配置中没有。
这种配置组合使得所有 GitLab 流量都流向 GitLab,而其他任何流量(甚至无效的 URL)最终都流向 Taiga 服务。
答案2
不要对 Taiga 使用端口 8080,或者至少不要将 nginx 绑定到 localhost:8080。对于 Taiga,你可以将 nginx 绑定到某些特定的外部接口,例如以下内容
server {
listen 192.168.127.1:8080;
...
}
我在同一台机器上使用 Gitlab 和 Jenkins,没有任何问题。它们都在端口 8080 上
# lsof -n -P -i tcp:8080
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
java 18983 jenkins 155u IPv6 639617 0t0 TCP 192.168.88.87:8080 (LISTEN)
ruby 19098 git 9u IPv4 113752 0t0 TCP 127.0.0.1:8080 (LISTEN)
ruby 19141 git 9u IPv4 113752 0t0 TCP 127.0.0.1:8080 (LISTEN)
ruby 19144 git 9u IPv4 113752 0t0 TCP 127.0.0.1:8080 (LISTEN)
ruby 19147 git 9u IPv4 113752 0t0 TCP 127.0.0.1:8080 (LISTEN)
ruby 19150 git 9u IPv4 113752 0t0 TCP 127.0.0.1:8080 (LISTEN)