32

Omnibus パッケージを使用して専用の Ubuntu 14.04 サーバー エディションにGitlab CEをインストールしました。

ここで、gitlab の隣に他の 3 つの仮想ホストをインストールします。

non-root user2 つは、2 つの異なる で実行されているによって起動される node.js Web アプリケーションです。3 つports > 1024目は、起動元の Web サーバーが必要な PHP Web アプリケーションです。

がある:

  • 8081( node.js)で実行されているプラ​​イベート バウワー レジストリ
  • 8082( node.js)で実行されているプラ​​イベート npm レジストリ
  • プライベート コンポーザ レジストリ ( PHP)

しかし、オムニバスは80をリッスンし、Apache2もNginxも使用していないようです。したがって、それらを使用してPHPアプリを提供し、他の2つのノードアプリを逆プロキシすることはできません

Gitlab Omnibus が使用するサービング メカニクスは何listen 80ですか? 次の vHosts を提供できるようにするには、他の 3 つの仮想ホストをどのように作成すればよいですか?

  • gitlab.mycompany.com( :80) -- すでに使用中
  • bower.mycompany.com( :80)
  • npm.mycompany.com( :80)
  • packagist.mycompany.com( :80)
4

2 に答える 2

27

gitlab の nginx サーバーを変更したくないので (他の統合を使用して)、最も安全な方法は以下のソリューションです。

また、

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

新しい設定にコンテンツを追加します

# 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; }
}

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

gitlab-ctl reconfigure

nginxを再起動する

gitlab-ctl restart nginx

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

tail -f /var/log/gitlab/nginx/error.log
于 2016-09-26T06:11:56.893 に答える
26

これらについて

しかし、Omnibus は 80 をリッスンし、Apache2 も Nginx も使用していないようです [ , したがって ...]

および @stdob コメント:

オムニバスはnginxをWebサーバーとして使用しませんでしたか??? –

私が答えたもの

システムにnginxパッケージがインストールされていないためではないと思います...

実際には

Gitlabの公式ドキュメントから:

デフォルトでは、omnibus-gitlab は、Nginx がバンドルされた GitLab をインストールします。

あ、はい!

オムニバスパッケージは実際にNginxを使用しています!

しかし、それはバンドルされており、ホスト OS からの依存関係としてインストールする必要がない理由を説明しています。

したがって、はい!Nginx は、私の PHP アプリを提供し、他の 2 つのノード アプリをリバース プロキシするために使用できますし、使用する必要があります。

それから今

Omnibus-gitlab ではgitlab-www、同じ名前のグループに属するユーザーを介して Web サーバーにアクセスできます。GitLab への外部 Web サーバー アクセスを許可するには、外部 Web サーバー ユーザーをgitlab-wwwグループに追加する必要があります。

Apache や既存の Nginx インストールなどの別の Web サーバーを使用するには、次の手順を実行する必要があります。

で指定して、バンドルされているNginxを無効にします/etc/gitlab/gitlab.rb

nginx['enable'] = false
# For GitLab CI, use the following:
ci_nginx['enable'] = false

バンドルされていない Web サーバー ユーザーのユーザー名を確認します。デフォルトでomnibus-gitlabは、外部 Web サーバー ユーザーのデフォルト設定はありません。構成で外部 Web サーバーのユーザー名を指定する必要があります。たとえば、Web サーバーのユーザーがwww-data. /etc/gitlab/gitlab.rbセットで

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

この設定は配列であるため、複数のユーザーを 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

GitLab CI の場合は、ci_nginx['listen_addresses']設定を使用します。

NGINX リッスン ポートの設定

デフォルトでは、NGINX は指定されたポートでリッスンするexternal_urlか、暗黙的に正しいポート (HTTP の場合は 80、HTTPS の場合は 443) を使用します。リバース プロキシの背後で GitLab を実行している場合は、リッスン ポートを別のものにオーバーライドすることをお勧めします。たとえば、ポート 8080 を使用するには:

nginx['listen_port'] = 8080

同様に、GitLab CI の場合:

ci_nginx['listen_port'] = 8081

プロキシ SSL のサポート

デフォルトでは、NGINX は、external_url 含まれている場合に SSL を使用するかどうかを自動検出しますhttps://。リバース プロキシの背後で GitLab を実行している場合external_url、 を HTTPS アドレスとして保持し、HTTP 経由で内部的に GitLab NGINX と通信したい場合があります。これを行うには、次のlisten_httpsオプションを使用して HTTPS を無効にできます。

nginx['listen_https'] = false

同様に、GitLab CI の場合:

ci_nginx['listen_https'] = false

Host特定のヘッダー ( 、X-Forwarded-SslX-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のインストール

OS にグローバルに Ruby (バンドルされた Ruby を使用してオムニバスで実行される gitlab) をインストールする必要があります。

$ sudo apt-get update 
$ sudo apt-get install ruby
$ sudo gem install passenger

パッセンジャー モジュールを使用して nginx を再コンパイルする

たとえば、 nginxApache2はオンザフライでバイナリ モジュールをプラグインすることはできません。追加する新しいプラグインごとに再コンパイルする必要があります。

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
作成passenger.list
$ sudo nano /etc/apt/sources.list.d/passenger.list

これらのリーニュで

# Ubuntu 14.04
deb https://oss-binaries.phusionpassenger.com/apt/passenger trusty main

ubuntu バージョンに適したリポジトリを使用してください。たとえば、Ubuntu 15.04 の場合: deb https://oss-binaries.phusionpassenger.com/apt/passengervivid main

編集権限:

$ sudo chown root: /etc/apt/sources.list.d/passenger.list
$ sudo chmod 600 /etc/apt/sources.list.d/passenger.list

パッケージリストを更新しています:

$ sudo apt-get update

として許可するunattended-upgrades

$ sudo nano /etc/apt/apt.conf.d/50unattended-upgrades

ファイルの上にあるこの構成ブロックを検索または作成します。

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

  // you may have some instructions here

};

以下を追加します。

// 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";

};

今すぐ(再)インストールnginx-extraしてpassenger

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

構成する

ファイル内のディレクティブpassenger_rootpassenger_rubyディレクティブのコメントを外します。/etc/nginx/nginx.conf

$ sudo nano /etc/nginx/nginx.conf

... 次のようなものを取得します。

##
# 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;

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;
}

これで有効にできます:

$ sudo ln -s /etc/nginx/sites-available/gitlab.cong /etc/nginx/sites-enabled/

a2ensitenginx にネイティブに付属する同等のものはないため、 を使用しますln、必要に応じて、github にプロジェクトがあり ます

これは、Apache 2.2/2.4 でサイトを仮想ホストとして有効または無効にするために、nginx 用に Debian a2ensite および a2dissite を複製するシェル (Bash) スクリプトです。

完了しました:-)。最後に、nginx を再起動します。

$ sudo service nginx restart

この新しい構成では、gitlab の隣で他の仮想ホストを実行して、必要なものを提供できます。

で新しい構成を作成するだけ/etc/nginx/sites-availableです。

私の場合、同じホストでこのように実行してサービスを提供しました。

たとえば、次のように提供しnpm.mycompany.comます。

ログ用のディレクトリを作成します。

$ sudo mkdir -p /var/log/private-npm/nginx/

そして、新しい vhost 構成ファイルに入力します。

$ sudo nano /etc/nginx/sites-available/npm.conf

この構成で

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;
  }
}

次に、有効にして再起動します。

$ sudo ln -s /etc/nginx/sites-available/npm.conf /etc/nginx/sites-enabled/
$ sudo service nginx restart
于 2015-08-03T06:51:11.367 に答える