Redmine [2.6.X]: Performance tuning

В этой статье будут описаны методы по которым мне удалось более менее ускорить работу redmine.
Итак дан сервер конфигурации 2 ядра 4 гига где параллельно с redmine работает wordpress и еще несколько мелких программ на которых работают более 70 пользователей...
http://it.icmp.ru/postimages/1181/7614/thumb/Redmine-Logo-CyberSprocket-Composite-300x300-png8.png

Задачи:
1. увеличить отзывчивость redmine
2. переложить отдачу статики на nginx
3. прикрутить кэширование на memcached


Пробежавшись по форумам выяснил что redmine работает шустрее на веб-сервере thin чем на apache+passenger.

1. УСТАНОВКА GEM:
Добавим сразу все необходимые строки в Gemfile:
gem "thin" <- собственно сам веб-сервер
gem "dalli" <- клиент для кэширования в memcached
gem "cache_digests" <- гем для корректного обновления кэша
Далее выполним: bundle install

2. НАСТРОЙКА RAILS:
В config/environments/production.rb сразу добавим все необходимые строки:
config.cache_store = :dalli_store <- указали dalli в качестве места где будут храниться кэши
config.action_controller.perform_caching = true <- разрешаем кэширование
config.assets.compress = true <- разрешаем сжатие данных
config.assets.digest = true <- разрешаем ротацию кэша
config.serve_static_assets = false <- отключаем обслуживание статических файлов для rails
config.action_dispatch.x_sendfile_header = 'X-Accel-Redirect' <- добавляем хидер чтобы принимать перенаправленные фронтендом данные

3. НАСТРОЙКА THIN:
Конфигурационный файл thin описывается на yaml.
cat /etc/thin/redmine:
---
chdir: /opt/redmine/www
environment: production
address: 127.0.0.1
socket: /tmp/thin.sock
timeout: 30
log: /opt/redmine/www/logs/thin.log
pid: /tmp/thin.pid
max_conns: 1024
max_persistent_conns: 100
require: []
wait: 30
threadpool_size: 20
servers: 3
daemonize: true
user: redmine
group: redmine


В /usr/local/bin/thin подправляем первую строку:
#!/usr/bin/env /usr/local/bin/ruby <- у меня стоит симлинк на env так что у вас скорее всего будет /bin/env

4. НАСТРОЙКА NGINX:
upstream redmine {
server unix:/tmp/thin.0.sock;
server unix:/tmp/thin.1.sock;
server unix:/tmp/thin.2.sock;
}
.....................

root /opt/redmine/www/public;

location ~ ^/(assets|images|javascripts|stylesheets|system)/ {
expires max;
add_header Cache-Control public;
}

location /attachments
{
proxy_redirect off;
proxy_set_header X-Sendfile-Type X-Accel-Redirect;
proxy_set_header X-Accel-Mapping /opt/redmine/www/files=/files;
proxy_pass http://redmine;
}

location /files {
root /opt/redmine/www/;
internal;
}

location / {
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_redirect off;
client_max_body_size 100m;
proxy_cache off;
proxy_pass http://redmine;
}

5. НАСТРОЙКА REDMINE:
В app/controllers/activities_controller.rb добавляем строку в секцию "def index":
expires_in 1.day

В app/controllers/issues_controller.rb добавляем строку в секцию "def index":
expires_in 5.minutes
Аналогичную строку добавить в секцию "def show"

Перезапускаем redmine: /etc/init.d/redmine restart

Теперь если посетили раздел "Действия" то в течении дня оно должно грузиться мгновенно. Аналогично и с задачами но по истечении 5 минут если никто в эту задачу не заглянет то будет грузиться так же медленно как и прежде.

Скрипт для init.d

А как вы ускоряете работу redmine? Пишите в комментариях.
  • просмотров: ~2722
  • рейтинг: ?

Комментарии (2)

Вы - anonymous, войти ?

можно использовать bbcode-теги
[b]жирный текст[/b]
[i]курсив[/i]
[u]underline[/u]
[s]зачеркнутый текст[/s]
[size=20px]размер шрифта[/size]
всякие изменения текста
[left][/left]
[right][/right]
[center][/center]
позиционирование элементов: картинки, текст и т.д
[url][/url]
[email][/email]
внутри тега [url] помещайте ссылки, а внутри [email] адрес электронной почты;
так же [url] можно использовать в виде:
[url=http://example.com]пример[/url],
[url=http://test.ru][img]http://flickr.com/givemeimg.png[/img][/url]
[code][/code]
[quote][/quote]
внутри тега [code] можно помещать программный код (подстветка попытается включиться автоматически); для выделения цитат используйте [quote]
также можно напрямую указать язык [code=cpp]int i;[/code]
[list][/list]
создаем списки, каждый элемент пишется после [*].

Можно указывать маркер - [list=marker].
возможные маркеры 1(decimal), i(lower-roman), I(upper-roman), a(lower-alpha), A(upper-alpha). Примеры:

[list][*]1 элемент[*]2 элемент[*]3 элемент[/list]
[list=1][*]1 элемент[*]2 элемент[*]3 элемент[/list]
[list=A][*]1 элемент[*]2 элемент[*]3 элемент[/list]
[table][/table]
оформляем таблицу, используя внутренние теги [tr] и [td].
[tr] - строка, [td] - поле в строке,
[table=100%] - можно задавать ширину в процентах, по-умолчанию ширина 100%
[td=2] - можно задавать сколько столбцов входит в это поле. Пример:

[table=50%][tr][td]столбец 1[/td][td]столбец 2[/td][/tr][tr][td]значение 1[/td][td]значение 2[/td][/tr][tr][td=2]сразу 2 столбца[/td][/tr][/table]
[img][/img]
тег для вставки фото или картинок, мы любим картинки. Примеры использования:

[img]http://ya.ru/logo.png[/img],
[img=100x100px]http://ya.ru/logo.png[/img]
[img=fullimg.url]thumbimg.url[/img],
Пожалуйста загружайте картинки на наш сайт, либо вставляйте с бекбоновских ресурсов.
[video][/video]
Проигрывает видео, внутрь вставляем ссылки на видео, поддерживается Play.Ykt.Ru(нужно вставить ссылку на страницу с видео) и tv.ykt.ru(нужно вставить ссылку на адрес файла)