From 2dbc359bd251d9e86c329c7813e7917f55f8a5e2 Mon Sep 17 00:00:00 2001 From: rorapp Date: Fri, 7 Feb 2025 02:13:26 +0100 Subject: [PATCH] Erste Compose Files und Scripte zum deployen. Lokal wird mit docker-compose.overwrite.yml gestartet --- apps/README.md | 0 apps/backend/src | 2 +- apps/docker-compose.overwrite.yml | 63 +++++++++++++++++++++++++++ apps/docker-compose.prod.yml | 71 +++++++++++++++++++++++++++++++ config/.env.backend | 49 +++++++++++++++++++++ config/.env.db | 8 ++++ config/.env.frontend | 1 + config/.env.shared | 1 + config/.env.traefik | 24 +++++++++++ scripts/deploy-app.sh | 22 ++++++++++ 10 files changed, 240 insertions(+), 1 deletion(-) create mode 100644 apps/README.md create mode 100644 apps/docker-compose.overwrite.yml create mode 100644 apps/docker-compose.prod.yml create mode 100644 config/.env.backend create mode 100644 config/.env.db create mode 100644 config/.env.frontend create mode 100644 config/.env.shared create mode 100644 config/.env.traefik create mode 100755 scripts/deploy-app.sh diff --git a/apps/README.md b/apps/README.md new file mode 100644 index 0000000..e69de29 diff --git a/apps/backend/src b/apps/backend/src index 0a0ce37..1ef8c2a 160000 --- a/apps/backend/src +++ b/apps/backend/src @@ -1 +1 @@ -Subproject commit 0a0ce37688b0ed26aa5003c9d4deafbb1835fec1 +Subproject commit 1ef8c2a309d5905eae19d362d57c8dac9996f45f diff --git a/apps/docker-compose.overwrite.yml b/apps/docker-compose.overwrite.yml new file mode 100644 index 0000000..df15d4a --- /dev/null +++ b/apps/docker-compose.overwrite.yml @@ -0,0 +1,63 @@ +## +## DIESES COMPOSE FILE IST FÜR DIE LOKALE ENTWICKLUNG MITTELS DOCKER +## +## Der Inhalt von frontend und von backend wird über ein volume eingebunden, dass +## bedeutet Änderungen innerhalb der Projektordner ./frontend/src und ./backend/src +## Ändern direkt die Werte innerhalb des Containers wie z.B. das Austauschen einer Grafik. +## +## Datenbank ebenfalls lokal und KEIN reverse-Proxy (traefik) +## Image der DB ist auf ARM Archtektur (Apple Silicon) ausgelegt +## +services: + mariadb: + image: mariadb:latest + container_name: local_mariadb + command: --bind-address=0.0.0.0 + environment: + - ALLOW_EMPTY_PASSWORD + - MARIADB_USER=mindboost + - MARIADB_DATABASE=mindboost + - MARIADB_PASSWORD=mindboost + - MARIADB_ROOT_PASSWORD=root-mindboost + networks: + - backend + frontend: + build: + context: ./frontend/src + dockerfile: Dockerfile.dev + container_name: local_frontend + volumes: + - ./frontend/src:/app + - /app/node_modules + ports: + - "3000:3000" + networks: + - backend + environment: + NODE_ENV: development + + backend: + build: + context: ./backend/src + dockerfile: Dockerfile.dev + container_name: local_backend + ports: + - "8000:8000" + - "5173:5173" + volumes: + - ./backend/src:/var/www + networks: + - backend + depends_on: + - mariadb + adminer: + image: adminer + container_name: local_adminer + restart: always + ports: + - 8080:8080 + networks: + - backend +networks: + backend: + external: false \ No newline at end of file diff --git a/apps/docker-compose.prod.yml b/apps/docker-compose.prod.yml new file mode 100644 index 0000000..62ce5e3 --- /dev/null +++ b/apps/docker-compose.prod.yml @@ -0,0 +1,71 @@ +# Stack for Mindboost Webapp + +services: + prod-mariadb: + image: mariadb:latest + container_name: prod-mariadb + hostname: mariadb + command: --bind-address=0.0.0.0 + env_file: + - ../config/.env.db + networks: + - ${BACKEND_NETWORK} + volumes: + - ../volumes/daten/mariadb:/var/lib/mysql + prod-redis: + image: redis:alpine + container_name: prod-redis + hostname: redis + networks: + - ${BACKEND_NETWORK} + restart: unless-stopped + command: redis-server --appendonly yes --requirepass laravel-redis-passwort # Redis Passwort eingeben + volumes: + - ../volumes/daten/redis:/data + prod-frontend: + build: + context: ./frontend/src + dockerfile: Dockerfile + container_name: prod-frontend + networks: + - ${BACKEND_NETWORK} + - ${TRAEFIK_NETWORK} + env_file: + - ../config/.env.frontend + - ../config/.env.traefik + labels: + - "traefik.enable=${TRAEFIK_ENABLE}" + - "traefik.http.routers.prod-frontend.entrypoints=${TRAEFIK_ROUTER_FRONTEND_ENTRYPOINT}" + - "traefik.http.routers.prod-frontend.rule=${TRAEFIK_ROUTER_FRONTEND_RULE}" + - "traefik.http.routers.prod-frontend.tls=${TRAEFIK_ROUTER_FRONTEND_TLS}" + - "traefik.http.routers.prod-frontend.tls.certresolver=${TRAEFIK_ROUTER_FRONTEND_CERTRESOLVER}" + - "traefik.http.routers.prod-frontend.tls.domains[0].main=${TRAEFIK_ROUTER_FRONTEND_TLS_DOMAIN_MAIN}" + - "traefik.http.routers.prod-frontend.tls.domains[0].sans=${TRAEFIK_ROUTER_FRONTEND_TLS_DOMAIN_SANS}" + - "traefik.http.services.prod-frontend.loadbalancer.server.port=${TRAEFIK_SERVICE_FRONTEND_PORT}" + - "traefik.docker.network=${TRAEFIK_NETWORK}" + prod-backend: + build: + context: ./backend/src + dockerfile: Dockerfile + env_file: + - ../config/.env.backend + - ../config/.env.traefik + labels: + - "traefik.enable=${TRAEFIK_ENABLE}" + - "traefik.http.routers.prod-backend.entrypoints=${TRAEFIK_ROUTER_BACKEND_ENTRYPOINT}" + - "traefik.http.routers.prod-backend.rule=${TRAEFIK_ROUTER_BACKEND_RULE}" + - "traefik.http.routers.prod-backend.tls=${TRAEFIK_ROUTER_BACKEND_TLS}" + - "traefik.http.routers.prod-backend.tls.certresolver=${TRAEFIK_ROUTER_BACKEND_CERTRESOLVER}" + - "traefik.http.routers.prod-backend.tls.domains[0].main=${TRAEFIK_ROUTER_BACKEND_TLS_DOMAIN_MAIN}" + - "traefik.http.services.prod-backend.loadbalancer.server.port=${TRAEFIK_SERVICE_BACKEND_PORT}" + - "traefik.docker.network=${TRAEFIK_NETWORK}" + networks: + - ${BACKEND_NETWORK} + - ${TRAEFIK_NETWORK} + depends_on: + - prod-mariadb +networks: + prod-backend: + external: false + proxy: + external: true diff --git a/config/.env.backend b/config/.env.backend new file mode 100644 index 0000000..8330154 --- /dev/null +++ b/config/.env.backend @@ -0,0 +1,49 @@ +# ---------------------------------- +# Datenbank (MariaDB) +# ---------------------------------- +MARIADB_USER=mindboost +MARIADB_DATABASE=mindboost +MARIADB_PASSWORD=1stronges-mindboostdb-passwort +MARIADB_ROOT_PASSWORD=1stronges-passwort-fuer-diedb + +# ---------------------------------- +# Redis +# ---------------------------------- +REDIS_PASSWORD=laravel-redis-passwort +REDIS_PORT=6379 + +# ---------------------------------- +# Vue Frontend (Nuxt.js) +# ---------------------------------- +VUE_APP_BACKEND_HOST_ADDRESS=https://dev.b.mindboost.team +VUE_FRONTEND_PORT=3001 +VUE_INTERNAL_PORT=3000 +VUE_FRONTEND_DOMAIN_1=app.mindboost.team +VUE_FRONTEND_DOMAIN_2=mindboost.app + +# ---------------------------------- +# Laravel Backend +# ---------------------------------- +BACKEND_NETWORK=backend +APP_NAME="mindboost backend - Compose Deployment" +APP_URL=https://b.mindboost.team +LARAVEL_PORT=8000 +LARAVEL_VITE_PORT=5173 +DB_HOST=mariadb +DB_PORT=3306 +DB_PASSWORD=1stronges-mindboostdb-passwort +DB_USERNAME=mindboost +DB_DATABASE=mindboost +LARAVEL_DOMAIN=b.mindboost.team +JWT_SECRET=zMtO8sgsnc4UixWSsYWE1pK9EdpNLzxNSoIPlUpTe6dDlarM3bu4cwM80tH3jA0F +# ---------------------------------- +# Traefik +# ---------------------------------- +TRAEFIK_CERT_RESOLVER=http_resolver +TRAEFIK_ENTRYPOINT=websecure +TRAEFIK_NETWORK=proxy + +# ---------------------------------- +# Adminer +# ---------------------------------- +ADMINER_PORT=8080 diff --git a/config/.env.db b/config/.env.db new file mode 100644 index 0000000..e736b27 --- /dev/null +++ b/config/.env.db @@ -0,0 +1,8 @@ +# ---------------------------------- +# Datenbank (MariaDB) +# ---------------------------------- +MARIADB_USER=mindboost +MARIADB_DATABASE=mindboost +MARIADB_PASSWORD=1stronges-mindboostdb-passwort +MARIADB_ROOT_PASSWORD=1stronges-passwort-fuer-diedb +ADMINER_PORT=8000 \ No newline at end of file diff --git a/config/.env.frontend b/config/.env.frontend new file mode 100644 index 0000000..abe3bd8 --- /dev/null +++ b/config/.env.frontend @@ -0,0 +1 @@ +DB_HOST= BLALBLAB diff --git a/config/.env.shared b/config/.env.shared new file mode 100644 index 0000000..abe3bd8 --- /dev/null +++ b/config/.env.shared @@ -0,0 +1 @@ +DB_HOST= BLALBLAB diff --git a/config/.env.traefik b/config/.env.traefik new file mode 100644 index 0000000..bce6c97 --- /dev/null +++ b/config/.env.traefik @@ -0,0 +1,24 @@ +# ---------------------------------- +# Traefik +# ---------------------------------- + +# Allgemein +TRAEFIK_ENABLE=true +TRAEFIK_NETWORK=proxy + +# Backend +TRAEFIK_ROUTER_BACKEND_ENTRYPOINT=websecure +TRAEFIK_ROUTER_BACKEND_RULE=Host(`b.mindboost.team`) +TRAEFIK_ROUTER_BACKEND_TLS=true +TRAEFIK_ROUTER_BACKEND_CERTRESOLVER=http_resolver +TRAEFIK_ROUTER_BACKEND_TLS_DOMAIN_MAIN=b.mindboost.team +TRAEFIK_SERVICE_BACKEND_PORT=8000 + +# Frontend +TRAEFIK_ROUTER_FRONTEND_ENTRYPOINT=websecure +TRAEFIK_ROUTER_FRONTEND_RULE=Host(`app.mindboost.team` || `mindboost.app`) +TRAEFIK_ROUTER_FRONTEND_TLS=true +TRAEFIK_ROUTER_FRONTEND_CERTRESOLVER=http_resolver +TRAEFIK_ROUTER_FRONTEND_TLS_DOMAIN_MAIN=app.mindboost.team +TRAEFIK_ROUTER_FRONTEND_TLS_DOMAIN_SANS=mindboost.app +TRAEFIK_SERVICE_FRONTEND_PORT=3000 diff --git a/scripts/deploy-app.sh b/scripts/deploy-app.sh new file mode 100755 index 0000000..78a95b2 --- /dev/null +++ b/scripts/deploy-app.sh @@ -0,0 +1,22 @@ +#!/bin/bash +set -e + +echo "Prüfe, ob Traefik läuft..." + +if ! docker ps --format '{{.Names}}' | grep -q 'traefik'; then + echo "Traefik läuft nicht." + read -p "Möchtest du die lokale Version zum Debuggen (docker-compose.overwrite.yml) starten? (y/n): " answer + if [[ "$answer" =~ ^[Yy]$ ]]; then + echo "Starte lokale Version..." + docker compose -f ../apps/docker-compose.overwrite.yml up -d + else + echo "Deployment abgebrochen." + exit 1 + fi +else + echo "Traefik läuft." + echo "Starte Deployment mit docker-compose.prod.yml..." + docker compose -f ../apps/docker-compose.prod.yml up -d +fi + +echo "Deployment abgeschlossen."