Базы данных для VPN-панелей
Что тут
Панели VPN (3x-ui, Remnawave, Marzban) хранят где-то список пользователей, лимиты, статистику трафика. Это делает база данных. Основных вариантов три: SQLite, MySQL/MariaDB, PostgreSQL. Каждая имеет свои сценарии.
SQLite
Файловая БД — один .db файл на диске. Не требует отдельного сервера СУБД, всё внутри процесса приложения.
- Дефолт в 3x-ui
- Стандартный путь:
/etc/x-ui/x-ui.db - Backup = просто
cp x-ui.db x-ui.db.bak - Работает до тысяч пользователей на панель
- При параллельной записи (много пользователей одновременно) — лок таблицы
Плюсы: ноль настройки, весь бэкап — один файл.
Минусы: тормозит на большой параллельной нагрузке, не масштабируется.
Кому: одиночный сервер до 50-200 клиентов.
MySQL / MariaDB
Классическая реляционная СУБД. MariaDB — free-fork MySQL после покупки её Oracle. Долгое время был стандартом для веб.
- Отдельный процесс (mysqld/mariadbd), обычно на порту 3306
- InnoDB engine — транзакции, foreign keys, row-level locking
- Опционально в 3x-ui — через переменную окружения XUI_DB_TYPE
- Marzban поддерживает MySQL
Плюсы: проверено временем, огромная экосистема, легко масштабируется.
Минусы: сложнее чем SQLite, ест 200-500 МБ RAM.
Кому: когда SQLite упирается в производительность / нужен доступ из нескольких процессов.
PostgreSQL
Более продвинутая СУБД с точки зрения фич. Стандарт «серьёзной разработки» с 2010-х.
- Обязательна для Remnawave
- JSON-типы native (JSONB)
- Отличная параллельная запись
- Extensions: PostGIS (гео), TimescaleDB (временные ряды — для статистики трафика идеально)
Плюсы: самая мощная из трёх, лучше на больших нагрузках, богатый SQL.
Минусы: требует настройки, съедает от 500 МБ RAM.
Кому: Remnawave, большая инфраструктура, много нод.
Сравнение
| SQLite | MySQL/MariaDB | PostgreSQL | |
|---|---|---|---|
| Отдельный сервер | нет | да | да |
| RAM минимум | ~0 МБ (in-proc) | 200 МБ | 500 МБ |
| Установка | ничего не делать | apt install mariadb-server | apt install postgresql |
| Backup | cp файла | mysqldump | pg_dump |
| Параллельная запись | плохо | хорошо | отлично |
| Масштабирование | не масштабируется | replication | replication + partitioning |
| JSON | текст | JSON (медленно) | JSONB (нативно) |
| 3x-ui | дефолт | опционально | нет |
| Marzban | да | да | да |
| Remnawave | нет | нет | требуется |
Какую выбрать
- SQLite — если ты один держишь VPN для себя + пары друзей
- MySQL/MariaDB — если у тебя больше 100 клиентов, но всё ещё один сервер
- PostgreSQL — если строишь сервис (Remnawave, много нод, биллинг)
Правило: начни с SQLite, переезжай на PostgreSQL когда упрёшься. MySQL — исторически, если ты пришёл из мира LAMP.