-
Copia il file .env.example:
cp .env.example .env
-
Modifica il file
.enve scrivi le tue credenziali:ADMIN_USERNAME=admin ADMIN_PASSWORD=la_tua_password
-
Riavvia i container:
docker compose restart backend
✅ Fatto! Ora puoi accedere con le tue credenziali.
- Username:
admin - Password:
admin
Scrivi semplicemente la password nel file .env:
ADMIN_USERNAME=admin
ADMIN_PASSWORD=miaPasswordSegreta123Vantaggi:
- ✅ Semplicissimo da configurare
- ✅ Perfetto per sviluppo locale
- ✅ Facile da cambiare
Nota: Il file .env è già in .gitignore, quindi non viene committato nel repository.
Per maggiore sicurezza (es. in produzione), usa un hash bcrypt invece della password in chiaro.
Opzione A - Script automatico:
npm install
npm run generate-password-hashLo script ti chiederà la password e genererà l'hash già pronto da copiare.
Opzione B - Comando manuale:
docker compose exec backend node -e "require('bcrypt').hash('la_tua_password', 10).then(h => console.log(h))"Poi copia l'hash nel .env:
ADMIN_USERNAME=admin
# ADMIN_PASSWORD=admin # <-- Commenta o rimuovi questa riga
ADMIN_PASSWORD_HASH=$$2b$$10$$il_tuo_hash_qui.env usa $$ invece di $ per escapare i caratteri speciali.
Genera un secret sicuro per i token JWT:
# Opzione 1: OpenSSL
openssl rand -hex 32
# Opzione 2: Node.js
node -e "console.log(require('crypto').randomBytes(32).toString('hex'))"Aggiorna .env:
JWT_SECRET=il_tuo_secret_generato_quiGenera chiavi API sicure per il frontend:
openssl rand -hex 24Aggiorna .env:
FRONTEND_API_KEYS=chiave_api_generata_qui
NEXT_PUBLIC_API_KEY=chiave_api_generata_quiDopo aver modificato .env, riavvia i container:
docker compose restart backendTesta il login dall'interfaccia web:
http://localhost:9000/admin/upload
Oppure via API:
curl -X POST http://localhost:9000/api/admin/login \
-H "Content-Type: application/json" \
-d '{"username":"admin","password":"la_tua_password"}' | jqSe vedi "success": true, la configurazione è corretta! 🎉
- ✅ Usa
ADMIN_PASSWORD(in chiaro) per semplicità - ✅ Password semplice va bene (es.
admin) - ✅ Testa frequentemente
- 🔐 Usa
ADMIN_PASSWORD_HASH(bcrypt) - 🔐 Password forte (min 12 caratteri, maiuscole, minuscole, numeri, simboli)
- 🔐 Genera JWT_SECRET con almeno 32 caratteri random
- 🔐 Usa chiavi API univoche e complesse
- 🔐 Cambia tutte le credenziali di default
- 🔐 Considera l'uso di secret manager (AWS Secrets, Azure Key Vault, ecc.)
- ✅ Il file
.envè già nel.gitignore- non verrà committato - ✅ Non condividere mai il file
.envcon credenziali reali - ✅ Fai backup del file
.envin un luogo sicuro - ✅ Rigenera credenziali periodicamente
| File | Scopo | Committato |
|---|---|---|
.env |
Credenziali reali | ❌ NO (in .gitignore) |
.env.example |
Template e documentazione | ✅ SI |
docker-compose.yml |
Usa le variabili dal .env |
✅ SI |
Soluzione:
- Verifica che le credenziali nel
.envsiano corrette - Se usi
ADMIN_PASSWORD_HASH, controlla di aver escapato con$$ - Riavvia il backend:
docker compose restart backend - Controlla i log:
docker compose logs backend | grep -i login
Se vedi warning tipo The "wqM4" variable is not set:
Soluzione:
- I
$nell'hash non sono stati escapati correttamente - Nel file
.envdevi usare$$invece di$ - Esempio:
$$2b$$10$$abcdef...invece di$2b$10$abcdef...
I token durano 24 ore.
Soluzione:
- Rifai il login dall'interfaccia admin
- Il token verrà rinnovato automaticamente
Soluzione:
Assicurati che ALLOWED_ORIGINS nel .env includa l'URL del frontend:
ALLOWED_ORIGINS=http://localhost:3000,http://localhost:9000# Installa dipendenze per script helper
npm install
# Genera hash password interattivo
npm run generate-password-hash
# Riavvia solo il backend
docker compose restart backend
# Visualizza log del backend
docker compose logs -f backend
# Testa login via API
curl -X POST http://localhost:9000/api/admin/login \
-H "Content-Type: application/json" \
-d '{"username":"admin","password":"admin"}' | jq
# Genera JWT secret sicuro
openssl rand -hex 32
# Genera API key sicura
openssl rand -hex 24| Variabile | Tipo | Default Dev | Esempio Production |
|---|---|---|---|
ADMIN_USERNAME |
String | admin |
admin |
ADMIN_PASSWORD |
String | admin |
MySecureP@ss2024! |
ADMIN_PASSWORD_HASH |
Bcrypt | - | $$2b$$10$$... |
JWT_SECRET |
String | your_jwt_secret_change_in_production |
a1b2c3d4e5f6... (32+ chars) |
FRONTEND_API_KEYS |
String | default_dev_key |
sk_prod_abc123xyz... |
NEXT_PUBLIC_API_KEY |
String | default_dev_key |
sk_prod_abc123xyz... |
ALLOWED_ORIGINS |
CSV | http://localhost:3000,http://localhost:9000 |
https://atliteg.example.com |