Files
office_translator/.env.ionos
Sepehr Ramezani 26bd096a06 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>
2026-04-25 15:01:47 +02:00

94 lines
3.9 KiB
Plaintext

# ============================================================
# 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