Bitnami Redmine install in 2026: Docker, AWS, VM
Bitnami no longer gives Redmine away for free. Install it with the official redmine Docker image and PostgreSQL. Save this as compose.yaml in an empty folder:
services:
db:
image: postgres:18
restart: unless-stopped
environment:
POSTGRES_USER: redmine
POSTGRES_PASSWORD: ${DB_PASSWORD}
POSTGRES_DB: redmine
volumes:
- pgdata:/var/lib/postgresql
healthcheck:
test: ["CMD-SHELL", "pg_isready -h 127.0.0.1 -U redmine -d redmine"]
interval: 5s
retries: 10
redmine:
image: redmine:7.0
restart: unless-stopped
depends_on:
db:
condition: service_healthy
ports:
- "8080:3000"
environment:
REDMINE_DB_POSTGRES: db
REDMINE_DB_USERNAME: redmine
REDMINE_DB_PASSWORD: ${DB_PASSWORD}
REDMINE_DB_DATABASE: redmine
SECRET_KEY_BASE: ${SECRET_KEY_BASE}
volumes:
- files:/usr/src/redmine/files
volumes:
pgdata:
files:
Generate the passwords and start:
printf 'DB_PASSWORD=%s\nSECRET_KEY_BASE=%s\n' "$(openssl rand -hex 16)" "$(openssl rand -hex 64)" > .env
docker compose up -d
When docker compose logs redmine shows Listening on http://0.0.0.0:3000, open http://your-server:8080 and sign in as admin / admin. Redmine asks for a new password right away. Tested with Redmine 7.0.3 and PostgreSQL 18.6.
What happened to Bitnami Redmine
As of November 2026:
- bitnami/redmine on Docker Hub has no public tags: it now needs a paid Bitnami Secure Images subscription. The free
bitnamisecuretier has no Redmine. - bitnamilegacy/redmine is a frozen copy, last tag
6.0.6-debian-12-r7from August 22, 2025. It gets "no further updates or support" (announcement), and its Docker Hub page warns that it "may be removed in the future". - AWS: Bitnami AMIs and Lightsail blueprints were removed on June 10, 2026 (Broadcom). Running instances work but get no updates. The Marketplace listing opens "Page not found".
- VM and installers: since June 2025 Bitnami OVAs are for VMware customers only (bitnami/vms#1831), and Redmine pages on bitnami.com redirect to the Bitnami Secure Images homepage. Native installers ended in November 2022.
Your Bitnami server keeps running, unpatched, while upstream Redmine is at 7.0.3, 6.1.6 and 6.0.12 (downloads).
Bitnami Redmine default login and password
The login is user, not admin. Where to find the password:
- VM or EC2 instance:
sudo cat /home/bitnami/bitnami_credentials. On EC2 it's also in the instance's system log for the first 24 hours. - Lightsail:
cat ~/bitnami_application_password. bitnamilegacy/redminein Docker:bitnami1, unlessREDMINE_PASSWORDwas set on the first start.- MariaDB on a Bitnami VM: user
root, the same password as the application.
Lost the password? Reset it with one command.
Configure email
Redmine reads SMTP settings from config/configuration.yml. Create it next to compose.yaml:
production:
email_delivery:
delivery_method: :smtp
smtp_settings:
address: smtp.example.com
port: 587
enable_starttls_auto: true
authentication: :login
user_name: "redmine@example.com"
password: "app-password"
Add it to the redmine volumes and run docker compose up -d:
volumes:
- files:/usr/src/redmine/files
- ./configuration.yml:/usr/src/redmine/config/configuration.yml
On a Bitnami server, edit /opt/bitnami/redmine/config/configuration.yml and run sudo /opt/bitnami/ctlscript.sh restart.
To send a test email:
- In My account, put in your real address. The test goes there, and a fresh admin has a placeholder (
admin@dummy.invalidin 7.0). - In Administration → Settings → Email notifications, set "Emission email address".
- Click "Send a test email".
Set the base URL
Links in emails use the host name from the settings. Set "Host name and path" and "Protocol" in Administration → Settings → General, or from the shell:
docker compose exec redmine bundle exec rails runner \
'Setting.host_name = "redmine.example.com"; Setting.protocol = "https"'
The container serves plain HTTP on port 3000; put nginx, Caddy or Traefik in front for HTTPS.
On a Bitnami server, point the domain's DNS at it and run sudo /opt/bitnami/bncert-tool. It asks for the domains, gets a Let's Encrypt certificate and sets up its renewal and the HTTP-to-HTTPS redirect. The Apache vhosts, where I set ServerName and ServerAlias back in 2016, are now in /opt/bitnami/apache/conf/vhosts/ (Bitnami docs).
secret_key_base: the Bitnami error and logouts
Run rails or rake by hand in a Bitnami Redmine without a key, and it fails:
Missing `secret_key_base` for 'production' environment, set this string with `bin/rails credentials:edit` (ArgumentError)
Ignore the credentials:edit hint. On a Bitnami VM or cloud server, Redmine generates the key with its own task:
cd /opt/bitnami/redmine
RAILS_ENV=production bundle exec rake generate_secret_token
The key signs session cookies, so a new one logs everyone out after the restart.
In a bitnamilegacy/redmine container, put SECRET_KEY_BASE in its environment instead, as in the compose file above. Without it the container generates a new key on every recreate, and so does the official image. I checked both: with the variable set, my session survived a container recreate; without it, I was back at the login page.
Move from Bitnami to the official image
Your data is the bitnami_redmine database and the files folder. MySQL 8.4 loads a dump from Bitnami's MariaDB after one sed fix, so swap the database: replace the db service, change REDMINE_DB_POSTGRES to REDMINE_DB_MYSQL and rename the pgdata volume to dbdata:
db:
image: mysql:8.4
restart: unless-stopped
command: --transaction-isolation=READ-COMMITTED
environment:
MYSQL_DATABASE: redmine
MYSQL_USER: redmine
MYSQL_PASSWORD: ${DB_PASSWORD}
MYSQL_RANDOM_ROOT_PASSWORD: "yes"
volumes:
- dbdata:/var/lib/mysql
healthcheck:
test: ["CMD-SHELL", "mysql -h 127.0.0.1 -u redmine -p$$MYSQL_PASSWORD -e 'SELECT 1' redmine"]
interval: 5s
retries: 20
Redmine's install guide asks for READ-COMMITTED on MySQL.
On the Bitnami server:
mysqldump -u root -p bitnami_redmine > bitnami_redmine.sql
tar czf redmine_files.tar.gz -C /opt/bitnami/redmine files
The password is the application password. If mysqldump isn't found, use mariadb-dump. From a bitnamilegacy/redmine compose project:
docker compose exec -T mariadb mariadb-dump -u root bitnami_redmine > bitnami_redmine.sql
docker compose cp redmine:/bitnami/redmine/files ./files
If root has a password there, make the first line docker compose exec -T mariadb sh -c 'mariadb-dump -u root -p"$MARIADB_ROOT_PASSWORD" bitnami_redmine' > bitnami_redmine.sql.
On the new server (skip tar if you already have a files folder):
docker compose up -d --wait db
sed 's/utf8mb4_uca1400_ai_ci/utf8mb4_0900_ai_ci/g' bitnami_redmine.sql \
| docker compose exec -T db sh -c 'mysql -u redmine -p"$MYSQL_PASSWORD" redmine'
tar xzf redmine_files.tar.gz
docker compose create redmine
docker compose cp files/. redmine:/usr/src/redmine/files/
docker compose up -d
docker compose exec redmine chown -R redmine:redmine files
sed renames a collation MySQL doesn't have: MariaDB 11.5 and newer, bitnamilegacy/mariadb:latest included, mark tables utf8mb4_uca1400_ai_ci. A dump from older MariaDB passes through unchanged.
On start the image migrates the 6.0 database to 7.0; sign in with your Bitnami login. Don't skip chown: docker compose cp keeps the old file owners, and uploads fail with Errno::EACCES: Permission denied. I moved a bitnamilegacy/redmine:6.0.6 install this way, attachments included.
Plugins: put the ones that support 7.0 in ./plugins, mount it at /usr/src/redmine/plugins and set REDMINE_PLUGINS_MIGRATE: "1". More in installing Redmine plugins.
Upgrade Redmine in Docker
Back up first:
docker compose exec -T db pg_dump -U redmine redmine > redmine-$(date +%F).sql
docker compose cp redmine:/usr/src/redmine/files ./files-backup
If you moved to MySQL, dump with docker compose exec -T db sh -c 'mysqldump --no-tablespaces -u redmine -p"$MYSQL_PASSWORD" redmine' > redmine-$(date +%F).sql.
Change the tag, say redmine:6.1 to redmine:7.0, and run:
docker compose pull
docker compose up -d
Migrations run on start; that's how I upgraded 6.1.6 to 7.0.3. The 7.0 tag also picks up 7.0.x fixes on every pull.
PostgreSQL majors don't upgrade like that. postgres:19rc1 on a volume from 18 exits with there appears to be PostgreSQL data in: /var/lib/postgresql/18/docker. Dump, start the new version on an empty volume, restore with psql.
Common mistakes
- Mounting the PostgreSQL 18 volume at
/var/lib/postgresql/data, as older guides do. The container exits withError: in 18+, these Docker images are configured to store database data in a format which is compatible with "pg_ctlcluster". Mount/var/lib/postgresql. - A dump from MariaDB 11.5 or newer loaded without the
sedstep:ERROR 1273 (HY000) at line 26: Unknown collation: 'utf8mb4_uca1400_ai_ci'. - A
mysqladmin pinghealthcheck. It reports success even onAccess denied, and on first start it answers MySQL's temporary setup server, so--wait dbreturns before the real server is up. Log in over TCP, as in the compose above. - A dump made with
--databases, as in Bitnami's upgrade guide. It switches tobitnami_redmine, and the import fails withAccess denied for user 'redmine'@'%' to database 'bitnami_redmine'. - A
$in.env: Compose readsab$cdasabplus an empty variable. Hex passwords fromopenssl randavoid that. - Paths from the 2016 version of this post:
/opt/bitnami/apps/redmineand Apache tweaks for the/redmineprefix. Current Bitnami builds use/opt/bitnami/redmineat the site root.