Initial setup: OpenResto deployment for Lunkaberg breakfast booking

Adapts upstream's release docker-compose.yml to run behind this server's
Nginx Proxy Manager on the shared my-main-net network instead of publishing
host ports. Includes docs/ for session continuity.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014vNjtg18oTQcv8dtjwnT69
This commit is contained in:
root
2026-09-21 17:27:38 +02:00
co-authored by Claude Sonnet 5
commit 42b1060c19
6 changed files with 229 additions and 0 deletions
+100
View File
@@ -0,0 +1,100 @@
# OpenResto — self-hosted breakfast booking (Lunkaberg)
#
# Adapted from the official release compose (v2.2.0) to run behind the
# existing Nginx Proxy Manager setup on this server: no host ports are
# published, all services join the shared `my-main-net` network, and NPM
# proxies straight to the `lunkaberg-reverse-proxy` container on port 80.
#
# Backup: see https://github.com/karanshukla/openresto/blob/main/docs/backup-restore.md
volumes:
db_data:
media_data:
networks:
main:
external: true
name: my-main-net
services:
backend:
image: ghcr.io/karanshukla/openresto-backend:2.2.0
container_name: lunkaberg-backend
restart: unless-stopped
networks:
- main
environment:
- ASPNETCORE_ENVIRONMENT=Production
- PORT=8080
- CORS_ORIGINS=${CORS_ORIGINS}
- JWT_KEY=${JWT_KEY}
- ADMIN_EMAIL=${ADMIN_EMAIL}
- ADMIN_PASSWORD=${ADMIN_PASSWORD}
- CONNECTION_STRING=Data Source=/data/openresto.db
- DATA_PROTECTION_KEYS_PATH=/data/dp-keys
- Vapid__PublicKey=${VAPID_PUBLIC_KEY:-}
- Vapid__PrivateKey=${VAPID_PRIVATE_KEY:-}
- Vapid__Subject=${VAPID_SUBJECT:-}
- GuestPush__ReminderLeadHours=${GUEST_PUSH_REMINDER_LEAD_HOURS:-24,2}
- GuestPush__ExpoAccessToken=${EXPO_ACCESS_TOKEN:-}
- Wallet__Apple__PassTypeIdentifier=${APPLE_PASS_TYPE_ID:-}
- Wallet__Apple__TeamIdentifier=${APPLE_TEAM_ID:-}
- Wallet__Apple__CertificatePath=${APPLE_PASS_CERTIFICATE_PATH:-}
- Wallet__Apple__CertificatePassword=${APPLE_PASS_CERTIFICATE_PASSWORD:-}
- Wallet__Apple__WwdrCertificatePath=${APPLE_WWDR_CERTIFICATE_PATH:-}
- Wallet__Google__IssuerId=${GOOGLE_WALLET_ISSUER_ID:-}
- Wallet__Google__ServiceAccountKeyPath=${GOOGLE_WALLET_SERVICE_ACCOUNT_KEY_PATH:-}
- EmailSettings__Host=${SMTP_HOST:-}
- EmailSettings__Port=${SMTP_PORT:-587}
- EmailSettings__Username=${SMTP_USERNAME:-}
- EmailSettings__Password=${SMTP_PASSWORD:-}
- EmailSettings__FromEmail=${SMTP_FROM_EMAIL:-}
- EmailSettings__FromName=${SMTP_FROM_NAME:-Lunkaberg Frukost}
- EmailSettings__EnableSsl=${SMTP_ENABLE_SSL:-true}
volumes:
- db_data:/data
- media_data:/app/wwwroot/media
- ./wallet:/wallet:ro
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8080/api/health"]
interval: 10s
timeout: 5s
retries: 5
start_period: 20s
frontend:
image: ghcr.io/karanshukla/openresto-frontend:2.2.0
container_name: lunkaberg-frontend
restart: unless-stopped
networks:
- main
environment:
- EXPO_PUBLIC_API_URL=/api
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8081"]
interval: 10s
timeout: 5s
retries: 3
reverse-proxy:
image: ghcr.io/karanshukla/openresto-nginx:2.2.0
container_name: lunkaberg-reverse-proxy
restart: unless-stopped
networks:
- main
# No host port published — Nginx Proxy Manager reaches this container
# directly on my-main-net at lunkaberg-reverse-proxy:80.
environment:
- PORT=80
- BACKEND_HOST=backend
- BACKEND_PORT=8080
- FRONTEND_HOST=frontend
- FRONTEND_PORT=8081
volumes:
- media_data:/usr/share/nginx/html/media:ro
- ./well-known:/usr/share/nginx/html/.well-known:ro
depends_on:
backend:
condition: service_healthy
frontend:
condition: service_healthy