web-dev-qa-db-ja.com

gitlabのnginxを使用して別のアプリを提供する

こんにちは、これを使用してGitlabをインストールしました
https://gitlab.com/gitlab-org/omnibus-gitlab/blob/master/README.md#installation

Nginxを使用してgitlabアプリケーション以外の別のコンテンツを提供したいのですが、どうすればよいですか

  • 変更する必要がある構成ファイルはどこにありますか
  • / var/wwwのようなディレクトリをポイントして、nginxがそれが別のアプリのルートであることを認識できるようにするにはどうすればよいですか。

更新(Red Hat 6.5でこれを実行していることを忘れてしまった、Debian/Ubuntuソリューションへようこそ)

30
yokodev

私は両方のアプローチを試しましたが、私のために働いたのは、gitlabの組み込みのものの上にクリーンなNGINXを置くことでした。長期的には、より簡単/便利です。

ここでは、ニーズに応じて、最初にcrucialを設定する必要があります。

  • ネットワーク/ルーター/その他のDNS設定。 (それ以外の場合、ここでの構成はサーバー名に基づいているため、機能しません。)
  • 私のセットアップは簡単な1つのサーバー、同じサーバーIPでホストされている複数のサイト、そしてNGINX名前フィルターを介してアプリに名前を付けることでフィルターします。

