Add Docker documentation and finalize external config implementation

Co-authored-by: clayschaad <11883505+clayschaad@users.noreply.github.com>
This commit is contained in:
copilot-swe-agent[bot] 2025-08-27 19:54:31 +00:00
parent 8d4a46206b
commit 98522d5a01
3 changed files with 76 additions and 8 deletions

4
.gitignore vendored
View file

@ -59,3 +59,7 @@ nunit-*.xml
# mac files # mac files
.DS_Store .DS_Store
# Configuration files (uncomment to avoid committing development configs)
# config/
# **/config/

64
DOCKER_CONFIG.md Normal file
View file

@ -0,0 +1,64 @@
# Configuration Persistence for Docker
ShiftScheduler now supports persisting configuration changes in external files, making it suitable for Docker deployments where configuration should survive container rebuilds.
## How it Works
Configuration is automatically saved to and loaded from external JSON files in the `config/` directory:
- `config/shifts.json` - Contains all shift definitions (name, icon, times)
- `config/transport.json` - Contains transport API settings and parameters
## Behavior
1. **Startup**: Service reads from external files if they exist, otherwise uses `appsettings.json` defaults
2. **Initial Creation**: If external files don't exist, they're created with current configuration
3. **Updates**: Any configuration changes via the UI are automatically saved to external files
4. **Persistence**: External files persist across application restarts
## Docker Usage
### Docker Compose Example
```yaml
version: '3.8'
services:
shiftscheduler:
build: .
ports:
- "5000:5000"
volumes:
- ./config:/app/config # Mount config directory
environment:
- ASPNETCORE_ENVIRONMENT=Production
```
### Folder Structure
```
project/
├── docker-compose.yml
├── config/ # This directory will be created automatically
│ ├── shifts.json # Persisted shift configurations
│ └── transport.json # Persisted transport settings
└── ...
```
## Benefits
- **Persistence**: Configuration survives container rebuilds
- **Backup**: Easy to backup/restore configuration by copying JSON files
- **Version Control**: Configuration files can be committed to source control
- **Multiple Environments**: Different config files for different deployments
- **No Data Loss**: UI changes are automatically preserved
## Migration
No migration needed - existing installations will automatically:
1. Create the `config/` directory on next startup
2. Export current configuration to external files
3. Continue using existing settings
## File Format
Configuration files use standard JSON format and can be edited directly if needed. Changes take effect after application restart.

View file

@ -1,10 +1,10 @@
{ {
"StartStation": "Modified Station", "StartStation": "Zurich",
"EndStation": "Modified End", "EndStation": "Basel",
"ApiBaseUrl": "http://modified.com/v1", "ApiBaseUrl": "http://transport.opendata.ch/v1",
"SafetyBufferMinutes": 45, "SafetyBufferMinutes": 30,
"MinBreakMinutes": 90, "MinBreakMinutes": 60,
"MaxEarlyArrivalMinutes": 90, "MaxEarlyArrivalMinutes": 60,
"MaxLateArrivalMinutes": 30, "MaxLateArrivalMinutes": 15,
"CacheDurationDays": 2 "CacheDurationDays": 1
} }