VPS для бота с БД: PostgreSQL и Redis рядом с ботом
Как только боту нужно хранить состояние пользователей, историю или очереди — появляется база. Держать её на том же VPS, что и бот, — быстро и дёшево: локальное соединение через сокет без сетевых задержек. Разберём PostgreSQL для данных и Redis для кэша и очередей.
Содержание
Обсудить статью, задать вопрос или начать новую тему
Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.
Перейти в сообщество →Когда боту нужна база, а когда Redis
PostgreSQL — для постоянных данных: профили пользователей, заказы, история сообщений, всё, что должно пережить перезапуск. Redis — для быстрого доступа: кэш, счётчики, rate-limit, очереди задач и хранение FSM-состояний диалога.
Часто их используют вместе: Postgres как источник истины, Redis как быстрый слой поверх. Типичный сценарий — профиль пользователя лежит в Postgres, а его текущее состояние в диалоге и счётчики антифлуда держит Redis с автоматическим истечением по TTL. На одном VPS обе базы прекрасно соседствуют с ботом: соединение идёт через локальный сокет, без сетевой задержки и без выхода трафика наружу.
- PostgreSQL — надёжное хранение, транзакции, сложные запросы.
- Redis — миллисекундный доступ, кэш, очереди, TTL.
- Локально — соединение через сокет без сетевой задержки.
Нужен сервер под эту задачу?
Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США и РФ. Оплата картой РФ и по СБП.
Арендовать VPS для бота с БДУстановка PostgreSQL и отдельная роль
Ставим сервер БД и сразу создаём отдельную роль и базу под бота — не работайте от суперпользователя postgres.
sudo apt update && sudo apt install -y postgresql postgresql-contrib
sudo systemctl enable --now postgresql
sudo -u postgres psql <<'SQL'
CREATE ROLE botuser WITH LOGIN PASSWORD 'strong_password_here';
CREATE DATABASE botdb OWNER botuser;
SQL
Строка подключения для бота — через localhost, база наружу не торчит:
DATABASE_URL=postgresql://botuser:strong_password_here@127.0.0.1:5432/botdb
Установка Redis и базовая защита
Redis по умолчанию слушает только localhost — это правильно. Проверим и при необходимости зададим пароль.
sudo apt install -y redis-server
sudo systemctl enable --now redis-server
redis-cli ping # ожидаем PONG
Для дополнительной защиты задайте пароль в конфиге и убедитесь, что bind ограничен локальным адресом:
sudo sed -i 's/^# requirepass .*/requirepass strong_redis_pass/' /etc/redis/redis.conf
sudo grep -E '^bind' /etc/redis/redis.conf # должно быть 127.0.0.1
sudo systemctl restart redis-server
Подключение из бота и пул соединений
Не открывайте новое соединение на каждый запрос — используйте пул. Для Python это asyncpg или psycopg_pool, для Node — pg.Pool.
import asyncpg, os
pool = await asyncpg.create_pool(
dsn=os.environ['DATABASE_URL'],
min_size=2, max_size=10,
)
async with pool.acquire() as conn:
row = await conn.fetchrow('SELECT count(*) FROM users')
print(row[0])
Redis-подключение из бота столь же просто:
import redis.asyncio as redis
r = redis.Redis(host='127.0.0.1', port=6379, password='strong_redis_pass')
await r.set('user:100500:state', 'menu', ex=3600)
Бэкапы и обслуживание
База без бэкапа — вопрос времени до потери данных. Настроим ежедневный дамп PostgreSQL:
mkdir -p ~/backups
pg_dump -U botuser -h 127.0.0.1 botdb | gzip > ~/backups/botdb_$(date +%F).sql.gz
Заведём таймер systemd, чтобы дамп снимался каждую ночь, и удаляем архивы старше 14 дней:
find ~/backups -name 'botdb_*.sql.gz' -mtime +14 -delete
Восстановление из дампа:
gunzip -c ~/backups/botdb_2026-07-09.sql.gz | psql -U botuser -h 127.0.0.1 botdb
Где брать сервер и частые ошибки
Бот с PostgreSQL и Redis чувствителен к скорости диска — база активно пишет и читает. На тарифах MAATRIX это NVMe + AMD EPYC от $8/мес: быстрый диск заметно ускоряет запросы и снятие дампов. Плюс ежедневные бэкапы уровня хостинга поверх ваших pg_dump — двойная страховка. Локации UK, США и РФ, оплата картой РФ, СБП, криптой или токеном MAAT.
- БД слушает 0.0.0.0 — сканеры найдут открытый порт; держите bind на 127.0.0.1.
- Соединение на каждый запрос — исчерпание лимита connections; используйте пул.
- Работа от роли postgres/root БД — заведите отдельную роль с минимумом прав.
- Нет бэкапов — потеря данных при любом сбое; автоматизируйте pg_dump.
Нужен сервер под эту задачу?
Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США и РФ. Оплата картой РФ и по СБП.
Арендовать VPS для бота с БДОбсудить статью, задать вопрос или начать новую тему
Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.
Перейти в сообщество →Частые вопросы
PostgreSQL и Redis на одном VPS — это нормально?
Да, для большинства ботов это оптимально: локальное соединение через сокет быстрее сети, а ресурсов одной машины хватает. Разносить их стоит лишь под высокой нагрузкой.
Сколько RAM нужно боту с базой?
Боту с PostgreSQL и Redis комфортно от 2 ГБ. Redis держит данные в памяти, поэтому объём зависит от размера кэша.
Как не потерять данные при переезде?
Снимите pg_dump, скопируйте архив на новый сервер и восстановите через psql. Redis дампит состояние в RDB-файл dump.rdb, который тоже можно перенести.