services: db: image: postgres:16-alpine restart: unless-stopped environment: - POSTGRES_USER=${POSTGRES_USER:-thingport} - POSTGRES_PASSWORD=${POSTGRES_PASSWORD:-thingport} - POSTGRES_DB=${POSTGRES_DB:-thingport} volumes: - ./data/postgres:/var/lib/postgresql/data networks: - app-net healthcheck: test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER:-thingport}"] interval: 5s timeout: 5s retries: 10 flaresolverr: image: ghcr.io/flaresolverr/flaresolverr:latest restart: unless-stopped environment: - LOG_LEVEL=${FLARESOLVERR_LOG_LEVEL:-info} - TZ=${TZ:-UTC} networks: - app-net backend: build: context: ./backend dockerfile: Dockerfile restart: unless-stopped environment: - PUID=${PUID:-1000} - PGID=${PGID:-1000} - FILE_STORAGE=/app/storage - DATABASE_URL=postgresql://${POSTGRES_USER:-thingport}:${POSTGRES_PASSWORD:-thingport}@db:5432/${POSTGRES_DB:-thingport}?schema=public - CORS_ORIGINS=${CORS_ORIGINS:-} - AUTH_SECRET=${AUTH_SECRET:-changeme-secret} - AUTH_TOKEN_TTL=${AUTH_TOKEN_TTL:-43200} - PUBLIC_URL=${PUBLIC_URL:-} - SMTP_HOST=${SMTP_HOST:-} - SMTP_PORT=${SMTP_PORT:-587} - SMTP_SECURE=${SMTP_SECURE:-false} - SMTP_USER=${SMTP_USER:-} - SMTP_PASS=${SMTP_PASS:-} - SMTP_FROM=${SMTP_FROM:-Thingport } - FLARESOLVERR_URL=${FLARESOLVERR_URL:-http://flaresolverr:8191/v1} depends_on: db: condition: service_healthy flaresolverr: condition: service_started volumes: - ./data/storage:/app/storage # Optional consume folder: files and folders dropped in it are imported automatically # (Administration -> Storage -> Consume Folder). Uncomment and point it at a host folder. # - ./data/consume:/app/consume networks: - app-net frontend: build: context: ./frontend dockerfile: Dockerfile restart: unless-stopped ports: - "${WEB_PORT:-80}:80" depends_on: - backend networks: - app-net networks: app-net: driver: bridge