{"id":54290,"date":"2026-03-22T20:51:57","date_gmt":"2020-05-10T11:07:04","guid":{"rendered":"https:\/\/computingforgeeks.com\/?p=54290"},"modified":"2026-03-22T20:51:58","modified_gmt":"2026-03-22T17:51:58","slug":"install-redmine-on-ubuntu-linux","status":"publish","type":"post","link":"https:\/\/computingforgeeks.com\/install-redmine-on-ubuntu-linux\/","title":{"rendered":"Install Redmine on Ubuntu 24.04"},"content":{"rendered":"\n<p><a href=\"https:\/\/www.redmine.org\/\" target=\"_blank\" rel=\"noreferrer noopener\">Redmine<\/a> is an open-source project management application built on Ruby on Rails. It handles issue tracking, Gantt charts, wiki pages, time tracking, role-based access control, and multiple project support from a single web interface. It supports plugins and has been around since 2006 with active development &#8211; Redmine 6.1.2 is the current stable release.<\/p>\n\n\n\n<p>This guide walks through a complete Redmine 6.1 installation on Ubuntu 24.04 LTS using MariaDB as the database backend, Puma as the application server, and Nginx as the reverse proxy. Every command has been written for a fresh Ubuntu 24.04 server.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Prerequisites<\/h2>\n\n\n\n<p>Before starting, make sure you have the following in place:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>A server running Ubuntu 24.04 LTS with at least 2 GB RAM and 2 CPU cores<\/li>\n\n<li>Root or sudo access to the server<\/li>\n\n<li>A domain name pointed to your server IP (for SSL setup)<\/li>\n\n<li>Ports 80 (HTTP), 443 (HTTPS), and 3000 (Puma, local only) available<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Step 1: Install Redmine Dependencies on Ubuntu 24.04<\/h2>\n\n\n\n<p>Redmine 6.1 requires Ruby 3.2+, a C compiler for native gem extensions, and several development libraries. Ubuntu 24.04 ships Ruby 3.2 in the default repositories, which meets the requirement.<\/p>\n\n\n\n<p>Update the package index and install all required packages:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo apt update\nsudo apt install -y ruby ruby-dev build-essential libmariadb-dev libxml2-dev libxslt1-dev zlib1g-dev imagemagick libmagickwand-dev curl git<\/code><\/pre>\n\n\n\n<p>Install Bundler, which manages Ruby gem dependencies for Redmine:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo gem install bundler<\/code><\/pre>\n\n\n\n<p>Verify the Ruby and Bundler versions installed:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>ruby --version\nbundler --version<\/code><\/pre>\n\n\n\n<p>You should see Ruby 3.2.x and Bundler 2.x confirmed in the output:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>ruby 3.2.3 (2024-01-18 revision 52bb2ac0a6) [x86_64-linux-gnu]\nBundler version 2.6.2<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Step 2: Install MariaDB Database Server<\/h2>\n\n\n\n<p>Redmine stores all project data, issues, and user information in a relational database. MariaDB is a solid choice and works well with Redmine 6.1. If you need a more detailed <a href=\"https:\/\/computingforgeeks.com\/install-mariadb-ubuntu\/\" target=\"_blank\" rel=\"noreferrer noopener\">MariaDB installation guide on Ubuntu<\/a>, we have a dedicated article covering that.<\/p>\n\n\n\n<p>Install the MariaDB server and client packages:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo apt install -y mariadb-server mariadb-client<\/code><\/pre>\n\n\n\n<p>Start and enable MariaDB so it runs on boot:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo systemctl enable --now mariadb<\/code><\/pre>\n\n\n\n<p>Confirm the service is active and running:<\/p>\n\n<!-- \/wp:post-content -->\n\n<!-- wp:code -->\n<pre class=\"wp-block-code\"><code>sudo systemctl status mariadb --no-pager<\/code><\/pre>\n<!-- \/wp:code -->\n\n<!-- wp:paragraph -->\n<p>The output should show <code>active (running)<\/code> status. Run the security hardening script to set a root password and remove test databases:<\/p>\n<!-- \/wp:paragraph -->\n\n<!-- wp:code -->\n<pre class=\"wp-block-code\"><code>sudo mariadb-secure-installation<\/code><\/pre>\n<!-- \/wp:code -->\n\n<!-- wp:paragraph -->\n<p>Answer the prompts &#8211; set a strong root password, remove anonymous users, disable remote root login, and drop the test database.<\/p>\n<!-- \/wp:paragraph -->\n\n<!-- wp:heading -->\n<h2 class=\"wp-block-heading\">Step 3: Create Redmine Database and User<\/h2>\n<!-- \/wp:heading -->\n\n<!-- wp:paragraph -->\n<p>Create a dedicated database and user for Redmine. Never run applications using the database root account in production.<\/p>\n<!-- \/wp:paragraph -->\n\n<!-- wp:paragraph -->\n<p>Log in to the MariaDB shell:<\/p>\n<!-- \/wp:paragraph -->\n\n<!-- wp:code -->\n<pre class=\"wp-block-code\"><code>sudo mariadb -u root -p<\/code><\/pre>\n<!-- \/wp:code -->\n\n<!-- wp:paragraph -->\n<p>Run the following SQL statements to create the database, user, and grant privileges:<\/p>\n<!-- \/wp:paragraph -->\n\n<!-- wp:code -->\n<pre class=\"wp-block-code\"><code>CREATE DATABASE redmine CHARACTER SET utf8mb4;\nCREATE USER 'redmine'@'localhost' IDENTIFIED BY 'StrongPassword123!';\nGRANT ALL PRIVILEGES ON redmine.* TO 'redmine'@'localhost';\nFLUSH PRIVILEGES;\nEXIT;<\/code><\/pre>\n<!-- \/wp:code -->\n\n<!-- wp:paragraph -->\n<p>Replace <code>StrongPassword123!<\/code> with a secure password of your choice. Keep note of it &#8211; you will need it when configuring Redmine&#8217;s database connection.<\/p>\n<!-- \/wp:paragraph -->\n\n<!-- wp:heading -->\n<h2 class=\"wp-block-heading\">Step 4: Download and Extract Redmine 6.1<\/h2>\n<!-- \/wp:heading -->\n\n<!-- wp:paragraph -->\n<p>Download the latest stable Redmine release directly from the official site. We install it under <code>\/opt\/redmine<\/code> which keeps application files separate from system directories.<\/p>\n<!-- \/wp:paragraph -->\n\n<!-- wp:code -->\n<pre class=\"wp-block-code\"><code>cd \/tmp\ncurl -LO https:\/\/www.redmine.org\/releases\/redmine-6.1.2.tar.gz<\/code><\/pre>\n<!-- \/wp:code -->\n\n<!-- wp:paragraph -->\n<p>Extract the archive and move it to the installation directory:<\/p>\n<!-- \/wp:paragraph -->\n\n<!-- wp:code -->\n<pre class=\"wp-block-code\"><code>tar xzf redmine-6.1.2.tar.gz\nsudo mv redmine-6.1.2 \/opt\/redmine<\/code><\/pre>\n<!-- \/wp:code -->\n\n<!-- wp:paragraph -->\n<p>Create a dedicated system user to run Redmine. Running it as root is a security risk:<\/p>\n<!-- \/wp:paragraph -->\n\n<!-- wp:code -->\n<pre class=\"wp-block-code\"><code>sudo useradd -r -m -d \/opt\/redmine -s \/bin\/bash redmine\nsudo chown -R redmine:redmine \/opt\/redmine<\/code><\/pre>\n<!-- \/wp:code -->\n\n<!-- wp:heading -->\n<h2 class=\"wp-block-heading\">Step 5: Configure Redmine Database Connection<\/h2>\n<!-- \/wp:heading -->\n\n<!-- wp:paragraph -->\n<p>Redmine reads its database settings from <code>config\/database.yml<\/code>. Copy the example file and edit it with your database credentials.<\/p>\n<!-- \/wp:paragraph -->\n\n<!-- wp:paragraph -->\n<p>Copy the example configuration:<\/p>\n<!-- \/wp:paragraph -->\n\n<!-- wp:code -->\n<pre class=\"wp-block-code\"><code>sudo cp \/opt\/redmine\/config\/database.yml.example \/opt\/redmine\/config\/database.yml<\/code><\/pre>\n<!-- \/wp:code -->\n\n<!-- wp:paragraph -->\n<p>Open the file for editing:<\/p>\n<!-- \/wp:paragraph -->\n\n<!-- wp:code -->\n<pre class=\"wp-block-code\"><code>sudo vi \/opt\/redmine\/config\/database.yml<\/code><\/pre>\n<!-- \/wp:code -->\n\n<!-- wp:paragraph -->\n<p>Update the production section with your MariaDB connection details:<\/p>\n<!-- \/wp:paragraph -->\n\n<!-- wp:code -->\n<pre class=\"wp-block-code\"><code>production:\n  adapter: mysql2\n  database: redmine\n  host: localhost\n  username: redmine\n  password: \"StrongPassword123!\"\n  encoding: utf8mb4<\/code><\/pre>\n<!-- \/wp:code -->\n\n<!-- wp:paragraph -->\n<p>Set proper ownership so only the Redmine user can read the credentials:<\/p>\n<!-- \/wp:paragraph -->\n\n<!-- wp:code -->\n<pre class=\"wp-block-code\"><code>sudo chown redmine:redmine \/opt\/redmine\/config\/database.yml\nsudo chmod 600 \/opt\/redmine\/config\/database.yml<\/code><\/pre>\n<!-- \/wp:code -->\n\n<!-- wp:heading -->\n<h2 class=\"wp-block-heading\">Step 6: Install Gems and Initialize the Database<\/h2>\n<!-- \/wp:heading -->\n\n<!-- wp:paragraph -->\n<p>Redmine uses Bundler to manage its Ruby dependencies. Switch to the Redmine user and install the required gems, excluding development and test groups to keep the install lean.<\/p>\n<!-- \/wp:paragraph -->\n\n<!-- wp:code -->\n<pre class=\"wp-block-code\"><code>sudo -u redmine -H bash -c \"cd \/opt\/redmine && bundle config set --local without 'development test'\ncd \/opt\/redmine && bundle install\"<\/code><\/pre>\n<!-- \/wp:code -->\n\n<!-- wp:paragraph -->\n<p>This installs all production gems including the <code>mysql2<\/code> adapter, <code>puma<\/code> web server, and Rails framework. The process takes a few minutes depending on your server speed.<\/p>\n<!-- \/wp:paragraph -->\n\n<!-- wp:paragraph -->\n<p>Generate a random secret token used for session encryption:<\/p>\n<!-- \/wp:paragraph -->\n\n<!-- wp:code -->\n<pre class=\"wp-block-code\"><code>sudo -u redmine -H bash -c \"cd \/opt\/redmine && bundle exec rake generate_secret_token\"<\/code><\/pre>\n<!-- \/wp:code -->\n\n<!-- wp:paragraph -->\n<p>Run the database migrations to create all required tables in the Redmine database:<\/p>\n<!-- \/wp:paragraph -->\n\n<!-- wp:code -->\n<pre class=\"wp-block-code\"><code>sudo -u redmine -H bash -c \"cd \/opt\/redmine && RAILS_ENV=production bundle exec rake db:migrate\"<\/code><\/pre>\n<!-- \/wp:code -->\n\n<!-- wp:paragraph -->\n<p>Load the default configuration data (roles, trackers, issue statuses, and workflows):<\/p>\n<!-- \/wp:paragraph -->\n\n<!-- wp:code -->\n<pre class=\"wp-block-code\"><code>sudo -u redmine -H bash -c \"cd \/opt\/redmine && RAILS_ENV=production REDMINE_LANG=en bundle exec rake redmine:load_default_data\"<\/code><\/pre>\n<!-- \/wp:code -->\n\n<!-- wp:paragraph -->\n<p>Set the correct permissions on directories Redmine needs to write to:<\/p>\n<!-- \/wp:paragraph -->\n\n<!-- wp:code -->\n<pre class=\"wp-block-code\"><code>sudo mkdir -p \/opt\/redmine\/tmp \/opt\/redmine\/tmp\/pdf \/opt\/redmine\/public\/plugin_assets\nsudo chown -R redmine:redmine \/opt\/redmine\/tmp \/opt\/redmine\/public\/plugin_assets \/opt\/redmine\/log \/opt\/redmine\/files<\/code><\/pre>\n<!-- \/wp:code -->\n\n<!-- wp:heading -->\n<h2 class=\"wp-block-heading\">Step 7: Configure Puma Application Server with Nginx<\/h2>\n<!-- \/wp:heading -->\n\n<!-- wp:paragraph -->\n<p>Puma ships with Redmine 6.1 and handles Ruby application requests. Nginx sits in front as a reverse proxy, handling SSL termination and static file serving. This is the recommended production setup.<\/p>\n<!-- \/wp:paragraph -->\n\n<!-- wp:paragraph -->\n<p>Install Nginx:<\/p>\n<!-- \/wp:paragraph -->\n\n<!-- wp:code -->\n<pre class=\"wp-block-code\"><code>sudo apt install -y nginx<\/code><\/pre>\n<!-- \/wp:code -->\n\n<!-- wp:paragraph -->\n<p>Create an <a href=\"https:\/\/computingforgeeks.com\/installing-nginx-with-php-fpm-on-ubuntu\/\" target=\"_blank\" rel=\"noreferrer noopener\">Nginx<\/a> virtual host configuration for Redmine. Replace <code>redmine.example.com<\/code> with your actual domain:<\/p>\n<!-- \/wp:paragraph -->\n\n<!-- wp:code -->\n<pre class=\"wp-block-code\"><code>sudo vi \/etc\/nginx\/sites-available\/redmine<\/code><\/pre>\n<!-- \/wp:code -->\n\n<!-- wp:paragraph -->\n<p>Add the following configuration:<\/p>\n<!-- \/wp:paragraph -->\n\n<!-- wp:code -->\n<pre class=\"wp-block-code\"><code>upstream redmine_puma {\n    server 127.0.0.1:3000;\n}\n\nserver {\n    listen 80;\n    server_name redmine.example.com;\n\n    root \/opt\/redmine\/public;\n\n    # Serve static files directly through Nginx\n    location \/ {\n        try_files $uri @redmine;\n    }\n\n    location @redmine {\n        proxy_pass http:\/\/redmine_puma;\n        proxy_set_header Host $host;\n        proxy_set_header X-Real-IP $remote_addr;\n        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n        proxy_set_header X-Forwarded-Proto $scheme;\n        proxy_redirect off;\n\n        # File upload size - adjust based on your needs\n        client_max_body_size 100m;\n    }\n}<\/code><\/pre>\n<!-- \/wp:code -->\n\n<!-- wp:paragraph -->\n<p>Enable the site and remove the default Nginx configuration:<\/p>\n<!-- \/wp:paragraph -->\n\n<!-- wp:code -->\n<pre class=\"wp-block-code\"><code>sudo ln -s \/etc\/nginx\/sites-available\/redmine \/etc\/nginx\/sites-enabled\/redmine\nsudo rm -f \/etc\/nginx\/sites-enabled\/default<\/code><\/pre>\n<!-- \/wp:code -->\n\n<!-- wp:paragraph -->\n<p>Test the Nginx configuration for syntax errors:<\/p>\n<!-- \/wp:paragraph -->\n\n<!-- wp:code -->\n<pre class=\"wp-block-code\"><code>sudo nginx -t<\/code><\/pre>\n<!-- \/wp:code -->\n\n<!-- wp:paragraph -->\n<p>A successful test returns the following:<\/p>\n<!-- \/wp:paragraph -->\n\n<!-- wp:code -->\n<pre class=\"wp-block-code\"><code>nginx: the configuration file \/etc\/nginx\/nginx.conf syntax is ok\nnginx: configuration file \/etc\/nginx\/nginx.conf test is successful<\/code><\/pre>\n<!-- \/wp:code -->\n\n<!-- wp:paragraph -->\n<p>Restart Nginx to apply the changes:<\/p>\n<!-- \/wp:paragraph -->\n\n<!-- wp:code -->\n<pre class=\"wp-block-code\"><code>sudo systemctl restart nginx\nsudo systemctl enable nginx<\/code><\/pre>\n<!-- \/wp:code -->\n\n<!-- wp:heading -->\n<h2 class=\"wp-block-heading\">Step 8: Create a Systemd Service for Redmine<\/h2>\n<!-- \/wp:heading -->\n\n<!-- wp:paragraph -->\n<p>A systemd unit file ensures Redmine starts automatically on boot and can be managed with standard <code>systemctl<\/code> commands.<\/p>\n<!-- \/wp:paragraph -->\n\n<!-- wp:paragraph -->\n<p>Create the service file:<\/p>\n<!-- \/wp:paragraph -->\n\n<!-- wp:code -->\n<pre class=\"wp-block-code\"><code>sudo vi \/etc\/systemd\/system\/redmine.service<\/code><\/pre>\n<!-- \/wp:code -->\n\n<!-- wp:paragraph -->\n<p>Add the following unit configuration:<\/p>\n<!-- \/wp:paragraph -->\n\n<!-- wp:code -->\n<pre class=\"wp-block-code\"><code>[Unit]\nDescription=Redmine Project Manager\nAfter=network.target mariadb.service\n\n[Service]\nType=simple\nUser=redmine\nGroup=redmine\nWorkingDirectory=\/opt\/redmine\nExecStart=\/usr\/bin\/bundle exec puma -C \/opt\/redmine\/config\/puma.rb -e production\nRestart=on-failure\nRestartSec=10\nStandardOutput=journal\nStandardError=journal\nEnvironment=RAILS_ENV=production\nEnvironment=RAILS_LOG_TO_STDOUT=true\n\n[Install]\nWantedBy=multi-user.target<\/code><\/pre>\n<!-- \/wp:code -->\n\n<!-- wp:paragraph -->\n<p>Create a Puma configuration file that binds to port 3000:<\/p>\n<!-- \/wp:paragraph -->\n\n<!-- wp:code -->\n<pre class=\"wp-block-code\"><code>sudo vi \/opt\/redmine\/config\/puma.rb<\/code><\/pre>\n<!-- \/wp:code -->\n\n<!-- wp:paragraph -->\n<p>Add the following Puma settings:<\/p>\n<!-- \/wp:paragraph -->\n\n<!-- wp:code -->\n<pre class=\"wp-block-code\"><code># Puma configuration for Redmine\nbind \"tcp:\/\/127.0.0.1:3000\"\nenvironment \"production\"\nthreads 2, 8\nworkers 2\npidfile \"\/opt\/redmine\/tmp\/pids\/server.pid\"\nstate_path \"\/opt\/redmine\/tmp\/pids\/puma.state\"\ndirectory \"\/opt\/redmine\"\nstdout_redirect \"\/opt\/redmine\/log\/puma_access.log\", \"\/opt\/redmine\/log\/puma_error.log\", true<\/code><\/pre>\n<!-- \/wp:code -->\n\n<!-- wp:paragraph -->\n<p>Set correct ownership on the Puma config file:<\/p>\n<!-- \/wp:paragraph -->\n\n<!-- wp:code -->\n<pre class=\"wp-block-code\"><code>sudo chown redmine:redmine \/opt\/redmine\/config\/puma.rb\nsudo mkdir -p \/opt\/redmine\/tmp\/pids\nsudo chown -R redmine:redmine \/opt\/redmine\/tmp\/pids<\/code><\/pre>\n<!-- \/wp:code -->\n\n<!-- wp:paragraph -->\n<p>Reload systemd, start Redmine, and enable it on boot:<\/p>\n<!-- \/wp:paragraph -->\n\n<!-- wp:code -->\n<pre class=\"wp-block-code\"><code>sudo systemctl daemon-reload\nsudo systemctl enable --now redmine<\/code><\/pre>\n<!-- \/wp:code -->\n\n<!-- wp:paragraph -->\n<p>Verify the service is running:<\/p>\n<!-- \/wp:paragraph -->\n\n<!-- wp:code -->\n<pre class=\"wp-block-code\"><code>sudo systemctl status redmine --no-pager<\/code><\/pre>\n<!-- \/wp:code -->\n\n<!-- wp:paragraph -->\n<p>The output should show <code>active (running)<\/code>. If the service fails, check the logs for errors:<\/p>\n<!-- \/wp:paragraph -->\n\n<!-- wp:code -->\n<pre class=\"wp-block-code\"><code>sudo journalctl -u redmine --no-pager -n 50<\/code><\/pre>\n<!-- \/wp:code -->\n\n<!-- wp:heading -->\n<h2 class=\"wp-block-heading\">Step 9: Access Redmine Web Interface and Initial Setup<\/h2>\n<!-- \/wp:heading -->\n\n<!-- wp:paragraph -->\n<p>Open your browser and navigate to your server&#8217;s domain or IP address. The Redmine login page should load.<\/p>\n<!-- \/wp:paragraph -->\n\n<!-- wp:paragraph -->\n<p>Log in with the default administrator credentials:<\/p>\n<!-- \/wp:paragraph -->\n\n<!-- wp:list -->\n<ul><!-- wp:list-item -->\n<li><strong>Username<\/strong>: admin<\/li>\n<!-- \/wp:list-item --><!-- wp:list-item -->\n<li><strong>Password<\/strong>: admin<\/li>\n<!-- \/wp:list-item --><\/ul>\n<!-- \/wp:list -->\n\n<!-- wp:paragraph -->\n<p>Redmine forces a password change on first login. Set a strong password immediately.<\/p>\n<!-- \/wp:paragraph -->\n\n<!-- wp:paragraph -->\n<p>After logging in, configure these essential settings under <strong>Administration<\/strong>:<\/p>\n<!-- \/wp:paragraph -->\n\n<!-- wp:list -->\n<ul><!-- wp:list-item -->\n<li><strong>Settings > General<\/strong> &#8211; set the application title and default language<\/li>\n<!-- \/wp:list-item --><!-- wp:list-item -->\n<li><strong>Settings > Authentication<\/strong> &#8211; disable self-registration if running internally, or enable with email activation for public instances<\/li>\n<!-- \/wp:list-item --><!-- wp:list-item -->\n<li><strong>Settings > Email notifications<\/strong> &#8211; configure SMTP for email delivery (issue assignments, status updates)<\/li>\n<!-- \/wp:list-item --><!-- wp:list-item -->\n<li><strong>Settings > Repositories<\/strong> &#8211; enable Git\/SVN integration if you plan to link code repositories<\/li>\n<!-- \/wp:list-item --><\/ul>\n<!-- \/wp:list -->\n\n<!-- wp:paragraph -->\n<p>Create your first project by going to <strong>Projects > New Project<\/strong>. Enable the modules you need &#8211; issue tracking, wiki, time tracking, Gantt chart, and repository browser are the most commonly used.<\/p>\n<!-- \/wp:paragraph -->\n\n<!-- wp:heading -->\n<h2 class=\"wp-block-heading\">Step 10: Configure Firewall and SSL with Let&#8217;s Encrypt<\/h2>\n<!-- \/wp:heading -->\n\n<!-- wp:paragraph -->\n<p>If <a href=\"https:\/\/computingforgeeks.com\/common-ufw-firewall-commands-with-examples\/\" target=\"_blank\" rel=\"noreferrer noopener\">UFW<\/a> is active on your server, open the required ports for HTTP and HTTPS traffic:<\/p>\n<!-- \/wp:paragraph -->\n\n<!-- wp:code -->\n<pre class=\"wp-block-code\"><code>sudo ufw allow 80\/tcp\nsudo ufw allow 443\/tcp\nsudo ufw reload<\/code><\/pre>\n<!-- \/wp:code -->\n\n<!-- wp:paragraph -->\n<p>Verify the firewall rules are in place:<\/p>\n<!-- \/wp:paragraph -->\n\n<!-- wp:code -->\n<pre class=\"wp-block-code\"><code>sudo ufw status<\/code><\/pre>\n<!-- \/wp:code -->\n\n<!-- wp:paragraph -->\n<p>For production deployments, SSL is not optional. Install Certbot to obtain a free <a href=\"https:\/\/computingforgeeks.com\/easiest-way-install-letsencrypt-linux\/\" target=\"_blank\" rel=\"noreferrer noopener\">Let&#8217;s Encrypt SSL certificate<\/a>:<\/p>\n<!-- \/wp:paragraph -->\n\n<!-- wp:code -->\n<pre class=\"wp-block-code\"><code>sudo apt install -y certbot python3-certbot-nginx<\/code><\/pre>\n<!-- \/wp:code -->\n\n<!-- wp:paragraph -->\n<p>Request and install the certificate. Certbot automatically modifies your Nginx configuration to enable HTTPS:<\/p>\n<!-- \/wp:paragraph -->\n\n<!-- wp:code -->\n<pre class=\"wp-block-code\"><code>sudo certbot --nginx -d redmine.example.com<\/code><\/pre>\n<!-- \/wp:code -->\n\n<!-- wp:paragraph -->\n<p>Follow the prompts to enter your email and accept the terms. Certbot handles the ACME challenge, installs the certificate, and configures Nginx to redirect HTTP to HTTPS.<\/p>\n<!-- \/wp:paragraph -->\n\n<!-- wp:paragraph -->\n<p>Verify the certificate auto-renewal is set up correctly:<\/p>\n<!-- \/wp:paragraph -->\n\n<!-- wp:code -->\n<pre class=\"wp-block-code\"><code>sudo certbot renew --dry-run<\/code><\/pre>\n<!-- \/wp:code -->\n\n<!-- wp:paragraph -->\n<p>A successful dry run confirms automatic renewal will work. Certbot installs a systemd timer that handles renewals before certificates expire.<\/p>\n<!-- \/wp:paragraph -->\n\n<!-- wp:heading -->\n<h2 class=\"wp-block-heading\">Conclusion<\/h2>\n<!-- \/wp:heading -->\n\n<!-- wp:paragraph -->\n<p>You now have a working Redmine 6.1.2 installation on Ubuntu 24.04 with MariaDB, Puma, and Nginx. The setup includes a systemd service for process management and Let&#8217;s Encrypt SSL for encrypted connections. For a production environment, consider setting up regular database backups with <code>mariadb-dump<\/code>, configuring email notifications via SMTP, and enabling the <a href=\"https:\/\/www.redmine.org\/projects\/redmine\/wiki\/RedmineInstall\" target=\"_blank\" rel=\"noreferrer noopener\">Redmine plugin ecosystem<\/a> for additional functionality like agile boards and CRM integration.<\/p>\n<!-- \/wp:paragraph -->\n","protected":false},"excerpt":{"rendered":"<p>Redmine is an open-source project management application built on Ruby on Rails. It handles issue tracking, Gantt charts, wiki pages, time tracking, role-based access control, and multiple project support from a single web interface. It supports plugins and has been around since 2006 with active development &#8211; Redmine 6.1.2 is the current stable release. This &#8230; <a title=\"Install Redmine on Ubuntu 24.04\" class=\"read-more\" href=\"https:\/\/computingforgeeks.com\/install-redmine-on-ubuntu-linux\/\" aria-label=\"Read more about Install Redmine on Ubuntu 24.04\">Read more<\/a><\/p>\n","protected":false},"author":3,"featured_media":54573,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[299,50,81],"tags":[740,21725],"class_list":["post-54290","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-how-to","category-linux-tutorials","category-ubuntu","tag-project-management","tag-redmine"],"_links":{"self":[{"href":"https:\/\/computingforgeeks.com\/wp-json\/wp\/v2\/posts\/54290","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/computingforgeeks.com\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/computingforgeeks.com\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/computingforgeeks.com\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/computingforgeeks.com\/wp-json\/wp\/v2\/comments?post=54290"}],"version-history":[{"count":1,"href":"https:\/\/computingforgeeks.com\/wp-json\/wp\/v2\/posts\/54290\/revisions"}],"predecessor-version":[{"id":163578,"href":"https:\/\/computingforgeeks.com\/wp-json\/wp\/v2\/posts\/54290\/revisions\/163578"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/computingforgeeks.com\/wp-json\/wp\/v2\/media\/54573"}],"wp:attachment":[{"href":"https:\/\/computingforgeeks.com\/wp-json\/wp\/v2\/media?parent=54290"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/computingforgeeks.com\/wp-json\/wp\/v2\/categories?post=54290"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/computingforgeeks.com\/wp-json\/wp\/v2\/tags?post=54290"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}