From 0295d5a5845903fdcee6415849cb8a0e129a95d2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Reinhard=20X=2E=20F=C3=BCrst?= Date: Sun, 5 Jul 2026 16:10:56 +0200 Subject: [PATCH] =?UTF-8?q?deploy:=20Registry-Deploy=20f=C3=BCr=20nuccy=20?= =?UTF-8?q?(collector=20+=20web)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - deploy.sh: baut & pusht beide Images (linux/amd64) nach docker.citysensor.de - docker-compose.prod.yml: zieht Registry-Images, collector im smarthome-Netz (Broker-Container 'mqtt'), gemeinsames data-Volume - .env.production.example: Vorlage für nuccy (.env neben der Compose-Datei) - .gitignore: .claude/ ausschließen Co-Authored-By: Claude Opus 4.8 (1M context) --- .env.production.example | 13 ++++++++ .gitignore | 3 ++ deploy.sh | 68 +++++++++++++++++++++++++++++++++++++++++ docker-compose.prod.yml | 41 +++++++++++++++++++++++++ 4 files changed, 125 insertions(+) create mode 100644 .env.production.example create mode 100755 deploy.sh create mode 100644 docker-compose.prod.yml diff --git a/.env.production.example b/.env.production.example new file mode 100644 index 0000000..3b1c963 --- /dev/null +++ b/.env.production.example @@ -0,0 +1,13 @@ +# Auf nuccy als ".env" neben docker-compose.prod.yml ablegen (NICHT committen). +# Nur Geheimnisse/Abweichungen; der Rest steht in docker-compose.prod.yml. + +# MQTT-Credentials der go-e Wallbox (Broker = Container 'mqtt' im smarthome-Netz) +MQTT_USER= +MQTT_PASS= + +# Optional: Abweichungen von den Defaults +# MQTT_HOST=mqtt +# MQTT_PORT=1883 +# MQTT_TOPIC_BASE=go-eCharger/310014 +# TZ=Europe/Berlin +# WEB_PORT=8082 diff --git a/.gitignore b/.gitignore index 7ae8224..b5adb2a 100644 --- a/.gitignore +++ b/.gitignore @@ -13,6 +13,9 @@ node_modules/ .next/ *.tsbuildinfo +# claude code (lokale Session/Settings) +.claude/ + # misc .DS_Store *.log diff --git a/deploy.sh b/deploy.sh new file mode 100755 index 0000000..fe2fbe5 --- /dev/null +++ b/deploy.sh @@ -0,0 +1,68 @@ +#!/bin/bash + +# Deploy Script für auto_charger +# Baut die beiden Docker Images (collector + web) und lädt sie zu +# docker.citysensor.de hoch. Ziel-Plattform ist linux/amd64 (nuccy). + +set -e + +# Konfiguration +REGISTRY="docker.citysensor.de" +TAG="${1:-latest}" # Erster Parameter oder "latest" +BUILD_DATE=$(date +%d.%m.%Y) + +COLLECTOR_IMAGE="${REGISTRY}/auto-charger-collector:${TAG}" +WEB_IMAGE="${REGISTRY}/auto-charger-web:${TAG}" + +# In das Verzeichnis dieses Skripts wechseln (Build-Kontexte sind relativ) +cd "$(dirname "$0")" + +echo "==========================================" +echo "auto_charger Deploy Script" +echo "==========================================" +echo "Registry: ${REGISTRY}" +echo "Tag: ${TAG}" +echo "Build-Datum: ${BUILD_DATE}" +echo "Images: auto-charger-collector, auto-charger-web" +echo "==========================================" +echo "" + +# 1. Login zur Registry (falls noch nicht eingeloggt) +echo ">>> Login zu ${REGISTRY}..." +docker login "${REGISTRY}" +echo "" + +# 2. Collector-Image bauen (linux/amd64) +echo ">>> Baue collector-Image (linux/amd64)..." +docker build \ + --platform linux/amd64 \ + -t "${COLLECTOR_IMAGE}" \ + ./collector +echo "" + +# 3. Web-Image bauen (linux/amd64, mit Build-Datum für die Fußzeile) +echo ">>> Baue web-Image (linux/amd64)..." +docker build \ + --platform linux/amd64 \ + --build-arg BUILD_DATE="${BUILD_DATE}" \ + -t "${WEB_IMAGE}" \ + ./web +echo "" + +# 4. Beide Images pushen +echo ">>> Pushe ${COLLECTOR_IMAGE}..." +docker push "${COLLECTOR_IMAGE}" +echo ">>> Pushe ${WEB_IMAGE}..." +docker push "${WEB_IMAGE}" + +echo ">>> Build und Push erfolgreich!" + +echo "" +echo "==========================================" +echo "✓ Deploy erfolgreich abgeschlossen!" +echo "==========================================" +echo "" +echo "Auf nuccy ausführen (Verzeichnis mit docker-compose.prod.yml + .env):" +echo " docker compose -f docker-compose.prod.yml pull" +echo " docker compose -f docker-compose.prod.yml up -d" +echo "" diff --git a/docker-compose.prod.yml b/docker-compose.prod.yml new file mode 100644 index 0000000..236a84b --- /dev/null +++ b/docker-compose.prod.yml @@ -0,0 +1,41 @@ +# Docker Compose für nuccy (Registry-Images, von deploy.sh gebaut/gepusht). +# Geheimnisse/Abweichungen kommen aus einer .env-Datei neben dieser Compose-Datei +# (siehe .env.production.example). Beide Container teilen sich das Volume ./data. +services: + + collector: + image: docker.citysensor.de/auto-charger-collector:latest + container_name: auto-charger-collector + restart: unless-stopped + environment: + - TZ=${TZ:-Europe/Berlin} + # MQTT-Broker läuft als Container 'mqtt' im smarthome-Netz. + - MQTT_HOST=${MQTT_HOST:-mqtt} + - MQTT_PORT=${MQTT_PORT:-1883} + - MQTT_USER=${MQTT_USER} + - MQTT_PASS=${MQTT_PASS} + - MQTT_TOPIC_BASE=${MQTT_TOPIC_BASE:-go-eCharger/310014} + - DB_PATH=/data/charges.db + volumes: + - ./data:/data + networks: + - smarthome + + web: + image: docker.citysensor.de/auto-charger-web:latest + container_name: auto-charger-web + restart: unless-stopped + environment: + - NODE_ENV=production + - TZ=${TZ:-Europe/Berlin} + - DB_PATH=/data/charges.db + ports: + - "${WEB_PORT:-8082}:3000" + volumes: + - ./data:/data + depends_on: + - collector + +networks: + smarthome: + external: true