Среда разработки — установка и настройка usvn
Ноябрь 30, 2011 | ITшное, Разработка | Модные словечки freeBSD, svn, usvn, администрирование | Оставить свое мнениеСкажу прежде о том, что настройку среды разработки, описанной в одном из предыдущих постов я конечно закончил, но описать это в блоге забыл.
Напишу по свежей памяти о недавном разворачивании usvn (usvn.info) как UI для управления SVN репозиториями.
Напомню, что речь идет о виртуальном сервере на freebsd работающим из под виртуалки. Нужен ли кому то личный репозиторий пусть решает сам, лично я считаю очень полезным даже при самостоятельной разработке (в случае работы в команде необходимость в таком инструменте вообще не возникает).
Забегая вперед, скажу, что программа smartSvn которой я пользуюсь для работы с репозиториями имеет возможность создания и работы через локальный репозиторий, так что возможно если бы я увидел эту возможность до настройки всего этого, то попробовал бы сначала поработать с локальным.
Лирика
Кому нужны только технические детали, может листать вниз.
Так вот, как то у меня бывает получается, что, казалось бы, простая задача (скачать архив, распаковать, настроить хост в нгинсе и апач) усложняется какими то проблеммами.
Так вот и в этот раз. Во-первых, я видимо попал как раз на тот момент, когда старая команда, занимающаяся usvn прекратила работу над ним (следуя из их новостей), а какая то новая принялась. И видимо они как раз начали вникать в разработку, так как за несколько дней, которые я занимался поднятием этого дела у себя, у них вышли 1.0.2 а затем 1.0.3 версии. Во-вторых, сайт самого usvn падал почему то каждый вечер, и даже почитать их документацию было невозможно.
Лирика закончена.
Напомню базовую систему, на которой нужно поднять usvn: freebsd, nginx, php-fpm. Nginx стоит фронтэндом. Апача пока и в помине нету.
В общем вот краткая инструкция по быстрому поднятию нужного:
- Ставим apache2 (я ставил из портов — /usr/ports/www/apache22/ ), подключая обязательно модули auth_file, auth_basic, mod_dav, dav_fs, советую еще поставить mod_ssl);
- Ставим subversion (/usr/ports/devel/subversion), не забыв включить в опции его конфига mod_dav, остальные параметры вроде можно оставить по дефолту;
- При этом subversion закинет в папку /usr/local/libexec/apache22/ пару модулей для апача, необходимые для правильной работы этой системы;
- Правим конфиг апача. Главное — вешаем его не на стандартный 80, а на другой порт, я выбрал 433 (не путать с 443 который является дефолтным для https). Совет: если у вас по итогу не будет работать свн как нужно (например при переходе по нужному адресу будут ошибки 403, 404 и т.п., попробуйте перед директивой <location> для усвн поставить ServerRoot «/usr/local/www/usvn/files/svn/» — если сам усвн вы ставили в /usr/local/www/usvn/ и для репозиториев была указана стандартная папка). Не забываем так же вручную прописать для апача подключение модулей (добавлять после всех остальных): LoadModule dav_svn_module libexec/apache22/mod_dav_svn.so
LoadModule authz_svn_module libexec/apache22/mod_authz_svn.so - Настраиваем nginx для обработки нужного сайта, перенаправляя все запросы на index.php
- Перезапускаем nginx, apache. Если все ок, можно пробовать открывать адрес на который настроен nginx.
Не забудьте так же включить short_open_tag для php, потому что будет криво отображаться сайт усвн. Сначала на этапе установки я этого не заметил, все работало, хоть и криво, но потом пользоваться уже невозможно :-)
И еще поясню, кто не понял: сам сайт работает через nginx+php-fpm, а все что касается работы svn обслуживается модулем апача на другом порту. Таким образом менеджмент сервера выполняется с браузера, а комиты/апдейты и все остальное через адрес, например http://svn.site.ru:433/usvn/svn/
Приведу так же пример конфига апача:
Listen 433 ServerName svn.site.ru:433 LoadModule authn_file_module libexec/apache22/mod_authn_file.so LoadModule auth_basic_module libexec/apache22/mod_auth_basic.so LoadModule dav_module libexec/apache22/mod_dav.so # ssl LoadModule ssl_module libexec/apache22/mod_ssl.so LoadModule dav_svn_module libexec/apache22/mod_dav_svn.so LoadModule authz_svn_module libexec/apache22/mod_authz_svn.so User www Group www ServerAdmin you@example.com ErrorLog "/var/log/apache/httpd-error.log" LogLevel warn DefaultType text/plain EnableMMAP off EnableSendfile off AcceptFilter http none ServerRoot "/usr/local/www/usvn-1.0/files/svn" <Location /usvn/svn> DAV svn SVNParentPath /usr/local/www/usvn-1.0/files/svn SVNListParentPath off SVNPathAuthz on AuthzSVNAnonymous Off AuthType Basic AuthName "site repository" AuthUserFile /usr/local/www/usvn-1.0/files/htpasswd AuthzSVNAccessFile /usr/local/www/usvn-1.0/files/authz Require valid-user </Location>
Update: забыл добавить еще. После того как все уже было настроено, усвн отказывался создавать репозитории возвращая ошибку «Can’t create subversion repository». В итоге оказалось что все дело в том, что вызов команды svn … или svnadmin … возвращалось с 127 кодов выхода. Фикс этого: либо прописать для нужного юзера переменную окружения либо заменить команду svn -> /usr/local/bin/svn, svnadmin -> /usr/local/bin/svnadmin
После этого все работает четко =)
P.S. Новый пост о том, как сделать то же самое с использованием SSL (через https://).
Наследить..