Итак дан сервер конфигурации 2 ядра 4 гига где параллельно с redmine работает wordpress и еще несколько мелких программ на которых работают более 70 пользователей...
Задачи:
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? Пишите в комментариях.