Hardware FixRecommendedDevice not working? Your driver may be the problemCheck updates for common hardware issues.Fix DriversOctober DealsAmazon USOctober deal check: compare before you payAmazon US: current deals, useful picks and tech finds.Check DealsPC HealthRecommendedCrashes, freezes, slowdowns? Check your PC nowSpot repairable issues before they interrupt work.Check PC×
Skip to content
World desk11 min

How to Self-Host Redmine on a Linux VPS

A practical Redmine VPS deployment guide covering the supported stack, database setup, Bundler, migrations, permissions, HTTPS, backups, upgrades, and troubleshooting.

What’s actually slowing this PC down?

Pick the symptom - the matching free tool is one click away.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Self-hosting Redmine on an Ubuntu or Debian VPS means matching a released Redmine version with its supported Ruby, Rails, and database versions, then running the application under a dedicated account behind a TLS-enabled web server. For a current deployment, Redmine 6.0.11 is listed by the Redmine project as released on 2026-08-26. The sequence is: provision the VPS, create a production database, configure config/database.yml, install production gems, generate the secret, migrate and seed the database, set writable directories, test the production process, and establish backups for both the database and uploaded files.

This guide uses Redmine 6.0 as the concrete reference. Check the compatibility matrix for the exact release you download before installing anything; the matrix changes between Redmine 6.0, 6.1, and 7.0.

As an Amazon Associate I earn from qualifying purchases.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Choose the Redmine release and supported stack first

Do not start by installing whichever Ruby or database package happens to be in the VPS image. Redmine’s dependency matrix is tied to the release. The official Redmine documentation says: “Redmine should run on most Unix, Linux, macOS and Windows systems as long as Ruby is available on this platform.” That broad platform statement does not remove the need to match the versions supported by your chosen Redmine release.

Redmine 6.0 compatibility reference

Component Redmine 6.0 requirement listed by the project
Application release used in this guide Redmine 6.0.11, released 2026-08-26
Ruby 3.1, 3.2, or 3.3
Rails 7.2
PostgreSQL 14
MySQL 8.0–8.1
Microsoft SQL Server Newer than 2012
SQLite SQLite 3

The same official table lists newer combinations for Redmine 6.1 and 7.0. Those combinations are not interchangeable with the 6.0 values above, so record the exact Redmine release, Ruby version, Rails version, adapter, and database version in your deployment notes.

#1 Best Overall
Sale
TOZO A1 Wireless Earbuds Bluetooth 5.3 Light Weight in Ear Headphones | IPX5 Waterproof,2 Mics for AI Calls,Immersive Premium Sound Bass Headset with Charging Case,32 EQ via App Black
  • [Ultra-Lightweight Ear Buds Designed for Small Ears] Each earbud weighs only 3.7g and features a compact, ergonomic in-ear design made especially for small ears. Secure, low-profile, and comfortable for workouts, all-day wear or overnight sleeping.The ultra-slim profile sits flush in your ear with no hard edges poking or rubbing, so you can even sleep on your side without discomfort.
  • [Immersive Stereo Sound with TOZO OrigX Technology] TOZO OrigX tuning delivers clear vocals, balanced mids, and natural stereo sound for music, podcasts, and videos.
  • [Long Battery Life for Daily Use] Get up to 7 hours of playtime on a single charge, with up to 32 hours total using the charging case—ideal for workdays, commuting, and extended listening sessions.
  • [Bluetooth 5.3 & Stable Connection] Bluetooth 5.3 provides fast pairing, stable wireless performance, and reduced dropouts as you move around home or office.
  • [Deep Bass with Clear Vocals] High-performance drivers produce punchy bass while keeping vocals clean and detailed for everyday listening.

Plan the VPS before installing Redmine

Use a dedicated application identity

Create a non-root Unix account for Redmine. The account should own the application files or have the minimum permissions needed to run the service and write application data. Perform operating-system administration with an administrative account and privilege escalation, but do not run the Rails process as root.

Separate application, database, and backups

Keep the production database logically separate from the application directory. A database on the same VPS is acceptable for a small installation, but restrict database listening and firewall access to the application host whenever practical. Store backup copies away from the VPS so a disk failure, compromise, or accidental deletion cannot remove the live data and its only backup together.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Decide how traffic will flow

