From 951473d1ec659ed2bc5a256d356f624379957bb7 Mon Sep 17 00:00:00 2001 From: Till Tomczak Date: Mon, 31 Mar 2025 10:36:16 +0200 Subject: [PATCH] =?UTF-8?q?Erstelle=20Docker-Setup=20mit=20Installationssk?= =?UTF-8?q?ripten=20f=C3=BCr=20Frontend=20und=20Backend?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Füge Docker-Compose-Konfiguration mit Host-Netzwerk für Frontend und Backend hinzu - Erstelle Dockerfile für das Frontend mit automatischer Datenbankmigration - Aktualisiere Backend-Docker-Compose mit korrekten Umgebungsvariablen - Implementiere Installationsskripte: - install-myp.sh: Vollständige Installation beider Komponenten - start-myp.sh: Starten der installierten Container - stop-myp.sh: Stoppen der Container - setup-backend-env.sh: Einrichten der Backend-Umgebungsvariablen - Korrigiere SQLite-Datenbankprobleme im Frontend 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude --- backend/docker-compose.yml | 8 +- install-myp.sh | 128 ++++++++++++++++++ packages/reservation-platform/.env.example | 4 + packages/reservation-platform/Dockerfile | 38 +++--- .../reservation-platform/docker-compose.yml | 16 +++ setup-backend-env.sh | 20 +++ start-myp.sh | 75 ++++++++++ stop-myp.sh | 72 ++++++++++ 8 files changed, 338 insertions(+), 23 deletions(-) create mode 100755 install-myp.sh mode change 100755 => 100644 packages/reservation-platform/.env.example mode change 100755 => 100644 packages/reservation-platform/Dockerfile create mode 100644 packages/reservation-platform/docker-compose.yml create mode 100755 setup-backend-env.sh create mode 100755 start-myp.sh create mode 100755 stop-myp.sh diff --git a/backend/docker-compose.yml b/backend/docker-compose.yml index e7fffcf..1061de5 100755 --- a/backend/docker-compose.yml +++ b/backend/docker-compose.yml @@ -4,11 +4,13 @@ services: backend: build: . container_name: myp-backend - ports: - - "5000:5000" + network_mode: host environment: - SECRET_KEY=7445630171969DFAC92C53CEC92E67A9CB2E00B3CB2F - - DATABASE_URL=sqlite:///myp.db + - DATABASE_PATH=instance/myp.db + - TAPO_USERNAME=till.tomczak@mercedes-benz.com + - TAPO_PASSWORD=744563017196A + - PRINTERS={"Printer 1": {"ip": "192.168.0.100"}, "Printer 2": {"ip": "192.168.0.101"}, "Printer 3": {"ip": "192.168.0.102"}, "Printer 4": {"ip": "192.168.0.103"}, "Printer 5": {"ip": "192.168.0.104"}, "Printer 6": {"ip": "192.168.0.106"}} volumes: - ./logs:/app/logs - ./instance:/app/instance diff --git a/install-myp.sh b/install-myp.sh new file mode 100755 index 0000000..f26b2e9 --- /dev/null +++ b/install-myp.sh @@ -0,0 +1,128 @@ +#!/bin/bash + +# MYP-System Installationsskript +# Dieses Skript installiert und startet das MYP-System mit Docker + +set -e # Bei Fehler beenden + +# Farbcodes für Ausgabe +RED='\033[0;31m' +GREEN='\033[0;32m' +YELLOW='\033[0;33m' +BLUE='\033[0;34m' +NC='\033[0m' # No Color + +# Funktion zur Ausgabe mit Zeitstempel +log() { + echo -e "${BLUE}[$(date +'%Y-%m-%d %H:%M:%S')]${NC} $1" +} + +# Prüfen ob Docker installiert ist +check_docker() { + if ! command -v docker &> /dev/null; then + log "${RED}Docker ist nicht installiert. Bitte installieren Sie Docker.${NC}" + log "Siehe: https://docs.docker.com/get-docker/" + exit 1 + fi + + if ! command -v docker-compose &> /dev/null; then + log "${RED}Docker Compose ist nicht installiert. Bitte installieren Sie Docker Compose.${NC}" + log "Siehe: https://docs.docker.com/compose/install/" + exit 1 + fi +} + +# Backend .env erstellen +setup_backend_env() { + log "${YELLOW}Erstelle Backend .env Datei...${NC}" + + # In das Backend-Verzeichnis wechseln + cd "$(dirname "$0")/backend" + + # .env Datei erstellen mit den korrekten Daten + cat > .env << EOL +SECRET_KEY=7445630171969DFAC92C53CEC92E67A9CB2E00B3CB2F +DATABASE_PATH=instance/myp.db +TAPO_USERNAME=till.tomczak@mercedes-benz.com +TAPO_PASSWORD=744563017196A +PRINTERS={"Printer 1": {"ip": "192.168.0.100"}, "Printer 2": {"ip": "192.168.0.101"}, "Printer 3": {"ip": "192.168.0.102"}, "Printer 4": {"ip": "192.168.0.103"}, "Printer 5": {"ip": "192.168.0.104"}, "Printer 6": {"ip": "192.168.0.106"}} +EOL + + log "${GREEN}Backend .env Datei erfolgreich erstellt${NC}" +} + +# Frontend installieren +install_frontend() { + log "${GREEN}Starte Installation des Frontends...${NC}" + + # In das Frontend-Verzeichnis wechseln + cd "$(dirname "$0")/packages/reservation-platform" + + # .env Datei erstellen mit den korrekten Daten + log "${YELLOW}Erstelle .env Datei mit den korrekten Daten${NC}" + cat > .env << EOL +# Basic Server Configuration +RUNTIME_ENVIRONMENT=prod +DB_PATH=db/sqlite.db + +# OAuth Configuration (Bitte anpassen) +OAUTH_CLIENT_ID=client_id +OAUTH_CLIENT_SECRET=client_secret +EOL + + # Datenbank-Verzeichnis erstellen + log "Erstelle Datenbankverzeichnis" + mkdir -p db + + # Docker-Image bauen und starten + log "Baue und starte Frontend-Container" + docker-compose up -d --build + + log "${GREEN}Frontend erfolgreich installiert und gestartet unter http://localhost:3000${NC}" +} + +# Backend installieren +install_backend() { + log "${GREEN}Starte Installation des Backends...${NC}" + + # In das Backend-Verzeichnis wechseln + cd "$(dirname "$0")/backend" + + # Logs-Verzeichnis erstellen + log "Erstelle Logs-Verzeichnis" + mkdir -p logs + + # Instance-Verzeichnis für SQLite erstellen + log "Erstelle Instance-Verzeichnis für Datenbank" + mkdir -p instance + + # Docker-Image bauen und starten + log "Baue und starte Backend-Container" + docker-compose up -d --build + + log "${GREEN}Backend erfolgreich installiert und gestartet unter http://localhost:5000${NC}" +} + +# Hauptprogramm +main() { + log "${BLUE}=== MYP-System Installation ===${NC}" + + # Prüfen ob Docker vorhanden ist + check_docker + + # Backend .env erstellen + setup_backend_env + + # Frontend installieren + install_frontend + + # Backend installieren + install_backend + + log "${GREEN}=== Installation abgeschlossen ===${NC}" + log "Frontend: http://localhost:3000" + log "Backend: http://localhost:5000" +} + +# Ausführen +main \ No newline at end of file diff --git a/packages/reservation-platform/.env.example b/packages/reservation-platform/.env.example old mode 100755 new mode 100644 index 4ab3091..de2f268 --- a/packages/reservation-platform/.env.example +++ b/packages/reservation-platform/.env.example @@ -1,3 +1,7 @@ +# Basic Server Configuration +RUNTIME_ENVIRONMENT=dev +DB_PATH=db/sqlite.db + # OAuth Configuration OAUTH_CLIENT_ID=client_id OAUTH_CLIENT_SECRET=client_secret \ No newline at end of file diff --git a/packages/reservation-platform/Dockerfile b/packages/reservation-platform/Dockerfile old mode 100755 new mode 100644 index 11ed8ad..08c6f0b --- a/packages/reservation-platform/Dockerfile +++ b/packages/reservation-platform/Dockerfile @@ -1,34 +1,32 @@ -FROM node:20-bookworm-slim +FROM node:20-alpine -# Create application directory -RUN mkdir -p /usr/src/app +WORKDIR /app -# Set environment variables -ENV PORT=3000 -ENV NEXT_TELEMETRY_DISABLED=1 - -WORKDIR /usr/src/app - -# Copy package.json and pnpm-lock.yaml -COPY package.json /usr/src/app -COPY pnpm-lock.yaml /usr/src/app +# Install system dependencies +RUN apk add --no-cache python3 build-base g++ make # Install pnpm -RUN corepack enable pnpm +RUN npm install -g pnpm + +# Copy package files +COPY package.json pnpm-lock.yaml ./ # Install dependencies -RUN pnpm install +RUN pnpm install --frozen-lockfile -# Copy the rest of the application code -COPY . /usr/src/app +# Copy source code +COPY . . -# Initialize Database, if it not already exists -RUN pnpm run db +# Create database directory and run migrations +RUN mkdir -p db/ +RUN pnpm db:generate-sqlite +RUN pnpm db:migrate # Build the application -RUN pnpm run build +RUN pnpm build +# Expose the port EXPOSE 3000 # Start the application -CMD ["/bin/sh", "-c", "if [ ! -f ./db/sqlite.db ]; then pnpm db; fi && pnpm start"] +CMD ["pnpm", "start"] \ No newline at end of file diff --git a/packages/reservation-platform/docker-compose.yml b/packages/reservation-platform/docker-compose.yml new file mode 100644 index 0000000..4a10fd4 --- /dev/null +++ b/packages/reservation-platform/docker-compose.yml @@ -0,0 +1,16 @@ +version: '3' + +services: + frontend: + build: + context: . + dockerfile: Dockerfile + container_name: myp-frontend + network_mode: host + environment: + - RUNTIME_ENVIRONMENT=${RUNTIME_ENVIRONMENT:-dev} + - OAUTH_CLIENT_ID=${OAUTH_CLIENT_ID:-client_id} + - OAUTH_CLIENT_SECRET=${OAUTH_CLIENT_SECRET:-client_secret} + volumes: + - ./db:/app/db + restart: unless-stopped \ No newline at end of file diff --git a/setup-backend-env.sh b/setup-backend-env.sh new file mode 100755 index 0000000..e2f6d0d --- /dev/null +++ b/setup-backend-env.sh @@ -0,0 +1,20 @@ +#!/bin/bash + +# Skript zum Erstellen der .env-Datei für das Backend + +# Farbcodes für Ausgabe +GREEN='\033[0;32m' +BLUE='\033[0;34m' +NC='\033[0m' # No Color + +echo -e "${BLUE}Erstelle .env-Datei für das Backend...${NC}" + +cat > /home/kasm-user/Desktop/Projektarbeit-MYP/backend/.env << EOL +SECRET_KEY=7445630171969DFAC92C53CEC92E67A9CB2E00B3CB2F +DATABASE_PATH=instance/myp.db +TAPO_USERNAME=till.tomczak@mercedes-benz.com +TAPO_PASSWORD=744563017196A +PRINTERS={"Printer 1": {"ip": "192.168.0.100"}, "Printer 2": {"ip": "192.168.0.101"}, "Printer 3": {"ip": "192.168.0.102"}, "Printer 4": {"ip": "192.168.0.103"}, "Printer 5": {"ip": "192.168.0.104"}, "Printer 6": {"ip": "192.168.0.106"}} +EOL + +echo -e "${GREEN}Backend .env-Datei erfolgreich erstellt.${NC}" \ No newline at end of file diff --git a/start-myp.sh b/start-myp.sh new file mode 100755 index 0000000..17dd8b7 --- /dev/null +++ b/start-myp.sh @@ -0,0 +1,75 @@ +#!/bin/bash + +# MYP-System Startskript +# Dieses Skript startet das MYP-System mit Docker (falls installiert) + +set -e # Bei Fehler beenden + +# Farbcodes für Ausgabe +RED='\033[0;31m' +GREEN='\033[0;32m' +YELLOW='\033[0;33m' +BLUE='\033[0;34m' +NC='\033[0m' # No Color + +# Funktion zur Ausgabe mit Zeitstempel +log() { + echo -e "${BLUE}[$(date +'%Y-%m-%d %H:%M:%S')]${NC} $1" +} + +# Frontend starten +start_frontend() { + log "${GREEN}Starte Frontend...${NC}" + + # In das Frontend-Verzeichnis wechseln + cd "$(dirname "$0")/packages/reservation-platform" + + # Prüfen ob docker-compose.yml vorhanden ist + if [ ! -f docker-compose.yml ]; then + log "${RED}docker-compose.yml nicht gefunden. Bitte führen Sie zuerst install-myp.sh aus.${NC}" + exit 1 + fi + + # Container starten oder neu starten + docker-compose start || docker-compose up -d + + log "${GREEN}Frontend gestartet unter http://localhost:3000${NC}" +} + +# Backend starten +start_backend() { + log "${GREEN}Starte Backend...${NC}" + + # In das Backend-Verzeichnis wechseln + cd "$(dirname "$0")/backend" + + # Prüfen ob docker-compose.yml vorhanden ist + if [ ! -f docker-compose.yml ]; then + log "${RED}docker-compose.yml nicht gefunden. Bitte führen Sie zuerst install-myp.sh aus.${NC}" + exit 1 + fi + + # Container starten oder neu starten + docker-compose start || docker-compose up -d + + log "${GREEN}Backend gestartet unter http://localhost:5000${NC}" +} + +# Hauptprogramm +main() { + log "${BLUE}=== MYP-System starten ===${NC}" + + # Frontend starten + start_frontend + + # Backend starten + start_backend + + log "${GREEN}=== MYP-System läuft ===${NC}" + log "Frontend: http://localhost:3000" + log "Backend: http://localhost:5000" + log "Um das System zu stoppen: ./stop-myp.sh" +} + +# Ausführen +main \ No newline at end of file diff --git a/stop-myp.sh b/stop-myp.sh new file mode 100755 index 0000000..9a71e4e --- /dev/null +++ b/stop-myp.sh @@ -0,0 +1,72 @@ +#!/bin/bash + +# MYP-System Stoppskript +# Dieses Skript stoppt das MYP-System mit Docker + +set -e # Bei Fehler beenden + +# Farbcodes für Ausgabe +RED='\033[0;31m' +GREEN='\033[0;32m' +YELLOW='\033[0;33m' +BLUE='\033[0;34m' +NC='\033[0m' # No Color + +# Funktion zur Ausgabe mit Zeitstempel +log() { + echo -e "${BLUE}[$(date +'%Y-%m-%d %H:%M:%S')]${NC} $1" +} + +# Frontend stoppen +stop_frontend() { + log "${YELLOW}Stoppe Frontend...${NC}" + + # In das Frontend-Verzeichnis wechseln + cd "$(dirname "$0")/packages/reservation-platform" + + # Prüfen ob docker-compose.yml vorhanden ist + if [ ! -f docker-compose.yml ]; then + log "${YELLOW}docker-compose.yml nicht gefunden. Frontend scheint nicht installiert zu sein.${NC}" + return + fi + + # Container stoppen + docker-compose stop + + log "${GREEN}Frontend gestoppt${NC}" +} + +# Backend stoppen +stop_backend() { + log "${YELLOW}Stoppe Backend...${NC}" + + # In das Backend-Verzeichnis wechseln + cd "$(dirname "$0")/backend" + + # Prüfen ob docker-compose.yml vorhanden ist + if [ ! -f docker-compose.yml ]; then + log "${YELLOW}docker-compose.yml nicht gefunden. Backend scheint nicht installiert zu sein.${NC}" + return + fi + + # Container stoppen + docker-compose stop + + log "${GREEN}Backend gestoppt${NC}" +} + +# Hauptprogramm +main() { + log "${BLUE}=== MYP-System stoppen ===${NC}" + + # Frontend stoppen + stop_frontend + + # Backend stoppen + stop_backend + + log "${GREEN}=== MYP-System gestoppt ===${NC}" +} + +# Ausführen +main \ No newline at end of file