如何为Gitlab Omnibus服务器旁边的其他虚拟机提供服务?[完整的逐步解决方案]

Rém*_*ras 26 webserver virtualhost nginx gitlab gitlab-omnibus

我在带有Omnibus软件包的专用Ubuntu 14.04服务器版上安装了Gitlab CE.

现在我想在gitlab旁边安装另外三个虚拟主机.

两个是由non-root user两个不同的运行启动的node.js Web应用程序ports > 1024,第三个是需要从中启动Web服务器的PHP Web应用程序.

有:

  • 8081(node.js)上运行的私人凉亭注册表
  • 8082(node.js)上运行的私有npm注册表
  • 私人作曲家注册表(PHP)

但是Omnibus听80并且似乎不使用Apache2或Nginx,因此我不能使用它们来服务我的PHP应用程序并反向代理我的其他两个节点应用程序.

Gitlab Omnibus使用什么服务机制listen 80?我应该如何创建其他三个虚拟主机以提供以下vHost?

  • gitlab.mycompany.com(:80) - 已经在使用中
  • bower.mycompany.com(:80)
  • npm.mycompany.com(:80)
  • packagist.mycompany.com(:80)

Rém*_*ras 25

关于这些

但是Omnibus听80并且似乎不使用Apache2或Nginx [ ,因此......].

和@stdob评论:

omn​​ibus没有使用nginx作为Web服务器??? -

我回应了

我想不是因为系统中没有安装nginx包...

据实

来自Gitlab官方文档:

默认情况下,omnibus-gitlab使用捆绑的Nginx安装GitLab.

所以是的!

Omnibus包实际上使用Nginx!

但它被捆绑在一起,解释了为什么它不需要作为主机操作系统的依赖项安装.

好的!Nginx可以,并且应该用于服务我的PHP应用程序并反向代理我的其他两个节点应用程序.

那么现在

Omnibus-gitlab允许通过用户访问Web服务器gitlab-www,该用户位于具有相同名称的组中.要允许外部Web服务器访问GitLab,需要添加外部Web服务器用户gitlab-www组.

要使用其他Web服务器(如Apache或现有的Nginx安装),您必须执行以下步骤:

通过指定in禁用捆绑的Nginx /etc/gitlab/gitlab.rb

nginx['enable'] = false
# For GitLab CI, use the following:
ci_nginx['enable'] = false
Run Code Online (Sandbox Code Playgroud)

检查非捆绑Web服务器用户的用户名.默认情况下,omnibus-gitlab外部Web服务器用户没有默认设置.您必须在配置中指定外部Web服务器用户用户名!比方说,例如,webserver用户是www-data.在/etc/gitlab/gitlab.rb集合中

web_server['external_users'] = ['www-data']
Run Code Online (Sandbox Code Playgroud)

此设置是一个数组,因此您可以指定多个用户添加到gitlab-www组.

运行sudo gitlab-ctl reconfigure以使更改生效.

设置NGINX监听地址

默认情况下,NGINX将接受所有本地IPv4地址上的传入连接.您可以更改地址列表/etc/gitlab/gitlab.rb.

nginx['listen_addresses'] = ["0.0.0.0", "[::]"] # listen on all IPv4 and IPv6 addresses
Run Code Online (Sandbox Code Playgroud)

对于GitLab CI,请使用该ci_nginx['listen_addresses']设置.

设置NGINX侦听端口

默认情况下,NGINX将侦听指定的端口external_url或隐式使用正确的端口(HTTP为80,HTTPS为443).如果您在反向代理后面运行GitLab,您可能希望将侦听端口覆盖为其他内容.例如,要使用端口8080:

nginx['listen_port'] = 8080
Run Code Online (Sandbox Code Playgroud)

同样,对于GitLab CI:

ci_nginx['listen_port'] = 8081
Run Code Online (Sandbox Code Playgroud)

支持代理SSL

默认情况下,如果external_url 包含,NGINX将自动检测是否使用SSL https://.如果您在反向代理后面运行GitLab,您可能希望将其保留external_url为HTTPS地址,但通过HTTP在内部与GitLab NGINX进行通信.为此,您可以使用以下listen_https选项禁用HTTPS :

nginx['listen_https'] = false
Run Code Online (Sandbox Code Playgroud)

同样,对于GitLab CI:

ci_nginx['listen_https'] = false
Run Code Online (Sandbox Code Playgroud)

