Назад | Перейти на главную страницу

Как настроить ртутное репо для общедоступного веб-сайта на apache?

У нас есть сервер apache, который обслуживает сайт из public_html / site /. Мы хотели бы иметь ртутное репо в том же каталоге, чтобы мы могли отправлять наши изменения прямо на сервер.

Пока что я установил сценарий hgweb.wsgi и могу без проблем отправлять и извлекать данные из репозитория.

Проблемы начинаются, когда я хочу добавить аутентификацию. Доступ для чтения и записи в репо должен быть запрещен для неавторизованных пользователей. В справке Mercurial упоминается использование HTTP-аутентификации, ну, я могу создать .htaccess с помощью .htpasswd и поместить их в public_html / site /, но это сделает веб-сайт недоступным.

Пожалуйста помоги.

Обновление (решение): Возможно, решение с виртуальными хостами тоже подойдет, но я нашел более простой. Вам не нужно размещать аутентификацию в каталоге сайта, вы должны разместить его там, где находится ваш скрипт hgweb. Тогда просто запретите доступ к директории .hg в директории сайта и все!

Теперь извлечение и отправка работает только через скрипт hgweb с аутентификацией.

Обычно я использую SSH вместо hgweb для push и pull. Схема также работает, если вы нажимаете прямо в каталог сайта, однако я не рекомендую этого делать по нескольким причинам. Во-первых, для переноса в небезопасный репозиторий все равно потребуется проверка (это можно легко исправить с помощью входящего перехвата), во-вторых, если вы испортили развертывание, гораздо проще исправить, если каталог вашего сайта отделен от каталога репозитория, кроме того, отдельные каталоги позволяют передавать данные в общий репозиторий без развертывания (например, когда вам нужно переместить коды, которые не готовы к работе, с одной машины разработки на другую машину разработки).

Итак, схема работает так:

  1. Сервер
    1. "голый" каталог репозитория: общий репозиторий
    2. "живой" каталог сайта: hg pull / path / to / bare (создайте для этого запись [paths] в hgrc)
    3. сценарий / псевдоним для извлечения из голого в действующий и выполнения других задач развертывания
    4. ~ / .ssh / authorized_keys содержит открытый ключ для доступа по ssh
  2. Местный
    1. "локальный" каталог разработки: hg push ssh: //username@example.com/path/to/bare (создайте для этого запись [paths] в hgrc)
    2. ~ / .ssh / rsa_id используется для безопасного нажатия без пароля.

Использование SSH также будет более безопасным, чем использование hgweb, поскольку процесс Apache не должен иметь возможность писать в «активный» каталог сайта или в «чистый» каталог репозитория. Проталкивание через SSH означает, что доступ на запись в эти каталоги требуется только пользователю SSH.

Без голого репозитория это выглядит немного проще:

  1. Сервер
    1. "живой" каталог сайтов
    2. ~ / .ssh / authorized_keys содержит открытый ключ для доступа по ssh
  2. Местный
    1. "локальный" каталог разработки: hg push ssh: //username@example.com/path/to/live (создайте для этого запись [paths] в hgrc)
    2. ~ / .ssh / rsa_id используется для безопасного нажатия без пароля.

но вы теряете упомянутые выше преимущества.

Вы можете настроить два виртуальных хоста на сервере, которые указывают на один и тот же корень документа. Один виртуальный хост обслуживает веб-сайт, а другой - ртутный репозиторий с hgweb.wscgi. Таким образом, вы можете настроить аутентификацию внутри второй конфигурации vhost.

<VirtualHost *:80>
  ServerName www.example.com
  ServerAlias example.com 
  DocumentRoot /www/domain/public_html/site/
</VirtualHost>

<VirtualHost *:80>
  ServerName repo.example.com
  DocumentRoot /www/domain/public_html/site/

 # auth setup
 ....
</VirtualHost>

Если вы предпочитаете использовать .htaccess, вы также можете использовать другие имена для файлов htaccess, используя директиву AccessFileName в конфигурации vhost.
Например:

AccessFileName .acl