Expose only the ports needed for administration and web traffic. The Redmine process should listen on a local interface or Unix socket, while a web server or reverse proxy accepts HTTP and HTTPS connections, handles TLS, and forwards requests to Redmine. The canonical Redmine installation page concentrates on application setup and leaves the web-server choice to the operator, so choose a server that your team can patch and operate reliably.

Install the operating-system and Ruby prerequisites

Update the Ubuntu or Debian host and install the compiler, headers, database client libraries, image-processing libraries, and other native packages required by the Ruby version and database adapter selected from the matrix. Package names differ between distribution releases; use the packages documented for your exact OS rather than copying a list intended for another release.

Install Ruby 3.1, 3.2, or 3.3 according to the Redmine 6.0 matrix, then verify the interpreter and Bundler visible to the service account:

ruby --version
bundle --version

If the output shows a different Ruby major or minor version, stop and correct the runtime before extracting Redmine. A successful package installation with an unsupported Ruby version is still an incompatible deployment.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Create the production database

Redmine supports PostgreSQL, MySQL, SQLite, and SQL Server. For a multi-user VPS installation, use a server database with a dedicated Redmine user rather than relying on a database file that is difficult to protect and back up. PostgreSQL 14 and MySQL 8.0–8.1 are the concrete Redmine 6.0 choices in the published matrix.

PostgreSQL example

Connect as the PostgreSQL administrator, create an empty database and a login role used only by Redmine, and grant ownership of that database to the role. Use a long random password and keep it out of shell history where possible.

sudo -u postgres psql
CREATE ROLE redmine_prod LOGIN PASSWORD 'replace-with-a-long-random-secret';
CREATE DATABASE redmine_production OWNER redmine_prod;
q

Configure PostgreSQL so the role can connect from the application host, but do not open the database port to the entire internet. If the database is on another server, use its private network address and enforce firewall rules on both hosts.

Rank #2
Sale
Smart Watch for Men Women Compatible with iPhone Samsung Android Phone 1.69 inch Full Touch Screen IP68 Waterproof Bluetooh Fitness Tracker Heart Rate/Sleep Monitor (Black)
  • 【IP68 Waterproof Multifunctinal Smart Watch】Torjalph fitness activity tracker smart watch is IP68 waterproof technology ,you can wear it when swimming,handwashing,it's rain-proof which means that you perform multiple exercise modes outside without worrying about sweat or rain corroding your fitness smart watch,and this watch equipped with a 230 mAh large capacity battery magnetic charging ,and this sports activity tracker watch can be used 5-7 days If fully charged.
  • 【Larger 1.83'' Full Screen Watch & Multi-dial Selection】1.83 inch full HD color touch screen smart watch for men / women provides excellent 240*284 resolution image quality ,This Bluetooth smart watch offers a better touch experience and remarkable immersion and ,more than 200 watch faces for you to choose from App"Da Fit ", you can change the dial style according to your mood to wear keeping the world on your wrist
  • 【Accurate Activity Tracker Smart Watch 】sports watch activity tracker uses sweat and dust resistant breathable silicone strap, our Fitness Tracker Smart Watch for Android iOS Phones supports 12 sports modes,walking,running,bicycle,swimming,badminton,basketball,football,rope skipping. This bluetooth calls smart watch for men women is lightweight and stylish, bringing more convenient and relaxing sports experience while also providing more protection.
  • 【Your 24 Hour Personal Daily Health Monitor】Fitness watch for women men full touch screen IP67 waterproof bluetooth smartwatch for Android iOS Phones with heart rate blood pressure monitor multifunction Andriod smart watch with steps counter sleep monitor sports fitness watch, monitoring blood oxygen saturation allows you to understand your physical condition in real time to track fitness progress ,to know your health status in time.
  • 【More Functions Bluetooth Call Smart Watch】This fitness activity smart watch full screen for iPhone and Android phones includes a bunch of new features including:The bluetooth smart watch can hang up the phone, receive and display WhatsAPP /Text /Facebook /Twitter /Messenger reminder.Support sedentary reminder, alarm clock, stopwatch, timer,weather information,music control, remote camera control compatible with Android 5.0 and above or iOS 9.0 and above smartphones.

MySQL example

For MySQL 8.0 or 8.1, create a database with a Unicode character set and a separate account restricted to the Redmine database. Run the statements as an administrative user:

Free tools Windows power users keep installed

One-click scans. No signup required.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
mysql -u root -p
CREATE DATABASE redmine_production CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'redmine_prod'@'localhost' IDENTIFIED BY 'replace-with-a-long-random-secret';
GRANT ALL PRIVILEGES ON redmine_production.* TO 'redmine_prod'@'localhost';
FLUSH PRIVILEGES;
EXIT;

