GitLab 與 Apache(CentOS Web 伺服器)上的相對 URL
我有一個 CentOS 7 伺服器,其中包含一個由 Apache 託管的現有網站(比如 mywebsite.com)。我希望 GitLab 由 Apache 而不是 nginx 管理,並且具有相對於我的網站(例如 mywebsite.com/gitlab)的真實 URL。這對 GitLab 綜合包是否可行?
編輯: 關於我的配置的一些附加資訊。這是我的 apache 主配置文件,其中應包含解決與任何虛擬主機不匹配的任何請求的資訊;就 GitLab 安裝而言,我沒有觸及這個文件。
/etc/httpd/conf/httpd.conf
以下是我添加的配置文件,以使 apache 使用 GitLab 解析虛擬主機(仍在嘗試了解是否可以使用相對 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 reconfigure 也會出錯)。由於 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,正常的網站可以正常工作。此外,如果我禁用 apache 並僅在相對 url 上使用預設配置執行 GitLab(使用 nginx),一切正常;我只是不能把這兩件事放在一起,相對 url 和 apache 而不是 nginx。
該解決方案正在使用通過 GitLab Omnibus 軟體包安裝的 Apache 2.4.6 和 GitLab 11.9.4 的 CentOS 7 Web 伺服器上執行。伺服器在 http 上執行,但它應該很容易轉移到 https。
我想從全新安裝的 Apache 開始,它只管理域mywebsite.com上的一個主機(無虛擬主機)。還應該干淨安裝 GitLab Omnibus 包(官方指南)。為了完整起見,這裡是httpd.conf文件,Apache的主要配置文件。它包含監聽 80 埠的指令,並將所有對主域mywebsite.com的請求定向到指令指定的目錄
DocumentRoot
,即/var/www/html
; 在我的例子中,這樣的目錄包含一個 WordPress 實例。/etc/httpd/conf/httpd.conf
現在,在編輯 GitLab 配置之前,請務必使用
sudo gitlab-ctl stop
. 為了使 GitLab 能夠在相對 URL 上工作,作為主域mywebsite.com的子目錄,首先要在相對 URL 上安裝 GitLab;特別是,您必須修改gitlab.rb設置為參數的external_url
指令。然後,必須禁用 nginx,它是 GitLab Omnibus 中捆綁的預設 Web 伺服器;Web 伺服器的外部使用者必須設置為(Apache 的外部使用者在大多數發行版中,但是'http://mywebsite.com/gitlab'``apache``www-data``apache
對於 CentOS 7); GitLab 主力必須設置為監聽 tcp,因為 Apache 只能使用 http 套接字;下面假設 GitLab 主力監聽埠 8181,該埠也是要設置的。為了保持 GitLab 安裝簡單,我還禁用了管道的 CI/CD 功能(使用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
現在執行一個
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 httpd
以重新配置 Apache 並使用sudo gitlab-ctl restart
. 還有一件事:一定要允許 Apache 使用 http 套接字:sudo setsebool -P httpd_can_network_connect=1
.