This reference explains exactly how the generated script installs Redmine, how resume works after interruptions, and where to inspect logs when troubleshooting.
Contents
redmine1click.sh file, then launch it from the directory where you uploaded it:
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:
Plugins can add application code, gem dependencies, and database migrations. Confirm compatibility with your exact Redmine and Ruby versions, follow the plugin author’s installation notes, and back up your database and attachments before changing production.
Each plugin belongs in its own directory under /opt/redmine/plugins/. Clone it as the redmine user; replace the repository URL and directory name with the values from the plugin author:
If you upload and extract an archive as another user, make sure the plugin directory contains its init.rb file and set ownership:
R1C configures Bundler once during installation to store gems in /opt/redmine/vendor/bundle. You do not need to repeat that configuration for each plugin. After adding a plugin that requires gems, run:
Always run Bundler as redmine, not as root.
Only run this step if the plugin includes database migrations:
If the plugin includes stylesheets, JavaScript, or other frontend assets, precompile them after installing its gems and running any required migrations:
Restart the Redmine application service for your R1C web server:
sudo systemctl restart redmine-passengersudo systemctl restart apache2Sign in and verify the plugin. If Redmine does not start, inspect /opt/redmine/log/production.log and the web server error log. Follow any additional steps documented by the plugin author.
A custom theme changes Redmine’s appearance without adding a plugin. Confirm that the theme supports your Redmine version and download it from a trusted source.
/opt/redmine/themes/. Redmine 5 and earlier use /opt/redmine/public/themes/. R1C creates the correct folder during installation.The theme must have its own directory directly inside the themes folder. To clone a Git-hosted theme, run the command for your Redmine version and replace the repository URL and theme name:
If you upload and extract a theme archive as another user, set ownership after extraction:
For Redmine 6 and later, precompile assets after installing the theme files so Redmine can serve the theme’s stylesheets and JavaScript in production:
Restart the application service shown in your R1C installation summary. Nginx + Passenger uses redmine-passenger; Apache + Passenger on Debian or Ubuntu uses apache2. Sign in as an administrator and go to Administration → Settings → Display, select the theme, and save. Refresh the page; clear your browser cache if the old styles remain.
Theme-only installs do not require bundle install or plugin migrations unless the theme author documents additional requirements.