livrare website cu erp si crm
This commit is contained in:
parent
28773e3a72
commit
5c7bf7c295
257 changed files with 31929 additions and 0 deletions
198
website/OPERATIONS.md
Normal file
198
website/OPERATIONS.md
Normal file
|
|
@ -0,0 +1,198 @@
|
|||
# Operare Website DiDi
|
||||
|
||||
## Comenzi uzuale
|
||||
|
||||
### Status
|
||||
|
||||
```bash
|
||||
docker compose ps
|
||||
docker stats --no-stream didi-website
|
||||
```
|
||||
|
||||
### Restart
|
||||
|
||||
```bash
|
||||
docker compose restart website
|
||||
# sau cu rebuild
|
||||
docker compose up -d --build website
|
||||
```
|
||||
|
||||
### Log-uri
|
||||
|
||||
```bash
|
||||
# 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)
|
||||
|
||||
```bash
|
||||
cd ~/website
|
||||
docker compose up -d --build website
|
||||
# Verifica
|
||||
docker logs --tail 10 didi-website
|
||||
```
|
||||
|
||||
## Update env vars
|
||||
|
||||
### Schimbare cheie Stripe / SendGrid / etc.
|
||||
|
||||
1. Editeaza `.env.production`
|
||||
2. Rebuild (env vars sunt baked in la build):
|
||||
|
||||
```bash
|
||||
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
|
||||
|
||||
```bash
|
||||
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
|
||||
|
||||
```bash
|
||||
# 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
|
||||
|
||||
```bash
|
||||
# 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
|
||||
|
||||
```bash
|
||||
# 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.
|
||||
|
||||
```bash
|
||||
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:
|
||||
|
||||
```bash
|
||||
# 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:
|
||||
```bash
|
||||
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
|
||||
|
||||
```bash
|
||||
# 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:
|
||||
|
||||
```bash
|
||||
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):
|
||||
|
||||
```dockerfile
|
||||
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.
|
||||
Loading…
Add table
Add a link
Reference in a new issue