MAATRIX / Блог / VPS для бота с БД: PostgreSQL и Redis рядом с ботом

VPS для бота с БД: PostgreSQL и Redis рядом с ботом

VPS для бота с базой данных: PostgreSQL и Redis
Блог MAATRIX · 2026-07-07

Как только боту нужно хранить состояние пользователей, историю или очереди — появляется база. Держать её на том же 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, который тоже можно перенести.