GitLabにはApache(CentOS Webサーバー)に相対URLがあります。

GitLabにはApache(CentOS Webサーバー)に相対URLがあります。

Apacheでホストされている既存のウェブサイト(mywebsite.comなど)があるCentOS 7サーバーがあります。 GitLabをnginxの代わりにApacheで管理し、私のウェブサイトの1つ(mywebsite.com/gitlabなど)の実際のURLを取得したいと思います。 GitLabの包括的なパッケージでこれは可能ですか?

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

/etc/httpd/conf/httpd.conf
リンクを貼り付ける

以下は、GitLabを使用してApacheが仮想ホストを検証できるように追加した設定ファイルです(まだ相対URL仮想ホストが利用可能かどうかを確認しようとしています)。このガイドApache 2.4およびGitLab Omnibusの場合(基本レシピは次のとおりです。)これ)。

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

最後に、GitLab Omnibusパッケージの構成は次のとおりです。 gitlabのデフォルトポートを変更し、nginxを無効にし、ApacheをWebサーバーの外部ユーザーとして設定しました。外部ユーザーに関する限り、私のコンピューターにそのようなユーザーがいないため、www-dataを使用しません(www-dataを使用しようとすると、gitlab-ctlの再構成にもエラーが発生します)。私はhttpd.confの "User apache"ディレクティブのために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

このような設定では、私のウェブサイトは機能しません。すべてのページに503 GitLabエラーが表示されます。 "申し訳ありませんが、現在GitLabは利用できません。ページを更新または戻って操作をやり直してください。"; ? gitlab.confファイルを削除してhttpdを再ロードすると、通常のWebサイトが正しく機能します。また、Apacheを無効にしてnginxを使用して相対URLのデフォルト設定としてGitLabを実行すると、すべてがうまく機能します。相対URLとnginxの代わりにapacheを一緒に使用することはできません。

答え1

このソリューションは、GitLab Omnibusパッケージを介してApache 2.4.6およびGitLab 11.9.4がインストールされているCentOS 7 Webサーバーで実行されます。サーバーはhttpで実行されますが、httpsに簡単に転送できるはずです。

Apacheを新しくインストールして起動し、ドメイン内の1つのホストのみを管理したいと思います。mywebsite.com(仮想ホスティングなし)。また、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 stopGitLabが相対URLをプライマリドメインのサブディレクトリとして処理できるようになります。mywebsite.com、最初に行うことは、相対URLにGitLabをインストールすることです。external_urlディレクティブを変更する必要があります。gitlab.rbパラメータに設定します'http://mywebsite.com/gitlab'。次に、nginx(GitLab OmnibusにバンドルされているデフォルトのWebサーバー)を無効にする必要があります。 Apacheはhttpのみを使用できるため、Webサーバーの外部ユーザーを次に設定する必要がありますapachewww-dataほとんどのディストリビューションにはApacheの外部ユーザーがありますが、apacheCentOS 7にはありません)。したがって、デフォルトのGitLabは以下でtcpをリッスンするように設定する必要があり、デフォルトのGitLabはポート8181をリッスンすると仮定します。このポートも設定する必要があります。 GitLabのインストールを簡単にするために、パイプラインのCI / CD機能も無効にしましたが(directivesを使用gitlab_rails)、これはユーザーのニーズによって異なります。
詳細については、公式GitLab Omnibusのドキュメントを参照してください。相対URLの設定そしてバンドルされていない Web サーバーの使用。 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

これで1つを実行します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>

<Location /gitlab>GitLabにアクセスする相対URLに基​​づいてパラメータを変更する必要があります。
これで設定が完了しましたので、実行してsystemctl reload httpdApacheを再設定し、.restartを使用してGitLabを再起動してくださいsudo gitlab-ctl restart。もう1つ:Apacheがhttpソケットを使用できるようにする必要がありますsudo setsebool -P httpd_can_network_connect=1

関連情報