Recommended (optimal) configuration of Easy Redmine server
Performance and correct functioning of Easy Redmine depends quite strongly on server configuration. It is important to host the application on a tidy and well-organized environment to ensure that no misconfiguration is blocking Easy Redmine from any particular operations, or even worse, from running altogether.
The manuals below are intended for experienced server administrators. We do not teach how to run a server altogether - there are tons of manuals for general server administration all over the web. We are merely providing insight on the most crucial parts needed to run the application. A certain level of skill is always required for running any web application.
Recommended configuration for running Easy Redmine is nginx + unicorn.
Supported configurations are nginx (apache) + unicorn (passenger, puma, thin).
Webrick is not supported. Other servers were not tested.
Linux/Unix platform.
Tested distributions:
- Debian 8+
- CentOS 7+ (older versions don't allow railsexpress)
- Ubuntu
Nginx
We recommend to use nginx as the webserver because of its speed.
Set configuration for upstream, not for TCP.
Example:
upstream unicorn { # for UNIX domain socket setups: # server unix:/tmp/.sock fail_timeout=0; server unix:/tmp/easysredmine.sock fail_timeout=0; } server { listen 80; server_name easysredmine; error_log /var/log/nginx/easysredmine_error.log; access_log /srv/log/nginx/easysredmine_access.log; location / { proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; proxy_redirect off; proxy_pass http://unicorn; } }
Notice sections upstream and location.
Unicorn
Unicorn is recommended for its speed and simplicity. It is an application server optimized speed.
Configuration:
worker_processes X
Set number according to number of processors of the server. Setting higher doesn't help.
listen '/tmp/easyredmine.sock'
Setting of unicorn on socket.
Timeout 300
Some oparations may take longer, so it is better to use a higher number. 300 should be a minimum.
Ruby
We recommend to install Ruby 2.3.3 with railsexpress patches, by RVM.
RVM
RVM installation for multi-user:
curl -sSL https://get.rvm.io | sudo bash -s stable
RVM patches
After installing RVM, you need to prepare patches for ruby railsexpress
-
git clone https://github.com/skaes/rvm-patchsets.git
-
cd rvm-patchsets
-
./install.sh 2.3.3
Install ruby after installing the patches.
Railsexpress
rvm install 2.3.3 --patch railsexpress
After ruby installation, set ruby 2.3.3 as default:
rvm use 2.3.3 –default
Before running unicorn, it is good to change settings of default values for Ruby Garbage Collector:
export RUBY_GC_HEAP_INIT_SLOTS=1800000; export RUBY_HEAP_FREE_MIN=18000; export RUBY_GC_MALLOC_LIMIT=120000000; export RUBY_HEAP_SLOTS_INCREMENT=144000; export RUBY_HEAP_SLOTS_GROWTH_FACTOR=1;
MySQL
Optimizing database setting to the level of caching all requests.
Example of my.cnf setting:
[mysqld] bulk_insert_buffer_size = 64M tmp_table_size = 512M max_heap_table_size = 512M query_cache_limit = 128K query_cache_size = 512M
...
Recommended encoding is utf8mb4 and collation utf8mb4_unicode_ci
collation_server = utf8mb4_unicode_ci character_set_server = utf8mb4
In config/database.yml
development: &development adapter: mysql2 database: mydatabase host: localhost username: mydblogin password: "RealySUpeRSEEEEcurepAssword!!!!" encoding: utf8mb4 pool: 256 production: <<: *development
Step by step manual for server configuration
If this info is still not enough, we have prepared an even more detailed manual on how to configure your server for running Easy Redmine. The example is for CentOS configuration, but with minor modifications it can be used for other Linux distributions as well.
It is always necessary to think about the content before simply copying and using it in production. You will find steps for guaranteed functioning of the application, unless no other dependency or service blocks it. The manual can also help you with troubleshooting, to verify your configuration (permissions, limits, gem versions, etc.).
The manual is available here.
External sources
- Nginx: http://nginx.org/en/docs/http/ngx_http_upstream_module.html
- Unicorn: http://unicorn.bogomips.org/
- RVM: https://rvm.io/rvm/install
- RVM patchsets & railsexpress: https://github.com/skaes/rvm-patchsets