הגדרות תצורה

מדריך מפורט להגדרת Code Keeper Bot.

קובץ התצורה הראשי

הבוט משתמש בקובץ config.py להגדרות הראשיות:

class config.BotConfig(BOT_TOKEN, MONGODB_URL, DATABASE_NAME='code_keeper_bot', REDIS_URL=None, CACHE_ENABLED=True, GITHUB_TOKEN=None, PASTEBIN_API_KEY=None, MAX_CODE_SIZE=100000, MAX_FILES_PER_USER=1000, SUPPORTED_LANGUAGES=None, PUBLIC_BASE_URL=None, WEBAPP_URL=None, MAINTENANCE_MODE=False, MAINTENANCE_MESSAGE='🚀 אנחנו מעלים עדכון חדש!\\nהבוט יחזור לפעול ממש בקרוב (1 - 3 דקות)', MAINTENANCE_AUTO_WARMUP_SECS=180, HIGHLIGHT_THEME='github-dark', GIT_CHECKPOINT_PREFIX='checkpoint', GOOGLE_CLIENT_ID=None, GOOGLE_CLIENT_SECRET=None, GOOGLE_OAUTH_SCOPES='https://www.googleapis.com/auth/drive.file', GOOGLE_TOKEN_REFRESH_MARGIN_SECS=120, DRIVE_MENU_V2=True, DOCUMENTATION_URL='https://amirbiron.github.io/CodeBot/', BOT_LABEL='CodeBot', DRIVE_ADD_HASH=False)[מקור]

Bases: object

קונפיגורציה עיקרית של הבוט

פרמטרים:
  • BOT_TOKEN (str)

  • MONGODB_URL (str)

  • DATABASE_NAME (str)

  • REDIS_URL (str | None)

  • CACHE_ENABLED (bool)

  • GITHUB_TOKEN (str | None)

  • PASTEBIN_API_KEY (str | None)

  • MAX_CODE_SIZE (int)

  • MAX_FILES_PER_USER (int)

  • SUPPORTED_LANGUAGES (list)

  • PUBLIC_BASE_URL (str | None)

  • WEBAPP_URL (str | None)

  • MAINTENANCE_MODE (bool)

  • MAINTENANCE_MESSAGE (str)

  • MAINTENANCE_AUTO_WARMUP_SECS (int)

  • HIGHLIGHT_THEME (str)

  • GIT_CHECKPOINT_PREFIX (str)

  • GOOGLE_CLIENT_ID (str | None)

  • GOOGLE_CLIENT_SECRET (str | None)

  • GOOGLE_OAUTH_SCOPES (str)

  • GOOGLE_TOKEN_REFRESH_MARGIN_SECS (int)

  • DRIVE_MENU_V2 (bool)

  • DOCUMENTATION_URL (str)

  • BOT_LABEL (str)

  • DRIVE_ADD_HASH (bool)

