GitLab에는 Apache(CentOS 웹 서버)에 상대 URL이 있습니다.

GitLab에는 Apache(CentOS 웹 서버)에 상대 URL이 있습니다.

Apache에서 호스팅하는 기존 웹사이트(예: mywebsite.com)가 있는 CentOS 7 서버가 있습니다. GitLab을 nginx 대신 Apache로 관리하고 내 웹사이트 중 하나(예: 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를 웹 서버의 외부 사용자로 설정했습니다. 외부 사용자에 관한 한, 내 컴퓨터에 그러한 사용자가 없기 때문에 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를 다시 로드하면 일반 웹사이트가 제대로 작동합니다. 또한 아파치를 비활성화하고 nginx를 사용하여 상대 URL의 기본 구성으로 GitLab을 실행하면 모든 것이 잘 작동합니다. 상대 URL과 nginx 대신 apache를 함께 사용할 수는 없습니다.

답변1

이 솔루션은 GitLab Omnibus 패키지를 통해 Apache 2.4.6 및 GitLab 11.9.4가 설치된 CentOS 7 웹 서버에서 실행됩니다. 서버는 http에서 실행되지만 https로 쉽게 전송할 수 있어야 합니다.

Apache를 새로 설치하여 시작하고 도메인에서 하나의 호스트만 관리하고 싶습니다.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에 번들로 포함된 기본 웹 서버)를 비활성화해야 합니다. Apache는 http만 사용할 수 있으므로 웹 서버의 외부 사용자를 다음으로 설정해야 합니다 apache( www-data대부분의 배포판에는 Apache에 대한 외부 사용자가 있지만 apacheCentOS 7에는 없습니다). 따라서 기본 GitLab은 아래에서 tcp를 수신하도록 설정되어야 하며, 기본 GitLab은 포트 8181을 수신한다고 가정합니다. 이 포트도 설정해야 합니다. GitLab 설치를 단순하게 유지하기 위해 파이프라인의 CI/CD 기능도 비활성화했지만( directives 사용 gitlab_rails) 이는 사용자의 필요에 따라 다릅니다.
자세한 내용은 공식 GitLab Omnibus 문서를 참조하세요.상대 URL 구성그리고번들로 제공되지 않은 웹 서버 사용. 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>

<Location /gitlab>GitLab에 액세스할 상대 URL을 기반으로 매개변수를 수정해야 합니다.
이제 구성이 완료되었으므로 실행하여 systemctl reload httpdApache를 재구성하고 .restart를 사용하여 GitLab을 다시 시작하세요 sudo gitlab-ctl restart. 한 가지 더: Apache가 http 소켓을 사용하도록 허용해야 합니다 sudo setsebool -P httpd_can_network_connect=1.

관련 정보