Tutorials

Redmine Docker Setup for Plugin Testing

RRedmineShop
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 redmine

Seed 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_data

Seed 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:all

Reset 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 --build

What 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.