请注意,您可能需要您的反向代理配置一定的报头(例如转发Host,X-Forwarded-Ssl,X-Forwarded-For,X-Forwarded-Port),以GitLab.

如果您忘记了此步骤,您可能会看到不正确的重定向或错误(例如"422 Unprocessable Entity","无法验证CSRF令牌真实性").有关更多信息,请参阅:

为了更进一步,您可以访问https://gitlab.com/gitlab-org/omnibus-gitlab/blob/master/doc/settings/nginx.md#using-a-non-bundled-web-server上的官方文档.

配置我们的gitlab虚拟主机

安装Phusion Passenger

我们需要在操作系统中全局安装ruby(带有捆绑ruby的omnibus中运行的gitlab)

$ sudo apt-get update 
$ sudo apt-get install ruby
$ sudo gem install passenger
Run Code Online (Sandbox Code Playgroud)

使用乘客模块重新编译nginx

而不是Apache2例如,nginx无法即时插入二进制模块.必须为要添加的每个新插件重新编译它.

Phusion乘客开发团队努力提供说法," 捆绑的nginx版乘客 ":使用乘客插件编译的nginx分档.

所以,让我们使用它:

要求:我们需要打开我们的TCP端口11371(APT key端口).

$ sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 561F9B9CAC40B2F7
$ sudo apt-get install apt-transport-https ca-certificates
Run Code Online (Sandbox Code Playgroud) 创建 passenger.list
$ sudo nano /etc/apt/sources.list.d/passenger.list
Run Code Online (Sandbox Code Playgroud)

用这些lignes

# Ubuntu 14.04
deb https://oss-binaries.phusionpassenger.com/apt/passenger trusty main
Run Code Online (Sandbox Code Playgroud)

使用正确的repo为您的ubuntu版本.以Ubuntu 15.04为例:deb https://oss-binaries.phusionpassenger.com/apt/passenger vivid main

编辑权限:

$ sudo chown root: /etc/apt/sources.list.d/passenger.list
$ sudo chmod 600 /etc/apt/sources.list.d/passenger.list
Run Code Online (Sandbox Code Playgroud)

更新包列表:

$ sudo apt-get update
Run Code Online (Sandbox Code Playgroud)

允许它为 unattended-upgrades

$ sudo nano /etc/apt/apt.conf.d/50unattended-upgrades
Run Code Online (Sandbox Code Playgroud)

在文件顶部查找或创建此配置块:

// Automatically upgrade packages from these (origin:archive) pairs
Unattended-Upgrade::Allowed-Origins {

  // you may have some instructions here

};
Run Code Online (Sandbox Code Playgroud)

添加以下内容:

// Automatically upgrade packages from these (origin:archive) pairs
Unattended-Upgrade::Allowed-Origins {

  // you may have some instructions here

  // To check "Origin:" and "Suite:", you could use e.g.:
  // grep "Origin\|Suite" /var/lib/apt/lists/oss-binaries.phusionpassenger.com*
    "Phusion:stable";

};
Run Code Online (Sandbox Code Playgroud)

现在(重新)安装nginx-extrapassenger:

$ sudo cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.bak_"$(date +%Y-%m-%d_%H:%M)"
$ sudo apt-get install nginx-extras passenger
Run Code Online (Sandbox Code Playgroud)

配置它

取消注释文件中的passenger_rootand passenger_ruby指令/etc/nginx/nginx.conf:

$ sudo nano /etc/nginx/nginx.conf
Run Code Online (Sandbox Code Playgroud)

...获得类似的东西:

##
# Phusion Passenger config
##
# Uncomment it if you installed passenger or passenger-enterprise
##

passenger_root /usr/lib/ruby/vendor_ruby/phusion_passenger/locations.ini;
passenger_ruby /usr/bin/passenger_free_ruby;
Run Code Online (Sandbox Code Playgroud)

创建nginx站点配置(虚拟主机conf)

$ nano /etc/nginx/sites-available/gitlab.conf

