Как убрать секреты из config¶
Как убрать секреты из config.json, но сохранить их доступность и на CI, и на сервере
1. Изменяем код ― читаем из ENV, а файл — только резерв¶
# UserControl/utils/secrets.py (пример единой точки доступа)
import os, json
from pathlib import Path
_cfg = json.loads(Path("UserControl/config.json").read_text(encoding="utf-8"))
def get(name: str) -> str | None:
"""Секрет берём из переменной окружения, а если её нет — из файла."""
return os.getenv(name) or _cfg.get(name.lower()) # api_id → API_ID
Теперь любой скрипт вместо cfg["openai_api_key"] делает
from utils.secrets import get
openai.api_key = get("OPENAI_API_KEY")
2. Чистим config.json¶
{
"openai_api_key": "",
"static_bot_token": "",
"api_id": 0,
"api_hash": "",
"session_string": "",
"active_accounts": []
}
Всё чувствительное — пустые строки. Файл можно смело коммитить.
3. Где храним реальные значения¶
| Среда | Хранилище | Что сделать |
|---|---|---|
| GitHub Actions | Settings ▸ Secrets | Уже добавили OPENAI_API_KEY, TELEGRAM_BOT_TOKEN… |
| Codex контейнер | Блок Secrets в UI | Тоже добавили ― под теми же именами |
| Сервер VPS | ① файл .env (в /home/admin-v-rossii/Telegram) или ② переменные в unit-файле systemd |
– Создай .env, положи пары KEY=value– Добавь .env в .gitignore, чтоб не ушёл в Git |
Пример .env на сервере¶
OPENAI_API_KEY=sk-...
TELEGRAM_BOT_TOKEN=123:ABC
CHAT_ID_LOGS=-10012345
Установи python -m pip install python-dotenv (добавь в requirements.txt) и в utils/secrets.py добавь вверху:
from dotenv import load_dotenv; load_dotenv()
4. Плюсы схемы¶
-
Безопасность — секреты никогда не попадают в репозиторий.
-
Единый код — на CI, Codex и сервере работает одинаково.
-
Простота — поменять токен = поправить
.envили Secret, без рекоммита.