Change the host part of the account only when the application and database are on separate machines, and then limit that host or network with firewall rules.

Download and place the released Redmine package

Download the release archive from the official Redmine download page and verify that the version is the one whose compatibility matrix you checked. The current listing used here is Redmine 6.0.11, dated 2026-08-26. Extract it into a stable application path such as /var/www/redmine, and assign ownership to the dedicated service account.

sudo mkdir -p /var/www/redmine
sudo tar -xf redmine-6.0.11.tar.gz -C /var/www
sudo mv /var/www/redmine-6.0.11 /var/www/redmine
sudo chown -R redmine:redmine /var/www/redmine

The archive name and extracted directory can differ, so adjust those two paths to the file you downloaded. Keep the release archive and a copy of your deployment notes so that a rollback can reproduce the same application version.

Configure database.yml for production

Work as the Redmine service account and copy the supplied example configuration:

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
cd /var/www/redmine
cp config/database.yml.example config/database.yml

Edit the production section and provide the adapter, database name, host, username, password, and any encoding or isolation settings required by your database. A PostgreSQL production block has the following shape:

production:
  adapter: postgresql
  database: redmine_production
  host: 127.0.0.1
  username: redmine_prod
  password: replace-with-a-long-random-secret
  encoding: utf8

For MySQL, use the MySQL adapter and the database credentials created above. Do not commit config/database.yml to a public repository, and limit its permissions so other users on the VPS cannot read the production password.

Install only production gems

Redmine determines the database adapter gems from config/database.yml. From the application directory, configure Bundler to omit development and test groups, then install:

bundle config set --local without 'development test'
bundle install

Run these commands as the same account that will own and execute the application. If Bundler attempts to compile a native extension, install the missing operating-system development package and rerun the command; do not bypass a failed adapter build by selecting an unsupported database gem.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
Rank #3
New Bee Guitar Cable 10ft Electric Instrument Bass AMP Cord
  • [Low Noise High Fidelity] New bee guitar cord with 22AWG oxygen-free-copper center conductors provides enhanced signal transfer, the PVC insulation material and the high-density stranded copper double shield provide noise rejection for quiet operation
  • [Ideal for Choice] New bee 1/4 straight and right angle metal connectors, ensures a secure connection in any instrument, pedal, or amp jack. L shape great fro on stage guitar stands
  • [Wide Compatible] Suitable for mixer, power amplifier, microphone, effector, decoder, equalizer, electoronic organ, electric guitar, electric bass and other electronic equipments. Widely used in the installation of smart home, karaoke speaker, professional stage audio, etc
  • [Easy Disassemble] Making incidental repairs quick and easy! Very nice, flexible cable
  • [Dont Hesite to Order] 24 hours customer services and professional technology team are standing by

Initialize secrets, schema, data, and assets

Generate the session secret

Generate the Rails session-store secret once for this installation:

bin/rails generate_secret_token

Keep the generated secret stable across restarts. Replacing it unexpectedly invalidates existing sessions and can create confusing login behavior.

Run migrations and load default data

With the production database reachable and the production credentials loaded, create the schema and load Redmine’s default data:

RAILS_ENV=production bundle exec rake db:migrate
RAILS_ENV=production bundle exec rake redmine:load_default_data

Run migrations against the intended production database, not a development database selected by an omitted or misspelled environment variable. If a migration fails, correct the database connection or dependency problem and rerun it; do not delete schema tables to force the command through.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Precompile assets when the deployment needs it

Compile assets when automatic compilation is disabled or when Redmine is served under a relative URL root. The exact asset command should follow the release documentation and your web-server arrangement. A relative URL root also requires the application and proxy configuration to agree about the path, or CSS and JavaScript URLs will be generated incorrectly.

Set writable directories and protect restored files

The service account must be able to write application-generated data in these locations:

  • files for uploaded attachments;
  • log for application logs;
  • tmp and tmp/pdf for temporary and PDF work files;
  • public/assets when assets are generated or refreshed.

Create missing directories, assign them to the service account, and grant only the write access the process needs:

cd /var/www/redmine
mkdir -p tmp tmp/pdf public/assets
chown -R redmine:redmine files log tmp public/assets

When restoring an attachment or application-data backup, remove executable bits from restored files. Uploaded documents should be treated as data, not programs:

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
find /var/www/redmine/files -type f -exec chmod a-x {} +

