Redmine
Redmine is a flexible project management and issue tracking web application
Updated
Redmine is a long-running open source project manager written in Ruby on Rails, with issue tracking, wikis, Gantt charts and repository browsing. It supports PostgreSQL, MySQL and SQLite.
Redmine's repository leaves a few things to the installer that Hatchbox normally reads from the repo: it commits no Gemfile.lock, no .ruby-version and no config/database.yml, its Gemfile only adds a database adapter gem after reading config/database.yml, and Puma is only in the test group. So you deploy from a fork that adds those files.
Requirements
Create a PostgreSQL database from the app's Databases tab. Hatchbox attaches it as DATABASE_URL.
Repository
Fork Redmine, check out the 7.0-stable branch (the current stable release branch; master is development) and add the files below. Redmine's .gitignore excludes all of them, so force-add them:
git add -f .ruby-version config/database.yml Gemfile.local
.ruby-version:
3.4.11
config/database.yml, which only names the adapter so that the pg gem gets installed. The connection itself comes from DATABASE_URL:
production:
adapter: postgresql
encoding: unicode
Gemfile.local, which Redmine loads in addition to its Gemfile:
gem "puma"
Then set the Git URL to your fork and the branch to 7.0-stable:
https://github.com/<your-user>/redmine.git
Environment Variables
None are required. Hatchbox generates SECRET_KEY_BASE, which Redmine uses in place of running bin/rails generate_secret_token.
Build Scripts
Redmine stores attachments in files/ inside the app directory. Keep them across deploys with a pre-build script.
.hatchbox/pre-build
#!/usr/bin/env bash
set -e
mkdir -p $DIR/shared/files
rm -rf files
ln -s $DIR/shared/files files
Hatchbox's standard Rails build handles the rest: bundle install, assets:precompile and db:migrate, which creates the tables and the default admin account.
Processes
Hatchbox detects and configures the Rails server. Redmine has no background worker.
First Login
Log in with admin / admin and change the password straight away. Then open Administration and load the default configuration (roles, trackers, statuses and workflows).
Notes
Because there is no Gemfile.lock, Bundler resolves gem versions on every deploy. After a successful deploy you can copy the generated Gemfile.lock from the release directory into your fork (git add -f Gemfile.lock) to pin them.
Outgoing email is configured in config/configuration.yml, which is also gitignored; copy config/configuration.yml.example, fill in the email_delivery section and force-add it too.
Attachments are stored on local disk, so Redmine works best on a single-server cluster.