Installation
Requirements
- Docker and Docker Compose (recommended)
- OR Node.js 22 LTS for local development
Docker (Recommended)
git clone https://github.com/slgfire/ezswm.git
cd ezswmCreate a docker-compose.yml:
services:
ezswm:
image: ghcr.io/slgfire/ezswm:latest
ports:
- "3000:3000"
environment:
- NUXT_JWT_SECRET=your-secret-key-here
volumes:
- ezswm-data:/app/data
restart: unless-stopped
volumes:
ezswm-data:Start the application:
docker compose up -dAlternatively, build from source instead of pulling the image:
services:
ezswm:
build: .
# ... same config as aboveDocker Configuration
Environment Variables
| Variable | Required | Default | Description |
|---|---|---|---|
NUXT_JWT_SECRET | Yes | (empty) | Secret key for JWT token signing. Use a long random string. |
PORT | No | 3000 | Port the application listens on. |
DATA_DIR | No | /app/data | Directory for JSON data storage. |
In Docker, environment variables that configure Nuxt runtime must use the NUXT_ prefix (e.g., NUXT_JWT_SECRET instead of JWT_SECRET).
Data Persistence
Mount a volume or bind mount to /app/data to persist data across container restarts. Without this, all data is lost when the container is removed.
volumes:
- ./data:/app/data # bind mount
# or
- ezswm-data:/app/data # named volumeLocal Development
git clone https://github.com/slgfire/ezswm.git
cd ezswm
npm installSet the JWT secret and start the dev server:
export JWT_SECRET=dev-secret-change-me
npm run devThe application is available at http://localhost:3000.
Note: Without JWT_SECRET set, the app uses an empty default which is insecure. Always set a proper secret for any non-local use.
Updating
Pull latest image
docker compose pull
docker compose up -dRebuild from source
git pull
docker compose build --no-cache
docker compose up -dBackup
Built-in backup
Use the Data Management section in the application settings to create and restore full backups through the UI.
Manual backup
The data directory contains all application state as JSON files. Copy it to create a backup:
# Docker named volume
docker cp $(docker compose ps -q ezswm):/app/data ./backup
# Bind mount
cp -r ./data ./backup