Keep the application source and configuration less writable than the data directories. Broad recursive write permissions make later compromise or accidental modification easier.

Rank #4
BSIMB 15.6" Digital Family Calendar & Chore Chart, No Subscription Fees
  • Digital Family Calendar: BSIMB digital calendar wall touch screen puts an end to your chaotic life. Designed for busy families, the digital calendar keeps you organised and in step with your family. Assign different colours and tasks to each family member to make family scheduling easier and more intuitive.
  • Easy Setup and Auto-Sync: Plug in, connect to WLAN and auto-syn your electric calendar in minutes. Digital wall calendar compatible with Google calendar, iCloud calendar, Outlook calendar, Cozi calendar and Yahoo calendar. Add events directly on the device or through the ecalendar app. Electronic calendar stays current whether you're at work or traveling—no manual updates needed.
  • All-In-One Home Assistant: Smart calendar builds habits and encourage independence with personalised chores. Display daily meal plan to reduce the daily ‘What's for dinner?’ stress. To-do lists keep track of everything you want. Turning chores into valuable achievements with stars and rewards, making life easier and more enjoyable.
  • Manage Anytime Anywhere: BSIMB electronic calendar for family stay connected with the powerful ecalendar app. Access and manage your digital wall calendar anytime, anywhere with free features like stars & rewards, photo screensaver, chore charts, meals plans, to-do lists etc. Electronic planner paid features like Magic Import tailor advanced tools for users with special needs.
  • Stay in Touch with Loved Ones: Share photos or videos from your phone to electronic wall calendar with app, instantly update your life moment, and keep in touch with your family, especially those who are far away; you can also surprise your smart calendar digital wall by sending him a wish card; it's also great for keeping tech-illiterate elders in touch with the youngsters.

Run a production smoke test

Before putting a reverse proxy in front of Redmine, start the application with the production Rails/Puma command documented for the release and bind it only where you intend to test. A temporary local test can use the Rails server command:

cd /var/www/redmine
RAILS_ENV=production bundle exec rails server -e production

From the VPS, request the local address and inspect the Rails log while loading the login page. Confirm that the process can connect to the database, write a log entry, create a temporary file, serve compiled assets, and accept an attachment. Stop the temporary process after the checks; run the permanent service through your operating system’s service manager or the Puma process arrangement documented by Redmine.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Complete the first administrator login

Log in with the initial administrator account created by the default-data task. Immediately change the default password, review application settings, set the correct time zone and host-related options, and configure outbound SMTP before inviting users. Treat the initial credentials as disposable bootstrap access, not as a permanent account secret.

Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Support on Ko-Fi

Put Redmine behind a reverse proxy and HTTPS

Use a maintained web server or reverse proxy as the public endpoint. Configure it to:

  • redirect plain HTTP to HTTPS;
  • present a certificate for the Redmine hostname and renew it before expiry;
  • forward requests to the local Puma or Rails listener;
  • preserve the original host and communicate the original protocol through the standard forwarded headers;
  • allow request bodies large enough for the attachment policy you intend to enforce;
  • serve static assets efficiently while leaving authenticated application requests to Redmine.

Keep the Rails listener off the public interface when the proxy is on the same VPS. If TLS terminates on a separate proxy, secure the proxy-to-application hop and restrict that listener to the proxy’s private address. Test a complete browser login, logout, attachment upload, PDF generation, and redirect from HTTP after enabling HTTPS. Mixed-content warnings or redirects that loop usually indicate disagreement about the external scheme or URL root.

Back up the database and uploaded files

A Redmine backup is incomplete if it contains only SQL. The official guide identifies attachment storage as application data, so back up both the production database and the files directory. Keep copies off the VPS and periodically prove that a restore works.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

PostgreSQL backup example

pg_dump -Fc -U redmine_prod -h 127.0.0.1 redmine_production > redmine_production.dump

MySQL backup example

mysqldump --single-transaction --routines --triggers -u redmine_prod -p redmine_production > redmine_production.sql

Attachment backup example

tar -czf redmine-files-$(date +%F).tar.gz -C /var/www/redmine files

Protect dump files because they contain project information and may contain credentials or personal data. Record the Redmine version, Ruby version, database version, configuration backup, and encryption keys or secrets needed to make a restored instance usable.

