# Redmine

Redmine is a flexible project management and issue tracking web application

[Redmine](https://github.com/redmine/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&#39;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&#39;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&#39;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 &quot;puma&quot;
```

Then set the Git URL to your fork and the branch to `7.0-stable`:

```
https://github.com/&lt;your-user&gt;/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&#39;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.
