使用现有Nginx安装转发到GitLab子域

时间:2015-04-02 00:36:57

标签: ubuntu nginx reverse-proxy gitlab

我一直关注instructions from the GitLab wiki,但似乎缺少一些关键信息。在“使用非捆绑Web服务器”一节中,它从未解释我如何重新配置​​我的Nginx安装以将代理转发到GitLab。

基本上,我想在git.example.com下安装GitLab,但我似乎无法找到现有Nginx安装的配置设置。维基页面继续谈论配置现有的Passenger / Nginx安装,但我没有Passenger,所以我认为这不适用于我的情况。

我想最简单的解决方案是,如果有办法告诉Gitlab使用它的内置Nginx并只是在内部端口上侦听,然后将我的其他Nginx转发到该端口,但我似乎无法找出如何配置Gitlab来处理它。

非常感谢任何帮助。

6 个答案:

答案 0 :(得分:9)

我搞定了!太疯狂了!

正如我所说,我试图关注these instructions,但我无法到达任何地方,因为它似乎缺乏如何将现有Nginx安装链接转换为Gitlab的说明。

嗯,在页面的下方,他们对Using an Existing Passenger / Nginx Installation有一个更完整的解释,虽然起初看起来并不像我想要的,但研究乘客有点明确表示它不是&# 39;仅限Ruby(他们容易找到的安装说明要求您将其安装为ruby gem),而他们的instructions for Ubuntu installation允许我将其轻松地集成到我现有的Nginx中。

从那里开始,它只是按照维基中的步骤进行,但有一些变化。

  1. Existing Passenger/Nginx Installation部分未提及non-bundled Nginx install上一节中的内容,您需要将www-data添加到web_server['external_users']中的gitlab.rb行文件。
  2. 由于我在第一次运行它之前重新配置了我的Gitlab安装以删除捆绑的Nginx,/var/log/gitlab/nginx/gitlab_access.log处的nginx日志文件不存在,这在Nginx尝试启动时导致错误,只是创建该空白文件并给予正确的读/写访问权限使其像魅力一样工作。
  3. 我现在非常兴奋,希望任何有未来特定问题的人都会遇到这个问题,Wiki应该真正更新,只需删除/合并这两个部分并解释/链接到如何安装乘客进入现有的Nginx安装。会给我带来很多困惑和浪费时间。

答案 1 :(得分:6)

在Ubuntu上运行现有的Nginx服务器

  1. 安装gitlab
  2. 编辑配置文件/etc/gitlab/gitlab.rb并取消注释或追加以下内容:
    • nginx ['启用'] = false
    • 独角兽['启用'] = false
    • gitlab_rails [' internal_api_url'] =' http://git.yourdomain.com'
    • web_server [' external_users'] = [' www-data']
  3. 启动捆绑的postgres数据库服务器
    • sudo gitlab-ctl start postgresql
  4. 重新配置
    • sudo gitlab-ctl reconfigure
  5. 将git lab的nginx配置文件添加到/etc/nginx/sites-available/gitlab-example.conf并通过启用站点启用它
  6. 为nginx启用乘客
  7. 重新启动nginx
    • sudo service nginx restart
  8. 启动redis
    • sudo gitlab-ctl start redis

答案 2 :(得分:2)

我花了几天的时间来解决所有问题,所以我想分享一下所有工作的步骤。这是如何为网站安装Nginx并使其与现有的gitlab repo(使用捆绑版本的Nginx)一起工作。我的gitlab repo位于我的网站的一个名为' repos'的子域名中。

打开终端并安装Nginx:

sudo apt-get update
sudo apt-get install nginx

编辑配置文件/etc/nginx/nginx.conf:

找到您在配置gitlab时需要的用户名: 就我而言,这是' nginx':

user   nginx;

在http {}块内添加此行:

