F29Installation » History » Version 27

Gerd Pokorra, 2019-01-03 16:53

1 1 Gerd Pokorra
h1. HowTo Install Redmine 4.0.0 on Fedora 29
2 1 Gerd Pokorra
3 1 Gerd Pokorra
{{toc}}
4 1 Gerd Pokorra
5 1 Gerd Pokorra
This guide is not complete. It will be completed in the next two weeks.
6 1 Gerd Pokorra
7 1 Gerd Pokorra
h2.  System Requirements
8 1 Gerd Pokorra
9 1 Gerd Pokorra
It is assumed that the Server Edition is installed on the system in this guide.
10 1 Gerd Pokorra
11 13 Gerd Pokorra
h3. Updating the System
12 13 Gerd Pokorra
  
13 13 Gerd Pokorra
It is recommended to install Redmine on an update system. To ensure that all installed packages are up-to-date issue the following command:
14 13 Gerd Pokorra
15 13 Gerd Pokorra
<pre>> dnf update
16 13 Gerd Pokorra
</pre>
17 13 Gerd Pokorra
18 14 Gerd Pokorra
h3. Installing Dependencies
19 14 Gerd Pokorra
20 14 Gerd Pokorra
A number of dependencies need to be installed:
21 14 Gerd Pokorra
22 14 Gerd Pokorra
<pre>> dnf install rubygem-bundler
23 14 Gerd Pokorra
> dnf install rubygem-rails
24 14 Gerd Pokorra
25 14 Gerd Pokorra
> dnf install ruby-devel rubygem-rmagick
26 14 Gerd Pokorra
> dnf install gcc redhat-rpm-config
27 14 Gerd Pokorra
28 14 Gerd Pokorra
> dnf groupinstall "C Development Tools and Libraries"
29 14 Gerd Pokorra
> dnf groupinstall "Development Tools"
30 14 Gerd Pokorra
</pre>
31 14 Gerd Pokorra
32 16 Gerd Pokorra
For PostgreSQL:
33 16 Gerd Pokorra
  
34 1 Gerd Pokorra
<pre>> dnf install rubygem-pg
35 1 Gerd Pokorra
</pre>
36 17 Gerd Pokorra
37 27 Gerd Pokorra
For MySQL:
38 27 Gerd Pokorra
<pre>> dnf install rubygem-mysql2
39 27 Gerd Pokorra
</pre>
40 27 Gerd Pokorra
41 17 Gerd Pokorra
The list of dependencies may not complete. Problems of the installation or build of a compoment can be solved by installing the necessary dependency.
42 16 Gerd Pokorra
43 12 Gerd Pokorra
h2. Obtaining Redmine (Step 1)
44 12 Gerd Pokorra
45 12 Gerd Pokorra
Get the Redmine source code by downloading the packaged release.
46 12 Gerd Pokorra
47 12 Gerd Pokorra
<pre>> dnf install wget
48 12 Gerd Pokorra
49 12 Gerd Pokorra
> mkdir /var/www
50 12 Gerd Pokorra
> cd /var/www
51 12 Gerd Pokorra
52 12 Gerd Pokorra
> wget http://www.redmine.org/releases/redmine-4.0.0.tar.gz
53 12 Gerd Pokorra
> tar xf redmine-4.0.0.tar.gz
54 12 Gerd Pokorra
</pre>
55 12 Gerd Pokorra
56 12 Gerd Pokorra
At this guide is accepted that the location of the Redmine source code is:
57 12 Gerd Pokorra
58 12 Gerd Pokorra
<pre>/var/www/redmine-4.0.0
59 12 Gerd Pokorra
</pre>
60 12 Gerd Pokorra
61 12 Gerd Pokorra
For example the nginx configuration refer to the path @/var/www/redmine-4.0.0@.
62 16 Gerd Pokorra
63 22 Gerd Pokorra
h2. Setup a local database server (Step 2)
64 16 Gerd Pokorra
65 16 Gerd Pokorra
This section discribes the setup of a database server that will be configured to allow access from the localhost.
66 16 Gerd Pokorra
67 16 Gerd Pokorra
h3. PostgreSQL
68 16 Gerd Pokorra
69 18 Gerd Pokorra
The followings commands are for installing the packages, initializing the database, enable and start the postgresql server, switch the user to interact with @postgres@, create an empty database and accompanying user.
70 18 Gerd Pokorra
71 18 Gerd Pokorra
<pre>> dnf install postgresql-server postgresql-contrib
72 18 Gerd Pokorra
> postgresql-setup --initdb --unit postgresql
73 18 Gerd Pokorra
 * Initializing database in '/var/lib/pgsql/data'
74 18 Gerd Pokorra
 * Initialized, logs are in /var/lib/pgsql/initdb_postgresql.log
