Project

General

Profile

HowTo Install Redmine in a sub-URI » History » Version 18

David Navarro Solans, 2019-02-08 15:23

1 15 Simon Deziel
{{toc}}
2
3 3 Jean-Philippe Lang
h1. HowTo Install Redmine in a sub-URI
4 1 Jean-Baptiste Barth
5 2 Jean-Baptiste Barth
This page explains how to run Redmine in a subdirectory of your site, for instance @http://www.mysite.com/redmine/@ ; in such a case, you can feel lost because the classic Redmine install does not work directly, and the links to css or javascript files seem to be broken. In this page, we assume you want to run Redmine under "/redmine/" subdirectory of your site.
6 1 Jean-Baptiste Barth
7 16 Evgeniy Dushistov
h2. Working variant (Sun Jun 26 13:48:50 MSK 2016)
8
9
Change the following lines at the bottom of your config/environment.rb
10
11
<pre><code lang="ruby">
12
# Initialize the Rails application
13
Rails.application.initialize!
14
</code></pre>
15
16
to 
17
18
<pre><code lang="ruby">
19
RedmineApp::Application.routes.default_scope = "/redmine"
20
# Initialize the Rails application
21
Rails.application.initialize!
22
</code></pre>
23
24
25 6 Luca Pireddu
h2.  Using Redmine::Utils (preferred solution)
26
27
Add the following line at the bottom of your config/environment.rb
28
29
<pre>
30
Redmine::Utils::relative_url_root = "/redmine"
31
</pre>
32
33
Then restart your application.
34
35
h2. Using Rails features
36 1 Jean-Baptiste Barth
37
Add the following line at the end of your config/environment.rb :
38
<pre>
39
ActionController::AbstractRequest.relative_url_root = "/redmine"
40 4 Michael Vance
</pre>Rails will then prefix all links with "/redmine". It can be considered as the simplest, cleanest and most flexible solution. Then restart your application. In more recent versions of Rails the class hierarchy has changed slightly and you will need to use
41
<pre>
42
ActionController::Base.relative_url_root = "/redmine"
43 5 Michael Vance
</pre>for the class name.
44 1 Jean-Baptiste Barth
45
h2. Using Mongrel features
46
47 2 Jean-Baptiste Barth
If you run Redmine under Mongrel server, you can alternatively use the "--prefix" option of Mongrel :
48 1 Jean-Baptiste Barth
<pre>
49 2 Jean-Baptiste Barth
mongrel_rails start --prefix=/redmine
50 7 Tiemo Vorschuetz
</pre>
51
_*Mongrel_rails service "--prefix" directive does NOT work with Rails 2.3.x*
52
To fix this issue create a file config/initializers/patch_for_mongrel.rb [name of file can be anything]:_
53
<pre>
54
# Fix for mongrel which still doesn't know about Rails 2.2's changes, 
55
# We provide a backwards compatible wrapper around the new
56
# ActionController::base.relative_url_root,
57
# so it can still be called off of the actually non-existing
58
# AbstractRequest class.
59
60
module ActionController
61
  class AbstractRequest < ActionController::Request
62
    def self.relative_url_root=(path)
63
      ActionController::Base.relative_url_root=(path)
64
    end
65
    def self.relative_url_root
66
      ActionController::Base.relative_url_root
67
    end
68
  end
