Недавно появилась необходимость установить Mercurial сервер, используя в качестве фронтэнда nginx. В интернете довольно много информации на данную тему, но пришлось довольно много импровизировать что бы добиться результата. Итак, ниже представлен результат труда по настройке этой связки.
Все нижеописанные действия производятся из под рута. Итак, приступим :)
Установка необходимого софта
Python
В первую очередь поставим Python.
apt-get install python
Так же для удобства добавления сторонних PPA можно поставить python-software-properties:
apt-get install python-software-properties
После этого PPA можно добавлять командой
add-apt-repository ppa:xxx/yyy
Mercurial
Поскольку в репозитории Lucid Lynx находится версия mercurial’а, древняя как говно мамона, то подключаем PPA с новыми версиями:
add-apt-repository ppa:mercurial-ppa/stable-snapshots
apt-get update
apt-get install mercurial
Nginx
В основном репозитории nginx отсутствует поэтому подключаем PPA и устанавливаем.
add-apt-repository ppa:nginx/stable
apt-get update
apt-get install nginx
uwsgi-python
В качестве сервера python-приложений установим uwsgi-python.
add-apt-repository ppa:uwsgi/release
apt-get update
apt-get install uwsgi-python
Настройка
Теперь после установки софта начинается самое сложное - настройка. Во первых, рассмотрим структуру директорий, которая будет использоваться.
/var/www/hosts/hg.server.net/conf здесь будут расположены конфиги
/var/www/hosts/hg.server.net/logs директория для логов
/var/www/hosts/hg.server.net/repos директория, содержащая репозитории
Mercurial + uwsgi
Создадим файл описания UWSGI-приложения /etc/uwsgi-python/apps-available/hgweb.xml
примерно такого содержания:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
|
Параметр socket задает адрес который будет прослушивать сервер. workers количество запущенных воркеров. Обратите внимание что в 14-ой строке необходимо указать правильный путь к конфигу hgweb, созданием которого мы сейчас и займемся.
Для этого создаем файл /var/www/hosts/hg.server.net/conf/hgweb.config
:
1 2 3 4 5 6 7 8 |
|
Во второй строке мы разрешаем проталкивать изменения только по SSL.
В третьей можно перечислить через запятую пользователей которым разрешено проталкивать изменения на сервер.
В четвертой выбирается стиль интерфейса. Мне больше всего нравится gitweb.
в последней строке необходимо установить корректные пути до репозиториев.
Теперь, для проверки корректности настроек временно поменяем строку <socket>/var/run/uwsgi.hgweb.sock</socket>
в файле hgweb.xml на <socket>127.0.0.1:3031</socket>
и запустим следующую команду:
uwsgi-python -x /etc/uwsgi-python/apps-available/hgweb.xml
Если все настроено верно то никаких ошибок выведено не будет. И если зайти браузером по адресу http://127.0.0.1:3031/
то отобразится список репозиториев. Если все нормально то меняем файл hgweb.xml обратно и создаем симлинк в /etc/uwsgi-python/apps-enabled
:
ln -s /etc/uwsgi-python/apps-{available,enabled}/hgweb.xml
Теперь можно переходить к следующему этапу.
Nginx
Создадим файл паролей при помощи утилиты htpasswd
htpasswd -c /var/www/auth/.htpasswd <username>
Создаем конфиг /etc/nginx/sites-available/hg.server.net
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
|
Делаем симлинк для нашего конфига в /etc/nginx/sites-enabled
:
ln -s /etc/nginx/sites-{available,enabled}/hg.server.net
Запускаем сервисы
service uwsgi-python start
service nginx start
Если все хорошо то зайдя по адресу http://hg.server.net/
увидим список репозиториев.
Если это так то сделаем что бы все запускалось автоматически при старте системы и забудем о настройке.
Автоматический запуск сервисов при загрузке
Во первых убедитесь что сделали симлинки на конфиги. Во вторых следует настроить сервисы для автоматического запуска:
update-rc.d uwsgi-python defaults
update-rc.d nginx defaults
Все - настройка завершена, можно перезагрузиться и еще раз проверить работу.