75 18 Gerd Pokorra
>
76 18 Gerd Pokorra
> systemctl enable postgresql
77 18 Gerd Pokorra
> systemctl start postgresql
78 18 Gerd Pokorra
> su - postgres
79 18 Gerd Pokorra
> psql
80 18 Gerd Pokorra
psql (10.6)
81 18 Gerd Pokorra
Type "help" for help.
82 18 Gerd Pokorra
83 18 Gerd Pokorra
postgres=# CREATE ROLE redmine LOGIN ENCRYPTED PASSWORD 'my_secret' NOINHERIT VALID UNTIL 'infinity';
84 18 Gerd Pokorra
CREATE ROLE
85 18 Gerd Pokorra
postgres=# CREATE DATABASE redmine WITH ENCODING='UTF8' OWNER=redmine;
86 18 Gerd Pokorra
CREATE DATABASE
87 18 Gerd Pokorra
postgres=# \q
88 18 Gerd Pokorra
> exit
89 18 Gerd Pokorra
</pre>
90 18 Gerd Pokorra
91 19 Gerd Pokorra
Edit the file @/var/lib/pgsql/data/pg_hba.conf@ to specify that the client has to supply password processed with MD5 algorithm:
92 19 Gerd Pokorra
93 19 Gerd Pokorra
<pre>#host    all             all             127.0.0.1/32            ident
94 19 Gerd Pokorra
host    all             all             127.0.0.1/32            md5
95 19 Gerd Pokorra
# IPv6 local connections:
96 19 Gerd Pokorra
#host    all             all             ::1/128                 ident
97 19 Gerd Pokorra
host    all             all             ::1/128                 md5
98 19 Gerd Pokorra
</pre>
99 19 Gerd Pokorra
100 19 Gerd Pokorra
You can check the access with the following command:
101 19 Gerd Pokorra
102 19 Gerd Pokorra
<pre>> su - postgres
103 20 Gerd Pokorra
> psql -h localhost -U redmine redmine
104 1 Gerd Pokorra
</pre>
105 20 Gerd Pokorra
106 20 Gerd Pokorra
The appropriate Redmine database configuration file for local access is:
107 20 Gerd Pokorra
108 21 Gerd Pokorra
<pre>> cat /var/www/redmine-4.0.0/config/database.yml
109 20 Gerd Pokorra
# PostgreSQL configuration
110 20 Gerd Pokorra
production:
111 20 Gerd Pokorra
  adapter: postgresql
112 20 Gerd Pokorra
  database: redmine
113 20 Gerd Pokorra
  host: localhost
114 20 Gerd Pokorra
  username: redmine
115 20 Gerd Pokorra
  password: "my_secret"
116 20 Gerd Pokorra
  encoding: utf8
117 1 Gerd Pokorra
  schema_search_path: public
