web-dev-qa-db-ja.com

Apache上の相対URLを使用したGitLab(CentOS Webサーバー)

Apacheでホストされている既存のWebサイト(mywebsite.comなど)を備えたCentOS7サーバーがあります。 GitLabをnginxではなくApacheで管理し、自分のWebサイトの1つ(mywebsite.com/gitlabなど)に関して実際のURLを使用して管理したいと思います。これはGitLabオムニバスパッケージで実現可能ですか?

編集:構成に関する追加情報。これが私のApacheメイン設定ファイルです。これには、どの仮想ホストとも一致しないリクエストを解決するための情報が含まれている必要があります。 GitLabのインストールに関する限り、このファイルには触れませんでした。

/ etc/httpd/conf/httpd.conf
ペーストビンリンク

以下は、Apacheに仮想ホストをGitLabで解決させるために追加した構成ファイルです(相対URL仮想ホストが可能かどうかを理解しようとしています)。 Apache2.4とGitLabOmnibusの場合は このガイド に従いました(デフォルトのレシピは これ です)。

/ etc/httpd/conf.d/gitlab.conf

<VirtualHost *:80>
    ServerName mywebsite.com/gitlab
    ServerSignature Off

    ProxyPreserveHost On
    AllowEncodedSlashes NoDecode

    <Location />
        Require all granted
        ProxyPassReverse http://127.0.0.1:8181
        ProxyPassReverse http://mywebsite.com/gitlab
    </Location>

    RewriteEngine on

    RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} !-f [OR]
    RewriteCond %{REQUEST_URI} ^/uploads/.*
    RewriteRule .* http://127.0.0.1:8181%{REQUEST_URI} [P,QSA,NE]

    DocumentRoot /opt/gitlab/embedded/service/gitlab-Rails/public

    ErrorDocument 404 /404.html
    ErrorDocument 422 /422.html
    ErrorDocument 500 /500.html
    ErrorDocument 502 /502.html
    ErrorDocument 503 /503.html

    LogFormat "%{X-Forwarded-For}i %l %u %t \"%r\" %>s %b" common_forwarded
    ErrorLog /var/log/httpd/mywebsite_error.log
    CustomLog /var/log/httpd/mywebsite_forwarded.log common_forwarded
    CustomLog /var/log/httpd/mywebsite_access.log combined env=!dontlog
    CustomLog /var/log/httpd/mywebsite.log combined
</VirtualHost>

最後に、これはGitLabOmnibusパッケージの構成です。 gitlabの主力ポートを変更し、nginxを無効にして、ApacheをWebサーバーの外部ユーザーとして設定しました。外部ユーザーに関する限り、私のマシンにはそのようなユーザーが存在しないため、www-dataを使用しませんでした(www-dataを使用しようとすると、gitlab-ctl reconfigureでもエラーが発生しました)。 httpd.confの「UserApache」ディレクティブにより、Apacheが正しいと思いますが、それについては完全にはわかりません。

/ etc/gitlab/gitlab.rb

external_url 'http://mywebsite.com/gitlab'

gitlab_workhorse['listen_network'] = "tcp"
gitlab_workhorse['listen_addr'] = "127.0.0.1:8181"

web_server['external_users'] = ['Apache']
nginx['enable'] = false

このような構成では、私のWebサイトが機能しません。すべてのページに「おっと、GitLabは現在利用できません。ページを更新するか、戻ってアクションを再試行してください。」という503GitLabエラーが表示されます。その理由は何でしょうか? gitlab.confファイルを削除してhttpdをリロードすると、通常のWebサイトは正常に機能することに注意してください。また、Apacheを無効にして、相対URLでデフォルト構成でGitLab(nginxを使用)のみを実行すると、すべてが正常に機能します。 nginxの代わりに相対URLとApacheの2つを一緒に置くことはできません。

1
user415115

このソリューションは、GitLabOmnibusパッケージを使用してApache2.4.6およびGitLab11.9.4がインストールされたCentOS7Webサーバーで動作します。サーバーはhttpで実行されていますが、httpsに簡単に転送できるはずです。

