From f60f261a09ff0fd94cb761d9f02a4d6af0ca8f49 Mon Sep 17 00:00:00 2001 From: KitchenStock Date: Sun, 26 Jul 2026 20:09:09 +0200 Subject: [PATCH] docs: add self-hosted deployment guide, Dockerfile & docker-compose.yml --- Dockerfile | 20 ++++++++++++++ README.md | 66 ++++++++++++++++++++++++++++++---------------- docker-compose.yml | 14 ++++++++++ 3 files changed, 78 insertions(+), 22 deletions(-) create mode 100644 Dockerfile create mode 100644 docker-compose.yml diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..4bf3272 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,20 @@ +FROM node:20-alpine AS builder +WORKDIR /app +COPY package*.json ./ +RUN npm ci +COPY . . +ENV NEXT_TELEMETRY_DISABLED=1 +RUN npm run build + +FROM node:20-alpine AS runner +WORKDIR /app +ENV NODE_ENV=production +ENV NEXT_TELEMETRY_DISABLED=1 + +COPY --from=builder /app/package*.json ./ +COPY --from=builder /app/.next ./.next +COPY --from=builder /app/public ./public +COPY --from=builder /app/node_modules ./node_modules + +EXPOSE 3000 +CMD ["npm", "start"] diff --git a/README.md b/README.md index c6c25cd..39f9075 100644 --- a/README.md +++ b/README.md @@ -20,41 +20,63 @@ Ein modernes, helles und schnelles Web-App-System für euren veganen Vorrat, eur --- -## 🚀 Deployment (z. B. auf Vercel) +## 🖥️ Lokales Server-Deployment (Self-Hosted) -Am einfachsten lässt sich die App kostenlos auf **[Vercel](https://vercel.com)** deployen. +Ihr könnt die App ganz einfach auf eurem **eigenen lokalen Server** (Home-Server, Raspberry Pi, Ubuntu/Debian Linux, Windows Server, Synology NAS) betreiben. -### 1. Repository auf Vercel importieren -1. Gehe auf [Vercel.com](https://vercel.com) und erstelle / wähle ein Konto. -2. Klicke auf **"Add New..."** → **"Project"**. -3. Wähle das Repository `immissmandy/Kitchen` aus. +### Methode 1: PM2 / Direct Node.js (Empfohlen) -### 2. Umgebungsvariablen (Environment Variables) eintragen -Füge in Vercel unter **Environment Variables** folgende Variablen ein: +Voraussetzung: Node.js (v18+) auf dem Server installiert. -| Variable | Beschreibung | Beispiel / Standardwert | -| :--- | :--- | :--- | -| `GEMINI_API_KEY` | Google Gemini API Key | `AQ.Ab8RN6IF-hRoe09JrDVAAktkIAPu400_bnh8egCVa8nuTYyAPQ` | -| `GEMINI_MODEL` | Modellbezeichnung | `gemma-2-27b-it` | -| `NEXT_PUBLIC_APP_URL` | Domain URL der App | `https://kitchen-mandy-amy.vercel.app` | +```bash +# 1. Repository auf den Server klonen +git clone https://github.com/immissmandy/Kitchen.git +cd Kitchen -### 3. Deployen -Klicke auf **"Deploy"**. Vercel baut die App automatisch in unter 1 Minute! +# 2. .env.local anlegen +cat < .env.local +GEMINI_API_KEY=AQ.Ab8RN6IF-hRoe09JrDVAAktkIAPu400_bnh8egCVa8nuTYyAPQ +GEMINI_MODEL=gemma-2-27b-it +NEXT_PUBLIC_APP_URL=http://:3000 +EOT + +# 3. Abhängigkeiten installieren & Production Build erstellen +npm install +npm run build + +# 4. PM2 Process Manager installieren & App starten (Dauerhafter Hintergrundbetrieb) +npm install -g pm2 +pm2 start npm --name "kitchen-stock" -- start + +# 5. Automatischer Server-Neustart aktivieren +pm2 startup +pm2 save +``` + +Die App ist jetzt dauerhaft unter `http://:3000` im Heimnetzwerk erreichbar! --- -## 💻 Lokale Entwicklung +### Methode 2: Docker Compose (1-Klick Container) + +Falls ihr Docker auf eurem Heimserver nutzt (Synology, Unraid, Portainer, Docker Desktop): ```bash # 1. Repository klonen git clone https://github.com/immissmandy/Kitchen.git cd Kitchen -# 2. Abhängigkeiten installieren -npm install - -# 3. Entwicklungs-Server starten -npm run dev +# 2. Container starten +docker compose up -d --build ``` -Öffne dann [http://localhost:3000](http://localhost:3000) im Browser. +Fertig! Der Docker-Container startet automatisch neu, wenn der Server neu gestartet wird. + +--- + +## 🌐 Zugriff im Heimnetzwerk & SSL + +Damit Amy & Mandy die App bequem auf dem Smartphone öffnen können: + +1. **Im Heimnetzwerk**: Öffnet am Smartphone einfach `http://192.168.178.X:3000` (IP-Adresse eures Servers). +2. **Unterwegs (Optional)**: Nutzt kostenlos **Cloudflare Tunnel** oder Nginx Reverse Proxy mit Let's Encrypt SSL. diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..35e81eb --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,14 @@ +version: '3.8' + +services: + kitchen-stock: + build: . + container_name: kitchen-stock + restart: always + ports: + - "3000:3000" + environment: + - NODE_ENV=production + - GEMINI_API_KEY=AQ.Ab8RN6IF-hRoe09JrDVAAktkIAPu400_bnh8egCVa8nuTYyAPQ + - GEMINI_MODEL=gemma-2-27b-it + - NEXT_PUBLIC_APP_URL=http://localhost:3000