diff --git a/.env.example b/.env.example index 3daf281..c352b08 100644 --- a/.env.example +++ b/.env.example @@ -3,7 +3,7 @@ # MySQL Datenbankzugangsdaten DB_USER=root -DB_PASS=IhrMySQLPasswort +DB_PASS=MyPassword DB_NAME=RXF # Build-Datum wird automatisch beim Build gesetzt - nicht hier definieren! diff --git a/deploy.sh b/deploy.sh index 6d70f26..133364d 100755 --- a/deploy.sh +++ b/deploy.sh @@ -7,7 +7,7 @@ set -e # Konfiguration REGISTRY="docker.citysensor.de" -IMAGE_NAME="werte-next" +IMAGE_NAME="werte-next_multi" TAG="${1:-latest}" # Erster Parameter oder "latest" FULL_IMAGE="${REGISTRY}/${IMAGE_NAME}:${TAG}" @@ -24,25 +24,29 @@ echo "Build-Datum: ${BUILD_DATE}" echo "==========================================" echo "" -# 1. Docker Image bauen -echo ">>> Baue Docker Image..." -docker build \ - --build-arg BUILD_DATE="${BUILD_DATE}" \ - -t "${IMAGE_NAME}:${TAG}" \ - -t "${FULL_IMAGE}" \ - . - -echo ">>> Build erfolgreich!" -echo "" - -# 2. Login zur Registry (falls noch nicht eingeloggt) +# 1. Login zur Registry (falls noch nicht eingeloggt) echo ">>> Login zu ${REGISTRY}..." docker login "${REGISTRY}" echo "" -# 3. Image pushen -echo ">>> Pushe Image zu ${REGISTRY}..." -docker push "${FULL_IMAGE}" +# 2. Multiplatform Builder einrichten (docker-container driver erforderlich) +echo ">>> Richte Multiplatform Builder ein..." +if ! docker buildx inspect multiplatform-builder &>/dev/null; then + docker buildx create --name multiplatform-builder --driver docker-container --bootstrap +fi +docker buildx use multiplatform-builder +echo "" + +# 3. Docker Image bauen und pushen (Multiplatform) +echo ">>> Baue Multiplatform Docker Image und pushe zu Registry..." +docker buildx build \ + --platform linux/amd64,linux/arm64 \ + --build-arg BUILD_DATE="${BUILD_DATE}" \ + -t "${FULL_IMAGE}" \ + --push \ + . + +echo ">>> Build und Push erfolgreich!" echo "" echo "==========================================" diff --git a/docker-compose.local.yml b/docker-compose.local.yml index f49ea32..8b1bb2d 100644 --- a/docker-compose.local.yml +++ b/docker-compose.local.yml @@ -3,6 +3,9 @@ services: werte-app: build: context: . + platforms: + - linux/amd64 + - linux/arm64 args: BUILD_DATE: ${BUILD_DATE:-$(date +%d.%m.%Y)} container_name: werte-next-app @@ -15,3 +18,12 @@ services: - DB_USER=${DB_USER} - DB_PASS=${DB_PASS} - DB_NAME=${DB_NAME} + - AUTH_USERS=${AUTH_USERS} + - AUTH_SECRET=${AUTH_SECRET} + networks: + - sternwarte_default + +networks: + sternwarte_default: + external: true + diff --git a/package-lock.json b/package-lock.json index 668fde5..032bf09 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "werte_next", - "version": "1.0.0", + "version": "1.1.2", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "werte_next", - "version": "1.0.0", + "version": "1.1.2", "dependencies": { "jose": "^6.1.3", "mysql2": "^3.17.4", @@ -69,6 +69,7 @@ "integrity": "sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@babel/code-frame": "^7.29.0", "@babel/generator": "^7.29.0", @@ -1563,6 +1564,7 @@ "integrity": "sha512-ilcTH/UniCkMdtexkoCN0bI7pMcJDvmQFPvuPvmEaYA/NSfFTAgdUSLAoVjaRJm7+6PvcM+q1zYOwS4wTYMF9w==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "csstype": "^3.2.2" } @@ -1622,6 +1624,7 @@ "integrity": "sha512-IgSWvLobTDOjnaxAfDTIHaECbkNlAlKv2j5SjpB2v7QHKv1FIfjwMy8FsDbVfDX/KjmCmYICcw7uGaXLhtsLNg==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@typescript-eslint/scope-manager": "8.56.0", "@typescript-eslint/types": "8.56.0", @@ -2147,6 +2150,7 @@ "integrity": "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==", "dev": true, "license": "MIT", + "peer": true, "bin": { "acorn": "bin/acorn" }, @@ -2499,6 +2503,7 @@ } ], "license": "MIT", + "peer": true, "dependencies": { "baseline-browser-mapping": "^2.9.0", "caniuse-lite": "^1.0.30001759", @@ -3075,6 +3080,7 @@ "integrity": "sha512-VmQ+sifHUbI/IcSopBCF/HO3YiHQx/AVd3UVyYL6weuwW+HvON9VYn5l6Zl1WZzPWXPNZrSQpxwkkZ/VuvJZzg==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@eslint-community/eslint-utils": "^4.8.0", "@eslint-community/regexpp": "^4.12.1", @@ -3260,6 +3266,7 @@ "integrity": "sha512-whOE1HFo/qJDyX4SnXzP4N6zOWn79WhnCUY/iDR0mPfQZO8wcYE4JClzI2oZrhBnnMUCBCHZhO6VQyoBU95mZA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@rtsao/scc": "^1.1.0", "array-includes": "^3.1.9", @@ -5549,6 +5556,7 @@ "resolved": "https://registry.npmjs.org/react/-/react-19.2.3.tgz", "integrity": "sha512-Ku/hhYbVjOQnXDZFv2+RibmLFGwFdeeKHFcOTlrt7xplBnya5OGn/hIRDsqDiSUcfORsDC7MPxwork8jBwsIWA==", "license": "MIT", + "peer": true, "engines": { "node": ">=0.10.0" } @@ -5558,6 +5566,7 @@ "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.3.tgz", "integrity": "sha512-yELu4WmLPw5Mr/lmeEpox5rw3RETacE++JgHqQzd2dg+YbJuat3jH4ingc+WPZhxaoFzdv9y33G+F7Nl5O0GBg==", "license": "MIT", + "peer": true, "dependencies": { "scheduler": "^0.27.0" }, @@ -6267,6 +6276,7 @@ "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">=12" }, @@ -6429,6 +6439,7 @@ "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", "dev": true, "license": "Apache-2.0", + "peer": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -6704,6 +6715,7 @@ "integrity": "sha512-rftlrkhHZOcjDwkGlnUtZZkvaPHCsDATp4pGpuOOMDaTdDDXF91wuVDJoWoPsKX/3YPQ5fHuF3STjcYyKr+Qhg==", "dev": true, "license": "MIT", + "peer": true, "funding": { "url": "https://github.com/sponsors/colinhacks" }