Der Container bringt die gebaute Anwendung mit; einziger Mount ist ./data:/app/data. Die Buchhaltung bleibt damit als gewöhnliche SQLite-Dateien im Projektverzeichnis und lässt sich ohne Docker sichern und einsehen. Der Server band bisher fest an 127.0.0.1 und wäre im Container von außen nicht erreichbar gewesen. Die Adresse ist jetzt über HOST einstellbar und bleibt außerhalb des Containers unverändert auf 127.0.0.1; im Container gilt 0.0.0.0, abgesichert über eine Portfreigabe, die nur auf 127.0.0.1 lauscht. Weitere Festlegungen: - Lauf unter der UID des aufrufenden Kontos, damit ./data nicht root gehört - schreibgeschütztes Containerdateisystem, beschreibbar nur /app/data und /tmp - .env wird nicht ins Image gebacken, sondern von docker-compose eingelesen - ERiC bleibt außen vor und ist bei Bedarf vom Host einzubinden Die Startmeldung nannte bisher nur, ob eine .env-Datei existiert. Im Container gibt es keine, obwohl die Konfiguration vollständig vorliegt – gemeldet wird jetzt der tatsächliche ERiC-Zustand. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
67 lines
2.4 KiB
YAML
67 lines
2.4 KiB
YAML
# Aufruf: docker-compose up -d --build
|
|
#
|
|
# Die Anwendung läuft dann unter http://localhost:3311
|
|
#
|
|
# Es werden bewusst keine benannten Volumes verwendet: die Buchhaltung liegt als
|
|
# gewöhnliche SQLite-Dateien im Projektverzeichnis unter ./data und lässt sich
|
|
# damit sichern, kopieren und einsehen, ohne Docker zu bemühen.
|
|
version: "3.8"
|
|
|
|
services:
|
|
euer:
|
|
build:
|
|
context: .
|
|
dockerfile: Dockerfile
|
|
image: open-eur-buchhaltung:latest
|
|
container_name: open-eur-buchhaltung
|
|
restart: unless-stopped
|
|
|
|
# An 127.0.0.1 gebunden: die Anwendung kennt keine Benutzeranmeldung, und
|
|
# hier liegen Steuernummer und Umsätze. Für den Zugriff aus dem Netz gehört
|
|
# ein Reverse Proxy mit Authentifizierung davor.
|
|
ports:
|
|
- "127.0.0.1:3311:3311"
|
|
|
|
# Mit der UID des aufrufenden Kontos laufen, damit die Dateien in ./data
|
|
# dem Host gehören und nicht root. UID/GID notfalls fest eintragen.
|
|
user: "${UID:-1000}:${GID:-1000}"
|
|
|
|
volumes:
|
|
# Einziger Mount: die Daten bleiben im Projektverzeichnis.
|
|
- ./data:/app/data
|
|
|
|
# ERiC ist proprietär und darf nicht ins Image. Wer echt übermitteln will,
|
|
# bindet die Installation vom Host ein und setzt die Pfade in .env.
|
|
# - /opt/eric:/opt/eric:ro
|
|
# - ./zertifikat.pfx:/app/zertifikat.pfx:ro
|
|
|
|
environment:
|
|
# Im Container muss auf allen Schnittstellen gelauscht werden, sonst
|
|
# erreicht die Portfreigabe den Prozess nicht.
|
|
HOST: 0.0.0.0
|
|
PORT: 3311
|
|
NODE_ENV: production
|
|
TZ: Europe/Berlin
|
|
|
|
# Die folgenden Werte kommen aus ./.env, sofern vorhanden. docker-compose
|
|
# liest diese Datei automatisch für die Ersetzung ein; fehlt sie, greifen
|
|
# die Vorgaben und die Anwendung läuft im ELSTER-Simulationsmodus.
|
|
LOG_LEVEL: "${LOG_LEVEL:-warn}"
|
|
EUER_DB: "${EUER_DB:-./data/euer.sqlite}"
|
|
EUER_MANDANT: "${EUER_MANDANT:-}"
|
|
ERIC_LIB_PATH: "${ERIC_LIB_PATH:-}"
|
|
ERIC_PLUGIN_PATH: "${ERIC_PLUGIN_PATH:-}"
|
|
ERIC_LOG_PATH: "${ERIC_LOG_PATH:-./data/eric-log}"
|
|
ELSTER_ZERTIFIKAT: "${ELSTER_ZERTIFIKAT:-}"
|
|
ELSTER_PIN: "${ELSTER_PIN:-}"
|
|
ELSTER_HERSTELLER_ID: "${ELSTER_HERSTELLER_ID:-}"
|
|
ELSTER_TESTMERKER: "${ELSTER_TESTMERKER:-}"
|
|
|
|
# Die Anwendung schreibt außerhalb von /app/data nichts.
|
|
read_only: true
|
|
tmpfs:
|
|
- /tmp
|
|
|
|
security_opt:
|
|
- no-new-privileges:true
|