Verify a restore

  1. Provision a separate test database and application directory.
  2. Restore the SQL or custom-format dump into that database.
  3. Restore the files directory without granting executable permissions.
  4. Install the same Redmine release and compatible Ruby and adapter versions.
  5. Point a non-public test instance at the restored database, run any required migrations only after confirming the backup version, and test login, project pages, and attachment downloads.

A backup job that has never produced a readable restore is an unverified copy, not a recovery plan.

Plan upgrades and rollbacks

Record the exact release and dependency matrix before every upgrade. Review plugin compatibility separately; a plugin that worked on one Redmine or Rails release can prevent Bundler resolution or break after a framework change. Take a fresh database dump and copy of files before changing code or running migrations.

Deploy a new release beside the existing application directory when possible. Install its production bundle, copy the intended configuration, generate or preserve the required secret, and run migrations only after confirming that the database backup is complete. Keep the previous release available until the new process passes login, project, attachment, mail, and background-operation checks. A rollback must restore the old application code and, when an irreversible migration was applied, restore the database backup as well.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Operational security for a Linux VPS

  • Use a dedicated, non-root Redmine account and restrict shell access where your administration model permits.
  • Patch the VPS operating system, Ruby dependencies, database server, reverse proxy, and TLS configuration on a defined schedule.
  • Expose only required network ports; do not publish PostgreSQL or MySQL directly to the internet.
  • Use unique database credentials and a strong administrator password.
  • Limit write access to files, log, tmp, tmp/pdf, and public/assets; keep source and configuration files protected.
  • Monitor disk space, especially attachment storage, logs, temporary PDF output, and backup retention.
  • Keep off-host backups and test restoration after major upgrades or changes to storage.

Troubleshoot the first deployment

Bundler selects the wrong adapter or Ruby

Check ruby --version, the production section of config/database.yml, and the Redmine release matrix. Redmine chooses adapter gems from that configuration; a typo in the adapter name or an unsupported Ruby version can make dependency resolution fail.

Database authentication fails

Confirm the database name, host, username, password, and encoding in config/database.yml. Test the same credentials with the database client from the VPS. For a remote database, verify firewall rules and the database server’s host-based authentication policy.

Pages load but CSS or JavaScript is missing

Check whether assets were precompiled, whether public/assets is writable during compilation, and whether the proxy’s external URL matches the application’s relative URL root. Inspect the browser’s requested asset paths and the proxy access log.

Uploads or PDF generation fail

Check ownership and write permissions for files, tmp, and tmp/pdf. Confirm that the proxy accepts the intended request size and that the VPS has free disk space. Do not solve a permission error by making the entire application tree world-writable.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

The proxy returns a 502 or connection error

Verify that the Puma or Rails process is running, listening on the socket or local port configured in the proxy, and owned by the expected service account. Read the Redmine log and the proxy error log together; a stopped application and a wrong upstream path produce similar browser errors.

A restored file behaves like a program

Remove executable bits from restored files, especially under files, and keep uploaded data outside any directory from which the web server executes scripts. Recheck ownership and proxy rules after every restore.

When the deployment is ready

The VPS is ready for users only after the selected Redmine release, Ruby version, Rails dependency, and database version match; production migrations and default data have completed; writable directories work without broad permissions; the administrator password has changed; HTTPS and proxy forwarding have been tested; and both database and attachment backups have passed a restore test. That sequence produces a maintainable Redmine installation rather than merely a page that loads once.

Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Leave a Reply

Your email address will not be published. Required fields are marked *

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

More from the Wire

  1. World desk4 min
    How to Spot an AI Voice Scam Before Sending MoneyDon’t rely on how a caller sounds. Pause, call back through a known number, and verify the emergency with another trusted person before sending money.
  2. Mountain View desk4 min
    Google’s SynthID Detector: How to Check AI-Generated Images, Video and AudioGoogle’s SynthID Detector looks for an embedded watermark in supported images, video and audio. Here is what its results do—and do not—show.
  3. Redmond desk20 min
    How to create a link to File or Folder in Windows 11Windows 11 gives you several ways to point to a file or folder without moving or duplicating it. You can create a desktop shortcut,…
Recommended PC Tool
Recommended PC Tool
Windows Errors? Fix Them Before They SpreadFree repair scan
Crashes, No Sound, or Screen Glitches?Free driver scan

Two free Windows tools

One Free Minute Could Fix That PC

Before you go - each of these free tools takes about a minute and tackles what quietly slows a Windows PC down.

Special offer. View Outbyte info, uninstall instructions, EULA, and Privacy Policy.