Auf Marcs Wunsch. Die bisherige Vorgabe 127.0.0.1 passt nur, wenn der Reverse Proxy auf demselben Rechner läuft – steht er woanders (bei Marc auf einem VPS), kommt er an loopback gar nicht heran, und die Vorgabe war schlicht der falsche Wert für den häufigeren Fall. Der Preis steht jetzt an allen drei Stellen dabei, statt nur gemeint zu sein: Der Port ist dann auch aus dem eigenen Netz offen, und TLS endet erst am Proxy. Im README dazu eine Tabelle, welcher Wert zu welchem Aufbau gehört – eigener Rechner, anderer Rechner, Tunnel, oder Proxy im selben Docker-Netz (dann braucht es gar kein ports:). build/docker-compose.yml behält 127.0.0.1: Das ist die Entwicklungsumgebung auf diesem Rechner, dort ist loopback richtig. Gegengeprüft: Frische Kopie aus den Beispieldateien veröffentlicht auf 0.0.0.0; APP_BIND=127.0.0.1 in der .env engt wieder auf loopback ein. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
74 lines
2.5 KiB
YAML
74 lines
2.5 KiB
YAML
# Aether – Betrieb aus dem fertigen Abbild.
|
||
#
|
||
# Diese Datei und .env.example genügen für eine neue Umgebung. Der Quelltext
|
||
# muss dort nicht liegen.
|
||
#
|
||
# cp docker-compose.example.yml docker-compose.yml
|
||
# cp .env.example .env # und ausfüllen
|
||
# docker login gitea.honeyy.duckdns.org
|
||
# docker compose up -d
|
||
#
|
||
# Office ist bewusst nicht dabei: Es gibt drei Server zur Auswahl (Collabora,
|
||
# OnlyOffice, Euro-Office), und jeder bringt eigene Variablen mit. Den
|
||
# passenden Schnipsel zum Anhängen findest du im README.
|
||
#
|
||
# Der Schnipsel startet mit `docker compose up -d` sofort mit. Zum Abschalten
|
||
# `docker compose stop office`.
|
||
#
|
||
# Hintergrund und Fallstricke: README.md
|
||
# Aus dem Quelltext bauen statt ziehen: build/docker-compose.yml
|
||
|
||
services:
|
||
app:
|
||
container_name: aether-app
|
||
image: gitea.honeyy.duckdns.org/docker/aether:latest
|
||
restart: unless-stopped
|
||
env_file: .env
|
||
# Der Container läuft unter deiner Kennung, damit die Dateien unter
|
||
# DATA_PATH dir gehören und nicht einem Container-Nutzer.
|
||
user: "${APP_UID:-1000}:${APP_GID:-1000}"
|
||
environment:
|
||
# ocrmypdf legt Arbeitsdateien unter $HOME ab – das aus dem Image ist
|
||
# für einen abweichenden Nutzer nicht beschreibbar.
|
||
HOME: /tmp
|
||
depends_on:
|
||
postgres:
|
||
condition: service_healthy
|
||
volumes:
|
||
# Bind-Mount, kein benanntes Volume: Deine Dateien liegen als echte
|
||
# Ordner auf dem Wirt. Nur lesend anfassen – zum Hineinlegen ist WebDAV
|
||
# der Weg, sonst kennt die Datenbank die Datei nicht.
|
||
- ${DATA_PATH:-./data}:/data
|
||
networks: [internal]
|
||
ports:
|
||
# Vorgabe 0.0.0.0: erreichbar für alles, was den Server im Netz sieht –
|
||
# denn der Reverse Proxy steht meist auf einem anderen Rechner, und
|
||
# loopback ließe ihn nicht heran. Davor gehört er trotzdem, mit TLS.
|
||
# Läuft er auf DIESEM Rechner: APP_BIND=127.0.0.1 in der .env, dann ist
|
||
# der Port von außen dicht.
|
||
- "${APP_BIND:-0.0.0.0}:${APP_PORT:-8080}:8080"
|
||
|
||
postgres:
|
||
container_name: aether-db
|
||
image: postgres:16-alpine
|
||
restart: unless-stopped
|
||
environment:
|
||
POSTGRES_DB: ${DB_NAME}
|
||
POSTGRES_USER: ${DB_USER}
|
||
POSTGRES_PASSWORD: ${DB_PASSWORD}
|
||
volumes:
|
||
- postgres_data:/var/lib/postgresql/data
|
||
networks: [internal]
|
||
healthcheck:
|
||
test: ["CMD-SHELL", "pg_isready -U ${DB_USER} -d ${DB_NAME}"]
|
||
interval: 5s
|
||
timeout: 5s
|
||
retries: 10
|
||
|
||
volumes:
|
||
postgres_data:
|
||
|
||
networks:
|
||
internal:
|
||
driver: bridge
|