From 286cf1f1c8cbd4a2e3816fc81b8c69f53e5b70b7 Mon Sep 17 00:00:00 2001 From: glpshchn <464976@niuitmo.ru> Date: Mon, 15 Dec 2025 02:51:27 +0300 Subject: [PATCH] Update files --- moderation/backend-py/config.py | 92 +++++++++++++++------------ moderation/backend-py/docker-start.sh | 2 +- 2 files changed, 54 insertions(+), 40 deletions(-) diff --git a/moderation/backend-py/config.py b/moderation/backend-py/config.py index d6f0f5d..099a131 100644 --- a/moderation/backend-py/config.py +++ b/moderation/backend-py/config.py @@ -6,70 +6,84 @@ from pathlib import Path from pydantic_settings import BaseSettings from dotenv import load_dotenv -# Load .env from project root +# Helper to clean env values (remove comments) +def get_env_clean(key: str, default: str = '') -> str: + """Get environment variable and clean it from comments""" + value = os.getenv(key, default) + if value and '#' in value: + # Remove inline comments + value = value.split('#')[0].strip() + return value + +# Load .env from project root (or /app/.env in Docker) root_env_path = Path(__file__).parent.parent.parent / '.env' -if root_env_path.exists(): - load_dotenv(dotenv_path=root_env_path) +docker_env_path = Path('/app/.env') + +if docker_env_path.exists(): + load_dotenv(dotenv_path=docker_env_path, override=False) + print(f"✅ Loaded .env from: {docker_env_path} (Docker)") +elif root_env_path.exists(): + load_dotenv(dotenv_path=root_env_path, override=False) print(f"✅ Loaded .env from: {root_env_path}") else: - print(f"⚠️ .env file not found at: {root_env_path}") + print(f"⚠️ .env file not found at: {root_env_path} or {docker_env_path}") class Settings(BaseSettings): """Application settings""" # Server - MODERATION_PORT: int = int(os.getenv('MODERATION_PORT', '3001')) - NODE_ENV: str = os.getenv('NODE_ENV', 'development') + MODERATION_PORT: int = int(get_env_clean('MODERATION_PORT', '3001')) + NODE_ENV: str = get_env_clean('NODE_ENV', 'development') # MongoDB - MONGODB_URI: str = os.getenv('MONGODB_URI', 'mongodb://localhost:27017/nakama') + MONGODB_URI: str = get_env_clean('MONGODB_URI', 'mongodb://localhost:27017/nakama') # JWT - JWT_ACCESS_SECRET: str = os.getenv('JWT_ACCESS_SECRET', 'nakama_access_secret_change_me') - JWT_REFRESH_SECRET: str = os.getenv('JWT_REFRESH_SECRET', 'nakama_refresh_secret_change_me') - JWT_ACCESS_EXPIRES_IN: int = int(os.getenv('JWT_ACCESS_EXPIRES_IN', '300')) - JWT_REFRESH_EXPIRES_IN: int = int(os.getenv('JWT_REFRESH_EXPIRES_IN', '604800')) - JWT_ACCESS_COOKIE_NAME: str = os.getenv('JWT_ACCESS_COOKIE_NAME', 'nakama_access_token') - JWT_REFRESH_COOKIE_NAME: str = os.getenv('JWT_REFRESH_COOKIE_NAME', 'nakama_refresh_token') + JWT_ACCESS_SECRET: str = get_env_clean('JWT_ACCESS_SECRET', 'nakama_access_secret_change_me') + JWT_REFRESH_SECRET: str = get_env_clean('JWT_REFRESH_SECRET', 'nakama_refresh_secret_change_me') + JWT_ACCESS_EXPIRES_IN: int = int(get_env_clean('JWT_ACCESS_EXPIRES_IN', '300')) + JWT_REFRESH_EXPIRES_IN: int = int(get_env_clean('JWT_REFRESH_EXPIRES_IN', '604800')) + JWT_ACCESS_COOKIE_NAME: str = get_env_clean('JWT_ACCESS_COOKIE_NAME', 'nakama_access_token') + JWT_REFRESH_COOKIE_NAME: str = get_env_clean('JWT_REFRESH_COOKIE_NAME', 'nakama_refresh_token') # Telegram - TELEGRAM_BOT_TOKEN: str = os.getenv('TELEGRAM_BOT_TOKEN', '') - MODERATION_BOT_TOKEN: str = os.getenv('MODERATION_BOT_TOKEN', '') - MODERATION_BOT_USERNAME: str = os.getenv('MODERATION_BOT_USERNAME', '') - MODERATION_OWNER_USERNAMES: str = os.getenv('MODERATION_OWNER_USERNAMES', 'glpshchn00') - MODERATION_CHANNEL_USERNAME: str = os.getenv('MODERATION_CHANNEL_USERNAME', '@reichenbfurry') + TELEGRAM_BOT_TOKEN: str = get_env_clean('TELEGRAM_BOT_TOKEN', '') + MODERATION_BOT_TOKEN: str = get_env_clean('MODERATION_BOT_TOKEN', '') + MODERATION_BOT_USERNAME: str = get_env_clean('MODERATION_BOT_USERNAME', '') + MODERATION_OWNER_USERNAMES: str = get_env_clean('MODERATION_OWNER_USERNAMES', 'glpshchn00') + MODERATION_CHANNEL_USERNAME: str = get_env_clean('MODERATION_CHANNEL_USERNAME', '@reichenbfurry') # Frontend - FRONTEND_URL: str = os.getenv('FRONTEND_URL', 'http://localhost:5173') - MODERATION_CORS_ORIGIN: str = os.getenv('MODERATION_CORS_ORIGIN', '*') + FRONTEND_URL: str = get_env_clean('FRONTEND_URL', 'http://localhost:5173') + MODERATION_CORS_ORIGIN: str = get_env_clean('MODERATION_CORS_ORIGIN', '*') # Email - EMAIL_PROVIDER: str = os.getenv('EMAIL_PROVIDER', 'yandex') - EMAIL_FROM: str = os.getenv('EMAIL_FROM', 'noreply@nakama.guru') - OWNER_EMAIL: str = os.getenv('OWNER_EMAIL', 'aaem9848@gmail.com') + EMAIL_PROVIDER: str = get_env_clean('EMAIL_PROVIDER', 'yandex') + EMAIL_FROM: str = get_env_clean('EMAIL_FROM', 'noreply@nakama.guru') + OWNER_EMAIL: str = get_env_clean('OWNER_EMAIL', 'aaem9848@gmail.com') # AWS SES / Yandex Cloud Postbox - AWS_SES_ACCESS_KEY_ID: str = os.getenv('AWS_SES_ACCESS_KEY_ID', '') - AWS_SES_SECRET_ACCESS_KEY: str = os.getenv('AWS_SES_SECRET_ACCESS_KEY', '') - AWS_SES_REGION: str = os.getenv('AWS_SES_REGION', 'us-east-1') - AWS_SES_ENDPOINT_URL: str = os.getenv('AWS_SES_ENDPOINT_URL', '') + AWS_SES_ACCESS_KEY_ID: str = get_env_clean('AWS_SES_ACCESS_KEY_ID', '') + AWS_SES_SECRET_ACCESS_KEY: str = get_env_clean('AWS_SES_SECRET_ACCESS_KEY', '') + AWS_SES_REGION: str = get_env_clean('AWS_SES_REGION', 'us-east-1') + AWS_SES_ENDPOINT_URL: str = get_env_clean('AWS_SES_ENDPOINT_URL', '') # Yandex SMTP - YANDEX_SMTP_HOST: str = os.getenv('YANDEX_SMTP_HOST', 'smtp.yandex.ru') - YANDEX_SMTP_PORT: int = int(os.getenv('YANDEX_SMTP_PORT', '465')) - YANDEX_SMTP_USER: str = os.getenv('YANDEX_SMTP_USER', '') - YANDEX_SMTP_PASSWORD: str = os.getenv('YANDEX_SMTP_PASSWORD', '') - YANDEX_SMTP_SECURE: bool = os.getenv('YANDEX_SMTP_SECURE', 'true').lower() == 'true' + YANDEX_SMTP_HOST: str = get_env_clean('YANDEX_SMTP_HOST', 'smtp.yandex.ru') + YANDEX_SMTP_PORT: int = int(get_env_clean('YANDEX_SMTP_PORT', '465')) + YANDEX_SMTP_USER: str = get_env_clean('YANDEX_SMTP_USER', '') + YANDEX_SMTP_PASSWORD: str = get_env_clean('YANDEX_SMTP_PASSWORD', '') + YANDEX_SMTP_SECURE: bool = get_env_clean('YANDEX_SMTP_SECURE', 'true').lower() == 'true' # MinIO - MINIO_ENABLED: bool = os.getenv('MINIO_ENABLED', 'false').lower() == 'true' - MINIO_ENDPOINT: str = os.getenv('MINIO_ENDPOINT', 'localhost') - MINIO_PORT: int = int(os.getenv('MINIO_PORT', '9000')) - MINIO_USE_SSL: bool = os.getenv('MINIO_USE_SSL', 'false').lower() == 'true' - MINIO_ACCESS_KEY: str = os.getenv('MINIO_ACCESS_KEY', 'minioadmin') - MINIO_SECRET_KEY: str = os.getenv('MINIO_SECRET_KEY', 'minioadmin') - MINIO_BUCKET: str = os.getenv('MINIO_BUCKET', 'nakama-media') + MINIO_ENABLED: bool = get_env_clean('MINIO_ENABLED', 'false').lower() == 'true' + MINIO_ENDPOINT: str = get_env_clean('MINIO_ENDPOINT', 'localhost') + MINIO_PORT: int = int(get_env_clean('MINIO_PORT', '9000')) + MINIO_USE_SSL: bool = get_env_clean('MINIO_USE_SSL', 'false').lower() == 'true' + MINIO_ACCESS_KEY: str = get_env_clean('MINIO_ACCESS_KEY', 'minioadmin') + MINIO_SECRET_KEY: str = get_env_clean('MINIO_SECRET_KEY', 'minioadmin') + MINIO_BUCKET: str = get_env_clean('MINIO_BUCKET', 'nakama-media') @property def IS_DEVELOPMENT(self) -> bool: diff --git a/moderation/backend-py/docker-start.sh b/moderation/backend-py/docker-start.sh index e32b9d8..1f0708f 100755 --- a/moderation/backend-py/docker-start.sh +++ b/moderation/backend-py/docker-start.sh @@ -31,7 +31,7 @@ echo "🚀 Запуск контейнера..." docker run -d \ --name nakama-moderation-py \ -p 3001:3001 \ - --env-file ../../.env \ + -v "$(cd ../.. && pwd)/.env:/app/.env:ro" \ --restart unless-stopped \ nakama-moderation-py