69
end
70
#
71
# Thanks to http://www.ruby-forum.com/topic/190287
72
</pre>
73
74
You may not run Mongrel on port 80 : if you have an Apache server on the same host, and you run Mongrel on port 8000, you can use the following Apache config to redirect (with Apache's mod_proxy enabled) :
75 1 Jean-Baptiste Barth
<pre>
76
ProxyPass /redmine http://localhost:8000/redmine
77
ProxyPassReverse /redmine http://localhost:8000/redmine
78
</pre>
79
80
h2. Using Passenger (aka mod_rails) features
81
82 9 Zack s
If you run Redmine under Apache web server with Phusion Passenger module, you can follow "this guide":http://www.modrails.com/documentation/Users%20guide%20Apache.html#deploying_rails_to_sub_uri ; please note it won't work correctly on some versions of Passenger or some Linux distributions.
83 1 Jean-Baptiste Barth
84 12 shaun williams
h2. Using Passenger+Nginx features
85
86
See "official guide":http://modrails.com/documentation/Users%20guide%20Nginx.html#deploying_rails_to_sub_uri (This is the only solution that worked for me - 30 Oct 2012)
87
88 13 Yehuda Katz
h2. Using Unicorn+Nginx
89
90
nginx config:
91
<pre>
92
location /redmine {
93
        alias   <PATH_TO>/redmine/public;
94
95
        try_files $uri/index.html $uri.html $uri @app;
96
     }
97
</pre>
98
99
config/routes.rb
100
<pre>
101
102
Redmine::Utils::relative_url_root = "/redmine"
103
104
RedmineApp::Application.routes.draw do
105 14 Yehuda Katz
scope Redmine::Utils::relative_url_root do
106 13 Yehuda Katz
  root :to => 'welcome#index', :as => 'home'
107
.....
108
end
109
end
110
</pre>
111
112 1 Jean-Baptiste Barth
h2. With a reverse proxy
113
114
If you have an Apache webserver in front of it (with mod_proxy enabled), or an Apache reverse proxy on another machine, you can run Redmine on a specific port and use this kind of config so it appears to be running in a subdirectory :
115
<pre>
116
ProxyPass /redmine http://real-redmine-server.localdomain:3000/
117
ProxyPassReverse /redmine http://real-redmine-server.localdomain:3000/
118 2 Jean-Baptiste Barth
</pre>See Apache official documentation to adapt it.
119 1 Jean-Baptiste Barth
120 17 Cyril Jouve
h2. With puma
121
122
# Define "RAILS_RELATIVE_URL_ROOT environment variable":http://guides.rubyonrails.org/configuring.html#deploy-to-a-subdirectory-relative-url-root :
123
<pre><code class="bash>
124
export RAILS_RELATIVE_URL_ROOT=/redmine
125
</code></pre> or use [[HowTo_Install_Redmine_in_a_sub-URI#Using-RedmineUtils-preferred-solution|RedmineUtils method]]
126
This allows rails to generate urls prefixed by RAILS_RELATIVE_URL_ROOT.
127
# Then update you config.ru:
128
<pre><code class="ruby">
129
# This file is used by Rack-based servers to start the application.
130
131
require ::File.expand_path('../config/environment',  __FILE__)
132
map ENV['RAILS_RELATIVE_URL_ROOT'] || '/' do
133
  run RedmineApp::Application
134
end
135
</code></pre> This allows rack to handle urls prefixed with RAILS_RELATIVE_URL_ROOT.
136
137
Both points are necessary.
138 1 Jean-Baptiste Barth
139 18 David Navarro Solans
h2. If using Docker official image, passenger variant
140
141
Create a _Dockerfile_ in an empty directory with the following contents, adjusting the tag to the version you want to use:
142
143
<pre>
144
FROM redmine:2.6.10-passenger
145
COPY assets/passenger-nginx-config-template.erb /passenger-nginx-config-template.erb
146
CMD ["passenger", "start", "--nginx-config-template", "/passenger-nginx-config-template.erb"]
147
</pre>
148
149
Create a _passenger-nginx-config-template.erb_ file in the same directory with the following contents, adjusting the sub-URI you want to use:
150
151
<pre>
152
<%= include_passenger_internal_template('global.erb') %>
153
154
worker_processes 1;
155
events {
156
    worker_connections 4096;
157
}
158
159
http {
160
    <%= include_passenger_internal_template('http.erb', 4) %>
161
162
    default_type application/octet-stream;
163
    types_hash_max_size 2048;
164
    server_names_hash_bucket_size 64;
165
    client_max_body_size 1024m;
166
    access_log off;
167
    keepalive_timeout 60;
168
    underscores_in_headers on;
169
    gzip on;
170
    gzip_comp_level 3;
171
    gzip_min_length 150;
172
    gzip_proxied any;
173
    gzip_types text/plain text/css text/json text/javascript
174
        application/javascript application/x-javascript application/json
175
        application/rss+xml application/vnd.ms-fontobject application/x-font-ttf
176
        application/xml font/opentype image/svg+xml text/xml;
177
178
    server {
179
        server_name _;
180
        listen 0.0.0.0:3000;
181
        root '/usr/src/redmine/public';
182
        passenger_app_env 'production';
183
        passenger_spawn_method 'smart';
184
        passenger_load_shell_envvars off;
185
186
        location ~ ^/suburi(/.*|$) {
187
            alias /usr/src/redmine/public$1;
188
            passenger_base_uri /suburi;
189
            passenger_app_root /usr/src/redmine;
190
            passenger_document_root /usr/src/redmine/public;
191
            passenger_enabled on;
192
        }
193
    }
194
195
    passenger_pre_start http://0.0.0.0:3000/;
196
}
197
</pre>
198
199
Build the Docker image and launch a container:
200
201
<pre>
202
docker build -t redmine-in-a-sub-uri:2.6.10-passenger .
203
docker run -d --name redmine-in-a-sub-uri -p 3000:3000 redmine-in-a-sub-uri:2.6.10-passenger
204
</pre>
205
206
The resultant Redmine can be accessed in http://localhost:3000/suburi
207
208 2 Jean-Baptiste Barth
h2. Old versions of Redmine and Rails
209 1 Jean-Baptiste Barth
210 2 Jean-Baptiste Barth
If you run a very old version of Redmine (don't know exactly which ones), maybe your version of Rails' ActionController does not support the "relative_url_root" mentionned above. Then you can look at "this page":https://www.riscosopen.org/wiki/documentation/pages/Running+Rails+applications+from+subdirectories/versions/16 to reproduce the same behaviour, but it is NOT a very good idea in most cases, you should consider upgrading Redmine.
211
212 1 Jean-Baptiste Barth
h2. References
213
214 8 Zack s
If this page did not answered your problems, you can see #2508 or "this thread":http://www.redmine.org/boards/2/topics/2244.
215 10 Zack s
216
Windows : Configuring Ruby On Rails App in a subdirectory under Apache - http://stackoverflow.com/a/470973/663172
217 11 Zack s
218
Configuring ruby on rails Action Controller - http://edgeguides.rubyonrails.org/configuring.html#configuring-action-controller