BOT_TOKEN: str
MONGODB_URL: str
DATABASE_NAME: str = 'code_keeper_bot'
REDIS_URL: Optional[str] = None
CACHE_ENABLED: bool = True
GITHUB_TOKEN: Optional[str] = None
PASTEBIN_API_KEY: Optional[str] = None
MAX_CODE_SIZE: int = 100000
MAX_FILES_PER_USER: int = 1000
SUPPORTED_LANGUAGES: list = None
PUBLIC_BASE_URL: Optional[str] = None
WEBAPP_URL: Optional[str] = None
MAINTENANCE_MODE: bool = False
MAINTENANCE_MESSAGE: str = '🚀 אנחנו מעלים עדכון חדש!\nהבוט יחזור לפעול ממש בקרוב (1 - 3 דקות)'
MAINTENANCE_AUTO_WARMUP_SECS: int = 180
HIGHLIGHT_THEME: str = 'github-dark'
GIT_CHECKPOINT_PREFIX: str = 'checkpoint'
GOOGLE_CLIENT_ID: Optional[str] = None
GOOGLE_CLIENT_SECRET: Optional[str] = None
GOOGLE_OAUTH_SCOPES: str = 'https://www.googleapis.com/auth/drive.file'
GOOGLE_TOKEN_REFRESH_MARGIN_SECS: int = 120
DRIVE_MENU_V2: bool = True
DOCUMENTATION_URL: str = 'https://amirbiron.github.io/CodeBot/'
BOT_LABEL: str = 'CodeBot'
DRIVE_ADD_HASH: bool = False
__init__(BOT_TOKEN, MONGODB_URL, DATABASE_NAME='code_keeper_bot', REDIS_URL=None, CACHE_ENABLED=True, GITHUB_TOKEN=None, PASTEBIN_API_KEY=None, MAX_CODE_SIZE=100000, MAX_FILES_PER_USER=1000, SUPPORTED_LANGUAGES=None, PUBLIC_BASE_URL=None, WEBAPP_URL=None, MAINTENANCE_MODE=False, MAINTENANCE_MESSAGE='🚀 אנחנו מעלים עדכון חדש!\\nהבוט יחזור לפעול ממש בקרוב (1 - 3 דקות)', MAINTENANCE_AUTO_WARMUP_SECS=180, HIGHLIGHT_THEME='github-dark', GIT_CHECKPOINT_PREFIX='checkpoint', GOOGLE_CLIENT_ID=None, GOOGLE_CLIENT_SECRET=None, GOOGLE_OAUTH_SCOPES='https://www.googleapis.com/auth/drive.file', GOOGLE_TOKEN_REFRESH_MARGIN_SECS=120, DRIVE_MENU_V2=True, DOCUMENTATION_URL='https://amirbiron.github.io/CodeBot/', BOT_LABEL='CodeBot', DRIVE_ADD_HASH=False)
פרמטרים:
  • BOT_TOKEN (str)

  • MONGODB_URL (str)

  • DATABASE_NAME (str)

  • REDIS_URL (str | None)

  • CACHE_ENABLED (bool)

  • GITHUB_TOKEN (str | None)

  • PASTEBIN_API_KEY (str | None)

  • MAX_CODE_SIZE (int)

  • MAX_FILES_PER_USER (int)

  • SUPPORTED_LANGUAGES (list)

  • PUBLIC_BASE_URL (str | None)

  • WEBAPP_URL (str | None)

  • MAINTENANCE_MODE (bool)

  • MAINTENANCE_MESSAGE (str)

  • MAINTENANCE_AUTO_WARMUP_SECS (int)

  • HIGHLIGHT_THEME (str)

  • GIT_CHECKPOINT_PREFIX (str)

  • GOOGLE_CLIENT_ID (str | None)

  • GOOGLE_CLIENT_SECRET (str | None)

  • GOOGLE_OAUTH_SCOPES (str)

  • GOOGLE_TOKEN_REFRESH_MARGIN_SECS (int)

  • DRIVE_MENU_V2 (bool)

  • DOCUMENTATION_URL (str)

  • BOT_LABEL (str)

  • DRIVE_ADD_HASH (bool)

Return type:

None

config.load_config()[מקור]

טוען את הקונפיגורציה ממשתני הסביבה

Return type:

BotConfig

משתני סביבה

רשימת כל משתני הסביבה הנתמכים:

הגדרות בסיסיות:

# Telegram Bot
BOT_TOKEN=your_bot_token_here
BOT_USERNAME=@YourBotUsername

# Database
MONGODB_URL=mongodb://localhost:27017/code_keeper
DATABASE_NAME=code_keeper

# Admin Users
ADMIN_USER_IDS=123456789,987654321

הגדרות GitHub:

# GitHub Integration
GITHUB_TOKEN=ghp_xxxxxxxxxxxxxxxxxxxx
GITHUB_USERNAME=your_username
GITHUB_DEFAULT_REPO=code-snippets

הגדרות אבטחה:

# Encryption
ENCRYPTION_KEY=your-32-byte-encryption-key-here
ENABLE_ENCRYPTION=true

# Rate Limiting
RATE_LIMIT_ENABLED=true
MAX_REQUESTS_PER_MINUTE=30
MAX_FILES_PER_USER=1000

הגדרות ביצועים:

# Cache
REDIS_URL=redis://localhost:6379
CACHE_TTL=3600

# Performance
MAX_WORKERS=4
CONNECTION_POOL_SIZE=10
REQUEST_TIMEOUT=30

הגדרות גיבוי:

# Backup
BACKUP_ENABLED=true
BACKUP_INTERVAL=3600
BACKUP_PATH=/var/backups/code-keeper
BACKUP_RETENTION_DAYS=30

הגדרות מתקדמות

הגדרת Webhooks:

# עבור production עם webhooks
WEBHOOK_URL = "https://your-domain.com/webhook"
WEBHOOK_PORT = 8443
WEBHOOK_LISTEN = "0.0.0.0"

הגדרת Logging:

# רמות לוג
LOG_LEVEL = "INFO"  # DEBUG, INFO, WARNING, ERROR, CRITICAL
LOG_FILE = "/var/log/code-keeper/bot.log"
LOG_FORMAT = "%(asctime)s - %(name)s - %(levelname)s - %(message)s"