server {
  listen *:80;
  server_name gitlab.mycompany.com;
  server_tokens off;
  root /opt/gitlab/embedded/service/gitlab-rails/public;

  client_max_body_size 250m;
  access_log  /var/log/gitlab/nginx/gitlab_access.log;
  error_log   /var/log/gitlab/nginx/gitlab_error.log;

  # Ensure Passenger uses the bundled Ruby version
  passenger_ruby /opt/gitlab/embedded/bin/ruby;

  # Correct the $PATH variable to included packaged executables
  passenger_env_var PATH "/opt/gitlab/bin:/opt/gitlab/embedded/bin:/usr/local/bin:/usr/bin:/bin";

  # Make sure Passenger runs as the correct user and group to
  # prevent permission issues
  passenger_user git;
  passenger_group git;

  # Enable Passenger & keep at least one instance running at all times
  passenger_enabled on;
  passenger_min_instances 1;

  error_page 502 /502.html;
}
Run Code Online (Sandbox Code Playgroud)

现在我们可以启用它:

$ sudo ln -s /etc/nginx/sites-available/gitlab.cong /etc/nginx/sites-enabled/
Run Code Online (Sandbox Code Playgroud)

a2ensitenginx本身没有等效的,所以我们使用ln,但如果你愿意,github上有一个项目: nginx_ensite: nginx_ensite和nginx_dissite,用于快速虚拟主机启用和禁用

这是一个shell(Bash)脚本,它为nginx复制Debian a2ensite和a2dissite,用于在Apache 2.2/2.4中启用和禁用站点作为虚拟主机.

它完成了:-).最后,重启nginx

$ sudo service nginx restart
Run Code Online (Sandbox Code Playgroud)

使用这种新配置,您可以运行gitlab旁边的其他虚拟主机来提供您想要的服务

只需创建新的配置/etc/nginx/sites-available.

就我而言,我在同一台主机上以这种方式运行并提供服务:

例如,服务npm.mycompany.com:

为日志创建目录:

$ sudo mkdir -p /var/log/private-npm/nginx/
Run Code Online (Sandbox Code Playgroud)

并填写一个新的vhost配置文件:

$ sudo nano /etc/nginx/sites-available/npm.conf
Run Code Online (Sandbox Code Playgroud)

有了这个配置

server {
  listen *:80;
  server_name npm.mycompany.com

  client_max_body_size 5m;
  access_log  /var/log/private-npm/nginx/npm_access.log;
  error_log   /var/log/private-npm/nginx/npm_error.log;

  location / {
    proxy_pass http://localhost:8082;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection 'upgrade';
    proxy_set_header Host $host;
    proxy_cache_bypass $http_upgrade;
  }
}
Run Code Online (Sandbox Code Playgroud)

然后启用它并重新启动它:

$ sudo ln -s /etc/nginx/sites-available/npm.conf /etc/nginx/sites-enabled/
$ sudo service nginx restart
Run Code Online (Sandbox Code Playgroud)


Dan*_*nny 22

因为我不想更改gitlab的nginx服务器(与其他一些集成),最安全的方法是在解决方案之下.

也按照

Gitlab:Ningx =>将自定义设置插入NGINX配置

编辑你的gitlab的/etc/gitlab/gitlab.rb:

nano /etc/gitlab/gitlab.rb
Run Code Online (Sandbox Code Playgroud)

并滚动到nginx ['custom_nginx_config']并修改如下,确保取消注释

# Example: include a directory to scan for additional config files
nginx['custom_nginx_config'] = "include /etc/nginx/conf.d/*.conf;"
Run Code Online (Sandbox Code Playgroud)

创建新的配置目录:

mkdir -p /etc/nginx/conf.d/
nano /etc/nginx/conf.d/new_app.conf
Run Code Online (Sandbox Code Playgroud)

并将内容添加到新配置中

# my new app config : /etc/nginx/conf.d/new_app.conf
# set location of new app 
upstream new_app {
  server localhost:1234; # wherever it might be
}
# set the new app server
server {
  listen *:80;
  server_name new_app.mycompany.com;
  server_tokens off;
  access_log  /var/log/new_app_access.log;
  error_log   /var/log/new_app_error.log;
  proxy_set_header Host      $host;
  proxy_set_header X-Real-IP $remote_addr;
  location / { proxy_pass  http://new_app; }
}
Run Code Online (Sandbox Code Playgroud)

并重新配置gitlab以插入新设置

gitlab-ctl reconfigure
Run Code Online (Sandbox Code Playgroud)

重启nginx

gitlab-ctl restart nginx
Run Code Online (Sandbox Code Playgroud)

检查nginx错误日志:

tail -f /var/log/gitlab/nginx/error.log
Run Code Online (Sandbox Code Playgroud)