118 21 Gerd Pokorra
</pre>
119 20 Gerd Pokorra
120 20 Gerd Pokorra
If you want to use IPv4 you have to specify @localhost4@ as hostname.
121 19 Gerd Pokorra
122 1 Gerd Pokorra
h3. MySQL
123 22 Gerd Pokorra
124 22 Gerd Pokorra
Install the MySQL repositry
125 22 Gerd Pokorra
126 22 Gerd Pokorra
<pre>> dnf -y install https://dev.mysql.com/get/mysql80-community-release-fc29-1.noarch.rpm
127 22 Gerd Pokorra
</pre>
128 22 Gerd Pokorra
129 22 Gerd Pokorra
If you prefer to stick to MySQL 5.7
130 22 Gerd Pokorra
131 22 Gerd Pokorra
<pre>> dnf config-manager --set-enabled mysql57-community
132 22 Gerd Pokorra
> dnf config-manager --set-disabled mysql80-community
133 22 Gerd Pokorra
</pre>
134 22 Gerd Pokorra
135 23 Gerd Pokorra
Install the MySQL server package, start the MySQL server and autostart the daemon on boot
136 23 Gerd Pokorra
137 22 Gerd Pokorra
<pre>> dnf -y install mysql-community-server
138 22 Gerd Pokorra
> systemctl start mysqld.service
139 22 Gerd Pokorra
> systemctl enable mysqld.service
140 22 Gerd Pokorra
</pre>
141 12 Gerd Pokorra
142 24 Gerd Pokorra
Get your generated random root password you will need it at the next step.
143 24 Gerd Pokorra
144 24 Gerd Pokorra
<pre>> grep 'A temporary password is generated for root@localhost' /var/log/mysqld.log |tail -1
145 24 Gerd Pokorra
</pre>
146 24 Gerd Pokorra
147 24 Gerd Pokorra
Start the secure installation assistant to
148 24 Gerd Pokorra
149 25 Gerd Pokorra
* change root password
150 25 Gerd Pokorra
* remove anonymous users
151 25 Gerd Pokorra
* disallow root login remotely
152 25 Gerd Pokorra
* remove test database and access to it
153 25 Gerd Pokorra
* reload privilege tables
154 24 Gerd Pokorra
155 24 Gerd Pokorra
<pre>> mysql_secure_installation
156 24 Gerd Pokorra
</pre>
157 24 Gerd Pokorra
158 26 Gerd Pokorra
Creation of user and database for Redmine
159 26 Gerd Pokorra
160 26 Gerd Pokorra
<pre>> mysql -h localhost -u root -p
161 26 Gerd Pokorra
Enter password:
162 26 Gerd Pokorra
...
163 26 Gerd Pokorra
mysql> CREATE DATABASE redmine CHARACTER SET utf8mb4;
164 26 Gerd Pokorra
mysql> CREATE USER 'redmine'@'localhost' IDENTIFIED BY 'my_secret';
165 26 Gerd Pokorra
mysql> GRANT ALL PRIVILEGES ON redmine.* TO 'redmine'@'localhost';
166 26 Gerd Pokorra
mysql> \q
167 26 Gerd Pokorra
</pre>
168 26 Gerd Pokorra
169 11 Gerd Pokorra
h2. Firewall
170 11 Gerd Pokorra
171 11 Gerd Pokorra
Open the firewall for https:
172 11 Gerd Pokorra
173 11 Gerd Pokorra
<pre>> firewall-cmd --add-service=https
174 11 Gerd Pokorra
> firewall-cmd --permanent --add-service=https
175 11 Gerd Pokorra
</pre>
176 11 Gerd Pokorra
177 1 Gerd Pokorra
h2. Web Server
178 1 Gerd Pokorra
179 5 Gerd Pokorra
h3. Nginx/Passenger
180 2 Gerd Pokorra
181 2 Gerd Pokorra
The Fedora @nginx@ package do not include Passenger, so you have to build @nginx@ with the passenger module. The guide assume that the sources are extracted under the directory @/opt@ . The @nginx@ software will be installed at @/opt/ngnix@. At the time of writting that guide this was the current stable releases of @passenger@ and @nginx@:
182 2 Gerd Pokorra
183 2 Gerd Pokorra
* passenger-6.0.0
184 2 Gerd Pokorra
* nginx-1.14.2
185 2 Gerd Pokorra
186 4 Gerd Pokorra
h4. Downloading the sources:
187 2 Gerd Pokorra
188 2 Gerd Pokorra
<pre>Passenger
189 2 Gerd Pokorra
190 2 Gerd Pokorra
> cd /opt
191 2 Gerd Pokorra
> wget https://s3.amazonaws.com/phusion-passenger/releases/passenger-6.0.0.tar.gz
192 2 Gerd Pokorra
> tar xf passenger-6.0.0.tar.gz
193 2 Gerd Pokorra
194 2 Gerd Pokorra
Nginx
195 2 Gerd Pokorra
196 2 Gerd Pokorra
> wget http://nginx.org/download/nginx-1.14.2.tar.gz
197 2 Gerd Pokorra
> mkdir /opt/src
198 2 Gerd Pokorra
> cd /opt/src
199 2 Gerd Pokorra
> tar xf nginx-1.14.2.tar.gz
200 2 Gerd Pokorra
</pre>
201 1 Gerd Pokorra
202 3 Gerd Pokorra
h4. Installing additional packages
203 3 Gerd Pokorra
204 3 Gerd Pokorra
For the build of @passenger@ and @nginx@ the following additional packages are needed to be installed:
205 3 Gerd Pokorra
206 3 Gerd Pokorra
<pre>> dnf install install gcc-c++ libcurl-devel openssl-devel zlib-devel
207 3 Gerd Pokorra
</pre>
208 1 Gerd Pokorra
209 5 Gerd Pokorra
h4. Execute the ruby script for building and installing
210 1 Gerd Pokorra
211 5 Gerd Pokorra
The simplest way to build and install the @nginx@ web server with the @passenger@ module is to run the script @passenger-install-nginx-module@.
212 5 Gerd Pokorra
213 5 Gerd Pokorra
<pre>> /opt/passenger-6.0.0/bin
214 5 Gerd Pokorra
> ./passenger-install-nginx-module --prefix=/opt/nginx --nginx-source-dir=/opt/src/nginx-1.14.2 --languages ruby
215 5 Gerd Pokorra
</pre>
216 3 Gerd Pokorra
217 7 Gerd Pokorra
With the same @passenger@ locality the installer modify the @nginx@ configuration file @/opt/nginx/conf/nginx.conf@ and output the same text:
218 6 Gerd Pokorra
219 6 Gerd Pokorra
<pre>  http {
220 6 Gerd Pokorra
      ...
221 6 Gerd Pokorra
      passenger_root /opt/passenger-6.0.0;
222 6 Gerd Pokorra
      passenger_ruby /usr/bin/ruby;
223 6 Gerd Pokorra
      ...
224 6 Gerd Pokorra
  }