הגדרת שפות תכנות נתמכות:

SUPPORTED_LANGUAGES = [
    'python', 'javascript', 'java', 'cpp', 'c',
    'csharp', 'go', 'rust', 'ruby', 'php',
    'swift', 'kotlin', 'typescript', 'scala',
    'r', 'matlab', 'sql', 'bash', 'powershell'
]

הגדרת גבולות:

# גבולות גודל
MAX_FILE_SIZE = 10 * 1024 * 1024  # 10MB
MAX_CODE_LENGTH = 100000  # תווים
MAX_FILENAME_LENGTH = 255

# גבולות כמות
MAX_FILES_PER_USER = 1000
MAX_SEARCH_RESULTS = 50
MAX_BATCH_SIZE = 10

הגדרת MongoDB

אינדקסים מומלצים:

// אינדקס לחיפוש מהיר
db.code_snippets.createIndex({ "user_id": 1, "created_at": -1 })
db.code_snippets.createIndex({ "programming_language": 1 })
db.code_snippets.createIndex({ "file_name": "text" })

// אינדקס לחיפוש טקסט מלא
db.code_snippets.createIndex({ "code": "text", "note": "text" })

הגדרות ביצועים:

# mongod.conf
storage:
  wiredTiger:
    engineConfig:
      cacheSizeGB: 1

net:
  maxIncomingConnections: 100

הגדרת Redis Cache

תצורת Redis:

# redis.conf
maxmemory 256mb
maxmemory-policy allkeys-lru

# Persistence
save 900 1
save 300 10
save 60 10000

שימוש בקאש:

# הפעלת קאש
CACHE_ENABLED = True

# מה לשמור בקאש
CACHE_USER_DATA = True
CACHE_SEARCH_RESULTS = True
CACHE_STATISTICS = True

הגדרות אבטחה

הצפנת נתונים:

# הצפנת קוד בדאטאבייס
ENCRYPT_CODE = True
ENCRYPTION_ALGORITHM = "AES-256-GCM"

# הצפנת תקשורת
USE_HTTPS = True
SSL_CERT_PATH = "/path/to/cert.pem"
SSL_KEY_PATH = "/path/to/key.pem"

הגנה מפני התקפות:

# Anti-spam
SPAM_DETECTION_ENABLED = True
MAX_MESSAGES_PER_MINUTE = 10

# Input validation
STRICT_INPUT_VALIDATION = True
SANITIZE_HTML = True

# Session security
SESSION_TIMEOUT = 3600
REQUIRE_AUTHENTICATION = True

תצורה לסביבות שונות

Development:

# .env.development
DEBUG = True
LOG_LEVEL = "DEBUG"
MONGODB_URL = "mongodb://localhost:27017/code_keeper_dev"

Staging:

# .env.staging
DEBUG = False
LOG_LEVEL = "INFO"
MONGODB_URL = "mongodb://staging-db:27017/code_keeper_staging"

Production:

# .env.production
DEBUG = False
LOG_LEVEL = "WARNING"
MONGODB_URL = "mongodb://prod-db:27017/code_keeper"
USE_WEBHOOK = True

דוגמת קובץ .env מלא

# === Telegram Configuration ===
BOT_TOKEN=123456789:ABCdefGHIjklMNOpqrsTUVwxyz
BOT_USERNAME=@CodeKeeperBot

# === Database Configuration ===
MONGODB_URL=mongodb://localhost:27017/code_keeper
DATABASE_NAME=code_keeper

# === GitHub Integration ===
GITHUB_TOKEN=ghp_xxxxxxxxxxxxxxxxxxxx
GITHUB_USERNAME=myusername

# === Security ===
ENCRYPTION_KEY=my-super-secret-32-byte-key-here!
ADMIN_USER_IDS=123456789,987654321

# === Performance ===
REDIS_URL=redis://localhost:6379
MAX_WORKERS=4

# === Features ===
BACKUP_ENABLED=true
CACHE_ENABLED=true
RATE_LIMIT_ENABLED=true

טיפים וטריקים

  1. שמור את קובץ .env מחוץ ל-Git:

    echo ".env" >> .gitignore
    
  2. השתמש בסיסמאות חזקות:

    import secrets
    encryption_key = secrets.token_hex(32)
    
  3. בדוק הגדרות בהפעלה:

    from config import config
    config.validate()
    
  4. גבה את ההגדרות:

    cp .env .env.backup