MAATRIX / Блог / Self-hosted Supabase на своём VPS

Self-hosted Supabase на своём VPS

Блог MAATRIX · 2026-07-07

Supabase — открытая альтернатива Firebase: Postgres, авторизация, storage и авто-API. Развернём его на VPS через Docker Compose и получим свой бэкенд без облачных лимитов.

Зачем self-host Supabase

['Облачный Supabase удобен, но платные тарифы дорожают с ростом базы, а данные лежат не у вас. Self-host даёт полный контроль над Postgres, отсутствие лимитов на строки и хранение и предсказуемую стоимость — только цена VPS.', 'Supabase — это Postgres, который любит быстрый диск. NVMe у MAATRIX ускоряет запросы и бэкапы, а root-доступ нужен, чтобы крутить весь Docker-стек. Оплата картой РФ, СБП или криптой снимает проблему с зарубежным сервером.', 'Ещё один аргумент за self-host — резидентность данных и предсказуемость. В облачном Supabase вы платите за каждый гигабайт хранения и за трафик, а при росте проекта счёт растёт нелинейно. Развернув Supabase сами, вы получаете фиксированную стоимость (цена VPS от $8/мес) и полный доступ к Postgres: можно ставить расширения, тюнить конфиг, подключаться напрямую через psql и делать любые SQL-миграции без ограничений панели.']

Нужен сервер под эту задачу?

Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK и США. Оплата картой РФ и по СБП.

Арендовать VPS для Supabase

Ставим Docker и клонируем репозиторий

['
apt update && apt install -y docker.io docker-compose-plugin git\nsystemctl enable --now docker\ndocker --version
', 'Клонируем официальный self-host и готовим .env:', '
git clone --depth 1 https://github.com/supabase/supabase\ncd supabase/docker\ncp .env.example .env
']

Настраиваем секреты

['Перед запуском обязательно смените дефолтные пароли и ключи — иначе базу взломают за минуты. Сгенерируйте надёжные значения:', '
openssl rand -base64 32   # POSTGRES_PASSWORD\nopenssl rand -hex 32      # JWT_SECRET
', 'Впишите их в .env (POSTGRES_PASSWORD, JWT_SECRET, ANON_KEY, SERVICE_ROLE_KEY, DASHBOARD_PASSWORD). ANON_KEY и SERVICE_ROLE_KEY генерируются на основе JWT_SECRET через документацию Supabase.', 'Отдельно смените логин и пароль дашборда (DASHBOARD_USERNAME/DASHBOARD_PASSWORD) — по умолчанию это supabase/this_password_is_insecure_and_should_be_updated, и оставлять их нельзя. Проверьте, что .env не попадёт в git: он содержит все секреты вашего бэкенда.']

Запуск стека

['
docker compose pull\ndocker compose up -d\ndocker compose ps
', 'Поднимутся контейнеры: db (Postgres), auth (GoTrue), rest (PostgREST), storage, studio и kong (API-gateway). Kong — единая точка входа, он маршрутизирует запросы к нужному сервису по API-ключу. Studio по умолчанию слушает порт 8000; наружу его выпускать напрямую нельзя — это админ-панель со всеми данными. Закройте порт файрволом и пробросьте только через nginx с TLS и, желательно, basic-auth поверх:', '
server {\n    listen 443 ssl http2;\n    server_name supabase.example.com;\n    ssl_certificate     /etc/letsencrypt/live/supabase.example.com/fullchain.pem;\n    ssl_certificate_key /etc/letsencrypt/live/supabase.example.com/privkey.pem;\n    location / {\n        proxy_pass http://127.0.0.1:8000;\n        proxy_set_header Host $host;\n        proxy_set_header Upgrade $http_upgrade;\n        proxy_set_header Connection upgrade;\n    }\n}
']

Бэкапы и частые ошибки

['Postgres бэкапится штатным pg_dump прямо из контейнера — поставьте в cron:', '
docker compose exec -T db pg_dumpall -U postgres | gzip > /root/backup-$(date +%F).sql.gz
', '
  • Контейнеры падают циклом — не сменили дефолтные ключи или неверный JWT_SECRET; смотрите docker compose logs auth.
  • Мало памяти — весь стек хочет минимум 2 ГБ RAM; берите план с запасом.
  • Studio открыт всем — обязательно закройте порт 8000 файрволом и пускайте только через nginx с паролем.
', 'Восстановление из дампа делается зеркальной командой: gunzip -c backup.sql.gz | docker compose exec -T db psql -U postgres. Проверьте процедуру заранее на тестовом сервере — бэкап, который ни разу не разворачивали, бэкапом не считается.', 'Ежедневные бэкапы MAATRIX дублируют ваш pg_dump на уровне всего диска — двойная страховка для базы, которую не хочется терять. Если проект вырастет, тариф апгрейдится без смены IP, а Postgres на NVMe продолжит отвечать быстро даже на аналитических запросах.']

Нужен сервер под эту задачу?

Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK и США. Оплата картой РФ и по СБП.

Арендовать VPS для Supabase

Частые вопросы

Сколько ресурсов нужно Supabase?

Минимум 2 ГБ RAM и 2 ядра. Для активного проекта комфортно от 4 ГБ; NVMe заметно ускоряет запросы.

Можно ли мигрировать из облачного Supabase?

Да, через pg_dump/pg_restore переносится вся схема и данные, а Storage — копированием бакетов.

Безопасно ли держать Supabase на VPS?

Да, если сменить все дефолтные ключи, закрыть порты файрволом и работать только через TLS.