Files
eink-photo-frame/server/docker-compose.yml
Thomas Hallock 4ddda58b43 Initial project: ESP32-S3 e-ink photo frame with web UI
ESP32-S3 firmware (PlatformIO) that fetches JPEGs from a photo server,
decodes on-device with PSRAM, Floyd-Steinberg dithers to the Spectra 6
6-color palette, and displays on a 7.3" GDEP073E01 e-paper panel.
Deep sleeps 1 hour between updates.

Photo server (Python/Flask) with web UI for photo management, Traefik
routing at photos.haunt.house with Google OAuth, and Home Assistant
REST sensor integration.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 14:33:16 -05:00

41 lines
1.5 KiB
YAML

services:
photo-server:
build: .
container_name: eink-photo-server
restart: unless-stopped
networks:
- webgateway
volumes:
- photos:/photos
- state:/data
environment:
- TZ=America/Chicago
labels:
- "traefik.enable=true"
# HTTPS
- "traefik.http.routers.photos-websecure.rule=Host(`photos.haunt.house`)"
- "traefik.http.routers.photos-websecure.entryPoints=websecure"
- "traefik.http.routers.photos-websecure.tls.certresolver=myresolver"
- "traefik.http.routers.photos-websecure.middlewares=hsts,google-auth@docker"
# HTTP redirect
- "traefik.http.routers.photos-http.rule=Host(`photos.haunt.house`)"
- "traefik.http.routers.photos-http.entryPoints=web"
- "traefik.http.routers.photos-http.middlewares=redirect-https"
# Internal port
- "traefik.http.services.photos.loadbalancer.server.port=8473"
# ESP32 endpoint — no auth (frame can't do OAuth)
- "traefik.http.routers.photos-frame.rule=Host(`photos.haunt.house`) && (Path(`/photo`) || Path(`/heartbeat`))"
- "traefik.http.routers.photos-frame.entryPoints=websecure"
- "traefik.http.routers.photos-frame.tls.certresolver=myresolver"
- "traefik.http.routers.photos-frame.middlewares=hsts"
- "traefik.http.routers.photos-frame.priority=100"
- "traefik.http.routers.photos-frame.service=photos"
networks:
webgateway:
external: true
volumes:
photos:
state: