From e6d07d05cd7bdf8109ee2cb14cd45d8326aa3d8e Mon Sep 17 00:00:00 2001 From: Nico Haider Date: Tue, 21 Apr 2026 21:23:02 +0200 Subject: [PATCH] deploy(core): add docker files --- Dockerfile | 28 ++++++++++++++++++++++++++++ compose.yaml | 19 +++++++++++++++++++ deploy.sh | 25 +++++++++++++++++++++++++ next.config.ts | 1 + 4 files changed, 73 insertions(+) create mode 100644 Dockerfile create mode 100644 compose.yaml create mode 100644 deploy.sh diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..7151b79 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,28 @@ +# ---------- BUILD STAGE ---------- +FROM node:20-alpine AS builder + +WORKDIR /app + +COPY package.json package-lock.json* ./ +RUN npm install + +COPY . . + +RUN npm run build + + +# ---------- RUN STAGE ---------- +FROM node:20-alpine AS runner + +WORKDIR /app + +ENV NODE_ENV=production + +# nur notwendige files kopieren (viel kleiner!) +COPY --from=builder /app/.next/standalone ./ +COPY --from=builder /app/.next/static ./.next/static +COPY --from=builder /app/public ./public + +EXPOSE 3000 + +CMD ["node", "server.js"] \ No newline at end of file diff --git a/compose.yaml b/compose.yaml new file mode 100644 index 0000000..2f8e654 --- /dev/null +++ b/compose.yaml @@ -0,0 +1,19 @@ +services: + homepage: + build: + context: . + image: byhaider-homepage:latest + restart: unless-stopped + labels: + - "traefik.enable=true" + - "traefik.http.routers.byhaider-homepage.rule=Host(`byhaider.dev`)" + - "traefik.http.routers.byhaider-homepage.entrypoints=websecure" + - "traefik.http.routers.byhaider-homepage.tls=true" + - "traefik.http.routers.byhaider-homepage.tls.certResolver=cloudflare" + - "traefik.http.services.byhaider-homepage.loadbalancer.server.port=3000" + networks: + - traefik-network + +networks: + traefik-network: + external: true \ No newline at end of file diff --git a/deploy.sh b/deploy.sh new file mode 100644 index 0000000..0b0eeac --- /dev/null +++ b/deploy.sh @@ -0,0 +1,25 @@ +#!/bin/bash +set -e + +echo "πŸš€ Starte Deployment fΓΌr byHaider-Homepage..." + +cd ~/byhaider-homepage + +echo "πŸ“₯ Pull latest changes for byhaider-homepage..." +git pull origin main + +echo "πŸ›‘ Stoppe alte Container..." +docker compose down + +echo "πŸ“¦ Baue Images neu..." +docker compose build + +echo "⬆️ Starte Container..." +docker compose up -d + +echo "🧹 Bereinige alte Images..." +docker image prune -f + +echo "βœ… Deployment abgeschlossen!" +docker compose ps + diff --git a/next.config.ts b/next.config.ts index 9f443d5..6011efc 100644 --- a/next.config.ts +++ b/next.config.ts @@ -3,6 +3,7 @@ import createNextIntlPlugin from "next-intl/plugin"; const nextConfig: NextConfig = { /* config options here */ + output: 'standalone', }; const withNextIntl = createNextIntlPlugin();