Redmine
Overview
Redmine is a flexible, open source, web-based project management and issue tracking application built on the Ruby on Rails framework. It supports multiple projects, role-based access control, a configurable issue tracker, Gantt charts and a calendar, per-project wikis and forums, time tracking, document and file management, news and email notifications, and a REST API for integration.
This SecureAnyCloud image runs Redmine under the Puma application server behind an nginx reverse proxy, with the project database in MariaDB. The administrator password is generated on first boot, so no two instances launched from the same Amazon Machine Image share a password.
What you get:
- Redmine installed under
/opt/redmine, running under Puma as the unprivilegedwww-datasystem account - The
redmine.servicesystemd unit, which starts Redmine on boot and restarts it on failure - Puma bound to the loopback interface only and never exposed directly, with an nginx reverse proxy publishing the web interface on port 80
- A MariaDB project database whose datadir lives at
/var/lib/mysqlon a dedicated, independently resizable EBS data volume - Redmine's own session-based administrator login, with a password generated on the first boot of every deployed instance
- The administrator password written to
/root/redmine-credentials.txtwith mode 0600, so only the root user can read it
Prerequisites
Before you deploy, make sure you have:
- An Amazon Web Services account where you can launch EC2 instances
- IAM permissions to launch instances, create security groups and subscribe to AWS Marketplace products
- An EC2 key pair in the target Region for SSH access to the instance
- A VPC and subnet in the target Region, with a security group that allows inbound port 22 from your management network and port 80 for the web interface
- The AWS CLI (version 2) installed locally if you plan to deploy from the command line
Launch the Instance from the AWS Marketplace
Sign in to the AWS Management Console, open the EC2 service, and select Launch instance. Under Application and OS Images, choose AWS Marketplace AMIs and search for Redmine. Select the SecureAnyCloud listing, choose Select, then choose Continue on the subscription summary.
Pick an instance type of t3.small or larger. Choose your EC2 key pair under Key pair (login). Under Network settings, select your VPC and subnet, then create or select a security group that opens port 22 from your management network and port 80 for the web interface. Leave the root volume at the default size or larger.
Select Launch instance. After the instance state becomes Running and the status checks pass, first-boot initialization takes a minute or two. During that time Redmine builds its per-instance database and rotates the administrator password.
Launch the Instance from the AWS CLI
Run the following command to launch an instance from the SecureAnyCloud Redmine Marketplace AMI into an existing subnet and security group. Replace <ami-id> with the AMI ID shown on the Marketplace listing and <key-name> with your EC2 key pair name. Replace <subnet-id> with your subnet ID and <security-group-id> with a security group that opens ports 22 and 80, as described above.
aws ec2 run-instances \
--image-id <ami-id> \
--instance-type t3.small \
--key-name <key-name> \
--subnet-id <subnet-id> \
--security-group-ids <security-group-id> \
--tag-specifications 'ResourceType=instance,Tags=[{Key=Name,Value=redmine}]'When the instance reaches the Running state and its status checks pass, note its public IP address or DNS name. You can find it in the EC2 console or with aws ec2 describe-instances.
Connect to Your Instance
Connect over SSH with your key pair and the login user for your operating system variant.
OS variant SSH login user
Ubuntu 24.04 ubuntu
ssh -i <key-name>.pem ubuntu@<public-ip>Retrieve the Admin Password
Your instance generated a unique Redmine administrator password on first boot. Read it as root:
sudo cat /root/redmine-credentials.txtThe file lists the Redmine URL, the administrator user name (admin), the generated password and the database credentials. Keep the password somewhere safe.
Sign In to the Web Interface
nginx serves the Redmine web interface on port 80. In a browser, go to:
http://<public-ip>/Choose Sign in and log in as admin with the password from the credentials file.
You land on your personal overview page. From there you can reach your projects, the issues assigned to you and the administration panel.
Create a Project
From the top menu, choose Projects, then New project. Give the project a name and identifier. Choose the modules you need, such as issue tracking, wiki and time tracking, and select the trackers, for example Bug, Feature and Support.
Save the project to open its overview. The configured modules appear there as tabs.
Create and Track Issues
Open a project and choose New issue. Pick a tracker, set the subject and description, assign the issue to a member, and set the priority, target version and due date.
The project Issues tab lists every issue with filters and saved queries. Use them to slice the backlog by status, assignee, tracker or custom field. Switch to the Gantt chart or calendar views to plan the work.
Confirm Redmine Is Running
Over SSH, confirm that the application, the database and the nginx proxy are active and that the ports are listening:
sudo systemctl is-active redmine mariadb nginx
sudo ss -tlnp | grep -E ':(80|3306|3000) 'All three services report active. MariaDB listens on 127.0.0.1:3306 (loopback only), Puma on 127.0.0.1:3000, and nginx on port 80.
Administer Redmine
The administration panel is where you manage the whole instance. From the top menu, choose Administration to reach users and groups, roles and permissions, trackers, issue statuses, workflows, custom fields, enumerations and the global settings.
This is also where you enable the REST API and configure outgoing email.
Use the REST API
Redmine exposes a REST API on the same port 80 for programmatic access. First enable it in Administration > Settings > API by ticking Enable REST web service. Then generate a personal API key from My account > API access key.
With the key you can read and create projects and issues. For example, list the projects visible to your key:
curl -s -H 'X-Redmine-API-Key: <REDMINE_ADMIN_PASSWORD>' \
http://<public-ip>/projects.jsonReplace <REDMINE_ADMIN_PASSWORD> with your personal API key, not the login password. The API returns JSON for projects, issues, users, time entries and more, so you can integrate Redmine with your own tooling and automation.
The Database Volume
The project database lives on a dedicated EBS volume mounted at /var/lib/mysql. This keeps the database off the operating system disk and lets you resize or snapshot it independently. Confirm the mount:
df -h /var/lib/mysqlTo grow the database store, expand the EBS volume in the AWS console. Then grow the filesystem on the instance by running sudo resize2fs on the underlying device.
Enable HTTPS
nginx serves the web interface over plain HTTP on port 80. For production use, place it behind TLS.
Obtain a certificate for your domain, for example a managed certificate on an Application Load Balancer in front of the instance, or Certbot installed on the instance. Then configure nginx to listen on 443 with your certificate and proxy to the Redmine Puma socket, exactly as the bundled site does for port 80.
Restrict the security group so that ports 80 and 443 are reachable only from the networks that use the tracker.
Backup and Maintenance
Back up Redmine by snapshotting the /var/lib/mysql EBS volume, which captures the entire project database. Also archive /opt/redmine/files, which holds uploaded attachments. You can take a logical database dump on the instance with mysqldump as well.
Apply operating system security updates with sudo apt-get update && sudo apt-get upgrade, and reboot when a new kernel is installed. Redmine, MariaDB and nginx start automatically on boot.
Support
SecureAnyCloud publishes and supports this image. Support covers deployment, project and workflow configuration, user and role management, the REST API, plugin installation, SMTP and email notifications, and TLS and storage tuning.
Contact SecureAnyCloud through the support channel listed on the AWS Marketplace listing.
All product and company names are trademarks or registered trademarks of their respective holders. Use of them does not imply any affiliation with or endorsement by them.
Deploy on AWS
Launch Redmine on AWS with 24/7 support from SecureAnyCloud.
View on Marketplace
Need Help?
Our support team is available 24/7.
sales@secureanycloud.com