From f368da8bf94265c1a460f6961e9c28f9058c5851 Mon Sep 17 00:00:00 2001 From: Stefan Heyn Date: Wed, 4 Feb 2026 18:24:22 +0000 Subject: [PATCH] Add initial docker-compose.yml files to git --- .gitignore | 23 +++++++++++++ forgejo/docker-compose.yml | 60 ++++++++++++++++++++++++++++++++ n8n/docker-compose.yml | 64 +++++++++++++++++++++++++++++++++++ npm/docker-compose.yml | 18 ++++++++++ onlyoffice/docker-compose.yml | 26 ++++++++++++++ portainer/docker-compose.yml | 16 +++++++++ spdf/docker-compose.yml | 26 ++++++++++++++ 7 files changed, 233 insertions(+) create mode 100644 .gitignore create mode 100644 forgejo/docker-compose.yml create mode 100644 n8n/docker-compose.yml create mode 100644 npm/docker-compose.yml create mode 100644 onlyoffice/docker-compose.yml create mode 100644 portainer/docker-compose.yml create mode 100644 spdf/docker-compose.yml diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..82d0fda --- /dev/null +++ b/.gitignore @@ -0,0 +1,23 @@ +.env +portainer_data + +# Environment Files (alle .env im Projekt) +*.env + +# Docker Named Volumes / Datenverzeichnisse +*_data/ +*-data/ +data/ +logs/ +mysql/ +postgres_data/ +n8n_data/ +letsencrypt/ + +# Logs +*.log + +# Temporäre Dateien +*.tmp +.DS_Store +Thumbs.db diff --git a/forgejo/docker-compose.yml b/forgejo/docker-compose.yml new file mode 100644 index 0000000..188982e --- /dev/null +++ b/forgejo/docker-compose.yml @@ -0,0 +1,60 @@ +version: '3.8' + +services: + forgejo: + image: codeberg.org/forgejo/forgejo:10.0.0-rootless # Rootless = sicherer + container_name: forgejo + restart: unless-stopped + environment: + - USER_UID=1000 + - USER_GID=1000 + - GITEA__database__DB_TYPE=postgres + - GITEA__database__HOST=postgres:5432 + - GITEA__database__NAME=forgejo + - GITEA__database__USER=forgejo + - GITEA__database__PASSWD=${DB_PASSWORD} + - GITEA__server__DOMAIN=${DOMAIN_NAME} + - GITEA__server__ROOT_URL=https://${DOMAIN_NAME}/ + - GITEA__server__HTTP_PORT=3000 + - GITEA__server__SSH_DOMAIN=${DOMAIN_NAME} + - GITEA__server__SSH_PORT=222 + - TZ=${TIMEZONE} + volumes: + - forgejo_data:/data + - /etc/timezone:/etc/timezone:ro + ports: + - "3000:3000" # Web UI + - "222:22" # SSH (nicht 22, da Host SSH läuft!) + depends_on: + postgres: + condition: service_healthy + networks: + - forgejo-net + - npm-network + + postgres: + image: postgres:16-alpine + container_name: forgejo-db + restart: unless-stopped + environment: + - POSTGRES_USER=forgejo + - POSTGRES_PASSWORD=${DB_PASSWORD} + - POSTGRES_DB=forgejo + volumes: + - postgres_data:/var/lib/postgresql/data + healthcheck: + test: ["CMD-SHELL", "pg_isready -U forgejo -d forgejo"] + interval: 10s + retries: 5 + networks: + - forgejo-net + +volumes: + forgejo_data: + postgres_data: + +networks: + forgejo-net: + internal: true + npm-network: + external: true diff --git a/n8n/docker-compose.yml b/n8n/docker-compose.yml new file mode 100644 index 0000000..890fb81 --- /dev/null +++ b/n8n/docker-compose.yml @@ -0,0 +1,64 @@ +version: '3.8' + +services: + n8n: + image: n8nio/n8n:1.76.1 # Aktuelle stabile Version (Pinning empfohlen!) + container_name: n8n + restart: always + ports: + - "5678:5678" + environment: + - GENERIC_TIMEZONE=${TIMEZONE} + - TZ=${TIMEZONE} + # Datenbank-Verbindung + - DB_TYPE=postgresdb + - DB_POSTGRESDB_HOST=postgres + - DB_POSTGRESDB_PORT=5432 + - DB_POSTGRESDB_DATABASE=${DB_NAME} + - DB_POSTGRESDB_USER=${DB_USER} + - DB_POSTGRESDB_PASSWORD=${DB_PASSWORD} + # Webhook/Proxy Settings (Wichtig für externe Erreichbarkeit) + - N8N_HOST=${DOMAIN_NAME} + - N8N_PORT=5678 + - N8N_PROTOCOL=https + - WEBHOOK_URL=https://${DOMAIN_NAME}/ + # Auto-Cleanup (Verhindert Datenbank-Explosion) + - EXECUTIONS_DATA_PRUNE=true + - EXECUTIONS_DATA_MAX_AGE=336 # Behalte Daten für 14 Tage (336 Stunden) + - EXECUTIONS_DATA_PRUNE_MAX_COUNT=50000 # Max 50k Einträge + volumes: + - n8n_data:/home/node/.n8n + depends_on: + postgres: + condition: service_healthy + networks: + - n8n-net + - npm-network + + postgres: + image: postgres:16-alpine # Neueste stabile Postgres Version + container_name: n8n-db + restart: always + environment: + - POSTGRES_USER=${DB_USER} + - POSTGRES_PASSWORD=${DB_PASSWORD} + - POSTGRES_DB=${DB_NAME} + volumes: + - postgres_data:/var/lib/postgresql/data + healthcheck: + test: ["CMD-SHELL", "pg_isready -U ${DB_USER} -d ${DB_NAME}"] + interval: 5s + timeout: 5s + retries: 5 + networks: + - n8n-net + +volumes: + n8n_data: + postgres_data: + +networks: + n8n-net: + internal: true + npm-network: + external: true diff --git a/npm/docker-compose.yml b/npm/docker-compose.yml new file mode 100644 index 0000000..5d0bebe --- /dev/null +++ b/npm/docker-compose.yml @@ -0,0 +1,18 @@ +services: + app: + image: jc21/nginx-proxy-manager:latest + container_name: nginx-proxy-manager + restart: unless-stopped + ports: + - 80:80 + - 81:81 + - 443:443 + volumes: + - ./data:/data # Hier liegt Ihre database.sqlite drin! + - ./letsencrypt:/etc/letsencrypt + networks: + - npm-network + +networks: + npm-network: + external: true diff --git a/onlyoffice/docker-compose.yml b/onlyoffice/docker-compose.yml new file mode 100644 index 0000000..c3aab29 --- /dev/null +++ b/onlyoffice/docker-compose.yml @@ -0,0 +1,26 @@ +version: '3.8' + +services: + documentserver: + image: onlyoffice/documentserver:8.3.0 # Pinne Version statt 'latest' + container_name: onlyoffice-documentserver + restart: unless-stopped + ports: + - "8084:80" + environment: + - JWT_ENABLED=${JWT_ENABLED} + - JWT_SECRET=${JWT_SECRET} + - JWT_HEADER=${JWT_HEADER} + - JWT_IN_BODY=${JWT_IN_BODY} + - TZ=${TIMEZONE} + # OnlyOffice braucht oft etwas mehr Ressourcen für Rendering + deploy: + resources: + limits: + memory: 2G # Optional: Begrenzt RAM-Nutzung + networks: + - npm-network # Für NPM-Proxy + +networks: + npm-network: + external: true diff --git a/portainer/docker-compose.yml b/portainer/docker-compose.yml new file mode 100644 index 0000000..d9bab0c --- /dev/null +++ b/portainer/docker-compose.yml @@ -0,0 +1,16 @@ +services: + portainer: + image: portainer/portainer-ce:latest + container_name: portainer + restart: always + security_opt: + - no-new-privileges:true + volumes: + - /etc/localtime:/etc/localtime:ro + - /var/run/docker.sock:/var/run/docker.sock:ro + - portainer_data:/data + ports: + - 9443:9443 + +volumes: + portainer_data: diff --git a/spdf/docker-compose.yml b/spdf/docker-compose.yml new file mode 100644 index 0000000..6361e11 --- /dev/null +++ b/spdf/docker-compose.yml @@ -0,0 +1,26 @@ +version: '3.8' + +services: + stirling-pdf: + image: frooodle/s-pdf:0.44.1 # Beispiel: stabile Version pinnen, nicht 'latest' + container_name: stirling-pdf + restart: unless-stopped + ports: + - "9080:8080" + environment: + # Nur wenn du wirklich zusätzliche Security-Features deaktivieren willst + - DOCKER_ENABLE_SECURITY=${DOCKER_ENABLE_SECURITY} + - TZ=${TIMEZONE} + volumes: + # Named Volumes für persistente Daten / Konfiguration + - s-pdf-trainingData:/usr/share/tesseract-ocr/4.00/tessdata + - s-pdf-extraConfigs:/configs + - s-pdf-customFiles:/customFiles + # Optional leichte Härtung + security_opt: + - no-new-privileges:true + +volumes: + s-pdf-trainingData: + s-pdf-extraConfigs: + s-pdf-customFiles: