docs: enhance NEXT_STEPS.md with AI logging and audit requirements; update TEKNISK_BESKRIVNING.md with Caddy configuration details
This commit is contained in:
@@ -180,6 +180,16 @@ AI-infrastrukturen är nu på plats (`AiService`, `mistral-small-2603`, premium-
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
## AI-loggning och audit
|
||||||
|
|
||||||
|
- detta behöver ske innan nästa Ai-integration (receptförslag, veckoplanering) implementeras, för att säkerställa att vi har en robust lösning på plats för att spåra och analysera AI-anrop och resultat
|
||||||
|
- Utforska och utveckla lösning för loggning och audit av AI-input och output
|
||||||
|
- Syfte: möjliggöra spårbarhet, felsökning och kvalitetssäkring av AI-funktioner
|
||||||
|
- Implementera loggning på ett sätt som inte lagrar personuppgifter eller känslig data i klartext
|
||||||
|
- Utvärdera om loggar ska lagras i separat databas eller fil, och hur de kan användas för analys och förbättring
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
## Enhetsstöd och konvertering
|
## Enhetsstöd och konvertering
|
||||||
|
|
||||||
- Se över om vi behöver utöka antalet stödda enhetstyper (t.ex. fler volym- eller portionsenheter)
|
- Se över om vi behöver utöka antalet stödda enhetstyper (t.ex. fler volym- eller portionsenheter)
|
||||||
|
|||||||
+47
-22
@@ -120,18 +120,49 @@ docker exec recipe-db mariadb -uroot -p"LÖSENORD" recipe_app -e "SHOW TABLES;"
|
|||||||
Caddy sitter framför applikationen och distribuerar trafik. Ordningen på `handle`-blocken är kritisk — Caddy väljer det första matchande blocket.
|
Caddy sitter framför applikationen och distribuerar trafik. Ordningen på `handle`-blocken är kritisk — Caddy väljer det första matchande blocket.
|
||||||
|
|
||||||
```caddy
|
```caddy
|
||||||
|
(auth) {
|
||||||
|
basicauth {
|
||||||
|
admin $2a$14$DahHUWD2cKyXJ96sH5VQwuQv1bqmIn0gsdoSaw4mofzfdNY2Y0VsO
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
(common) {
|
||||||
|
encode gzip zstd
|
||||||
|
header {
|
||||||
|
Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"
|
||||||
|
X-Content-Type-Options "nosniff"
|
||||||
|
X-Frame-Options "DENY"
|
||||||
|
X-XSS-Protection "1; mode=block"
|
||||||
|
Referrer-Policy "strict-origin-when-cross-origin"
|
||||||
|
Permissions-Policy "geolocation=(), microphone=(), camera=(), payment=()"
|
||||||
|
Cross-Origin-Opener-Policy "same-origin"
|
||||||
|
Cross-Origin-Resource-Policy "same-origin"
|
||||||
|
Cross-Origin-Embedder-Policy "require-corp"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# ============================================
|
||||||
|
# Import Service (Document Converter) - Standalone UI
|
||||||
|
# ============================================
|
||||||
|
import.gynther.se {
|
||||||
|
import common
|
||||||
|
reverse_proxy recipe-import-service:3000
|
||||||
|
}
|
||||||
|
|
||||||
|
# ============================================
|
||||||
|
# RECIPE APP + IMPORT SERVICE
|
||||||
|
# ============================================
|
||||||
recept.gynther.se {
|
recept.gynther.se {
|
||||||
import common
|
import common
|
||||||
|
|
||||||
# === IMPORT SERVICE (Document Converter) ===
|
# === IMPORT SERVICE (Document Converter) ===
|
||||||
# Måste komma FÖRE backend-reglerna
|
# Dessa endpoints måste komma FÖRST innan backend reglerna!
|
||||||
handle /api/recipes/import* {
|
handle /api/recipes/import* {
|
||||||
reverse_proxy recipe-import-service:3000
|
reverse_proxy recipe-import-service:3000
|
||||||
}
|
}
|
||||||
|
|
||||||
# === NEXT.JS PROXY-ROUTES (frontend-hanterade) ===
|
# === RECIPE FRONTEND PROXY ENDPOINTS ===
|
||||||
# Dessa routes innehåller server-side logic (auth, aggregering, mm)
|
# Next.js API routes
|
||||||
# och måste gå till frontend, INTE backend
|
|
||||||
handle /api/inventory-history-proxy {
|
handle /api/inventory-history-proxy {
|
||||||
reverse_proxy recipe-frontend:3000
|
reverse_proxy recipe-frontend:3000
|
||||||
}
|
}
|
||||||
@@ -144,7 +175,8 @@ recept.gynther.se {
|
|||||||
reverse_proxy recipe-frontend:3000
|
reverse_proxy recipe-frontend:3000
|
||||||
}
|
}
|
||||||
|
|
||||||
# === BACKEND API-ENDPOINTS ===
|
# === RECIPE BACKEND API ENDPOINTS ===
|
||||||
|
# Backend körs på port 8080 (från docker-compose)
|
||||||
handle /api/products* {
|
handle /api/products* {
|
||||||
reverse_proxy recipe-api:8080
|
reverse_proxy recipe-api:8080
|
||||||
}
|
}
|
||||||
@@ -157,35 +189,28 @@ recept.gynther.se {
|
|||||||
reverse_proxy recipe-api:8080
|
reverse_proxy recipe-api:8080
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# === HEALTH CHECKS ===
|
||||||
handle /health {
|
handle /health {
|
||||||
reverse_proxy recipe-api:8080
|
reverse_proxy recipe-api:8080
|
||||||
}
|
}
|
||||||
|
|
||||||
# === CATCH-ALL: Övriga /api/* → frontend ===
|
# === CATCH ALL ===
|
||||||
# Fångar upp alla Next.js API routes som inte explicit
|
# Övriga /api/* går till frontend
|
||||||
# listats ovan, t.ex. /api/admin/*, /api/auth/*, /api/categories, mm.
|
|
||||||
handle /api/* {
|
handle /api/* {
|
||||||
reverse_proxy recipe-frontend:3000
|
reverse_proxy recipe-frontend:3000
|
||||||
}
|
}
|
||||||
|
|
||||||
# Alla övriga requests → frontend
|
# Frontend - catch all remaining routes (port 3000)
|
||||||
reverse_proxy /* recipe-frontend:3000
|
reverse_proxy /* recipe-frontend:3000
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
### Viktig regel: Caddy-routing och Next.js API routes
|
**Kommentarer:**
|
||||||
|
- Blocket `(common)` innehåller alla grundläggande säkerhetshuvuden och komprimering.
|
||||||
> **Caddy-regeln `handle /api/products*` fångar upp ALLT som börjar med `/api/products`** — inklusive sökvägar som `/api/products-create` eller `/api/products-update`. Det innebär att Next.js API routes som ska hanteras av frontend-containern **INTE** får ha sökvägar som börjar med `products`, `inventory`, `recipes` eller andra prefix som Caddy skickar till backend.
|
- Blocket `(auth)` används för basic auth på utvalda endpoints.
|
||||||
|
- Importera `(common)` i varje site-block för att återanvända headers och inställningar.
|
||||||
Next.js API routes som kräver server-side auth och ska gå via frontend måste ha prefix som hamnar i catch-all-blocket `handle /api/* → recipe-frontend:3000`. Exempel på säkra prefix:
|
- Proxyreglerna styr trafik till rätt backend/frontend-tjänst beroende på path.
|
||||||
|
- Kommentarer i filen förklarar ordningen på reglerna och varför vissa hanteras först.
|
||||||
| Prefix | Caddy-regel | Destination |
|
|
||||||
|--------|-------------|-------------|
|
|
||||||
| `/api/admin/*` | catch-all | `recipe-frontend:3000` |
|
|
||||||
| `/api/categories` | catch-all | `recipe-frontend:3000` |
|
|
||||||
| `/api/auth/*` | catch-all | `recipe-frontend:3000` |
|
|
||||||
| `/api/products*` | explicit regel | `recipe-api:8080` ⚠️ |
|
|
||||||
| `/api/inventory*` | explicit regel | `recipe-api:8080` ⚠️ |
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user