mirror of
https://github.com/Dvorinka/MyClubServer.git
synced 2026-06-03 18:22:57 +00:00
200 lines
6.0 KiB
Bash
200 lines
6.0 KiB
Bash
# Application
|
|
APP_NAME=MyClub
|
|
APP_ENV=development #or production
|
|
PORT=8080
|
|
DEBUG=true
|
|
PREMIUM=false
|
|
CLUB_DATA_MODE=auto #manual OR auto
|
|
|
|
# Database Migrations & Seeding
|
|
RUN_MIGRATIONS=true
|
|
SEED_DATABASE=false
|
|
|
|
# Database
|
|
DB_HOST=localhost
|
|
DB_PORT=5432
|
|
DB_USER=postgres
|
|
DB_PASSWORD=postgres
|
|
DB_NAME=fotbal_club
|
|
DATABASE_URL=postgres://${DB_USER}:${DB_PASSWORD}@${DB_HOST}:${DB_PORT}/${DB_NAME}?sslmode=disable
|
|
|
|
# JWT
|
|
JWT_SECRET=your_jwt_secret_key_here
|
|
JWT_EXPIRATION_HOURS=24
|
|
|
|
# Email Configuration
|
|
SMTP_HOST=smtp.example.com
|
|
SMTP_PORT=587
|
|
SMTP_USER=your_email@example.com
|
|
SMTP_PASSWORD=your_email_password
|
|
SMTP_FROM=noreply@fotbalclub.com
|
|
SMTP_FROM_NAME="MyClub"
|
|
SMTP_ENCRYPTION=tls # tls, ssl, or none
|
|
SMTP_AUTH=true
|
|
SMTP_SKIP_VERIFY=false # Set to true for self-signed certificates
|
|
|
|
# Email Templates
|
|
EMAIL_TEMPLATE_DIR=./templates/emails
|
|
|
|
# Contact Form
|
|
CONTACT_EMAIL=help@tdvorak.dev
|
|
ADMIN_EMAIL=help@tdvorak.dev
|
|
|
|
# Optional special SMTP override used ONLY for admin-triggered password reset emails
|
|
# If set, the backend will use these credentials for POST /api/v1/admin/users/send-reset
|
|
# while normal emails continue to use SMTP_* above.
|
|
# Example (Purelymail over SSL on 465):
|
|
# ADMIN_RESET_SMTP_HOST=smtp.purelymail.com
|
|
# ADMIN_RESET_SMTP_PORT=465
|
|
# ADMIN_RESET_SMTP_USER=system@tdvorak.dev
|
|
# ADMIN_RESET_SMTP_PASS=REPLACE_WITH_SECURE_PASSWORD
|
|
# ADMIN_RESET_SMTP_FROM=system@tdvorak.dev
|
|
# ADMIN_RESET_SMTP_FROM_NAME="Fotbal Club Admin"
|
|
|
|
# Newsletter
|
|
NEWSLETTER_ENABLED=true
|
|
|
|
# File Uploads
|
|
UPLOAD_DIR=./uploads
|
|
MAX_UPLOAD_SIZE=50
|
|
ALLOWED_FILE_TYPES=image/jpeg,image/png,image/gif,application/pdf
|
|
MAX_FILES=5 # Maximum number of files per upload
|
|
|
|
# CORS
|
|
ALLOWED_ORIGINS=*
|
|
# Frontend Configuration
|
|
REACT_APP_NAME=Fotbal Club Manager
|
|
REACT_APP_API_URL=/api/v1
|
|
|
|
# FACR API Configuration
|
|
|
|
# MyClub Central Directory Service
|
|
DIRECTORY_INGEST_URL=https://error.sportcreative.eu/api/v1/directory/register
|
|
DIRECTORY_INGEST_TOKEN=directory-registration-secure-token-2025
|
|
|
|
# Error Reporting (existing)
|
|
ERROR_INGEST_URL=https://error.sportcreative.eu/api/v1/errors
|
|
ERROR_INGEST_TOKEN=error-ingest-token-secure
|
|
REACT_APP_FACR_API_BASE_URL=/api/v1/facr
|
|
REACT_APP_FACR_API_TIMEOUT=5000
|
|
REACT_APP_FACR_CACHE_TTL=3600000
|
|
|
|
# Homepage Layout (sparta or classic)
|
|
REACT_APP_HOMEPAGE_LAYOUT=classic
|
|
|
|
# Logging
|
|
LOG_LEVEL=info # debug, info, warn, error
|
|
LOG_FORMAT=text # text or json
|
|
LOG_OUTPUT=stdout # stdout, stderr, or file path
|
|
|
|
# Server timeouts (increase for long AI requests)
|
|
READ_TIMEOUT=15
|
|
WRITE_TIMEOUT=120
|
|
|
|
# Feature Flags
|
|
REMBG_ENABLED=true
|
|
|
|
# OpenRouter (for AI blog generation)
|
|
OPENROUTER_ON=FALSE
|
|
OPENROUTER_API_KEY=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
|
|
OPENROUTER_BASE_URL=https://openrouter.ai/api/v1
|
|
# Defaults can be overridden per environment
|
|
OPENROUTER_MODEL=mistralai/mistral-small-3.1-24b-instruct:free
|
|
OPENROUTER_FALLBACK_MODEL=mistralai/mistral-7b-instruct:free
|
|
OPENROUTER_FALLBACK_MODEL2=openrouter/auto
|
|
# Optional headers to identify your site/app to OpenRouter
|
|
OPENROUTER_SITE_URL=http://localhost:8080
|
|
OPENROUTER_APP_NAME=MyClub
|
|
|
|
# DEEPSEEK (for AI blog generation)
|
|
DEEPSEEK_ON=TRUE
|
|
DEEPSEEK_API_KEY=sk-c74e363b04ed4eb7afba080c10a1e679
|
|
DEEPSEEK_BASE_URL=https://api.deepseek.com
|
|
DEEPSEEK_MODEL=deepseek-chat
|
|
DEEPSEEK_THINKING_MODEL=deepseek-reasoner
|
|
DEEPSEEK_MAX_DAILY_TOKENS=60000
|
|
DEEPSEEK_REASONER_MAX_DAILY_TOKENS=10000
|
|
|
|
# Frontend AI timeout (ms)
|
|
REACT_APP_AI_TIMEOUT_MS=90000
|
|
|
|
# Umami AnalyticsMISTRAL_API_KEY=IY9Z5Ot8sBEdIC9F5cnAYMNxDffIU9Ta
|
|
# optional:
|
|
# MISTRAL_BASE_URL=https://api.mistral.ai
|
|
UMAMI_URL=https://umami.tdvorak.dev
|
|
UMAMI_USERNAME=admin
|
|
UMAMI_PASSWORD=eevRQ6h3G@!c#y4A1T
|
|
UMAMI_WEBSITE_ID=
|
|
|
|
PREFETCH_TARGET=http://127.0.0.1:8080/api/v1
|
|
ERROR_LOCAL=true
|
|
|
|
ERROR_INGEST_URL=
|
|
ERROR_INGEST_TOKEN=fcing_e17b6c1a4d2f9073b5c8e1f2a3d4e5f60718293a4b5c6d7e8f90123456789abc
|
|
|
|
REACT_APP_ERROR_INGEST_URL=
|
|
REACT_APP_ERROR_INGEST_TOKEN=fcing_e17b6c1a4d2f9073b5c8e1f2a3d4e5f60718293a4b5c6d7e8f90123456789abc
|
|
|
|
ERROR_REVIEW_ADMIN_URL=
|
|
ERROR_REVIEW_ADMIN_TOKEN=fcadm_8c3a0c9f6d3b4e2caf1d7b9a2e5c6f7081a2b3c4d5e6f718192a3b4c5d6e7f80
|
|
|
|
|
|
# Mistral (direct API: text, vision, OCR, voice)
|
|
MISTRAL_ON=TRUE
|
|
MISTRAL_API_KEY=IY9Z5Ot8sBEdIC9F5cnAYMNxDffIU9Ta
|
|
MISTRAL_BASE_URL=https://api.mistral.ai/v1
|
|
|
|
# Text models (used for blog/about etc.)
|
|
MISTRAL_TEXT_MODEL_PRIMARY=mistral-small-latest
|
|
MISTRAL_TEXT_MODEL_SECONDARY=ministral-14b-latest
|
|
|
|
# Vision / OCR
|
|
MISTRAL_VISION_MODEL_PIXTRAL=pixtral-12b
|
|
MISTRAL_OCR_MODEL=mistral-ocr-latest
|
|
|
|
# Voice (Voxtral)
|
|
MISTRAL_VOICE_MODEL_PRIMARY=voxtral-small-latest
|
|
MISTRAL_VOICE_MODEL_CHEAP=voxtral-mini-latest
|
|
|
|
# Server-side per-model quota (per user per day)
|
|
AI_DAILY_REQUEST_LIMIT_PER_MODEL=10
|
|
|
|
# Grok (x.ai) image generation
|
|
XAI_ON=FALSE
|
|
XAI_API_KEY=xai-ER2BQMW9HEAMUeEChj13wjQM0d9fGg8qKVGeKzluciSG93T50NLLxyW1mQc8AhO9Fplqw4aNPrl01Eo5
|
|
XAI_BASE_URL=https://api.x.ai/v1
|
|
XAI_IMAGE_MODEL=grok-2-image-latest
|
|
XAI_IMAGE_MODEL_INSTAGRAM=grok-2-image-latest
|
|
XAI_IMAGE_INSTAGRAM_DAILY_LIMIT=5
|
|
|
|
# Grok
|
|
GROK_ON=TRUE
|
|
GROK_API_KEY=xai-ER2BQMW9HEAMUeEChj13wjQM0d9fGg8qKVGeKzluciSG93T50NLLxyW1mQc8AhO9Fplqw4aNPrl01Eo5
|
|
GROK_BASE_URL=https://api.x.ai/v1
|
|
GROK_TEXT_MODEL_PRIMARY=grok-4-1-fast-non-reasoning
|
|
GROK_TEXT_MODEL_SECONDARY=grok-4-1-fast-reasoning
|
|
|
|
ESHOP_ENABLED=false
|
|
ESHOP_SERVICE_SUFFIX=
|
|
ESHOP_FRONTEND_URL=http://localhost:3100
|
|
ESHOP_API_URL=http://localhost:8082/api/v1/eshop
|
|
ESHOP_FRONTEND_PORT=3100
|
|
ESHOP_BACKEND_PORT=8082
|
|
|
|
PACKETA_API_PASSWORD=c940e91531cf0d50ac12a89415c16dcc
|
|
PACKETA_WIDGET_API_KEY=c940e91531cf0d50
|
|
PACKETA_ESHP_NAME=MyClub
|
|
PACKETA_ENV=test
|
|
# Revolut (E-shop payments)
|
|
# Use test credentials for development, production/live for real payments.
|
|
REVOLUT_ENABLED=false
|
|
REVOLUT_ENVIRONMENT=sandbox # sandbox | production
|
|
REVOLUT_API_KEY=your_revolut_api_key_here # Secret key from Revolut Business
|
|
REVOLUT_PUBLIC_KEY=your_revolut_public_key_here # Public key for checkout
|
|
REVOLUT_WEBHOOK_SECRET=your_revolut_webhook_secret_here
|
|
REVOLUT_RETURN_URL=${ESHOP_FRONTEND_URL}/objednavka/dekujeme
|
|
REVOLUT_WEBHOOK_URL=${ESHOP_API_URL}/payments/revolut/webhook
|
|
|
|
# Weather API
|
|
WEATHER_API_KEY=20dfd9a556ec43888dc103523250904
|
|
WEATHER_API_BASE_URL=https://api.weatherapi.com/v1 |