Plugins Directory » Redmine Mirror
|
|
Author: | Like HOPPER |
|---|---|---|
| Website: | - | |
| Code repository: | - | |
| Registered on: | 2026-10-10 (6 days ago) | |
| Current version: | 1.0.0 | |
| Compatible with: | Redmine 7.0.x, 6.1.x, 6.0.x, 5.1.x, 5.0.x | |
| User ratings: |
Redmine Mirror¶
Import and synchronize projects between Redmine instances!
Digest¶
Redmine Mirror provides modular project import and asynchronous synchronization between Redmine instances.
Designed for migrating projects to a new instance and maintaining regularly updated secondary copies. Each destination project has its own source connection, reference mappings and synchronization schedule.
Synchronization is one-way, from source to destination. Source deletions are not propagated.
Features¶
- Preview before applying changes
- Manual execution and automatic scheduling
- Project-specific reference mappings
- User mapping and anonymization
- Filtered execution logs and progress tracking
- Local modification detection and conflict handling
- Pending cross-project relations and parent links
- Extensible adapters for additional modules
Supported modules¶
- Issues, including privacy, mapped authors and historical dates
- Time entries
- Issue categories and project versions
- Notes, private notes and supported historical field changes
- Issue attachments
- Relations between issues
- Parent and child issue links
- Watchers
- Custom field values and supported historical changes
User accounts and custom field definitions must already exist on the destination instance.
Localisations¶
- English
- French
Development status¶
Current development version: 0.1.0-dev.
Database-backed and browser tests currently cover Redmine 6.1.4 with SQLite. Other versions and databases have not yet been validated.
Wiki, project files, SLA and Reporting adapters are not yet implemented.
Mirror maintains a secondary copy of selected accessible data. It does not replace complete database and file backups.
Credits¶
Icons created by Magnific on Flaticon.
License¶
GPL-2.0-or-later. Third-party artwork retains its own license.
Installation notes
Requirements¶
- Install Mirror on the destination instance only.
- Enable REST APIs on both instances and use HTTPS URLs.
- Provide source API access to the required data.
- Provide destination API permissions for issue and time-entry writes.
- Configure Redmine's
database_cipher_keybefore storing the source API key. - The worker must share the destination database, attachment storage and cipher key with the web application.
Installation¶
Back up the destination database and attachment storage.
- Copy the plugin directory into
plugins/redmine_mirror. - From the Redmine root, run the migration command below.
- Restart Redmine.
- Create or select the destination project and enable Mirror in Settings → Modules.
- Grant
view_mirrorandmanage_mirrorto the appropriate roles. - As an administrator, configure the source URL, numeric project ID, API key and selected modules under Mirror → Connection.
- Configure reference mappings under Modules and mappings.
- Configure the worker as described below.
- Run a preview, review its results, then start synchronization.
RAILS_ENV=production bundle exec rake redmine:plugins:migrate NAME=redmine_mirror
Required local users, trackers, statuses, priorities, activities and custom field definitions must already exist. Administrators create custom fields; project managers can map or ignore them.
Connection configuration, module selection and source catalogue refresh require administrator privileges.
Worker and scheduling¶
Set MIRROR_DESTINATION_URL and MIRROR_DESTINATION_API_KEY in the worker's environment through your service configuration or secret manager.
Run the following command periodically, for example every minute using cron or a systemd timer:
RAILS_ENV=production bundle exec rake redmine_mirror:tick
The worker processes both manual requests and scheduled synchronizations. Without it, requests remain queued.
Automatic synchronization is disabled by default. Configure each project's interval in the Synchronization tab.
Supported intervals: 5, 15, 30, 60, 360 and 1440 minutes.
Cross-project links¶
Projects synchronize independently. Import cross-project targets first, then rerun projects containing their relations or parent links.
Unresolved links remain visible in the corresponding module tab.
Upgrading¶
- Back up the database, attachment storage and installed plugin.
- Stop web and worker processes.
- Replace the plugin files.
- Run the installation migration command above.
- Restart both processes and check a preview.
When reverting a schema change, restore the matching database, files and plugin together.
Important limitations¶
- Data hidden from the source API account is not imported.
- Source deletions are not propagated.
- Imports are not atomic across API calls; successful writes remain after an error.
- Local modifications require explicit conflict handling; no forced overwrite is provided.
- Keep complete database and file backups alongside Mirror synchronization.
Changelog
1.0.0 (2026-11-01)
Compatible with Redmine 7.0.x, 6.1.x, 6.0.x, 5.1.x, 5.0.x.
In progress