Skip to content
Docker Compose

Docker Compose

Use Docker Compose to manage ZIRI with a single command.

docker-compose.yml

Create a docker-compose.yml file:

docker-compose.yml
services:
    proxy:
        image: ziri/proxy:latest
        ports:
            - "3100:3100"
        volumes:
            - ziri-data:/data
        environment:
            - CONFIG_DIR=/data
            - PORT=3100
            - HOST=0.0.0.0
            - NODE_ENV=production
        restart: unless-stopped

volumes:
    ziri-data:

Starting

Start ZIRI:

docker compose up -d

The -d flag runs in detached mode (background).

Stopping

Stop ZIRI:

docker compose down

This stops and removes the container but keeps the volume.

Viewing Logs

View logs:

docker compose logs

Follow logs:

docker compose logs -f

Updating

To update to a new version:

docker compose pull
docker compose up -d

Volume Management

List Volumes

docker volume ls

Inspect Volume

docker volume inspect ziri-data

Backup Volume

docker run --rm -v ziri-data:/data -v $(pwd):/backup \
  alpine tar czf /backup/ziri-backup.tar.gz /data

Restore Volume

docker run --rm -v ziri-data:/data -v $(pwd):/backup \
  alpine tar xzf /backup/ziri-backup.tar.gz -C /

Remove Volume

Warning: This deletes all data.

docker compose down -v

Environment Variables

Set environment variables in docker-compose.yml:

docker-compose.yml
environment:
    - CONFIG_DIR=/data
    - PORT=3100
    - HOST=0.0.0.0
    - ZIRI_ROOT_KEY=${ROOT_KEY}
    - ZIRI_ENCRYPTION_KEY=${ENCRYPTION_KEY}
    - NODE_ENV=production

Or use an .env file:

.env
# .env
ROOT_KEY=your-root-key
ENCRYPTION_KEY=your-encryption-key

Docker Compose automatically loads .env files.

Restart Policy

The restart: unless-stopped policy means:

  • Container restarts automatically if it crashes
  • Container restarts on Docker daemon restart
  • Container doesn’t restart if you stop it manually

Health Checks

Add a health check:

docker-compose.yml
healthcheck:
    test: ["CMD", "curl", "-f", "http://localhost:3100/health"]
    interval: 30s
    timeout: 10s
    retries: 3

Next Steps