$include /etc/nginx/sites-enabled/*;

示例:

http{
    include  etc/nginx/mime.types;
    include  etc/nginx/sites-enabled/*;

    (more stuff...)
}

编辑配置文件/etc/gitlab/gitlab.rb:

更改此行:

external_url 'GENERATED_EXTERNAL_URL' 

致:

external_url 'http://www.example.com/repos'  // (whatever your server name is)  

取消注释并更改此行:

nginx['enable'] = true

致:

nginx['enable'] = false

取消注释并更改此行:

web_server['external_users'] = []    

致:

web_server['external_users'] = ['nginx']     // or whatever your nginx user is called, sometimes it's 'www-data'

Nginx需要gitlab的配置文件:

在GitLab食谱库中:https://gitlab.com/gitlab-org/gitlab-recipes/tree/master/web-server/nginx找到' gitlab-omnibus-nginx.conf'。 将该文件放在启用/ etc / nginx / sites-enabled的文件夹中(您可能需要创建启用站点的文件夹)

编辑配置文件/etc/nginx/sites-enabled/gitlab-omnibus-nginx.conf:

更改此行:

server_name YOUR_SERVER_FQDN

致:

server_name www.example.com/repos     // (or whatever your server name is)

您需要更改gitlab所在的端口,以便网站和git服务器都能正常工作。

更改此行:

listen 0.0.0.0:80 default_server;

致:

listen 0.0.0.0:8081; 

更改此行:

listen [::]:80  default_server;

致:

listen [::]:8081;

编辑配置文件/etc/nginx/conf.d/default.conf:

将此设为默认服务器:

listen    80 default_server;
server_name  localhost;

为gitlab repo添加第二个位置,并使用proxy_pass指向您放置Gitlab的端口。 我把我的Gitlab放在子目录' repos'中。数字127.0.0.1表示localhost(同一台计算机):

location / {
    root   /usr/share/nginx/html;
    index  index.html index.htm;
}
location /repos/ {
    proxy_pass http://127.0.0.1:8081;
}

在终端中运行以下命令:

sudo gitlab-ctl reconfigure
sudo service nginx restart

您的网络服务器和gitlab现在应该可以在线工作和访问。 当用户访问您的网络服务器时,Nginx将默认为/ usr / share / nginx / html。那里有一个默认的.html文件。这是您可以为您的网站放置文件的地方。

答案 3 :(得分:0)

对于那些列出的答案不起作用的人。我自己的回答是编辑1并取消注释nginx.conf行。

它的缺席阻止了nginx对乘客做任何事情。

答案 4 :(得分:0)

@fillky的帖子无法完全帮助我安装ubuntu 18.04。这是我使Gitlab可以使用的步骤。

对于 Ubuntu 18.04 (http模式):

  1. 安装Gitlab(https://about.gitlab.com/install/#ubuntu中的步骤1和2)
  2. 编辑配置文件/etc/gitlab/gitlab.rb并取消注释或追加以下内容(在https://docs.gitlab.com/omnibus/settings/nginx.html#configuration处找到):

    nginx ['enable'] = false

    unicorn ['enable'] =假

    gitlab_rails ['internal_api_url'] ='http://gitlab.yourdomain.com'

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

  3. 重新配置Gitlab

    sudo gitlab-ctl重新配置

  4. 为nginx启用乘客(https://www.phusionpassenger.com/library/install/nginx/install/oss/bionic/的步骤1至3)

  5. 重新加载nginx以检查一切是否仍然有效。如果不是这样:google是您的朋友

    sudo nginx -s重新加载

  6. 更改您的nginx配置以支持gitlab。在/ etc / nginx / sites-enabled中创建一个带有原始文档的Vhost步骤中内容的'gitlab'文件:

    https://docs.gitlab.com/omnibus/settings/nginx.html#vhost-server-block

  7. 重新加载nginx,使更改生效

    sudo nginx -s重新加载

  8. 安装nodelab.js(如果尚未安装),因为gitlab需要执行JavaScript

    sudo apt-get install node.js

  9. 浏览到您的gitlab网址。应该提示您输入root gitlab帐户的密码。在下一步中,您将能够使用该帐户登录

仅此而已!如果要启用HTTPS,请执行以下额外步骤:

  1. 将/etc/gitlab/gitlab.rb中的'external_url'从http更改为https
  2. 将nginx配置/ etc / nginx / sites-enabled / gitlab更改为使用ssl

    收听0.0.0.0:443 ssl;
    听[::]:443 ipv6only = on ssl; ssl on; ssl_certificate#链接到您的公共ssl证书 ssl_certificate_key#链接到您的私人ssl密钥 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; ssl_session_cache shared:SSL:10m; ssl_session_timeout 5m;

  3. 重新配置gitlab

    sudo gitlab-ctl重新配置

  4. 重新加载nginx

    sudo nginx -s重新加载

答案 5 :(得分:0)

基于@cyberchis的回答,我简化了过程,并且两次完成相同的设置。我希望它也对您有用。

  1. 检查Nginx的用户

    1.1。用nano /etc/nginx/nginx.conf打开 nginx.conf

    1.2。检查第一。行user www-data;,这里的用户是www-data

  2. 编辑gitlab的external_url

    2.1。用nano /etc/gitlab/gitlab.rb打开 gitlab.rb

    2.2。将行external_url 'GENERATED_EXTERNAL_URL' 修改为external_url 'http://gitlab.yourdomain.com'

    2.3。取消注释并将行nginx['enable'] = true更改为nginx['enable'] = false

    2.4。取消注释并将行web_server['external_users'] = []更改为web_server['external_users'] = ['www-data']

  3. 为gitlab添加配置文件

    3.1。从gitlab repository下载 gitlab-omnibus-nginx.conf

    3.2。转到文件所在的目录,然后使用cp /directory-to-this-file/gitlab-omnibus-nginx.conf /etc/nginx/sites-enabled将此文件复制到nginx。

    3.3。使用nano /etc/nginx/sites-enabled/gitlab-omnibus-nginx.conf打开此文件。

    3.4。将此行listen 0.0.0.0:80 default_server;更改为listen 0.0.0.0:7001; // gitlab在端口7001上运行

    3.5。将此行listen [::]:80 default_server;更改为listen [::]:7001; // gitlab在端口7001上运行

    3.6。将此行server_name YOURSERVER_FQDN更改为server_name www.yourdomain.com

  4. 配置nginx

    4.1。用nano /etc/nginx/nginx.conf打开 nginx.conf

    4.2。添加此配置

http {

   ...
  
   server {
       listen 80;
       server_name gitlab.yourdomain.com;
       location / {
           proxy_pass http://127.0.0.1:7001;
       }
   }
}
  1. 重新配置gitlab并重新加载nginx

    5.1。 sudo gitlab-ctl reconfigure

    5.2。 sudo systemctl reload nginx

  2. 配置防火墙以导出端口7001 可选

    由于gitlab在我的本地服务器上运行,因此必须允许端口7001从外部访问。启用它的最简单方法是运行ufw allow 7001

现在gitlab在您应访问的子域 gitlab.yourdomain.com 上运行。