ドメインmywebsite.com(仮想ホストなし)上の単一のホストのみを管理するApacheのクリーンインストールから開始すると思います。 GitLab Omnibusパッケージのクリーンインストールも想定されています( 公式ガイド )。完全を期すために、ここにhttpd.confファイル、Apacheのメイン構成ファイルがあります。これには、ポート80をリッスンし、メインドメインmywebsite.comへのすべての要求をDocumentRootディレクティブで指定されたディレクトリ(/var/www/html;私の場合、そのようなディレクトリにはWordPressインスタンスが含まれています。

/etc/httpd/conf/httpd.conf
Pastebinのhttpd.conf

ここで、GitLab構成を編集する前に、必ずSudo gitlab-ctl stopで関連するすべてのサービスを停止してください。 GitLabがメインドメインmywebsite.comのサブディレクトリとして相対URLで機能できるようにするには、まず相対URLにGitLabをインストールします。特に、gitlab.rbexternal_urlディレクティブを引数として'http://mywebsite.com/gitlab'を設定するように変更する必要があります。次に、GitLabOmnibusにバンドルされているデフォルトのWebサーバーであるnginxを無効にする必要があります。 Webサーバーの外部ユーザーはApacheに設定する必要があります(Apacheの外部ユーザーはほとんどのディストリビューションではwww-dataですが、CentOS7ではApacheです)。 Apacheはhttpソケットしか使用できないため、GitLabの主力製品はtcpをリッスンするように設定する必要があります。以下では、GitLabの主力製品がポート8181をリッスンしていると想定しています。これも設定されます。 GitLabのインストールを簡単にするために、パイプラインのCI/CD機能も無効にしました(gitlab_Railsディレクティブを使用)が、これはニーズによって異なります。
相対URLの構成 および バンドルされていないWebサーバーを使用 の詳細については、公式のGitLabOmnibusドキュメントを参照してください。結果として得られるGitLabの構成ファイルは次のようになります。

/etc/gitlab/gitlab.rb

external_url 'http://mywebsite.com/gitlab'

gitlab_workhorse['listen_network'] = "tcp"
gitlab_workhorse['listen_addr'] = "127.0.0.1:8181"

web_server['external_users'] = ['Apache']
nginx['enable'] = false

gitlab_Rails['gitlab_default_projects_features_builds'] = false

次に、Sudo gitlab-ctl reconfigureを実行します。 Apacheの構成に戻りましょう。これでGitLabがセットアップされましたが、すべてのリクエストをhttp://mywebsite.com/gitlabに実際のGitLabサーバーにリダイレクトする必要があります。私が見つけたほとんどのソリューションは、仮想ホストでサブフォルダーを使用することを提案していますが、これはGitLabでは機能しないようです。解決策は、Locationディレクティブを使用することです。このような構成は、メインのApache構成ファイルhttpd.confに追加するか、新しい.confファイルを作成して/ etc/httpd/conf.d /に配置できます。自動的に含まれるようにします(ただし、httpd.confにディレクティブIncludeOptional conf.d/*.confが含まれていることを確認してください)。構成は以下のとおりです。

/etc/httpd/conf.d/gitlab.conf

Header add Strict-Transport-Security: "max-age=15768000;includeSubdomains"

<Location /gitlab>
  Require all granted

  #Allow forwarding to gitlab-workhorse
  ProxyPassReverse http://127.0.0.1:8181
  ProxyPassReverse http://mywebsite.com/gitlab

  RewriteEngine on

  RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} !-f [OR]
  RewriteCond %{REQUEST_URI} ^/uploads/.*
  RewriteRule .* http://127.0.0.1:8181%{REQUEST_URI} [P,QSA,NE]

  ErrorDocument 404 /404.html
  ErrorDocument 422 /422.html
  ErrorDocument 500 /500.html
  ErrorDocument 502 /502.html
  ErrorDocument 503 /503.html
</Location>
</VirtualHost>

GitLabに到達できるようにする相対URLに基​​づいて、<Location /gitlab>の引数を必ず変更してください。
これで構成が完了しました。systemctl reload httpdを実行してApacheを再構成し、Sudo gitlab-ctl restartでGitLabを再起動します。もう1つ、Apacheがhttpソケットを使用できるようにしてください:Sudo setsebool -P httpd_can_network_connect=1

2
user415115