従うべき主な手順は次のとおりです。必要に応じて、これはさらに微調整する必要があることを覚えておいてください。これも Ubuntu Server 14.04 です。 。

  1. 最初にメインのNginx(omnibusにバンドルされているもの)を非アクティブ化します/etc/gitlab/gitlab.rbを編集します

    nginx['enable'] = false ci_nginx['enable'] = false

  2. [〜#〜] nginx [〜#〜]のクリーンなインスタンスを自由にインストールできるようになりました。
  3. 前のステップについて:インストーラーがsites-enabled /およびsites-available /フォルダーを作成せず、それらを作成して、それらは/etc/nginx/nginx.confファイルにあります

    include /etc/nginx/sites-enabled/*.conf;

  4. 一般的なnginxワークフローでは、サイト設定をsites-available /に含め、準備ができて/満足したらsites-enabled /フォルダーへのリンクを作成しますそしてnginxを再起動して変更を有効にします
  5. Gitlab構成をNginxsite-available /フォルダーに追加します

ここに私のconfがあります:

`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 0.0.0.0:80 default_server;
  listen 0.0.0.0:80 ;
#  listen [::]:80 default_server;
  server_name gitlab.mycompany.com; ## Replace this with something like gitlab.example.com
  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;
      }
    } 

設定の詳細はこちら その他のオプション

  1. nginxを再起動/再読み込み

    Sudo service nginx restart

  2. gitlab omnibusを再起動し、Gitlabの設定を確認してください

    Sudo gitlab-ctl reconfigure

    Sudo gitlab-ctl tail(gitlab構成に問題がないかどうかを確認するだけです)

  3. / etc/nginx/sites-available /に必要な追加の(好きなだけ)サーバー構成を追加し、最終的に/ etc /にリンクを追加します。 nginx/sites-enabled /
    これは別のアプリの別の例です

    upstream app_server {
        server 127.0.0.1:9080 fail_timeout=0;
    }
    server {
        listen 80; 
        server_name jenkins.mycompany.com;    
        access_log            /var/log/nginx/jenkins.access.log;
        location / { 
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header Host $http_Host;
            proxy_redirect off;
            if (!-f $request_filename) {
                proxy_pass http://app_server;
                break;
            }
    
        }   
    }
    
  4. 変更を確認できるように、常にnginxを再起動/再ロードしてください。

    Sudo service nginx restart

  5. 何か問題がある場合はログを確認してください/var/log/nginx/anysites*.log

  6. ここでは、異なるポートでupstreamを使用しており、名前(存在する/実際のもの/会社のドメインに登録されている)はすべて同じIPを指していることに注意してくださいaddress、つまり、NIGNXは同じIPアドレスを見つけて見つけますが、アップストリームのポートが異なるため、これは本当に重要です。

これが私の構成が現在機能している方法です。Gitlabや他のアプリに問題はありませんでした。
うまくいけば、これがそこにいる誰にとっても役立つことでしょう。

3
yokodev

vndrの上記のソリューションは機能しますが、 https://gitlab.com/gitlab-org/omnibus-gitlab/blob/master/doc/settings/nginx.md では、次のように述べています:

NGINX構成へのカスタム設定の挿入

既存のサーバーブロックを含めるなど、カスタム設定をNGINX構成に追加する必要がある場合は、次の設定を使用できます。

例:追加の構成ファイルをスキャンするディレクトリを含めるnginx ['custom_nginx_config'] = "include /etc/nginx/conf.d/*.conf;"

/opt/gitlab/embedded/cookbooks/gitlab/templates/default/nginx.conf.erbをチェックして、次のものが含まれているかどうかを確認してみましょう:<%= @custom_nginx_config%>(現在のgitlab-7.5.3_omnibus.5.2.1.ci-1.el6.x86_64.rpmには含まれていないようです)

そうでない場合は、行の上に追加しますinclude <%= @gitlab_http_config%>;のように:

<%= @custom_nginx_config %>
include <%= @gitlab_http_config %>;

次に、/ etc/gitlab/gitlab.rbを開いて追加します。nginx ['custom_nginx_config'] = "include /etc/nginx/conf.d/*.conf;"

単に追加するだけでそれを作ることができます:include /etc/nginx/conf.d/*.conf;代わりに<%= @custom_nginx_config%>

次に、/ etc/nginx/conf.d /に通常のnginx .confファイルを作成し、gitlab-ctl reconfigure

7
Luan Nguyen

ここで私は使用しています

- gitlab.example.com to serve gitlab.example.com over https.
- example.com over http to serve another content other than gitlab application.

DebパッケージからインストールされたGitlabはchefを使用してngnixをプロビジョニングしているため、chefのレシピを変更し、新しいvhostテンプレートをchef cookbooksディレクトリに追加する必要があります

ここですべてのシェフのクックブックを見つけることができます:/ opt/gitlab/embedded/cookbooks/gitlab /

/opt/gitlab/embedded/cookbooks/gitlab/recipes/nginx.rbを開きます

変化する:

nginx_vars = node['gitlab']['nginx'].to_hash.merge({
  :gitlab_http_config => File.join(nginx_etc_dir, "gitlab-http.conf"),
})

に:

nginx_vars = node['gitlab']['nginx'].to_hash.merge({
  :gitlab_http_config => File.join(nginx_etc_dir, "gitlab-http.conf"),
  :examplecom_http_config => File.join(nginx_etc_dir, "examplecom-http.conf"),
})

これを同じファイルに追加します。

template nginx_vars[:examplecom_http_config] do
  source "nginx-examplecom-http.conf.erb"
  owner "root"
  group "root"
  mode "0644"
  variables(nginx_vars.merge(
    {
      :fqdn => "example.com",
      :port => 80,
    }
  ))
  notifies :restart, 'service[nginx]' if OmnibusHelper.should_notify?("nginx")
end

次に、テンプレートディレクトリ(/ opt/gitlab/embedded/cookbooks/gitlab/templates/default)にnginx vhostテンプレートファイル(nginx-examplecom-http.conf.erb)を作成し、そこに追加します。

server {
  listen <%= @listen_address %>:<%= @port %>;
  server_name <%= @fqdn %>;
  root /var/www/example.com;

  access_log  <%= @log_directory %>/examplecom_access.log;
  error_log   <%= @log_directory %>/examplecom_error.log;

  location /var/www/example.com {
    # serve static files from defined root folder;.
    # @gitlab is a named location for the upstream fallback, see below
    try_files $uri $uri/index.html $uri.html;
  }

  error_page 502 /502.html;
}

nginx ['redirect_http_to_https'] = false in(/etc/gitlab/gitlab.rb)を設定する必要があります:

external_url "https://gitlab.example.com"
gitlab_Rails['gitlab_email_from'] = "[email protected]"
gitlab_Rails['gitlab_support_email'] = "[email protected]"



nginx['redirect_http_to_https'] = false
nginx['ssl_certificate'] = "/etc/gitlab/ssl/ssl-unified.crt"
nginx['ssl_certificate_key'] = "/etc/gitlab/ssl/ssl.key"


gitlab_Rails['gitlab_default_projects_limit'] = 10

add include <%= @examplecom_http_config%>; into /opt/gitlab/embedded/cookbooks/gitlab/templates/default/nginx.conf.erb:

http {
  sendfile <%= @sendfile %>;
  tcp_nopush <%= @tcp_nopush %>;
  tcp_nodelay <%= @tcp_nodelay %>;

  keepalive_timeout <%= @keepalive_timeout %>;

  gzip <%= @gzip %>;
  gzip_http_version <%= @gzip_http_version %>;
  gzip_comp_level <%= @gzip_comp_level %>;
  gzip_proxied <%= @gzip_proxied %>;
  gzip_types <%= @gzip_types.join(' ') %>;

  include /opt/gitlab/embedded/conf/mime.types;

  include <%= @gitlab_http_config %>;
  include <%= @examplecom_http_config %>;
}

これらすべての変更が実行された後:

gitlab-ctl reconfigure
gitlab-ctl restart
6
vndr

Gitlab Nginxサーバーの構成を変更したり、別のNginxをインストール/構成したりせず、gitlabがメジャーアップデートに耐えられるようにしたくなかったので、Gitlab Omnibusパッケージの解決策を見つけました

また、

Gitlab:Ningx =>カスタム設定をNGINX構成に挿入

gitlabの/etc/gitlab/gitlab.rbを編集します。

nano /etc/gitlab/gitlab.rb

nginx ['custom_nginx_config']にスクロールし、以下のように変更して、コメントを外してください

# Example: include a directory to scan for additional config files
nginx['custom_nginx_config'] = "include /etc/nginx/conf.d/*.conf;"

新しい設定ディレクトリを作成します。

mkdir -p /etc/nginx/conf.d/
nano /etc/nginx/conf.d/new_app.conf

新しい構成にコンテンツを追加します:/etc/nginx/conf.d/new_app.conf

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;

  root /var/www/html/new_app/;
  index index.html index.htm;

 }

そしてgitlabを再構成して新しい設定を挿入します

gitlab-ctl reconfigure

/etc/nginx/conf.dに構成を変更したり構成を追加した後にnginxを再起動するには:

gitlab-ctl restart nginx

nginxエラーログを確認するには:

tail -f /var/log/gitlab/nginx/error.log

別のアプリケーションサーバーへのリダイレクトについては https://stackoverflow.com/a/39695791/6821811 を参照してください。

4
Danny

本当にそれができるとしても、上位レベルの別のnginxサーバーを使用してgitlabのnginxと他のカスタムコンテンツの両方を提供することをお勧めします。 Gitlabのnginxはその構成をいつでも変更する可能性があり、カスタムコンテンツを壊す可能性があります。また、個別のnginxを設定することもできます。

これらの2つのインスタンスを異なるポートにインストールし、gitlabのnginxを上のポートにプロキシします。原因として、それはオーバーヘッドになりますが、まったく重要ではありません。

3
Jehy

これらの「その他のコンテンツ」は、NGiNXで「Server Blocks」を使用して宣言されます。

GitLabは/etc/nginx/sites-available/gitlabにあります( documentation によると、[/etc/nginx/sites-enabled][3]に一致します)。
図に示すように、このブロックと同様に、別のサーバーブロックを追加できます(別のポート番号を選択する必要がある場合があります) このプロセスで (更新 ここではUbuntu 14.04

server {
        listen   80; ## listen for ipv4; this line is default and implied
        #listen   [::]:80 default ipv6only=on; ## listen for ipv6

        root /var/www/example.com/public_html;
        index index.html index.htm;

        # Make site accessible from http://localhost/
        server_name example.com;
}

rootディレクティブは、Webアプリケーションのルートフォルダーを参照する必要があります(/var/wwwまたは/var/wwwのサブフォルダー)。

そのサーバーブロックは、GitLabの設定とはまったく別のものです。

2
VonC