feat: production deployment - full update with providers, admin, glossaries, pricing, tests
Major changes across backend, frontend, infrastructure: - Provider system with model selection (Google, DeepL, OpenAI, Ollama, Google Cloud) - Admin panel: user management, pricing, settings - Glossary system with CSV import/export - Subscription and tier quota management - Security hardening (rate limiting, API key auth, path traversal fixes) - Docker compose for dev, prod, and IONOS deployment - Alembic migrations for new tables - Frontend: dashboard, pricing page, landing page, i18n (en/fr) - Test suite and verification scripts Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
93
.env.ionos
Normal file
93
.env.ionos
Normal file
@@ -0,0 +1,93 @@
|
||||
# ============================================================
|
||||
# PRODUCTION — Ionos VPS
|
||||
# Copiez ce fichier en .env sur le serveur et remplissez TOUT
|
||||
# Ne committez JAMAIS ce fichier avec de vraies valeurs
|
||||
# ============================================================
|
||||
|
||||
# ─── Application ────────────────────────────────────────────
|
||||
APP_NAME="Office Translator"
|
||||
ENV=production
|
||||
DEBUG=false
|
||||
LOG_LEVEL=INFO
|
||||
LOG_FORMAT=json
|
||||
|
||||
# ─── Domaine & URLs ─────────────────────────────────────────
|
||||
# Remplacez par votre vrai domaine (configuré dans Ionos DNS)
|
||||
DOMAIN=wordly.art
|
||||
NEXT_PUBLIC_API_URL=https://wordly.art
|
||||
CORS_ORIGINS=https://wordly.art
|
||||
|
||||
# ─── Sécurité JWT ─────────────────────────────────────────
|
||||
# OBLIGATOIRE — Générez avec :
|
||||
# python3 -c "import secrets; print(secrets.token_urlsafe(64))"
|
||||
JWT_SECRET_KEY=REMPLACEZ_PAR_UNE_CLE_SECRETE_DE_64_CARACTERES
|
||||
|
||||
# ─── Admin ──────────────────────────────────────────────────
|
||||
ADMIN_USERNAME=admin
|
||||
# Hash bcrypt de votre mot de passe admin
|
||||
# Générez avec : python3 -c "from passlib.context import CryptContext; print(CryptContext(schemes=['bcrypt']).hash('VotreMotDePasse'))"
|
||||
ADMIN_PASSWORD_HASH=REMPLACEZ_PAR_HASH_BCRYPT
|
||||
|
||||
# ─── Base de données PostgreSQL ─────────────────────────────
|
||||
POSTGRES_USER=translate
|
||||
# Mot de passe fort — minimum 32 caractères
|
||||
# Générez avec : python3 -c "import secrets; print(secrets.token_urlsafe(32))"
|
||||
POSTGRES_PASSWORD=REMPLACEZ_PAR_MOT_DE_PASSE_FORT
|
||||
POSTGRES_DB=translate_db
|
||||
DATABASE_URL=postgresql+asyncpg://translate:REMPLACEZ_PAR_MOT_DE_PASSE_FORT@postgres:5432/translate_db
|
||||
|
||||
# ─── Redis ──────────────────────────────────────────────────
|
||||
REDIS_URL=redis://redis:6379/0
|
||||
|
||||
# ─── Fournisseurs de traduction ─────────────────────────────
|
||||
# Google Translate (gratuit, via deep_translator) — toujours activé
|
||||
GOOGLE_TRANSLATE_ENABLED=true
|
||||
|
||||
# Google Cloud Translation API (payant)
|
||||
GOOGLE_CLOUD_ENABLED=false
|
||||
GOOGLE_CLOUD_API_KEY=
|
||||
|
||||
# DeepL
|
||||
DEEPL_ENABLED=false
|
||||
DEEPL_API_KEY=
|
||||
|
||||
# OpenRouter (IA)
|
||||
OPENROUTER_ENABLED=false
|
||||
OPENROUTER_API_KEY=
|
||||
OPENROUTER_MODEL=deepseek/deepseek-v3.2
|
||||
|
||||
# OpenAI
|
||||
OPENAI_ENABLED=false
|
||||
OPENAI_API_KEY=
|
||||
OPENAI_MODEL=gpt-4o-mini
|
||||
|
||||
# Désactivés en production standard
|
||||
OLLAMA_ENABLED=false
|
||||
ZAI_API_KEY=
|
||||
|
||||
# ─── Stripe Paiements ───────────────────────────────────────
|
||||
STRIPE_SECRET_KEY=sk_live_REMPLACEZ
|
||||
STRIPE_WEBHOOK_SECRET=whsec_REMPLACEZ
|
||||
STRIPE_PRICE_STARTER_MONTHLY=price_REMPLACEZ
|
||||
STRIPE_PRICE_STARTER_YEARLY=price_REMPLACEZ
|
||||
STRIPE_PRICE_PRO_MONTHLY=price_REMPLACEZ
|
||||
STRIPE_PRICE_PRO_YEARLY=price_REMPLACEZ
|
||||
STRIPE_PRICE_BUSINESS_MONTHLY=price_REMPLACEZ
|
||||
STRIPE_PRICE_BUSINESS_YEARLY=price_REMPLACEZ
|
||||
|
||||
# ─── Fichiers & Limites ─────────────────────────────────────
|
||||
MAX_FILE_SIZE_MB=50
|
||||
MAX_CONCURRENT_TRANSLATIONS=5
|
||||
CLEANUP_ENABLED=true
|
||||
FILE_TTL_MINUTES=60
|
||||
|
||||
# ─── HTTPS / HSTS ───────────────────────────────────────────
|
||||
ENABLE_HSTS=true
|
||||
LETSENCRYPT_EMAIL=votre-email@wordly.art
|
||||
|
||||
# ─── Rate limiting ──────────────────────────────────────────
|
||||
RATE_LIMIT_ENABLED=true
|
||||
RATE_LIMIT_PER_MINUTE=30
|
||||
RATE_LIMIT_PER_HOUR=200
|
||||
TRANSLATIONS_PER_MINUTE=5
|
||||
TRANSLATIONS_PER_HOUR=30
|
||||
Reference in New Issue
Block a user