This reference explains exactly how the generated script installs Redmine, how resume works after interruptions, and where to inspect logs when troubleshooting.
Contents
The installer is a single self-contained Bash script. It runs sequentially through a fixed set of steps, displaying a progress bar for each one. The total number of steps is 18 for a standard installation, or 19 if SSL is enabled (Let's Encrypt or manual certificate).
The steps are organised into the following phases:
apt-get update, apt-get upgrade, and installs the system packages and libraries needed to install Ruby and run Redmine.
rbenv/ruby-build in /usr/local/rbenv and compiles Ruby. Bundler is installed afterward.
database.yml, runs bundle install, generates the secret token, runs database migrations, loads default data, and sets the admin account credentials.
logrotate rule for Redmine logs, then prints a summary with the access URL, credentials, and useful paths.
These screenshots show a real installation on Ubuntu 22.04 with MariaDB and Nginx. The installer displays a progress bar with step count, percentage, and elapsed time for each phase.
Click to enlarge
Click to enlarge
While a step is running, the terminal shows a spinning indicator and an elapsed timer. The installer is working even if it appears frozen — do not close the terminal or press Ctrl+C. Two steps are significantly slower than the rest:
| Step | Typical duration | Why it is slow |
|---|---|---|
| Upgrading system packages | 2 – 10 min | Downloads and installs all pending OS updates. Duration depends on how many packages need updating and the server's network speed. |
| Installing Ruby | 1 – 20 min | The installer tries OS packages first (usually fast). If the required version is not available in packages, it falls back to compiling via rbenv, which can take 10-20 minutes on small VPS instances. |
After each successful step, the installer saves its progress to a state file:
If the script is interrupted (network loss, SSH disconnect, power cut, Ctrl+C)
or fails at a specific step, simply re-run the same script with sudo.
It will detect the state file and skip all already-completed steps, resuming
from where it stopped.
The state file is deleted automatically when the installation completes successfully.
sudo rm /var/log/redmine1click.state
Not all problems are treated equally. Some conditions stop the installation immediately; others produce a warning and allow the script to continue.
The script exits immediately and displays an error message.
| Condition | When it is checked |
|---|---|
| Script not run as root | Preflight |
| OS is not Debian or Ubuntu (e.g. CentOS, Rocky, Alpine) | Preflight |
/etc/os-release is missing (OS cannot be detected) |
Preflight |
DOMAIN is not set |
Preflight |
REDMINE_ADMIN_EMAIL is not set |
Preflight |
| Redmine source archive cannot be downloaded (network issue or invalid version) | Redmine install |
| Any installation step fails (package install, compilation, migration, etc.) | Each step |
DOMAIN contains a path (/), protocol, or port number |
Preflight (normalized automatically; aborts if result is not a valid hostname or IP) |
When a step fails, the installer prints the last 30 lines of the step's output to the console and writes the full output to the log file. The state file is preserved so the installation can be resumed after the problem is fixed.
| Condition | What happens |
|---|---|
| Debian or Ubuntu version does not match the expected value | Warning printed; installation continues |
DOMAIN is an IP address and SSL mode is Let's Encrypt |
SSL is silently skipped; Redmine is served over HTTP |
DB_PASS is empty |
A random 20-character password is generated and shown in the final summary |
REDMINE_ADMIN_PASS is empty |
A random 16-character password is generated and shown in the final summary |
| Total swap is below 1 GB | A 2 GB swap file is created automatically before Ruby installation (mainly needed if fallback compilation is used) |
| The required Ruby version is already installed | Ruby install is skipped; the existing installation is used |
All installer activity is written to a persistent log file:
What is captured:
stdout and stderr of each installation step —
including apt output, gem installation details, compilation logs, rake output, etc.The log file is never deleted or truncated by the installer. Subsequent runs append to it, so it accumulates history across resume attempts.
systemctl enable calls for the database service
and the Rails runner that sets the admin credentials. If these fail, the error
still aborts the script (due to set -e), but the output may not be
as clearly labelled in the log as regular step output.
To follow the log in real time during installation:
Passwords are not kept in our database or transaction records. They exist on our server only temporarily during the checkout process and inside the generated script file during the 48-hour download window, then are permanently deleted. Configuration data (domain, database name, admin username, etc.) is also kept temporarily for up to 48 hours and then permanently deleted. Credentials and server commands are shown once and cannot be recovered later. Save them in a secure place before closing the page.
During installation, credentials are also written on the target server to:
This file is created with root-only permissions and is intended as your local recovery copy.
Share the sanitized support log only:
Do not share /root/redmine-credentials.txt or any raw credentials unless you have rotated them first.
The installer does not configure outgoing email. SMTP credentials (server address, username, password) are sensitive authentication data, and we deliberately avoid collecting or transmitting them through our infrastructure.
After installation, Redmine works normally without email — notifications are simply not sent until you add your SMTP settings to the configuration file on your server:
For a complete walkthrough — including example SMTP settings for Gmail, Microsoft 365, Amazon SES, and other providers — see the dedicated guide: