Add stack structure and compose files

This commit is contained in:
Martin 2025-12-14 14:22:40 +01:00
parent 44a1256c80
commit aff48645f7
12 changed files with 244 additions and 4 deletions

9
.gitignore vendored
View File

@ -1,8 +1,9 @@
# Secrets
cat > .gitignore <<'EOF'
# secrets
.env
*.env
# App data / volumes
# volumes / app data
**/db/
**/db_data/
**/postgres_data/
@ -11,10 +12,10 @@
**/html/
**/wp_data/
**/n8n_data/
**/vaultwarden-data/
**/logs/
# OS/Editor
# editor / os
.DS_Store
.idea/
.vscode/
EOF

View File

@ -0,0 +1,33 @@
services:
db:
image: postgres:16
container_name: gitea-db
restart: unless-stopped
environment:
POSTGRES_DB: gitea
POSTGRES_USER: gitea
POSTGRES_PASSWORD: zbr#1efs0ks%SdHy*7pZ
volumes:
- ./db:/var/lib/postgresql/data
gitea:
image: gitea/gitea:1.22
container_name: gitea
restart: unless-stopped
depends_on:
- db
ports:
- "127.0.0.1:3002:3000"
environment:
GITEA__database__DB_TYPE: postgres
GITEA__database__HOST: db:5432
GITEA__database__NAME: gitea
GITEA__database__USER: gitea
GITEA__database__PASSWD: zbr#1efs0ks%SdHy*7pZ
GITEA__server__DOMAIN: git.bartschatten.de
GITEA__server__ROOT_URL: https://git.bartschatten.de/
GITEA__server__HTTP_PORT: 3000
GITEA__server__PROTOCOL: http
volumes:
- ./data:/data

12
stacks/n8n/.env.example Normal file
View File

@ -0,0 +1,12 @@
N8N_BASIC_AUTH_USER=mfredrich
N8N_BASIC_AUTH_PASSWORD=CHANGEME
N8N_HOST=automation.bartschatten.de
N8N_PORT=5678
N8N_PROTOCOL=https
WEBHOOK_URL=https://automation.bartschatten.de/
N8N_EDITOR_BASE_URL=https://automation.bartschatten.de/
GENERIC_TIMEZONE=Europe/Berlin
DB_POSTGRESDB_DATABASE=n8n
DB_POSTGRESDB_USER=n8n
DB_POSTGRESDB_PASSWORD=CHANGEME

View File

@ -0,0 +1,36 @@
services:
db:
image: postgres:16
restart: unless-stopped
environment:
POSTGRES_DB: ${DB_POSTGRESDB_DATABASE}
POSTGRES_USER: ${DB_POSTGRESDB_USER}
POSTGRES_PASSWORD: ${DB_POSTGRESDB_PASSWORD}
volumes:
- ./postgres_data:/var/lib/postgresql/data
n8n:
image: n8nio/n8n:latest
restart: unless-stopped
depends_on:
- db
ports:
- "127.0.0.1:5678:5678"
environment:
- N8N_BASIC_AUTH_ACTIVE=true
- N8N_BASIC_AUTH_USER=${N8N_BASIC_AUTH_USER}
- N8N_BASIC_AUTH_PASSWORD=${N8N_BASIC_AUTH_PASSWORD}
- N8N_HOST=${N8N_HOST}
- N8N_PORT=${N8N_PORT}
- N8N_PROTOCOL=${N8N_PROTOCOL}
- WEBHOOK_URL=${WEBHOOK_URL}
- GENERIC_TIMEZONE=${GENERIC_TIMEZONE}
- N8N_SECURE_COOKIE=false
- DB_TYPE=postgresdb
- DB_POSTGRESDB_HOST=db
- DB_POSTGRESDB_PORT=5432
- DB_POSTGRESDB_DATABASE=${DB_POSTGRESDB_DATABASE}
- DB_POSTGRESDB_USER=${DB_POSTGRESDB_USER}
- DB_POSTGRESDB_PASSWORD=${DB_POSTGRESDB_PASSWORD}
volumes:
- ./n8n_data:/home/node/.n8n

View File

@ -0,0 +1,4 @@
MYSQL_DATABASE=nextcloud
MYSQL_USER=nextclouduser
MYSQL_PASSWORD=CHANGEME
MYSQL_ROOT_PASSWORD=CHANGEME

View File

