После небольшой увертюры с бубном у меня родился этот документ являющийся практически пошаговой инструкцией по развертыванию проекта Trac. Надеюсь это пригодится кому-нибудь еще.
Инструкция ориентирована на пользователя с базовыми знаниями администрирования Linuх и системы установки пакетов Python. Скажу сразу, что описан процесс развертывания на системе со свежеустановленным дистрибутивом Ubuntu 12.04, однако думаю информацию будет полезна и для поклонников других сборок Linux.
Инициализация проекта Trac
Выполните следующие действия если в системе не установлен дистрибутив Trac:
- установите Python Pip;
- установите Babel, если нужна локализация интерфейса;
- установите сам Trac с указанием версии, в статье описано установка версии 1.0.
sudo apt-get install python-pip sudo pip install babel sudo pip install "Trac==1.0"
Теперь нужно проинициализировать каталог размещения проекта. Выполните следующие действия:
- создать пользователя trac;
- создать группы tracsys и включить в неё trac и себя;
- подготовить место под размещение проекта;
- проинициализировать каталог проекта;
- назначить владельца и необходимые права;
- запустить, посмотреть что получилось.
sudo adduser --disabled-password --gecos 'Trac' trac sudo addgroup tracsys sudo adduser trac tracsys sudo adduser `whoami` tracsys sudo mkdir -p /var/www/trac sudo trac-admin /var/www/trac initenv sudo chown -R nobody:tracsys /var/www/trac sudo chmod -R g+rwXs /var/www/trac tracd -p 8000 /var/www/trac/
Всё достаточно тривиально, кроме манипуляций с группой tracsys и назначением прав на каталог проекта. Но это задел на интеграцию с gitolite и организацию хостинга проекта на основе связки Nginx+UWSGI.
Организация хостинга с помощь Nginx и UWSGI
UWSGI — это сервер WSGI приложений. Что бы запустить под ним наш проект Trac его нужно представить в виде приложение WSGI. Сделать это не сложно с помощью скрипта ниже приведенного. Скопируйте его в файл /home/trac/wsgi_trac.py, назначьте пользователя trac владельцем. Далее необходимо создать конфигурационные файлы Nginx и UWSGI. Для Nginx файл стандартный в таких случаях, а для UWSGI есть тонкости. Наше WSGI будет запускаться с правами пользователя trac и группы tracsys. Конфигурационные файлы wsgi_trac.nginx и wsgi_trac.uwsgi приведены ниже.
wsgi_trac.py
import os import sys import trac.web.main sys.stdout=sys.stderr os.environ['TRAC_ENV'] = '/var/www/trac' application = trac.web.main.dispatch_request
wsgi_trac.nginx
server { listen 80; server_name trac.local; location / { include uwsgi_params; uwsgi_pass 127.0.0.1:5544; } }
wsgi_trac.uwsgi
[uwsgi] uid=trac gid=tracsys chmod-socket=777 chown-socket=trac chdir = /home/trac socket = 127.0.0.1:5544 module = wsgi_trac:application processes = 2 master = 1
Если Nginx и/или UWSGI не установлены установите их. Симлинками активируйте конфигурационные файлы и перезапустите сервисы.
sudo apt-get install nginx uwsgi uwsgi-plugin-python sudo ln -s /home/trac/wsgi_trac.nginx /etc/nginx/sites-enabled/trac.conf sudo ln -s /home/trac/wsgi_trac.uwsgi /etc/uwsgi/apps-enabled/trac.ini sudo service nginx restart sudo service uwsgi restart
Установка плагина AccountManagerPlugin
Дистрибутив Trac 1.0 не включает в себя компонент, которые бы позволил управлять пользовательскими аккаунтами. Для этого используются всевозможные плагины. В нашем примере будет использован плагин AccountManagerPlugin. Скачайте его и соберите как egg дистрибутив. Полученный файл с расширением .egg перепишите в каталог плагинов, в нашем случае это /var/www/trac/plugins. Добавьте в файл trac.ini строки.
[components] trac.web.auth.LoginModule = disabled acct_mgr.web_ui.LoginModule = enabled acct_mgr.web_ui.RegistrationModule = enabled
Для хранения паролей будет использоваться файл в формате HtDigest, для этого добавим в файл trac.ini так же и следующие строки.
[account-manager] authentication_url = force_passwd_change = False hash_method = HtDigestHashMethod htdigest_realm = trac htpasswd_hash_type = crypt password_file = /var/www/trac/db/users.htdigest password_store = HtDigestStore persistent_sessions = False refresh_passwd = False user_lock_max_time = 0 verify_email = False
После этого в веб интерфейсе появиться пункт позволяющий зарегистрировать пользователя. Регистрируйте пользователя. И выполните команду что бы назначить его админом.
trac-admin /var/www/trac permission add <имя зарегистрированного пользователя> TRAC_ADMIN
Теперь у нас есть админ, зайдя под которым можно создавать, удалять и назначать права другим пользователям. Обратите внимания, что в веб интерфейсе активирована ссылка на форму регистрации нового пользователя, отключите её если самостоятельная регистрация пользователя не предусмотрена проектом. Сделать это уже можно в админке в разделе управления плагинами сняв галку в c RegistrationModule в форме конфигурации плагина AccountManagerPlugin.
Интеграция с Gitolite
Для управления репозиториями Git есть замечательный инструмент Gitolite, который к тому же может быть интегрирован с проектами Trac. Для этого надо выполнить следующие действия:
- развернуть дистрибутив Gitolite, создать пользователя git с рабочей директорией /home/gitolite и добавить его в группу tracsys;
- Создать SSH ключи для пользователя trac и скопировать публичный ключ в /tmp/trac.pub;
sudo apt-get install gitolite sudo adduser --home /home/gitolite --disabled-password --gecos 'Git' git sudo adduser git tracsys sudo su trac cd ~ ssh-keygen -t rsa cp ~/.ssh/id_rsa.pub /tmp/trac.pub exit
Следующим шагом под пользователем git инициализируем рабочий каталог gitolite. При этом откроется файл конфигурации, где надо исправить строчку ‘$REPO_UMASK = 0077;’ на ‘$REPO_UMASK = 0007;’. Если vim у вас вызывает затруднения, просто нажмите ZZ. Сменить маску можно и позже отредактировав файл /home/gitolite/.gitolite.rc. Каталогу с репозиториями назначим права аналогичные тем, что назначили на каталог с проектом Trac.
sudo su git cd ~ gl-setup /tmp/trac.pub exit sudo chown -R git:tracsys /home/gitolite/repositories/ sudo chmod -R g+rwXs /home/gitolite/repositories/
Осталось включить интеграцию с Git нашего Trac проекта. Для этого добавим в trac.ini следующие строки.
[components] tracopt.versioncontrol.git.* = enabled [trac] repository_type = git
Теперь в админке, в разделе Репозитории подключите с именем testing тестовый репозиторий gitolite /home/gitolite/repositories/testing.git, а с именем gitolite-admin управляющий репозиторий /home/gitolite/repositories/gitolite-admin.git. Если все было сделано правильно, в меню веб интерфейса появится раздел Исходный код в котором они оба будут присутствовать.
Все отлично, но хотелось бы и управлять репозиториями Gitolite через интерфейс нашего проекта Trac. Не проблема, в этом деле поможет плагин trac-GitolitePlugin. Скачайте его с приведенной страницы и соберите как egg дистрибутив. Полученный файл скопируйте в каталог плагинов и активируйте добавив в файл trac.ini следующие строки.
[components] trac_gitolite.* = enabled [trac] permission_policies = GitolitePermissionPolicy, AuthzPolicy, DefaultPermissionPolicy, LegacyAttachmentPolicy [trac-gitolite] admin_reponame = gitolite-admin admin_real_reponame = gitolite-admin admin_ssh_path = git@localhost:gitolite-admin.git admin_system_user = trac default_private = True all_includes_anonymous = False
После этого в админке появиться новый раздел, в котором можно будет добавлять пользователей в Gitolite и назначать им права на репозитории. Однако у меня во время первого добавления пользователя выскочила ошибка выполнении команды git clone git@localhost:gitolite-admin.git /tmp/bla-bla. Пришлось выполнить эту команду из под пользователя trac и подтвердить добавление ключа в ручную, дальше всё заработало без проблем.
Осталось реализовать одну из самых интересных фишек интеграции Trac и Git, это закрытие тикета путем указания в коммите кодового слова. Например коммит в котором будет строка «close #777», автоматически закроет соответствующий тикет. Для этого во первых нужно будет активировать компонент CommitTicketUpdater через админку или добавив в файл trac.ini следующие строки.
[components] tracopt.ticket.commit_updater.* = enabled
Далее скачаем Python скрипт реализующий соответствующий hook например в директорию /var/www/trac/hooks. В нем есть секция конфигурации, которую надо настроить исходя из расположения и конфигурации конкретного проекта Trac. В нашем случае это будет выглядеть как-то так:
# config TRAC_ENV = '/var/www/trac' GIT_PATH = '/usr/bin/git' TRAC_ADMIN = '/usr/local/bin/trac-admin' #REPO_NAME = '(default)' # if you are using gitolite or sth similar, you can get the repo name from envir REPO_NAME = os.getenv('GL_REPO')
У Gitolite своя система организации хуков, правильным образом прописанные они срабатывают на все репозитории им контролируемые, а это как раз то что надо. Для этого под пользователем git создайте файл ~/.gitolite/hooks/post-receive со следующим содержимым:
#!/bin/bash python /var/www/trac/hooks/trac-post-receive-hook-0.12-new-commits-from-all-branches.py
И в завершении активируйте этот хук выполнив следующие команды.
sudo su git cd ~/.gitolite/hooks/ chmod 755 post-receive gl-setup
Заключение
Надеюсь моя статья, поможет кому-то разобраться с этим вопросом или как минимум сэкономить время.
ссылка на оригинал статьи http://habrahabr.ru/post/159153/
Добавить комментарий