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つを一緒に置くことはできません。
このソリューションは、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.rbのexternal_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
。