Authentication

通過 HTTP 設置 mercurial

  • April 3, 2017

您能否提供一些關於通過 HTTP/HTTPS 設置 Mercurial 的建議?我正在設置一個開發伺服器(Debian),我想在其中創建一個 mercurial 儲存庫並將更改推送到伺服器。我需要進行身份驗證以防止任何不必要的訪問。

提前致謝。

我認為 Apache 是共享 hg 儲存庫的好方法。hgweb.wsgi 腳本不僅提供了執行多個儲存庫的可能性,而且還允許開發人員通過路徑或來自確定源的修訂方便地交叉引用項目原始碼。

以下過程將提供一種發布儲存庫的簡單方法,並通過 https Web 連接將其提供給經過身份驗證的使用者。

首先,我建議在沒有本地文件目錄的情況下複製您的 repo。

hg clone -U <myproject> <myproject_to_serve>

接下來(使用非常簡單的 WSGI 配置),執行以下操作:

將您的 repo 移動到一個方便的地方以提供服務:

mv <myproject_to_serve> /var/www/hg/<myproject_to_serve>

確保 web 伺服器使用者可以讀取/寫入 repo:

chown -R www-data:www-data /var/www/hg/<myproject_to_serve>

現在為項目的使用者設置讀/寫權限,並為您的伺服器首頁上的項目列表提供一些資訊:

vim /var/www/hg/myproject_to_serve>/.hg/hgrc
[web]
description = 'This is my new web-enabled project <myproject>'
contact = support@global.com
# consider limiting push usage to only a subset of users
allow_push = *

現在設置 WSGI

vim /var/www/hg/hgweb.config
[paths]
/myproj = /var/www/hg/my_project_to_serve

現在設置apache

<VirtualHost *:443>

   ServerName hg.mydomain.net
   ServerAdmin webmaster@mydomain.net

   ErrorLog /var/www/mydomain/logs/hg_error_log
   CustomLog /var/www/mydomain/logs/hg_access_log common

   SSLEngine on
   SSLCertificateFile /etc/ssl/mydomain_net.crt
   SSLCertificateKeyFile /etc/ssl/mydomain_net.key

   DocumentRoot "/var/www/hg/"

   <Location "/hg">
       SetHandler None
   </Location>

   # path to provided hgweb.wsgi script
   WSGIScriptAlias / /var/www/hg/scripts/hgweb.wsgi 

   <Location / >
       AuthType Digest
       AuthName "MySoftware"
       AuthUserFile /home/software/software_web_permissions
       Require valid-user
   </Location>

</VirtualHost>

以上要求您具備:

  1. hgweb.wsgi 腳本(它帶有標準的 Mercurial 安裝,比如 Debian)
  2. Apache htdigest 格式的 AuthUserFile,用於創建經過身份驗證的使用者。

Surfing tohg.mydomain.net將向您顯示一個格式良好的可用項目列表。成功驗證後,將根據repohg.mydomain.net/myproj向您顯示項目的目前狀態。/var/www/hg/<myproject_to_serve>

引用自:https://serverfault.com/questions/297779