Skip to content

Переменные окружения и API-ключи

Почти каждый проект работает с внешними сервисами: Telegram, OpenAI, база данных. Для каждого нужен ключ — токен или пароль. Эту главу пропускают чаще всего — и потом сталкиваются с утечкой ключей или сломанным деплоем.

Проблема: ключи нельзя хранить в коде

Представь такой код:

python
bot = Bot(token="7123456789:AAHxx...")

Этот токен — конфиденциальная информация. Если ты загрузишь этот файл на GitHub (даже в приватный репозиторий), ключ окажется в истории git. Если репозиторий когда-нибудь станет публичным или кто-то получит доступ — ключ утечёт.

Проще говоря

Представь, что пароль от квартиры написан у тебя на куртке. Ты постоянно его видишь — удобно. Но все вокруг его тоже видят. Переменные окружения — это когда пароль у тебя в голове: ты его знаешь, куртка чистая.

Решение: файл .env

.env — это файл в корне проекта, в котором хранятся ключи и пароли. Он не попадает в git. Код читает значения из него.

Пример файла .env:

TELEGRAM_BOT_TOKEN=7123456789:AAHxx...
OPENAI_API_KEY=sk-...
DATABASE_URL=postgresql://user:password@localhost:5432/mydb

Один файл — все ключи. Удобно менять без правки кода.

Шаг 1: Создай .gitignore

Прежде всего — убедись что .env не попадёт в git. В корне проекта создай файл .gitignore:

.env
.env.local
.env.production
__pycache__/
*.pyc
node_modules/

С этим файлом git будет игнорировать .env — он останется только у тебя локально.

Если .env уже в git

Если ты случайно закоммитил .env, просто удалить файл не поможет — он останется в истории. Нужно аннулировать ключи (создать новые в сервисе) и поменять их. Проще всего: удали старый ключ в сервисе → создай новый → обнови .env. Старый ключ больше не работает — утечки нет.

Шаг 2: Читай .env в коде

Python

Установи библиотеку python-dotenv:

bash
pip install python-dotenv

В начале главного файла:

python
from dotenv import load_dotenv
import os

load_dotenv()  # загружает .env

token = os.getenv("TELEGRAM_BOT_TOKEN")
api_key = os.getenv("OPENAI_API_KEY")

JavaScript / Node.js

Установи dotenv:

bash
npm install dotenv

В начале файла:

javascript
require('dotenv').config()

const token = process.env.TELEGRAM_BOT_TOKEN
const apiKey = process.env.OPENAI_API_KEY

Шаг 3: На сервере — устанавливай вручную

На сервере файл .env не появится сам — его нет в git. Нужно создать его руками один раз:

bash
nano /opt/myproject/.env

Вставь содержимое (те же переменные что и локально), сохрани (Ctrl+O → Enter → Ctrl+X).

После этого приложение читает ключи из этого файла на сервере.

Проще говоря

Файл .env — как флешка с паролями. Ты её не отправляешь в интернет, не кладёшь в облако. Просто переносишь физически — с компьютера на сервер один раз через терминал.

Шаг 4: Проверь что всё правильно

Убедись, что .gitignore работает:

bash
git status

Если .env в списке файлов — он попадёт в коммит. Если не виден — всё правильно.

Проверь что .gitignore содержит строку .env:

bash
cat .gitignore

Частые ошибки

None вместо значения ключа

python
print(os.getenv("TELEGRAM_BOT_TOKEN"))  # None

Причина: load_dotenv() не вызван, или .env файл не там (не в том каталоге). Убедись что load_dotenv() стоит раньше os.getenv().

Переменная есть локально, но нет на сервере

Причина: на сервере не создан .env. Зайди по SSH, создай файл, добавь переменные.

ИИ вставил ключ прямо в код

Когда ты просишь ИИ написать код с API, он может вставить пример ключа. Всегда проверяй — замени на os.getenv("KEY_NAME") и переноси реальный ключ в .env.


Что дальше?

Ключи в безопасности. В следующей главе разберём — что делать когда что-то сломалось.