How to Install Redmine on a Linux Server

This guide explains a safe installation workflow for Redmine on your own VPS or dedicated server. It is designed for teams that want control over data, backups, and infrastructure.

1. Choose a Supported Redmine Stack

Before starting, define your stack clearly so installation and maintenance stay predictable:

  • Operating system: Debian 13 or Ubuntu 24.04.
  • Database: MariaDB or PostgreSQL.
  • Web server: Apache + Passenger or Nginx + Passenger.

If you are unsure, choose a standard production setup first, then optimize later. Frequent stack changes introduce avoidable downtime risk.

2. Run Preflight Checks on the Server

Use a freshly provisioned server whenever possible. Verify these minimum conditions:

  • Root or sudo access is available.
  • Outbound internet is open for package and gem downloads.
  • Ports 80 and 443 are open if HTTPS is required.
  • No conflicting web/database services are already bound to those ports.
Installing on servers with existing MySQL, PostgreSQL, or web server workloads can cause conflicts or data loss. Use a dedicated host for Redmine when possible.

3. Generate and Inspect Your Installer Script

In the Redmine 1-Click wizard, choose your stack and configuration values (domain, SSL mode, admin credentials, and Redmine version). Then generate your script and inspect it before execution.

What to verify in the script

  • OS detection logic matches your target system.
  • Selected database and web server match your intended stack.
  • Domain and SSL sections reflect your deployment requirements.

4. Execute Installation and Validate the Result

Transfer the generated script to your server and execute it as root. The installer runs unattended on Ubuntu 24.04 LTS and Debian 13 — no manual dependency installation is required.

Transfer and run

# From your local machine
scp redmine1click.sh user@YOUR_SERVER_IP:/tmp/

# On the server
sudo bash /tmp/redmine1click.sh

Allow 2–10 minutes for completion. On servers where Ruby must be compiled from source, it may take up to 10 minutes. Watch the terminal output for any lines marked ERROR or FAILED.

What the script installs

  • Ruby — installed from system packages when available; compiled from source on older distributions.
  • Bundler and all Redmine gem dependencies via bundle install.
  • MariaDB or PostgreSQL — whichever you selected, fully configured with a dedicated Redmine database and user.
  • Apache + Phusion Passenger or Nginx + Phusion Passenger — with a virtual host configured for your domain.
  • Let's Encrypt SSL via Certbot, with automatic renewal (if SSL mode was selected).
  • Redmine 6.x — latest stable release, installed and migrated.

Validate after installation

  • Open https://your-domain.com and log in with the admin credentials you configured.
  • Verify the web server recovers after a reboot: sudo reboot and reload the page.
  • Test email delivery from Administration → Settings → Email notifications → Send a test email.
  • Archive the installer log before the session ends: cp /tmp/redmine1click.log ~/redmine1click-install.log.

5. Troubleshooting Common Installation Errors

Most installation failures fall into a small number of categories. Check these before re-running the script.

Ruby compilation fails

Caused by missing build tools. Run the following before retrying:

sudo apt update && sudo apt install -y build-essential libssl-dev libreadline-dev zlib1g-dev

Database connection error on first boot

Verify the database service is running:

sudo systemctl status mariadb # or: sudo systemctl status postgresql

If stopped, check /var/log/mysql/error.log or /var/log/postgresql/ for the root cause before restarting.

SSL certificate fails to issue

Let's Encrypt requires your domain to resolve to the server IP before the script runs. Verify DNS propagation:

dig +short your-domain.com

The result must match your server's public IP. If it does not, wait for DNS to propagate and re-run.

Passenger module not loading

Check the web server error log and confirm the module is active:

sudo apache2ctl -M | grep passenger # Apache
sudo nginx -t # Nginx

6. Post-Install Hardening Checklist

  • Rotate admin credentials and database passwords.
  • Enable regular database and file backups.
  • Apply OS security updates and define maintenance windows.
  • Document runbooks for restart, restore, and upgrade procedures.

Treat the first successful install as a baseline. A documented baseline is what makes scaling and incident response fast.