# ============================================================================= # Tanabata File Manager — environment variables # # Copy to .env and fill in the secrets: # cp .env.example .env # docker compose up -d --build # ============================================================================= # --------------------------------------------------------------------------- # Docker Compose (read by the compose CLI, ignored by the app) # --------------------------------------------------------------------------- # Profiles to enable. "with-db" runs the bundled Postgres container. Leave # EMPTY to skip it and use a Postgres running on the host instead — then point # DATABASE_URL at host.docker.internal (see the Database section below). COMPOSE_PROFILES=with-db # Host port the app is published on. The container always listens on 42776. APP_PORT=42776 # --------------------------------------------------------------------------- # Volume mounts (Docker Compose; ignored by the app) # --------------------------------------------------------------------------- # By default the app's data and the database live in named Docker volumes # (app_files, app_thumbs, app_import, db_data). To keep them in specific folders # on the host instead, point any of these at a host path — absolute, or relative # to this file (e.g. ./data/files). Unset = named volume. # FILES_DIR=/var/lib/tanabata/files # THUMBS_DIR=/var/lib/tanabata/thumbs # IMPORT_DIR=/var/lib/tanabata/import # DB_DIR=/var/lib/tanabata/db # When bind-mounting the app folders above, the container must be able to write # to them. Set PUID/PGID to the owner of those folders and create them with # matching ownership first, e.g.: # sudo mkdir -p /var/lib/tanabata/{files,thumbs,import} # sudo chown -R 1000:1000 /var/lib/tanabata # PUID=1000 # PGID=1000 # Defaults match the image's tanabata user (42776), which owns the named volumes. The # DB folder is handled by Postgres itself and needs no PUID/PGID. # PUID=42776 # PGID=42776 # --------------------------------------------------------------------------- # Server # --------------------------------------------------------------------------- # 42776 is the project's default port: the sum of the Unicode code points of # 七夕 (七 U+4E03 = 19971, 夕 U+5915 = 22805). LISTEN_ADDR=:42776 JWT_SECRET=change-me-to-a-random-32-byte-secret JWT_ACCESS_TTL=15m JWT_REFRESH_TTL=720h # Initial administrator, created on first startup if it does not yet exist. # Changing the password later (via the API) is preserved across restarts. ADMIN_USERNAME=admin ADMIN_PASSWORD=change-me-before-first-run # --------------------------------------------------------------------------- # Database # --------------------------------------------------------------------------- # Credentials for the bundled Postgres container (the "with-db" profile). # Keep these in sync with DATABASE_URL below. POSTGRES_DB=tanabata POSTGRES_USER=tanabata POSTGRES_PASSWORD=password # Connection string the app uses. Pick ONE to match your database mode: # # • Bundled container DB (COMPOSE_PROFILES=with-db) — host is the "db" service: DATABASE_URL=postgres://tanabata:password@db:5432/tanabata?sslmode=disable # # • Postgres on the host (COMPOSE_PROFILES empty): # DATABASE_URL=postgres://tanabata:password@host.docker.internal:5432/tanabata?sslmode=disable # # • Bare-metal `go run` (no Docker): # DATABASE_URL=postgres://tanabata:password@localhost:5432/tanabata?sslmode=disable # --------------------------------------------------------------------------- # Storage (paths inside the container; backed by named volumes in compose) # --------------------------------------------------------------------------- FILES_PATH=/data/files THUMBS_CACHE_PATH=/data/thumbs # Maximum accepted upload size in bytes (default 500 MiB). MAX_UPLOAD_BYTES=524288000 # --------------------------------------------------------------------------- # Thumbnails # --------------------------------------------------------------------------- THUMB_WIDTH=160 THUMB_HEIGHT=160 PREVIEW_WIDTH=1920 PREVIEW_HEIGHT=1080 # --------------------------------------------------------------------------- # Import # --------------------------------------------------------------------------- IMPORT_PATH=/data/import # --------------------------------------------------------------------------- # Static SPA # --------------------------------------------------------------------------- # Leave UNSET here. The Docker image already serves the built SPA from # /app/static and compose pins STATIC_DIR for the container — an empty value in # .env would be injected into the container and disable SPA serving. Set this # only for a bare-metal deploy where the Go server serves a built SPA; leave it # unset in local dev, where the Vite dev server serves the UI. # STATIC_DIR=/path/to/frontend/build