Сегодня я расскажу как можно отказаться от медленного 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.
Это всё.
Удачи!