Redmine Project Management Installation

Redmine is a flexible, open-source project management and issue tracking platform written in Ruby on Rails. It provides comprehensive project tracking, resource planning, issue management, and team collaboration features used by organizations worldwide. This guide covers Ruby installation, MySQL database setup, Apache/Nginx configuration, plugin installation, and email notifications.

Table of Contents

Prerequisites

Ensure you have:

  • Ubuntu 20.04 LTS or later
  • Root or sudo access
  • A registered domain name
  • Minimum 2GB RAM (4GB+ recommended)
  • 15GB available disk space
  • Basic Linux administration knowledge

Update system:

sudo apt update && sudo apt upgrade -y

System Requirements

Verify system specifications:

Check OS version:

cat /etc/os-release
uname -m

Verify available resources:

free -h
df -h

Install required build tools:

sudo apt install -y build-essential libssl-dev libreadline-dev zlib1g-dev curl wget git

Ruby Installation

Install RVM (Ruby Version Manager):

curl -sSL https://get.rvm.io | bash -s stable
source ~/.rvm/scripts/rvm

Install Ruby 3.0 or later:

rvm install 3.0.0
rvm use 3.0.0 --default

Verify installation:

ruby --version
gem --version

Install bundler:

gem install bundler

Rails and Dependencies

Install MySQL client:

sudo apt install -y mysql-server libmysqlclient-dev

Install ImageMagick for image processing:

sudo apt install -y imagemagick libmagickwand-dev

Install Curl development files:

sudo apt install -y libcurl4-openssl-dev

Install Git:

sudo apt install -y git

Database Setup

Start MySQL:

sudo systemctl start mysql
sudo systemctl enable mysql

Secure MySQL:

sudo mysql_secure_installation

Create Redmine database:

sudo mysql -u root -p << EOF
CREATE DATABASE redmine CHARACTER SET utf8mb4;
CREATE USER 'redmine'@'localhost' IDENTIFIED BY 'SecurePassword123!';
GRANT ALL PRIVILEGES ON redmine.* TO 'redmine'@'localhost';
FLUSH PRIVILEGES;
EXIT;
EOF

Test connection:

mysql -u redmine -p -h localhost redmine
EXIT;

Redmine Installation

Create installation directory:

sudo mkdir -p /opt/redmine
sudo chown -R $USER:$USER /opt/redmine
cd /opt/redmine

Download Redmine:

