Роман Теличко

Заметки веб-разработчика/админа

Настройка связки nginx + SVN/Subversion + trac (без Apache)

// | 3995 просмотров | 2 комментария

Сегодня я расскажу как можно отказаться от медленного Apache для настройки связки trac + SVN/Subversion. Итак, начнём.

1. Устанавливаем и настраиваем SVN/Subversion

Ставим SVN/Subversion на наш сервер

sudo apt-get install subversion

Создаём репозиторий (для примера — в папке /var/svn/my-repository)

sudo svnadmin create /var/svn/my-repository

Устанавливаем владельца www-data для папки с репозиторием

sudo chown -R www-data:www-data /var/svn/my-repository

Теперь нам необходимо выполнить импорт файлов в репозиторий.
Для этого создадим где-то на локальной машинке (впрочем, можно и прямо на удалённом сервере) папку с некоторым именем (для примера: my-files)

mkdir my-files

И выполняем первый импорт на наш настроенный SVN-сервер:

svn import -m 'initial commit' my-files svn+ssh://my-username@my-cool-webserver/var/svn/my-repository

Где
  my-files — папка с файлами которые необходимо проимпортировать в репозиторий,
  my-username — имя пользователя на сервере,
  my-cool-webserver — адрес сервера,
  /var/svn/my-repository — путь в файловой системе сервера к репозитории

Теперь мы можем выполнять коммиты в этот репозиторий, только вначале необходимо будет сделать checkout репозитория в папку для дальнейшей работы.
Делается это так:

svn checkout svn+ssh://my-username@my-cool-webserver/var/svn/my-repository

Данный способ настройки SVN/Subversion называется SVN over SSH.

2. Устанавливаем и настраиваем trac

Ставим trac на наш сервер

sudo apt-get install trac

Создаём окружение trac’a в папке, видимой веб-серверу (для примера пусть это будет /var/www/trac)

sudo trac-admin /var/www/trac initenv

Устанавливаем владельца www-data для папки с trac’ом

sudo chown -R www-data:www-data /var/www/trac

Поскольку trac использует авторизацию по файлу .htpasswd — создадим его:

sudo htpasswd -c /var/www/trac/.htpasswd my-username

Теперь мы можем запустить демон trac’a (для примера на 127.0.0.1:3050)

sudo tracd -d --port=3050 --hostname=127.0.0.1 --single-env /var/www/trac --basic-auth="trac,/var/www/trac/.htpasswd,Trac"

Теперь настроим nginx для работы с trac по такой схеме.

/etc/nginx/sites-enabled/trac

upstream trac {
    server 127.0.0.1:3050;
}

server {
    listen              80;
    server_name         trac.my-cool-webserver.com;

    access_log          /var/log/nginx/trac.access.log main;
    error_log           /var/log/nginx/trac.error.log;

    root                /var/www/trac;
    index               index.html;

    location ~ /(.*?)/chrome/site/ {
        access_log      off;
        autoindex       off;
        expires         1d;
        rewrite         /(.*?)/chrome/site/(.*)     /$1/htdocs/$2   break;
    }

    location / {
        auth_basic              "Restricted Zone";
        auth_basic_user_file    /var/www/trac/.htpasswd;
        proxy_pass      https://trac;
        proxy_redirect  off;
        include         /etc/nginx/conf.d/proxy_cache.conf;
    }

    location ~ /\. {
        deny            all;
        access_log      off;
        log_not_found   off;
    }
}

/etc/nginx/conf.d/proxy_cache.conf

proxy_set_header        Host                        $host;
proxy_set_header        X-Real-IP                   $remote_addr;
proxy_set_header        X-Forwarded-For             $proxy_add_x_forwarded_for;

proxy_set_header        Range                       "";
proxy_set_header        Request-Range               "";

proxy_ignore_headers    "Cache-Control" "Expires";

proxy_connect_timeout   60;
proxy_send_timeout      600;
proxy_read_timeout      600;

proxy_buffering         on;
proxy_buffers           16      32k;
proxy_buffer_size       32k;
proxy_busy_buffers_size         128k;
proxy_temp_file_write_size      128k;

add_header              Cache-Control   'private';

proxy_hide_header       "Cache-Control";
add_header              Cache-Control           "no-store, must-revalidate, post-check=0, pre-check=0";
proxy_hide_header       "Pragma";
add_header Pragma       "no-cache";
expires                 -1;
add_header              Last-Modified   $sent_http_Expires;

Теперь создадим файл для запуска trac и сохраним его в /etc/init.d.

/etc/init.d/tracd

#!/bin/sh

### BEGIN INIT INFO
# Provides:          tracd
# Required-Start:    $local_fs $remote_fs $network $syslog
# Required-Stop:     $local_fs $remote_fs $network $syslog
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: starts the tracd web server
# Description:       starts tracd using start-stop-daemon
### END INIT INFO

PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
DAEMON=/usr/bin/tracd
NAME=tracd
DESC=tracd

HOST="127.0.0.1"
PORT=3050
ROOTDIR="/var/www/trac"

test -x $DAEMON || exit 0

set -e

. /lib/lsb/init-functions

case "$1" in
	start)
		echo -n "Starting $DESC: "
	        $DAEMON -d --port=$PORT --hostname=$HOST --single-env $ROOTDIR --basic-auth="*,$ROOTDIR/.htpasswd,Trac"
		echo "OK"
		;;

	stop)
		echo -n "Stopping $DESC: "
		killall $NAME
		echo "$NAME."
		;;
esac

exit 0

Проверим в браузерe https://trac.my-cool-webserver.com.
Для начала у вас должен быть запрошен логин и пароль, что мы указали в файле .htaccess. После чего вы увидите интерфейс trac.

Это всё.
Удачи!

  • Владимир Кисиль

    действую строго по мануалу, получаю «502 Bad Gateway»

    • А что в логах nginx?