Recommended Free Tools
iTechGuides is reader-supported. When you buy through links on our site, we may earn an affiliate commission. As an Amazon Associate I earn from qualifying purchases. Learn more
Antihost offers Linux VPS plans with full root access, unlimited traffic on a 1 Gbps port and a 14-day free trial.
To self-host Redmine on Ubuntu, first pin a Redmine release and its supported Ruby and database versions, then install the application with Bundler, configure config/database.yml, generate the Rails secret, and verify a local production boot. After that, place Redmine behind a TLS-enabled web server and add Gmail SMTP settings to config/configuration.yml. Gmail uses smtp.gmail.com on port 587 with STARTTLS; Google Workspace organizations may instead use smtp-relay.gmail.com when their relay policy allows it.
The order matters. A Ruby or database mismatch can prevent Redmine from starting, while an SMTP error is much easier to isolate after the application itself works at http://localhost:3000/.
Choose the Redmine, Ubuntu, Ruby and database combination first
The current Redmine installation documentation covers Redmine 6.0 and higher. Treat that release scope as a compatibility contract rather than copying commands from an older Ubuntu tutorial. Before installing packages, write down the exact values you will deploy.
| Decision | What to record | Why it matters |
|---|---|---|
| Redmine release | Exact 6.x release, or another release you have deliberately selected | The release determines supported Ruby, Rails and database combinations. |
| Ubuntu release | Server version and architecture | Available Ruby, compiler and database packages vary by Ubuntu release. |
| Ruby | Version listed as supported for the selected Redmine release | Bundler dependencies and Rails may fail with an unsupported interpreter. |
| Database | PostgreSQL or MySQL version and adapter | The adapter gem is selected from config/database.yml; version compatibility is release-specific. |
| Web serving | Puma behind a reverse proxy, or an existing Apache/Passenger design | This determines how you expose Redmine, terminate TLS and restart it. |
Do not assume that the newest Ruby or database available in Ubuntu is automatically correct. Check the support table for your chosen Redmine release, install that combination, and keep the recorded versions with your deployment notes. If you later upgrade Redmine, recheck all four components before running Bundler.
#1 Best Overall
- Powerful Turbo Fan:CAGIWIRU Electric Air Duster have reached speed up to 130000RPM,Can efficient remove dust and debris.With LED light and Three Adjustable Speed to meet with different cleaning tasks.
- With Attached USB C Fasting Charging cable.Charing 3 hours,Enjoy up to 240 minutes of use on the lowest setting, For third speed can use for 25mins.with four charging options to meet with your needs.
- Wide Application: attached 5 different nozzles,making it suitable for a variety of scenes, such as car,pet, pc, keyboards, and other electronic devices. It also serves for office and home clean duster.
- Handy Design & Portable:Cordless air duster electric nozzle is Light weight and small size, design and comfortable to hold and space saving, convenient to carry around. You can put it in your room or inside the car without taking up space.
- Economical &Reusable: Built durable materials with a long-lasting battery,our CAGIWIRU air duster it's a sustainable alternative to disposable air cans.
Decide between a source deployment and an Ubuntu package
| Approach | Strengths | Risks and limits |
|---|---|---|
| Manual source install | Current release control, explicit Ruby and database choices, and a layout you can reproduce with automation. | You own upgrades, dependency installation, service files, backups and security updates. |
| Ubuntu package | Package-managed files, integration with distribution services and less initial compilation work. | Package versions can lag Redmine releases. Older guides often use paths such as /usr/share/redmine, /etc/redmine and Apache Passenger settings that do not map directly to a current source release. |
For a new Redmine 6 deployment, a source install following the current Redmine guide is usually the clearer baseline. A package installation can still be appropriate where your organization already standardizes on distribution packages, but reconcile its paths, service user and supported versions with the release documentation before changing configuration.
Prepare the Ubuntu server
Create a dedicated runtime identity
Run Redmine as a dedicated, non-login service account rather than as root. Create an application directory owned by that account, and keep database credentials and SMTP secrets readable only by the account and administrators. The exact username and paths are your operational choices; use them consistently in the service definition, file ownership and backup jobs.
Free tools Windows power users keep installed
One-click scans. No signup required.
Install build and runtime prerequisites
Update Ubuntu and install the compiler, development headers, database client libraries and JavaScript/runtime components required by the Ruby gems selected for your release. The package names differ between Ubuntu releases and database engines, so use the packages appropriate to your recorded compatibility matrix. Confirm that the resulting ruby command reports the supported version before installing Redmine.
sudo apt update
ruby --version
bundler --version
If Ruby is missing or the version is wrong, stop here and correct it with an Ubuntu package, an approved Ruby version manager or your organization’s build process. Do not try to force Bundler through a failed dependency resolution; the error is usually a version mismatch, missing development library or stale package selection.
Install Redmine with Bundler
Place the selected release
Obtain the source archive or repository checkout for the exact release you recorded. Keep the release immutable after deployment; perform upgrades by staging a new release directory and switching the service only after migrations and tests succeed. In the commands below, /srv/redmine is an example path, not a required package location.
Rank #2
- Screen Cleaner is Your Screen’s New Bestfriend! - EVEO is proud to present a screen cleaner that’s perfectly suited for your TV. Meet your new screen cleaner, computer screen cleaner, laptop cleaner, iPad cleaner, Macbook,tv cleaner or any other electronic device. Our screen cleaner spray and wipe along with the included plush microfiber cloth, easily removes dust, fingerprints & other smudges on the screen’s surface. Clean effectively for a streak-free screen
- Gentle on your Screens - Our screen cleaner spray and wipes is compatible to be used even for the most sensitive LCD, LED, CRT, and OLED screens in proper use. Be at ease knowing that this product is compatible with all the major brands: LG, SONY, Samsung, Sharp, iPad, iPhone, Android screens, Kindle, PC monitors - we’ve got you covered! Can be used as LCD screen cleaner, tv cleaner, smart tv screen cleaner, and more
- Premium Super Soft Plush Microfiber Cloth - Included in this efficient screen cleaning kit. This screen cleaner spray and wipe has our signature plush microfiber cloth specially designed to comply with screens and monitors and leave them streak-free. Has been shown to effectively absorbs stubborn stains, zero streaks, and no fiber shedding. Always use this together with our screen cleaner for the best results
- Easy-to-Use Screen Cleaner Kit + microfiber cleaning cloth - The EVEO Screen Cleaning Kit will easily be your new favorite tool when it comes to taking care of the things you love most, quick and easy solution for a streak-free screen. Simply screw on the sprayer gun on the screen cleaner bottle. Spray the cleaning liquid onto the microfiber cloth, then wipe the screen until desired cleanliness & shine is achieved.
- Quality Screen Care Kit Worth Purchasing - Enjoy a convenient Screen Cleaner anytime, anywhere you need it. Your satisfaction is our top priority. We stand behind the quality of our products and that’s why, you shouldn’t be worrying at all. We manufacture the Best Screen Cleaner. and can be used for laptop cleaning kit, laptop screen cleaner, tv screen cleaner for smart tv. MacBook screen cleaner, monitor cleaner or screen cleaner spray for electronic devices with microfiber cleaning cloth
sudo mkdir -p /srv/redmine
sudo chown redmine:redmine /srv/redmine
sudo -u redmine -H bash
cd /srv/redmine
Extract or check out Redmine into that directory, then confirm that files such as Gemfile, bin/rails, config/database.yml.example and config/configuration.yml.example are present. Copy example configuration files to their production names without committing credentials to source control.
Install only production dependencies
Redmine uses Bundler to resolve Rails and adapter gems. Configure the local bundle to omit development and test groups, then install the production set.
bundle config set without 'development test'
bundle install
Run Bundler as the same account that will run Redmine. If installation fails, inspect the first missing library or incompatible Ruby message, correct the host, and rerun the command. Avoid mixing gems installed globally by root with gems installed for the application user.
Generate the Rails secret and set writable directories
Generate the session secret before the first production boot:
bundle exec rake generate_secret_token
The runtime user must be able to write Redmine’s files, log, tmp and public/assets directories. Set ownership and restrictive modes from an administrator account, then verify by creating a harmless test file as the runtime user.
Rank #3
- 【Large size】:Measuring 800 x 300 mm/ 31. 5×12 inches, which is wider and taller than others. Large mouse pad can perfectly fit your keyboard and mouse of any size, and there is also ample space for peripherals such as phones, tablets, etc.
- 【LED backlight mouse pad】:Blade Hawks RGB mouse pad provides 7 static modes and 7 dynamic modes will give you the options you are looking for. Power-off memory function remembers the last lighting mode you selected. The super glow fiber Chroma will give you a colorful gaming setup that you want.
- 【Anti-slip rubber base】:Made from Natural rubber, this gaming mousepad will firmly grip your desktop, allowing you to enjoy the ultimate precision in the games you are most passionate about. It also comes with a texture that enhances this ability even further.
- 【Smooth and waterproof surface】: Micro-textured cloth surface, for extremely precise mouse control and a smooth movement. When liquid splashes on the gaming mouse pad, it forms water droplets and slides down. Will not delay your work or gameplay.
- 【Plug and play】: This mouse and keyboard pad is powered by USB, plug and play, no driver required. One button control light modes. Press one time to change the lighting mode, press twice to change the brightness, press and hold about 3 seconds turn ON/OFF.
sudo chown -R redmine:redmine /srv/redmine/files /srv/redmine/log /srv/redmine/tmp /srv/redmine/public/assets
sudo chmod -R u+rwX,go-rwx /srv/redmine/files /srv/redmine/log /srv/redmine/tmp /srv/redmine/public/assets
sudo -u redmine -H sh -c 'touch /srv/redmine/tmp/write-test && rm /srv/redmine/tmp/write-test'
Uploads, generated assets and logs should remain writable after every release switch. If a deployment tool resets ownership, make the ownership check part of the deployment instead of granting broad permissions.
Create the database and configure config/database.yml
Use a least-privilege database account
Create a database dedicated to Redmine and a user that can connect to it and perform the migrations required by your deployment. Do not use the database administrator account in production. Keep the password in a protected secret store or a file readable only by the Redmine runtime user.
Configure the production section in config/database.yml. The adapter named there tells Bundler which database gem Redmine needs, so the database choice must be made before running the final dependency installation.
production:
adapter: postgresql
database: redmine_production
host: 127.0.0.1
port: 5432
username: redmine
password: 'database-secret'
encoding: utf8
The keys and values must match the database engine and the supported Redmine release. For MySQL, use the MySQL adapter and connection details appropriate to your server. Redmine 5.1.1 and later requires READ-COMMITTED transaction isolation for MySQL deployments; set that at the database/server level as described by the Redmine installation guide and verify it before running migrations.
Check connectivity before debugging Rails
Test a login with the native database client using the same host, port, database, username and password that appear in database.yml. A failed client login is a database or network problem, not a Redmine problem. Also check that the database service starts automatically after reboot and that its firewall rules allow only the application host or local socket as intended.
Rank #4
- 【Softer and More Comfortable】Vaydeer wrist rest has unique diamond pattern, which is the combination of softness and aesthetics. The materials of wrist rest are improved into higher quality memory foam and covered with silky smooth lycra. The computer wrist rest makes you as comfortable and cushiony as like rest your wrists on clouds.
- 【Ergonomic Wrist Saver】The wrist rests for keyboard and mouse comes with a 17.32×3.15×0.83 inch keyboard wrist pad and a 5.94×3.15×0.83 inch mouse wrist support. Based on ergonomic design, the unique concave shape is the perfect fit for your wrist joints. The wrist rest pad fits most computer keyboards and laptops, improve hand and wrist posture, release your wrist and arm stress.
- 【Non-Slip Rubber Bottom】Featuring an anti-skid silicone base on the bottom, this wrist keyboard support stays firmly in place on your desk, preventing the padding from sliding around, ensuring stable and consistent wrist support during extended computer sessions.
- 【Better Experience & Pain Relief】Our keyboard arm rest is beneficial to alleviate the soreness caused by direct contact and friction between your arm and a hard desk surface, reducing the risk of wrist fatigue or carpal tunnel. The soft texture of memory foam can evenly distribute the pressure around your wrists and provide good support with just enough give.
- 【Helpful in Multiple Scenarios】Whether you're working, studying, writing, typing, gaming, this keyboard and mouse rest combo is an essential accessory to add comfort and support to your hands and wrists. It’s also a great gift for men, women, family, friend, coworker, gamer, teacher, etc.
Run the production smoke test locally
Do not expose a half-configured application to the Internet. From the Redmine directory, start the production Rails server as the runtime user:
ruby bin/rails server -e production
On the server, open http://localhost:3000/ with a text browser, an SSH tunnel or a local browser. You should see the Redmine welcome page. If the process exits, read the first stack trace and correct the indicated Ruby, gem, database or permissions issue before adding a reverse proxy.
Quick wins for a faster PC:
Scan for outdated or missing drivers - takes under a minuteDriver Scan →Repair Windows errors before they cause bigger problemsFix Now →The initial documented credentials are username admin and password admin. Sign in immediately, change the password, and create named administrator accounts for operators. Do not leave the default credentials active while you continue configuring email or public access.
Publish Redmine behind a web server and TLS
For production, terminate HTTPS at a properly configured web server or load balancer and proxy requests to the Redmine application process. Restrict the application listener to localhost or a private interface, set the correct forwarded-protocol headers, and enforce secure cookies and redirects at the edge. Obtain and renew a certificate using the process already approved for your Ubuntu environment.
Puma behind a reverse proxy
Puma is a practical deployment model when you want Redmine’s application process separated from the public web server. Create a service that starts the production application as the Redmine user, uses the intended working directory and environment, writes logs to controlled locations and restarts on failure. Configure the proxy’s upstream to the local Puma socket or port, set request timeouts suitable for attachments and exports, and verify that uploads are not blocked by an overly small body-size limit.
Best Value
- 【No Drill Mounted】Cable management tray can be assembled in as little as 3 minutes or less-simply. Side clips easily clampe the edge of desk, pass through the holes on the sides, and secure excess cables with baskets. Desk cable management supports inward or outward installation to meet your needs in different scenarios, and provides you with great convenience when collecting and organizing wires.
- 【Rubber Pad Protects Desk】Wire organizer under desk built-in soft rubber pads on the clamp protect your desk from scratches, so you will not damage your furniture or office.
- 【Sturdy and Beautiful】Cord management under desk is made of high-quality carbon steel and holds about 15 lbs. The wire basket has 2 holes on each side of the tray to enable your cables to pass freely. Cable baskets are suitable for desk thickness use from 0.4" to 2.4".
- 【Space Saving & Keep Organized】Desk cable management tray holds all your power cords, outlet strips, USB hubs and computer transformers hidden from your feet, and the data cables will not enter the vacuum cleaner to keep your desk clean and tidy. Desk wire organizer is also suitable for use in the kitchen and outdoors.
- 【Reduce Safety Risks】Cable tray under desk keeps all plugs away from your kids, no more worry about tripping. Using 2 holes wire tray saves extra space, helps you easily cabling and wire protection. The mesh design is not easy to accumulate dust, but avoids safety accidents caused by messy wires.
Apache and Passenger as a legacy pattern
Older Ubuntu HowTo material describes Apache Passenger, an application path under /usr/share/redmine, configuration under /etc/redmine, a symlink to the public directory and Apache restarts. Those instructions target older Ubuntu and Redmine branches. Use them only when maintaining an existing package-based system, and reconcile every path, Passenger version, service user and restart command with your selected current Redmine release.
Do these 3 things before closing this tab:
1Clear out junk files and repair common Windows errors2Scan for outdated or missing drivers - takes under a minute3Repair Windows errors before they cause bigger problemsConfigure Gmail SMTP in config/configuration.yml
Direct Gmail or Google account SMTP
Put SMTP settings in config/configuration.yml, inside the production section. Do not put them in environment.rb. The following is a template; replace the account name and secret with credentials authorized by your organization.
production:
delivery_method: :smtp
smtp_settings:
enable_starttls_auto: true
address: 'smtp.gmail.com'
port: 587
domain: 'smtp.gmail.com'
authentication: :plain
user_name: 'your_email@gmail.com'
password: 'your_password'
Port 587 expects STARTTLS. Keep enable_starttls_auto: true, use plain authentication as shown, and ensure outbound TCP 587 is allowed by the server’s firewall and hosting network. The Gmail or Google Workspace account must be permitted to send as the address configured in Redmine’s notification settings. Store the password in your deployment’s secret-management system where possible, protect the configuration file from other users, and never paste a real credential into a ticket or public repository.
Google Workspace SMTP relay
Organizations that centrally manage outbound mail can use smtp-relay.gmail.com on port 587 instead of authenticating directly as an individual mailbox. Relay requires an administrator-defined policy covering the sending IP or authentication method, permitted sender addresses and TLS requirements. Confirm that Redmine’s From address is allowed by that policy. The relay option is intended for organizational sending and has larger sending limits than the account-level approach, but it is not plug-and-play: a policy mismatch produces SMTP rejection even when the Redmine YAML is syntactically correct.
| Choice | Use when | Configuration responsibility |
|---|---|---|
smtp.gmail.com |
A specific Gmail or Workspace account should authenticate and send Redmine mail. | Account credentials, sender authorization and account security controls. |
smtp-relay.gmail.com |
Your Workspace administrators operate a domain relay or Redmine sends higher-volume notifications. | Relay policy, allowed source, sender permissions, authentication and TLS enforcement. |
Restart after every configuration change
Redmine reads SMTP settings when the application starts. Stop the test process or restart the production service after editing config/configuration.yml; otherwise workers may continue using the old settings. Treat the restart as mandatory, not optional.
Send and verify a notification
- Confirm the production database is reachable and the application boots locally.
- Set the Redmine administrator email and the desired From address in the Redmine administration settings.
- Save
config/configuration.ymlwith the SMTP host, port, STARTTLS, authentication mode and authorized sender. - Restart the Redmine service.
- Trigger a small test notification, such as adding a watcher to a test issue, and check both the recipient mailbox and Redmine’s production log.
- If the message is rejected, record the exact SMTP response before changing multiple settings. It identifies whether the failure is TLS, authentication, policy or sender authorization.
Use a test recipient you control and avoid generating a large notification burst while validating relay limits. Confirm that links in the message use your HTTPS hostname rather than localhost; that setting is separate from SMTP and belongs in the appropriate Redmine host and protocol configuration.
Troubleshoot by symptom
| Symptom | Checks | Corrective action |
|---|---|---|
| Redmine will not boot | Ruby version, selected Redmine release, Bundler output, missing native libraries and file ownership. | Install a supported Ruby, rerun production Bundler, install the missing system dependency and restore write access to files, log, tmp and public/assets. |
| Database connection or migration error | Native client login, adapter in database.yml, database name, credentials and server logs. |
Correct the connection values. For MySQL on Redmine 5.1.1 or later, verify READ-COMMITTED isolation. |
| Welcome page works but no email arrives | Production section, exact SMTP hostname, port 587, STARTTLS, authentication, sender authorization, outbound firewall and restart status. | Fix one setting at a time, restart Redmine, send a single test notification and inspect the SMTP response in the production log. |
| SMTP authentication is rejected | Account name, secret, account security policy and whether the account is authorized to send as the configured From address. | Use an approved credential or switch to a Workspace relay policy that explicitly permits the server and sender. |
| Relay rejects the message | Workspace relay rules for source IP or authentication, allowed senders and required TLS. | Ask the Workspace administrator to align the relay policy with the Redmine host and From address; changing only the Redmine password will not fix a policy rejection. |
| Package install has permission or Passenger errors | Legacy application path, public-directory symlink, Apache user and Passenger settings. | Correct the package deployment’s ownership and web-server integration, or migrate deliberately to a current source-based release rather than mixing old paths with new files. |
Always perform the local Puma or Rails smoke test before investigating DNS, TLS certificates or reverse-proxy headers. That sequence separates application failures from edge-network failures and shortens diagnosis.
Quick Recap
Secure and maintain the deployment
- Keep Redmine, Ruby gems, Ubuntu packages and the database engine within their supported maintenance windows.
- Back up the database and the Redmine
filesdirectory; attachments are not recoverable from the database alone. - Restrict SSH, database and application ports with the Ubuntu firewall and your provider’s network controls.
- Protect
config/database.ymlandconfig/configuration.yml; both can contain credentials. - Rotate database and SMTP credentials through your secret-management process, then restart Redmine and verify a notification.
- Monitor disk space, log growth, failed jobs and certificate renewal.
- Test a restore on a separate host before relying on the backup.
- Stage Redmine upgrades, run migrations during a maintenance window and retain the previous release for rollback until the new version passes login, attachment and email tests.
A practical deployment checklist
- Record the exact Redmine, Ubuntu, Ruby and database versions and verify they are supported together.
- Create the dedicated Redmine service account, application directory and least-privilege database account.
- Configure
config/database.ymland test database connectivity with the native client. - Set Bundler to omit development and test groups, then run
bundle install. - Run
bundle exec rake generate_secret_token. - Set runtime ownership and write access for
files,log,tmpandpublic/assets. - Boot with
ruby bin/rails server -e productionand verifyhttp://localhost:3000/. - Change the default
admin/adminpassword immediately. - Publish through a TLS-enabled reverse proxy or a deliberately maintained Apache/Passenger deployment.
- Add Gmail SMTP or Workspace relay settings to
config/configuration.yml, protect the secret and restart Redmine. - Send one controlled notification, inspect the production log and document the working configuration.
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.

