This guide uses Docker Compose to run Open QuarterMaster. The system uses a modular architecture with separate Core API and Base Station components that work together to provide the inventory management functionality.
For Docker installation, see Docker.
mkdir open-quartermaster && cd open-quartermaster
Create a docker-compose.yml file with the following content:
version: '3.8'
services:
oqm-core:
image: epicbreakfastproductions/openquartermaster-core:latest
container_name: oqm-core
restart: unless-stopped
ports:
- "127.0.0.1:8080:8080"
volumes:
- ./data/core:/app/data
- ./config/core:/app/config
environment:
- OQM_DATABASE_URL=jdbc:h2:file:/app/data/oqm
- OQM_DATABASE_DRIVER=org.h2.Driver
- OQM_SERVER_PORT=8080
- OQM_DATA_PATH=/app/data
- OQM_LOG_LEVEL=INFO
networks:
- oqm-network
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8080/health"]
interval: 30s
timeout: 10s
retries: 3
start_period: 60s
oqm-station:
image: epicbreakfastproductions/openquartermaster-station:latest
container_name: oqm-station
restart: unless-stopped
ports:
- "80:80"
depends_on:
- oqm-core
volumes:
- ./config/station:/app/config
environment:
- OQM_CORE_URL=http://oqm-core:8080
- OQM_STATION_PORT=80
networks:
- oqm-network
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:80/health"]
interval: 30s
timeout: 10s
retries: 3
start_period: 60s
networks:
oqm-network:
driver: bridge
mkdir -p data/core data/station config/core config/station
docker compose up -d
For production environments, consider the following enhancements:
Replace the H2 database with PostgreSQL for better performance and reliability:
version: '3.8'
services:
oqm-db:
image: postgres:15-alpine
container_name: oqm-postgres
restart: unless-stopped
volumes:
- ./data/postgres:/var/lib/postgresql/data
environment:
- POSTGRES_DB=oqm
- POSTGRES_USER=oqm_user
- POSTGRES_PASSWORD=your_secure_password
networks:
- oqm-network
healthcheck:
test: ["CMD-SHELL", "pg_isready -U oqm_user -d oqm"]
interval: 30s
timeout: 10s
retries: 3
start_period: 60s
oqm-core:
image: epicbreakfastproductions/openquartermaster-core:latest
container_name: oqm-core
restart: unless-stopped
ports:
- "127.0.0.1:8080:8080"
volumes:
- ./data/core:/app/data
- ./config/core:/app/config
environment:
- OQM_DATABASE_URL=jdbc:postgresql://oqm-db:5432/oqm
- OQM_DATABASE_DRIVER=org.postgresql.Driver
- OQM_DATABASE_USERNAME=oqm_user
- OQM_DATABASE_PASSWORD=your_secure_password
- OQM_SERVER_PORT=8080
- OQM_DATA_PATH=/app/data
- OQM_LOG_LEVEL=INFO
networks:
- oqm-network
depends_on:
- oqm-db
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8080/health"]
interval: 30s
timeout: 10s
retries: 3
start_period: 60s
oqm-station:
image: epicbreakfastproductions/openquartermaster-station:latest
container_name: oqm-station
restart: unless-stopped
ports:
- "80:80"
depends_on:
- oqm-core
volumes:
- ./config/station:/app/config
environment:
- OQM_CORE_URL=http://oqm-core:8080
- OQM_STATION_PORT=80
networks:
- oqm-network
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:80/health"]
interval: 30s
timeout: 10s
retries: 3
start_period: 60s
networks:
oqm-network:
driver: bridge
For production use, add a reverse proxy with SSL termination:
version: '3.8'
services:
oqm-proxy:
image: nginx:alpine
container_name: oqm-nginx
restart: unless-stopped
ports:
- "80:80"
- "443:443"
volumes:
- ./nginx.conf:/etc/nginx/nginx.conf:ro
- ./ssl:/etc/ssl:ro
depends_on:
- oqm-station
networks:
- oqm-network
oqm-core:
image: epicbreakfastproductions/openquartermaster-core:latest
container_name: oqm-core
restart: unless-stopped
expose:
- "8080"
volumes:
- ./data/core:/app/data
- ./config/core:/app/config
environment:
- OQM_DATABASE_URL=jdbc:h2:file:/app/data/oqm
- OQM_DATABASE_DRIVER=org.h2.Driver
- OQM_SERVER_PORT=8080
- OQM_DATA_PATH=/app/data
- OQM_LOG_LEVEL=INFO
networks:
- oqm-network
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8080/health"]
interval: 30s
timeout: 10s
retries: 3
start_period: 60s
oqm-station:
image: epicbreakfastproductions/openquartermaster-station:latest
container_name: oqm-station
restart: unless-stopped
expose:
- "80"
depends_on:
- oqm-core
volumes:
- ./config/station:/app/config
environment:
- OQM_CORE_URL=http://oqm-core:8080
- OQM_STATION_PORT=80
networks:
- oqm-network
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:80/health"]
interval: 30s
timeout: 10s
retries: 3
start_period: 60s
networks:
oqm-network:
driver: bridge
docker compose logs -f
docker compose pull
docker compose up -d
# Stop the services
docker compose down
# Create backup
tar -czf oqm-backup-$(date +%Y%m%d-%H%M%S).tar.gz data/ config/
# Restart services
docker compose up -d
latest taglatest with core-base+station-1.14.0 in the docker-compose.ymlhttp://your-server-ip:80 (or http://localhost:80 if running locally)http://your-server-ip:8080 if exposedlatestAny questions?
Feel free to contact us. Find all contact information on our contact page.