4.9 KiB
Operare Website DiDi
Comenzi uzuale
Status
docker compose ps
docker stats --no-stream didi-website
Restart
docker compose restart website
# sau cu rebuild
docker compose up -d --build website
Log-uri
# Live log
docker compose logs -f website
# Doar erori
docker compose logs website 2>&1 | grep -E "error|ERROR|FAIL"
# Ultimele 100 linii
docker compose logs --tail 100 website
Restart dupa schimbare cod (rebuild)
cd ~/website
docker compose up -d --build website
# Verifica
docker logs --tail 10 didi-website
Update env vars
Schimbare cheie Stripe / SendGrid / etc.
- Editeaza
.env.production - Rebuild (env vars sunt baked in la build):
docker compose up -d --build website
Pentru variabilele NEXT_PUBLIC_* (folosite in client), trebuie REBUILD. Pentru variabile server-side, doar restart e suficient.
Monitorizare
Health check
curl -s -o /dev/null -w "%{http_code}\n" http://localhost:3000
curl -s http://localhost:3000/api/auth/session | python3 -m json.tool
Performance
# Time First Byte
curl -s -o /dev/null -w "TTFB: %{time_starttransfer}s\nTotal: %{time_total}s\n" http://localhost:3000
# Lighthouse (necesita Node/Chrome pe host - sau via Docker)
docker run --rm --network didi-network \
-v $(pwd):/out \
femtopixel/google-lighthouse \
http://didi-website:3000 \
--output html --output-path /out/lighthouse-report.html
Troubleshooting
Site nu raspunde
# 1. Container status
docker compose ps
# 2. Log-uri
docker compose logs --tail 50 website
# 3. Test conectivitate la dependinte (din container)
docker exec didi-website wget -qO- http://didi-erpnext:8080 | head -1
docker exec didi-website wget -qO- https://<KEYCLOAK_HOST>/auth/realms/didi-clients | head -c 100
Auth nu functioneaza
# Verifica OIDC discovery
docker exec didi-website wget -qO- https://<KEYCLOAK_HOST>/auth/realms/didi-clients/.well-known/openid-configuration | python3 -m json.tool
# Verifica cookies Auth.js
# Browser DevTools > Application > Cookies > <HOST>
# Trebuie sa existe: authjs.csrf-token, authjs.session-token (dupa login)
Stripe checkout nu mai redirecteaza dupa plata
Verifica NEXT_PUBLIC_SITE_URL in .env.production - trebuie sa fie acelasi host cu cel din browser.
docker exec didi-website env | grep -E "AUTH_URL|NEXT_PUBLIC_SITE"
Webhook Stripe nu firea
Webhook-ul fireaza doar daca Stripe poate ajunge la endpoint-ul tau. In dev local:
# Stripe CLI (instaleaza separat)
stripe listen --forward-to http://<HOST>:3000/api/webhooks/stripe
# Test manual cu curl (simuleaza un event)
curl -X POST http://<HOST>:3000/api/webhooks/stripe \
-H "Content-Type: application/json" \
-d '{"type":"checkout.session.completed","data":{"object":{...}}}'
In productie verifica Stripe Dashboard > Webhooks > [endpoint] > "Activity feed" pentru status delivery.
PDF rapoarte goale / corupte
Generarea PDF se face cu jsPDF in browser (pentru rapoarte analize) sau wkhtmltopdf in ERPNext (pentru facturi).
Pentru facturi - verifica host_name in ERPNext:
docker exec didi-erpnext bash -c '
cd /home/frappe/frappe-bench &&
bench --site didi-erp set-config -g host_name "http://didi-erpnext:8080"
'
Pentru rapoarte analize - DevTools > Console pentru erori jsPDF.
Site nu trage continut din ERPNext CMS
# Test API direct
curl -s -H "Authorization: token <ERPNEXT_API_KEY>:<ERPNEXT_API_SECRET>" \
"http://localhost:8080/api/resource/Website%20Content?fields=[%22page_slug%22,%22section_key%22]&limit_page_length=5"
Daca 401, token-ul e gresit. Daca [], DB-ul nu are inregistrari (re-ruleaza scripts/setup/04-populate-content.py din erp_crm).
Backup
Website-ul e stateless - tot ce conteaza e in:
- Git repo (codul)
- ERPNext DB (datele clientilor + facturile)
- Stripe (platile - irretrievable backup)
Pentru codul actual:
cd ~
tar czf website-backup-$(date +%Y%m%d).tar.gz \
--exclude='node_modules' \
--exclude='.next' \
website/
Performance tuning
Numar workers Next.js
Edit Dockerfile (sau env var pentru Next 16):
ENV NEXT_PUBLIC_WORKERS=4
Cache HTTP
In productie, pune un reverse proxy (nginx/Caddy) cu:
- Cache pe static assets (
_next/static/*,public/*): max-age=31536000 immutable - Cache pe pagini SSR cu revalidate (vezi
force-dynamic/revalidate)
Imagini
Public images sunt cache-uite implicit cu max-age=60 in Next 16. Pentru imagini hostate la utilizator (avatar etc.), foloseste <Image> cu loader + CDN.
SLA
| Severitate | Descriere | Raspuns | Rezolvare |
|---|---|---|---|
| Critica | Site down / login nu functioneaza | 4 ore | 24 ore |
| Majora | Functionalitate importanta (checkout, dashboard) | 8 ore | 3 zile |
| Minora | UI, cosmetic, edge case | 24 ore | 10 zile |
Suport: office@clossers.com, zile lucratoare 09-18.