wget https://www.redmine.org/releases/redmine-5.0.0.tar.gz
tar -xzf redmine-5.0.0.tar.gz
mv redmine-5.0.0/* .
rmdir redmine-5.0.0

Create database configuration:

cp config/database.yml.example config/database.yml
nano config/database.yml

Update for production:

production:
  adapter: mysql2
  database: redmine
  host: localhost
  username: redmine
  password: "SecurePassword123!"
  encoding: utf8mb4

Install dependencies:

cd /opt/redmine
bundle install --without development test

Generate secret token:

bundle exec rake generate_secret_token

Create database schema:

bundle exec rake db:migrate RAILS_ENV=production

Load default data:

bundle exec rake redmine:load_default_data RAILS_ENV=production
REDMINE_LANG=en

Set ownership:

sudo chown -R www-data:www-data /opt/redmine

Web Server Configuration

Apache Configuration

Install Apache and Passenger:

sudo apt install -y apache2 apache2-dev
gem install passenger
passenger-install-apache2-module

Enable Passenger module:

sudo nano /etc/apache2/mods-available/passenger.load

Add:

LoadModule passenger_module /usr/local/rvm/gems/ruby-3.0.0/gems/passenger-6.0.0/buildout/apache2/mod_passenger.so

Create virtual host:

sudo nano /etc/apache2/sites-available/redmine.conf

Add:

<VirtualHost *:80>
    ServerName redmine.example.com
    ServerAlias www.redmine.example.com
    DocumentRoot /opt/redmine/public

    <Directory /opt/redmine/public>
        AllowOverride All
        Require all granted
    </Directory>

    PassengerAppRoot /opt/redmine
    PassengerRuby /usr/local/rvm/wrappers/ruby-3.0.0/ruby

    ErrorLog ${APACHE_LOG_DIR}/redmine_error.log
    CustomLog ${APACHE_LOG_DIR}/redmine_access.log combined
</VirtualHost>

Enable site and modules:

sudo a2enmod passenger
sudo a2ensite redmine.conf
sudo a2dissite 000-default.conf
sudo apache2ctl configtest
sudo systemctl reload apache2

Nginx Configuration

Install Nginx:

sudo apt install -y nginx

Install Puma web server:

cd /opt/redmine
bundle add puma

Configure Puma:

nano config/puma.rb

Add:

bind "unix:///var/run/puma.sock"
daemonize true
pidfile "/var/run/puma.pid"
state_path "/var/run/puma.state"

Create systemd service:

sudo nano /etc/systemd/system/puma.service

Add:

[Unit]
Description=Puma HTTP Server
After=network.target

[Service]
Type=simple
User=www-data
WorkingDirectory=/opt/redmine
ExecStart=/usr/local/rvm/gems/ruby-3.0.0/bin/puma -c /opt/redmine/config/puma.rb
Restart=always
RestartSec=10

[Install]
WantedBy=multi-user.target

Enable and start Puma:

sudo systemctl daemon-reload
sudo systemctl enable puma
sudo systemctl start puma

Create Nginx configuration:

sudo nano /etc/nginx/sites-available/redmine

Add:

upstream puma {
    server unix:///var/run/puma.sock;
}

server {
    listen 80;
    server_name redmine.example.com www.redmine.example.com;
    root /opt/redmine/public;

    location / {
        proxy_pass http://puma;
        proxy_set_header Host $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;
    }
}

Enable site:

sudo ln -s /etc/nginx/sites-available/redmine /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl start nginx
sudo systemctl enable nginx

SSL Configuration

Install Certbot:

sudo apt install -y certbot python3-certbot-apache

Obtain SSL certificate:

sudo certbot certonly --apache -d redmine.example.com

Update Apache/Nginx configuration to use HTTPS. For Apache:

sudo nano /etc/apache2/sites-available/redmine.conf

Update to listen on port 443 with SSL directives.

For Nginx, update with:

listen 443 ssl http2;
ssl_certificate /etc/letsencrypt/live/redmine.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/redmine.example.com/privkey.pem;

Email Setup

Configure SMTP in Redmine:

cd /opt/redmine
nano config/configuration.yml

Add email configuration:

production:
  email_delivery:
    delivery_method: :smtp
    smtp_settings:
      address: smtp.gmail.com
      port: 587
      user_name: [email protected]
      password: your-app-password
      authentication: plain
      enable_starttls_auto: true
      openssl_verify_mode: none

Test email:

bundle exec rails console -e production
Mailer.deliver_test_email('[email protected]')

Plugin Installation

Download useful plugins:

cd /opt/redmine/plugins
git clone https://github.com/redmine/redmine_agile.git
git clone https://github.com/redmine/redmine_checklists.git

Install plugin dependencies:

cd /opt/redmine
bundle install

Migrate plugin database:

bundle exec rake redmine:plugins:migrate RAILS_ENV=production

Restart Redmine:

For Apache with Passenger:

touch /opt/redmine/tmp/restart.txt

For Nginx with Puma:

sudo systemctl restart puma

Backup and Updates

Create backup script:

sudo nano /usr/local/bin/redmine-backup.sh

Add:

#!/bin/bash

BACKUP_DIR="/backups/redmine"
REDMINE_DIR="/opt/redmine"
DATE=$(date +%Y%m%d_%H%M%S)

mkdir -p $BACKUP_DIR

# Database backup
mysqldump -u redmine -p'SecurePassword123!' redmine | gzip > "$BACKUP_DIR/redmine-db-$DATE.sql.gz"

# Files backup
tar -czf "$BACKUP_DIR/redmine-files-$DATE.tar.gz" "$REDMINE_DIR"

# Keep only 30 days
find $BACKUP_DIR -type f -mtime +30 -delete

echo "Backup completed: $DATE"

Make executable:

sudo chmod +x /usr/local/bin/redmine-backup.sh

Schedule backups:

sudo crontab -e

Add:

0 2 * * * /usr/local/bin/redmine-backup.sh >> /var/log/redmine-backup.log 2>&1

Update Redmine:

cd /opt/redmine
git fetch origin
git checkout 5.1.0
bundle install
bundle exec rake db:migrate RAILS_ENV=production
bundle exec rake redmine:plugins:migrate RAILS_ENV=production

Conclusion

Redmine is now fully installed and configured as a comprehensive project management platform. With Ruby on Rails, MySQL database, email notifications, and plugin support, you have a powerful tool for team project tracking. Regular backups and updates ensure system reliability and access to new features. Configure projects, users, and permissions to establish an effective project management workflow.