Хранение базы данных бота
При сборке и развертывании бота автоматически создается папка хранилищаdata. Эта папка предназначена для хранения данных, которые должны сохраняться между обновлениями бота из Git репозитория.
📁 Зачем хранить базу в папке data?
Основная причина — защита данных при обновлении из Git. При обновлении бота из репозитория происходит:- Клонирование/обновление кода из Git
- Пересборка Docker образа
- Перезапуск контейнера
data специально исключена из синхронизации с Git и предназначена для персистентного хранения данных.
🗄️ Способы размещения базы данных
Способ 1: Загрузка через файловый менеджер (первый запуск)
Если у вас уже есть готовая база данных, которую нужно использовать:- Подготовьте файл базы данных (например,
bot.dbдля SQLite) - Загрузите файл в папку data через файловый менеджер в панели управления ботом
- Укажите путь к базе в переменных окружения:
DATABASE_PATH=/app/data/bot.db
`
или
`
DB_PATH=/app/data/scheduler.db
`
(в зависимости от того, какую переменную использует ваш бот)
- После первого запуска удалите файл базы из Git репозитория (если он там был), чтобы избежать конфликтов при обновлениях
Способ 2: Программное создание базы (рекомендуется)
Лучший подход — создавать базу данных программно при первом запуске, если она еще не существует:
#### Пример для Python (SQLite):
import os
import sqlite3
from pathlib import Path
# Путь к папке data
DATA_DIR = Path("/app/data")
DATA_DIR.mkdir(parents=True, exist_ok=True)
# Путь к базе данных
DB_PATH = DATA_DIR / "bot.db"
# Создаем базу, если её нет
if not DB_PATH.exists():
conn = sqlite3.connect(str(DB_PATH))
# Создаем необходимые таблицы
conn.execute('''
CREATE TABLE IF NOT EXISTS users (
id INTEGER PRIMARY KEY,
username TEXT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
)
''')
conn.commit()
conn.close()
print(f"База данных создана: {DB_PATH}")
else:
print(f"База данных уже существует: {DB_PATH}")
#### Пример для Node.js (SQLite):
const sqlite3 = require('sqlite3').verbose();
const path = require('path');
const fs = require('fs');
// Путь к папке data
const dataDir = '/app/data';
if (!fs.existsSync(dataDir)) {
fs.mkdirSync(dataDir, { recursive: true });
}
// Путь к базе данных
const dbPath = path.join(dataDir, 'bot.db');
// Создаем базу и таблицы при первом запуске
const db = new sqlite3.Database(dbPath, (err) => {
if (err) {
console.error('Ошибка открытия базы данных:', err);
return;
}
console.log(База данных подключена: ${dbPath});
// Создаем таблицы, если их нет
db.run(
CREATE TABLE IF NOT EXISTS users (
id INTEGER PRIMARY KEY,
username TEXT,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP
)
, (err) => {
if (err) {
console.error('Ошибка создания таблицы:', err);
} else {
console.log('Таблицы созданы или уже существуют');
}
});
});
📝 Настройка переменных окружения
В панели управления ботом добавьте переменную окружения с путем к базе данных:
DATABASE_PATH=/app/data/bot.db (для SQLite)
DB_PATH=/app/data/scheduler.db (альтернативное имя)
DATABASE_NAME=tgbot_okz_db.db (если ваш код использует такое имя)
Убедитесь, что путь указывает на папку /app/data, а не на корень проекта.
✅ Преимущества хранения в папке data
- ✅ База данных не перезаписывается при обновлении из Git
- ✅ Данные сохраняются между перезапусками контейнера
- ✅ Удобно делать резервные копии (вся папка
data)
✅ Изолированное хранение данных от кода приложения
🔄 Миграция существующей базы
Если у вас уже есть база данных в другом месте:
- Остановите бота
- Скопируйте файл базы данных в папку
data через файловый менеджер
Обновите переменные окружения, указав новый путь ( /app/data/имя_базы.db)
Запустите бота
⚠️ Важные замечания
- Не добавляйте папку
data в Git — она должна быть в .gitignore
Делайте резервные копии папки data регулярно
Проверяйте права доступа — контейнер должен иметь права на запись в папку /app/data`
📚 См. также
Вопросы? Обратитесь в поддержку: @bothostru