# VTuberAvatarStudio - docker compose for OMV / Portainer / any Docker host # # Usage on OMV: # 1. Create the folder: mkdir -p /srv/dev-disk-by-uuid-63896276-89b7-4ac3-b87a-74716c1ce7d9/VTuberAvatarStudio # 2. cd into it and clone (or copy the compose files) # 3. Edit .env (or the volume-mounted one) # 4. docker compose up -d --build # # Data lives in ./data (persistent across restarts/upgrades) services: studio: build: . image: vtuber-avatar-studio:latest container_name: vtuber-studio restart: unless-stopped ports: - "8330:8330" # change left side if 8330 is taken environment: # Override any of these via the .env file next to this compose - STUDIO_HTTPS=1 - STUDIO_DEV_LOGIN=0 # IMPORTANT: keep 0 in production - STUDIO_OPEN_SIGNUP=1 # set to 0 + use invites if you want gated access - STUDIO_ADMIN_HANDLE=${STUDIO_ADMIN_HANDLE:-} - X_CLIENT_ID=${X_CLIENT_ID:-} - X_CLIENT_SECRET=${X_CLIENT_SECRET:-} - X_REDIRECT_URI=${X_REDIRECT_URI:-https://your-domain.example/api/auth/x/callback} - CHROME_BIN=/usr/bin/chromium volumes: # Persistent data (DB, secret.key, private avatars, .env) - ./data:/data # Optional: mount a custom .env if you prefer it outside the container # - ./server.env:/data/server/.env:ro healthcheck: test: ["CMD", "curl", "-f", "http://localhost:8330/api/meta"] interval: 30s timeout: 10s retries: 3 start_period: 40s # Optional: put behind a reverse proxy (Traefik / Nginx Proxy Manager / Caddy) # networks: # default: # name: proxy # external: true