@ -0,0 +1,59 @@
services:
db:
image: mariadb:11
container_name: nextcloud-db
command: --transaction-isolation=READ-COMMITTED --log-bin=binlog --binlog-format=ROW
restart: unless-stopped
environment:
MYSQL_DATABASE: ${MYSQL_DATABASE}
MYSQL_USER: ${MYSQL_USER}
MYSQL_PASSWORD: ${MYSQL_PASSWORD}
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
volumes:
- ./db:/var/lib/mysql
healthcheck:
test: ["CMD-SHELL", "mariadb-admin ping -h 127.0.0.1 -u$$MYSQL_USER -p$$MYSQL_PASSWORD || exit 1"]
interval: 10s
timeout: 5s
retries: 10
redis:
image: redis:7-alpine
container_name: nextcloud-redis
restart: unless-stopped
command: redis-server --save 60 1 --loglevel warning
volumes:
- ./redis:/data
healthcheck:
test: ["CMD", "redis-cli", "ping"]
interval: 10s
timeout: 3s
retries: 10
app:
image: nextcloud:apache
container_name: nextcloud-app
restart: unless-stopped
depends_on:
db:
condition: service_healthy
redis:
condition: service_healthy
ports:
- "127.0.0.1:8080:80"
environment:
MYSQL_DATABASE: ${MYSQL_DATABASE}
MYSQL_USER: ${MYSQL_USER}
MYSQL_PASSWORD: ${MYSQL_PASSWORD}
MYSQL_HOST: db
REDIS_HOST: redis
# optional, aber oft hilfreich hinter Reverse Proxy:
TRUSTED_PROXIES: 127.0.0.1
# OVERWRITEPROTOCOL: https
volumes:
- ./html:/var/www/html
healthcheck:
test: ["CMD-SHELL", "curl -fsS http://127.0.0.1/status.php | grep -q 'installed'"]
interval: 30s
timeout: 5s
retries: 10

View File

@ -0,0 +1,10 @@
services:
portainer:
image: portainer/portainer-ce:latest
container_name: portainer
restart: unless-stopped
ports:
- "127.0.0.1:9000:9000"
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- ./data:/data

View File

@ -0,0 +1,9 @@
services:
uptime-kuma:
image: louislam/uptime-kuma:1
container_name: uptime-kuma
restart: unless-stopped
ports:
- "127.0.0.1:3001:3001"
volumes:
- ./data:/app/data

View File

@ -0,0 +1,8 @@
# Externer Domainname (so wie du ihn später im Browser aufrufst)
BW_DOMAIN=https://bitwarden.bartschatten.de
# Admin-Panel aktivieren (starker Token!)
BW_ADMIN_TOKEN='CHANGEME'
# Optional: Registrierung erlauben oder nicht
BW_SIGNUPS_ALLOWED=false

View File

@ -0,0 +1,20 @@
services:
bitwarden:
image: vaultwarden/server:latest
container_name: bitwarden
restart: always
env_file:
- .env
environment:
# Domain / URL
- DOMAIN=${BW_DOMAIN}
# Websockets für bessere Sync-Performance
- WEBSOCKET_ENABLED=true
# Registrierung erlauben oder verbieten
- SIGNUPS_ALLOWED=${BW_SIGNUPS_ALLOWED}
# Admin-Panel
- ADMIN_TOKEN=${BW_ADMIN_TOKEN}
volumes:
- ./data:/data
ports:
- "127.0.0.1:8888:80"

View File

@ -0,0 +1,8 @@
WP_DB_NAME=wordpress
WP_DB_USER=wpuser
WP_DB_PASSWORD=CHANGEME
WP_DB_ROOT_PASSWORD=CHANGEME
WP_PORT=8085
WP_URL=https://www.bartschatten.de

View File

@ -0,0 +1,40 @@
services:
db:
image: mariadb:11
container_name: wordpress-db
restart: unless-stopped
command: --transaction-isolation=READ-COMMITTED --log-bin=binlog --binlog-format=ROW
environment:
MYSQL_DATABASE: ${WP_DB_NAME}
MYSQL_USER: ${WP_DB_USER}
MYSQL_PASSWORD: ${WP_DB_PASSWORD}
MYSQL_ROOT_PASSWORD: ${WP_DB_ROOT_PASSWORD}
volumes:
- ./db_data:/var/lib/mysql
healthcheck:
test: ["CMD-SHELL", "mariadb-admin ping -h 127.0.0.1 -u$$MYSQL_USER -p$$MYSQL_PASSWORD || exit 1"]
interval: 10s
timeout: 5s
retries: 10
wordpress:
image: wordpress:php8.2-apache
container_name: wordpress-app
restart: unless-stopped
depends_on:
db:
condition: service_healthy
ports:
- "127.0.0.1:${WP_PORT}:80"
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_NAME: ${WP_DB_NAME}
WORDPRESS_DB_USER: ${WP_DB_USER}
WORDPRESS_DB_PASSWORD: ${WP_DB_PASSWORD}
volumes:
- ./wp_data:/var/www/html
healthcheck:
test: ["CMD-SHELL", "curl -fsS http://127.0.0.1/wp-login.php >/dev/null || exit 1"]
interval: 30s
timeout: 5s
retries: 10