All checks were successful
Deploy to Production / Build and Deploy (push) Successful in 2m5s
- Create Stripe products/prices (Starter/Pro/Business monthly+yearly) - Fix CRITICAL bug: add subscription_ends_at + cancel_at_period_end columns to users table - Alembic migration: f6a7b8c9d0e1_add_subscription_ends_at_cancel_at_period_end - Fix: implement handle_payment_failed() to set subscription_status=PAST_DUE - Fix: harmonize .env.production Stripe variable names to match pricing_config.py - Fix: add missing FRONTEND_URL and STRIPE_PUBLISHABLE_KEY to .env.production - Add all Stripe Price IDs (test mode) to .env.production - Wire credit purchase buttons to /api/v1/auth/create-credits-checkout - Dashboard sync post-checkout was already implemented (no change needed) Stripe test keys: configured in .env.production Webhook: must be configured on server via stripe CLI or Stripe Dashboard Webhook URL: https://wordly.art/api/v1/auth/webhook/stripe
107 lines
3.1 KiB
Plaintext
107 lines
3.1 KiB
Plaintext
# ============================================
|
|
# Wordly.art - .env de production
|
|
# ============================================
|
|
# Copier ce fichier en .env sur le serveur
|
|
# cp .env.production .env
|
|
# Puis remplacer les valeurs [A CHANGER]
|
|
# ============================================
|
|
|
|
# ---- Application ----
|
|
APP_NAME=Wordly
|
|
APP_ENV=production
|
|
DEBUG=false
|
|
LOG_LEVEL=INFO
|
|
|
|
# ---- Domaine ----
|
|
DOMAIN=wordly.art
|
|
NEXT_PUBLIC_API_URL=https://wordly.art
|
|
FRONTEND_URL=https://wordly.art
|
|
BACKEND_PORT=8000
|
|
FRONTEND_PORT=3000
|
|
|
|
# ---- Service de traduction par defaut ----
|
|
# Choisir: google, ollama, deepseek, minimax, deepl, openai, openrouter
|
|
TRANSLATION_SERVICE=google
|
|
|
|
# ---- Google (gratuit, toujours actif) ----
|
|
GOOGLE_TRANSLATE_ENABLED=true
|
|
|
|
# ---- Google OAuth (connexion avec Google) ----
|
|
GOOGLE_CLIENT_ID=
|
|
NEXT_PUBLIC_GOOGLE_CLIENT_ID=
|
|
|
|
# ---- Ollama (local, gratuit) ----
|
|
OLLAMA_ENABLED=false
|
|
OLLAMA_BASE_URL=http://ollama:11434
|
|
OLLAMA_MODEL=llama3
|
|
|
|
# ---- DeepSeek ----
|
|
DEEPSEEK_ENABLED=false
|
|
DEEPSEEK_API_KEY=
|
|
DEEPSEEK_MODEL=deepseek-chat
|
|
DEEPSEEK_BASE_URL=https://api.deepseek.com/v1
|
|
|
|
# ---- Minimax ----
|
|
MINIMAX_ENABLED=false
|
|
MINIMAX_API_KEY=
|
|
MINIMAX_MODEL=MiniMax-M1
|
|
MINIMAX_BASE_URL=https://api.minimax.chat/v1
|
|
|
|
# ---- DeepL ----
|
|
DEEPL_ENABLED=false
|
|
DEEPL_API_KEY=
|
|
|
|
# ---- OpenAI ----
|
|
OPENAI_ENABLED=false
|
|
OPENAI_API_KEY=
|
|
OPENAI_MODEL=gpt-4o-mini
|
|
OPENAI_BASE_URL=https://api.openai.com/v1
|
|
|
|
# ---- OpenRouter ----
|
|
OPENROUTER_ENABLED=false
|
|
OPENROUTER_API_KEY=
|
|
OPENROUTER_MODEL=deepseek/deepseek-chat
|
|
|
|
# ---- Upload ----
|
|
MAX_FILE_SIZE_MB=50
|
|
ALLOWED_EXTENSIONS=.docx,.xlsx,.pptx
|
|
|
|
# ---- Rate Limiting ----
|
|
RATE_LIMIT_ENABLED=true
|
|
RATE_LIMIT_REQUESTS_PER_MINUTE=60
|
|
RATE_LIMIT_TRANSLATIONS_PER_MINUTE=10
|
|
RATE_LIMIT_TRANSLATIONS_PER_HOUR=100
|
|
RATE_LIMIT_TRANSLATIONS_PER_DAY=500
|
|
|
|
# ---- Admin ----
|
|
ADMIN_USERNAME=admin
|
|
ADMIN_PASSWORD_HASH=CHANGE_WITH_BCRYPT_HASH
|
|
|
|
# ---- Secrets (deja generes) ----
|
|
JWT_SECRET_KEY=84-MniOv3rOZZ3FczwDvsNNHqZRf8yKI06uMNQGAgMSV8yAJ19comNe6FHHcnVyeNm-fvDxlcb9CWe40y4oy7A
|
|
ADMIN_TOKEN_SECRET=1301880be1bc8026676d7f4fb13ae1c70fcd2abbd2f2cdfcb044eea5c7005ce3
|
|
CORS_ORIGINS=https://wordly.art
|
|
|
|
# ---- Database ----
|
|
POSTGRES_USER=translate
|
|
POSTGRES_PASSWORD=yLLgkEvt6mvzGDdoqtQvI1vEgMmR-W75ZTPW5StaIAU
|
|
POSTGRES_DB=translate_db
|
|
|
|
# ---- Monitoring ----
|
|
GRAFANA_USER=admin
|
|
GRAFANA_PASSWORD=WordlyGrafana2026!
|
|
|
|
# ---- Stripe ----
|
|
# Clés TEST — remplacer par sk_live_... / pk_live_... en production réelle
|
|
STRIPE_PUBLISHABLE_KEY=pk_test_51SkSHkCKXUJE51jnCr2QV4vCE18GH1XF59eHrHOV46EORuZTPVXFXxrbcJamyoJLaUHMc2McCRVkU4b6VMAWVR2R00XRdwmXMx
|
|
STRIPE_SECRET_KEY=sk_test_51SkSHkCKXUJE51jnbEtXZ0nKiTHTa8ohDwLH8fZiDVEx6Ze0g5dg4fGJJgX1VgNHvF93GE3HTramT3oQrCaqOxid00OXTcZlsW
|
|
STRIPE_WEBHOOK_SECRET=
|
|
|
|
# Price IDs créés dans Stripe Dashboard (wordly.art — test mode)
|
|
STRIPE_PRICE_STARTER_MONTHLY=price_1TdF8FCKXUJE51jnNAeLqhF3
|
|
STRIPE_PRICE_STARTER_YEARLY=price_1TdF8GCKXUJE51jnBhVVrjrh
|
|
STRIPE_PRICE_PRO_MONTHLY=price_1TdF8GCKXUJE51jn9ChAAhKM
|
|
STRIPE_PRICE_PRO_YEARLY=price_1TdF8HCKXUJE51jnpsvBivDe
|
|
STRIPE_PRICE_BUSINESS_MONTHLY=price_1TdF8HCKXUJE51jn2K9EeBGJ
|
|
STRIPE_PRICE_BUSINESS_YEARLY=price_1TdF8ICKXUJE51jnmgWZxW4U
|