225 6 Gerd Pokorra
</pre>
226 6 Gerd Pokorra
227 8 Gerd Pokorra
h4. Add a systemd service file
228 8 Gerd Pokorra
229 8 Gerd Pokorra
To start the @nginx@ process during the boot add the file @/usr/lib/systemd/system/nginx.service@ with the following content:
230 8 Gerd Pokorra
231 8 Gerd Pokorra
<pre>[Unit]
232 8 Gerd Pokorra
Description=The nginx HTTP and reverse proxy server
233 8 Gerd Pokorra
After=network.target remote-fs.target nss-lookup.target
234 8 Gerd Pokorra
235 8 Gerd Pokorra
[Service]
236 8 Gerd Pokorra
Type=forking
237 8 Gerd Pokorra
#PIDFile=/run/nginx.pid
238 8 Gerd Pokorra
PIDFile=/opt/nginx/logs/nginx.pid
239 8 Gerd Pokorra
# Nginx will fail to start if /run/nginx.pid already exists but has the wrong
240 8 Gerd Pokorra
# SELinux context. This might happen when running `nginx -t` from the cmdline.
241 8 Gerd Pokorra
# https://bugzilla.redhat.com/show_bug.cgi?id=1268621
242 8 Gerd Pokorra
ExecStartPre=/usr/bin/rm -f /opt/nginx/logs/nginx.pid
243 8 Gerd Pokorra
#ExecStartPre=/usr/sbin/nginx -t
244 8 Gerd Pokorra
#ExecStart=/usr/sbin/nginx
245 8 Gerd Pokorra
ExecStartPre=/opt/nginx/sbin/nginx -t
246 8 Gerd Pokorra
ExecStart=/opt/nginx/sbin/nginx -c /opt/nginx/conf/nginx.conf
247 8 Gerd Pokorra
ExecReload=/bin/kill -s HUP $MAINPID
248 8 Gerd Pokorra
KillSignal=SIGQUIT
249 8 Gerd Pokorra
TimeoutStopSec=5
250 8 Gerd Pokorra
KillMode=mixed
251 8 Gerd Pokorra
PrivateTmp=true
252 8 Gerd Pokorra
253 8 Gerd Pokorra
[Install]
254 8 Gerd Pokorra
WantedBy=multi-user.target
255 8 Gerd Pokorra
</pre>
256 8 Gerd Pokorra
257 8 Gerd Pokorra
The paths are modified to start the executable @/opt/nginx/sbin/nginx@.
258 8 Gerd Pokorra
259 8 Gerd Pokorra
<pre>> systemctl start nginx
260 8 Gerd Pokorra
> systemctl enable nginx
261 8 Gerd Pokorra
</pre>
262 8 Gerd Pokorra
263 9 Gerd Pokorra
h4. Nginx Configuration
264 9 Gerd Pokorra
265 9 Gerd Pokorra
For http add the two lines and comment out the four lines:
266 9 Gerd Pokorra
267 9 Gerd Pokorra
<pre>    server {
268 9 Gerd Pokorra
        listen       80;
269 9 Gerd Pokorra
...
270 9 Gerd Pokorra
        root         /var/www/redmine-4.0.0/public;
271 9 Gerd Pokorra
        passenger_enabled on;
272 9 Gerd Pokorra
        #location / {
273 9 Gerd Pokorra
        #    root   html;
274 9 Gerd Pokorra
        #    index  index.html index.htm;
275 9 Gerd Pokorra
        #}
276 9 Gerd Pokorra
...
277 9 Gerd Pokorra
       }
278 9 Gerd Pokorra
</pre>
279 9 Gerd Pokorra
280 10 Gerd Pokorra
For https add you can use lines like this:
281 10 Gerd Pokorra
282 10 Gerd Pokorra
<pre>    # HTTPS server
283 10 Gerd Pokorra
    #
284 10 Gerd Pokorra
    server {
285 10 Gerd Pokorra
        listen       443 ssl;
286 10 Gerd Pokorra
        server_name  my_web_serv.domain;
287 10 Gerd Pokorra
288 10 Gerd Pokorra
        ssl_certificate      /etc/ssl/certs/my_web_serv.pem;
289 10 Gerd Pokorra
        ssl_certificate_key  /etc/ssl/private/privkey.pem;
290 10 Gerd Pokorra
291 10 Gerd Pokorra
        root         /var/www/redmine-4.0.0/public;
292 10 Gerd Pokorra
        passenger_enabled on;
293 10 Gerd Pokorra
    }
294 10 Gerd Pokorra
</pre>
295 10 Gerd Pokorra
296 1 Gerd Pokorra
h3. Apache