Redmine Docker Setup for Plugin Testing

Why test plugins in Docker first
Installing a Redmine plugin directly on production is risky. A Docker-based local environment lets you test boot, migrations, API behavior, and seed data before a plugin reaches your real Redmine instance. It is also the fastest way to reproduce compatibility issues across Redmine versions.
Recommended local shape
A practical setup has three services: MySQL or PostgreSQL, Redmine, and any frontend or integration service that calls Redmine. Keep database data in a named volume, mount only plugin source folders, and avoid editing Redmine core files.
docker compose -f docker-compose.local.yml up -d --build
docker compose -f docker-compose.local.yml logs -f redmineSeed default Redmine data
Fresh Redmine containers do not always include default statuses, trackers, roles, and workflows. If tracker creation fails with a missing New status, load Redmine default data before your own seed tasks.
docker exec -e RAILS_ENV=development -e REDMINE_LANG=en redmine_web_local bundle exec rake redmine:load_default_dataSeed plugin or storefront data
For RedmineShop, product, blog, and static page content is stored as Redmine issues. The seed task creates projects, trackers, custom fields, and issues, then the storefront reads them through the public API.
docker exec -e RAILS_ENV=development redmine_web_local bundle exec rake redmine:seed:allReset only when you intend to delete local data
If a local MySQL volume is corrupted after an interrupted initialization, reset the local volume. Do not run this against production.
docker compose -f docker-compose.local.yml down
docker volume rm redmineshop_mysql-data
docker compose -f docker-compose.local.yml up -d --buildWhat to verify before production
- Redmine boots cleanly after plugin install
- Plugin migrations run up and down safely
- API endpoints return expected JSON
- Frontend pages render real CMS data
- Logs do not contain host authorization, migration, or missing field errors
This workflow is also how RedmineShop validates its storefront seed data and future commercial plugins before release.