<div><img src="https://top-fwz1.mail.ru/counter?id=3548135;js=na" style="position:absolute;left:-9999px;" alt="Top.Mail.Ru" /></div>
Публичное облако на базе VMware с управлением через vCloud Director

Как развернуть Supabase в облаке Timeweb Cloud

Сергей Дурманов
Сергей Дурманов
Технический писатель
10 сентября 2024 г.
460
10 минут чтения
Средний рейтинг статьи: 5

Инструкция обновлена 10.02.2025

Пакет Supabase — это бесплатный аналог облачных сервисов Google Firebase (БД, аутентификация, хранение файлов, realtime обмен данными, framework для популярных языков). Перечисленные инструменты позволяют разработчикам быстро создавать как простые мобильные приложения и сайты, так и сложные корпоративные системы. Кроме того, при использовании Supabase вам не нужно уметь управлять сервером, пользователями и обслуживать базу данных — для этого в пакете присутствует готовая административная панель.

Основное плюсы Supabase

  • Бесплатно (устанавливается на ваш VDS/VPS или облачный сервер).
  • Собственная админка для настройки БД, авторизации пользователей и многого другого.
  • Готовая база данных «из коробки» с полной настройкой из админки.
  • Аутентификация пользователей «из коробки».
  • Очень быстрый API (REST и GraphQL).
  • Хранение и раздача файлов (подойдет даже для собственного хостинга сайтов).
  • Запуск из Docker за пять минут.

Сравнительная таблица

Функция

Supabase

Firebase

Тип лицензии

Открытый исходный код

Проприетарный (закрытый)

Стоимость

Бесплатно

Бесплатно первые 7 таблиц

Системные требования

Рекомендуем использовать минимум 2 CPU, 4 ГБ RAM и 20 ГБ диска

--

База данных

PostgreSQL

Firestore (NoSQL) Нужна иностранная банковская карта

Аутентификация

Есть, хранение на вашем сервере

Есть, хранение в Google облаке

Realtime (обмен через Socket)

Есть

Есть

WebSockets: Самый популярный метод, который обеспечивает двустороннее соединение между клиентом и сервером, позволяет серверу отправлять данные клиенту в любой момент, а не только в ответ на запросы. Идеально подходит для приложений, требующих высокой отзывчивости, таких как чаты, игры или системы управления проектами.

Long Polling: В этом методе клиент регулярно отправляет запросы на сервер, который задерживает ответ до тех пор, пока не произойдут какие-либо изменения в данных. Как только данные изменяются, сервер отвечает, и клиент тут же отправляет новый запрос. Разработчики могут подписываться на изменения в определенных таблицах или даже на конкретные строки и столбцы в PostgreSQL базе данных. Это означает, что любые изменения, такие как добавление, удаление или обновление записей, могут быть немедленно отслежены клиентом.

Загрузка, хранение и отдача файлов

Есть, в том числе подключение вашего S3-совместимого бакета

Есть

Пуш-уведомления

Нет (можно интегрировать сторонними решениями через Firebase, и любыми другими сервисами push)

Есть

Serverless-функции

Есть. На базе Node: JavaScript и Typescript

Есть (Cloud Functions). Нужна иностранная банковская карта

Инструменты разработчика и доступ к данным и операциям

Панель управления (простая админка), REST и GraphQL API

Панель управления (сложная админка), REST и Firestore API

Сообщество и поддержка

Активное сообщество (более 70000 звезд на Github, 1200 чел. разработчиков), хорошая документация

Огромное сообщество, отличная документация

Масштабируемость

Высокая, облачная инфраструктура на базе простых VPS

Высокая, поддерживается Google

Простота использования

Простая настройка таблиц, полей и т.д.

Простая настройка таблиц, полей и т.д.

Поддержка языков (готовые фреймворки для доступа к данным, пушам, сокетам, пользователям и т.д.)

JavaScript, TypeScript, Python, Dart, .NET, Ruby

JavaScript, TypeScript, Python, Java, C++, C#, Go

Как видно из таблицы, Supabase даст вам 95% функционала, который вы получали от Google Firebase. Вы получите готовый настроенный backend для создания сайтов, мобильных приложений, внутренних корпоративных площадок, утилит и много другого.

Процесс настройки и запуска проекта на Supabase достаточно прост. Разработчики могут начать работу, создав учетную запись на официальном сайте, после чего доступ к базовым функциям становится практически мгновенным. Однако бесплатно вы получите только 500 МБ места для баз данных, 500 МБ оперативной памяти и сильно ограниченный ресурс CPU (не более 5%). Поэтому мы рекомендуем развернуть свое неограниченное облако.

Далее мы рассмотрим покупку сервера на базе Ubuntu и установку на него пакета Supabase. Инструкция рассчитана на новичков, поэтому она будет сопровождаться подробными скриншотами. Если вы продвинутый пользователь, можете просто пропускать некоторые пункты или выбирать свои инструменты для установки Docker-контейнеров.

Подготовка сервера

Начнем с создания нового сервера.

Установка облачного сервера Timeweb Cloud

  1. Зарегистрируйте аккаунт на timeweb.cloud.

Image1

  1. Перейдите в раздел «Облачный сервер».

Image6

  1. Выберите вкладку «Маркетплейс».

Image9

  1. Здесь выберите Portainer (визуальная оболочка для управления контейнерами Docker) и перейдите к оплате.

Image2

  1. Задайте конфигурацию сервера. Рекомендуем выбирать минимум 2 ядра CPU, 4 ГБ памяти и 20 ГБ диска.
  2. Подождите пару минут, пока идет создание вашего нового сервера. После создания сервера вам на email придет письмо с инструкцией по подключению к серверу, в том числе IP-адрес, логин и пароль.

Image10

cloud

Настройка Portainer для управления контейнерами

  1. Перейдите в браузер на страницу http://ВАШ-IP-АДРЕС:9001. Далее вы попадете в удобную панель Portainer — админку для управления контейнерами Docker. Укажите логин admin и пароль, который получили по email.

Image13

  1. Затем выберите пункт «Get started» и перейдите в раздел «Containers».

Image3

  1. Выберите пункт «Container».

Image4

  1. Вы перешли в раздел мониторинга работы контейнеров, где можно посмотреть логи, настройки, нагрузку и потребляемые ресурсы каждого контейнера.

Image7

Здесь вы сможете следить за своими запущенными контейнерами, смотреть log, перезапускать, устанавливать новые приложения.

На скриншоте видно, что мы установили на чистую систему Ubuntu только контейнер с Portainer. В нашем случае контейнер называется dockerui.

Генерация ключей

Далее очень важный момент: необходимо создать три ключа: JWT_SECRET, ANON_KEY и SERVICE_ROLE_KEY, которые будут использованы для установки вашей копии Supabase. 

  • ANON_KEY — это основной ключ для использования в клиентских приложениях.
  • SERVICE_ROLE_KEY — это ключ для администратора.

Переходим на сайт Supabase в гид по генерации ключей, где генерируем три основных ключа.

Первый главный ключ (JWT_SECRET) генерируется автоматически.

Второй ключ: в поле «KEY» выбираем ANON_KEY и нажимаем кнопку «Create JWT» — cгенерируется ANON_KEY:

Image16

Третий ключ: аналогично выбираем в верхнем дропбоксе SERVICE_ROLE и генерируем ключ для роли service_role:

Image11

Не забудьте сохранить все три ключа, они поотребуются для дальнейшей установки. 

Следующим шагом установим непосредственно сам пакет Supabase.

Установка Supabase

Переходим к установке Supabase на сервер.

Вход на сервер

Запустите терминал (для windows: PowerShell, Windows terminal или Putty. Подробнее читайте статью) и подключитесь к вашему новому серверу через SSH. Для этого вам нужно ввести команду:

ssh root@IP-ВАШЕГО-СЕРВЕРА

Далее сервер попросит сохранить fingerprint (введите yes) и ввести пароль. В результате вы увидите приблизительно следующее сообщение:

sergey@MacBook ~ % ssh root@111.111.111.119

The authenticity of host '111.111.111.119 (111.111.111.119)' can't be established.
ED25519 key fingerprint is …
This key is not known by any other names
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes

Warning: Permanently added '111.111.111.119' (ED25519) to the list of known hosts.
root@111.111.111.119's password:

Welcome to Ubuntu 22.04.4 LTS (GNU/Linux 5.15.0-112-generic x86_64)

root@3300495-lv84950:~#

Как видите, мы удачно авторизовались. Теперь мы на сервере и можем отдавать ему команды. 

Создание директорий

Первое, что необходимо сделать — создать каталог /docker_data/supabase, куда затем будет установлен наш пакет. Делается это просто, всего лишь введите команду и нажмите клавишу Enter (команда вводится в одну строку):

mkdir docker_data && mkdir docker_data/supabase && cd docker_data/supabase

Получение дистрибутива с Github

Для экономии места и времени мы не будем скачивать весь репозиторий Supabase, а возьмём только папку docker, которая содержит необходимые установочные файлы и занимает всего несколько килобайт.

Для этого воспользуемся выборочным клонированием с помощью git sparse-checkout. Выполните следующие команды (обратите внимание: точка в конце первой команды обязательна):

git clone --filter=blob:none --no-checkout https://github.com/supabase/supabase.git .
git sparse-checkout init --cone
git sparse-checkout set docker
git checkout

Редактирование docker-compose.yml и .env

Теперь необходимо отредактировать два файла: docker-compose.yml и .env в директории docker для автоматической установки системы Supabase в контейнерах Docker. Первый файл отвечает за установку, а второй содержит настройки (например, параметры почтового сервера, порты и т. д.).

Эти файлы уже присутствуют в скачанном дистрибутиве, а для упрощения настройки скачаем подготовленный скрипт setup-config.sh и запустим его. Для этого в директории docker_data/supabase выполните следующую команду:

wget -q https://raw.githubusercontent.com/tecspda/timeweb/refs/heads/main/supabase/setup-config.sh  && bash ./setup-config.sh

Далее скрипт запустится и попросит вас поочередно ввести значения констант. Обратите внимание: при вводе JWT_SECRET, ANON_KEY, SERVICE_ROLE_KEY, POSTGRES_PASSWORD и DASHBOARD_PASSWORD символы не будут отображаться. Это нормальное поведение. Просто введите значение и нажмите Enter.

JWT_SECRET

Скопируйте из блокнота и вставьте (ctrl+v или cmd+v)

ANON_KEY

Скопируйте из блокнота и вставьте

SERVICE_ROLE_KEY

Скопируйте из блокнота и вставьте

POSTGRES_PASSWORD

Придумайте. Это главный root-пароль для вашей базы данных.

DASHBOARD_PASSWORD

Придумайте. Это главный root-пароль для вашей админки Supabase.

IP_YOUR_VPS

Адрес вашего VPS, который вы установили выше в пункте «Установка облачного сервера Timeweb Cloud»

Никому и никогда не сообщайте данные, используемые при установке.

После выполнения скрипта вы увидите следующий результат:

Image3

После ввода всех значений скрипт заполнит файлы docker-compose.yml и .env, после чего можно будет запустить установку Supabase на вашем облачном сервере.

Запуск создания docker-контейнеров

Перейдем в директорию docker:

cd ./docker

Далее запускаем установку в Docker:

docker compose up -d

Время установки составит около 5 минут, не переживайте и просто дождитесь окончания процесса. Картина установки выглядит примерно так:

Image8

Поскольку пакет очень объемный, при первом запуске будет происходить инициализация базы данных, подождите еще 1-2 минуты после установки и переходите в Portainer (в раздел Containers) для визуального наблюдения. После полной установки вы увидите такую картину:

003 Portainer 5

Поздравляем! Вы успешно установили замену Google Firebase на свой собственный сервер.

Теперь вы можете перейти в браузер и авторизоваться в админ-панели Supabase по адресу: http://IP_ВАШЕГО_VPS:8000.

При входе введите логин и пароль, которые вы указывали при запуске скрипта:

USERNAME: supabase
PASSWORD: ВАШ_ПАРОЛЬ_ДЛЯ_АДМИНКИ
Разверните Supabase в облаке Timeweb Cloud

Заключение

Итак, мы рассказали вам как установить Supabase на собственный сервер и избавиться от зависимости от Google Firebase.

В следующих гайдах мы расскажем о кейсах использования Supabase, покажем конкретные примеры реализации элементов сайта в связке HTML+JavaScript, а также разберем примеры написания мобильных приложений, демонстрирующих использование Supabase для remoteControl, отправки сообщений пользователям, создания чатов техподдержки и много другого, а также попробуем создать полезные сервисные функции отслеживания состояния здоровья вашего сервера без использования решений типа Grafana+Prometheus. Задавайте вопросы в комментариях на тему, какие кейсы вам интересны и как их реализовать.

Хотите внести свой вклад?
Участвуйте в нашей контент-программе за
вознаграждение или запросите нужную вам инструкцию
img-server
10 сентября 2024 г.
460
10 минут чтения
Средний рейтинг статьи: 5
Комментарии 21
Виктор
17.02.2025, 20:56

Здравствуйте. Установил согласно Вашей инструкции (кстати, скрипт почему-то не устанавливает SERVICE_KEY, выставил его сам). Запустил, в студию пускает, НО не могу подключиться к базе данных ни через DB Beaver, ни используя supabase db push --db-url. В обоих случаях получаю ошибку "FATAL: Tenant or user not found", хотя использую supabase_admin и указанный согласно инструкции пароль (POSTGRES_PASSWORD) . Может ли это быть связано с тем, что в пароле используются буквы обоих регистров и цифры?

Максим
09.02.2025, 22:25

Здравствуйте! Полностью действовал по вашей инструкции. Админку supabase запустил, но не все ее данные видны. Половина интерфейса в скелетонах. В контейнере supabase-studio висит состояние unhealthy. Описание ошибки: [eval]:1 fetch('http://studio:3000/api/profile').then((r) => {if (r.status !== 200) throw new Error(r.status)}) ^ Error: 500 at [eval]:1:82 at process.processTicksAndRejections (node:internal/process/task_queues:95:5) Node.js v20.18.1

Помогите пожалуйста разобраться, как решить эту проблему?

Максим
10.02.2025, 01:22

Проблему с ошибкой контейнера supabase-studio решил с помощью комментария ниже и ссылки https://github.com/supabase/supabase/issues/28105

Но проблема скелетонов на кажной вкладке в административной панели supabase так и не решилась. Может есть у кого решение?

Timeweb Cloud
Timeweb Cloud
10.02.2025, 14:05

Добрый день!

Похоже, проблема была связана с обновлением Supabase. Мы обновили статью, и теперь установка проходит без проблем — все модули работают корректно. Если вдруг что-то пойдёт не так, дайте нам знать!

Максим
10.02.2025, 18:55

Работает! Большое спасибо за оперативность!

Владислав
07.02.2025, 13:48

При открытии страницы http://IP_ВАШЕГО_VPS:8090 появляется ошибка - "Не удалось подключиться к серверу". В Portainer все контейнеры работают без ошибок. В веб-инспекторе тоже ничего. В докер конфиге порт указан 8090.

Кто-нибудь знает как такое пофиксить?

P.S. Я прописал адрес своего VPS в URL.

Владислав
07.02.2025, 17:56

Для починки нужно сделать следующее:

  1. Открываем ..supabase/docker/docker-compose.yml и в настройках sup abase-studio в строке с fetch, где указан url меняем первую и последнюю кавычку на "\ " и "" соответственно.
  2. Далее http://IP_ВАШЕГО_VPS:8090 меняем на http://IP_ВАШЕГО_VPS:8000. Это странно, в настройках прописан порт 8090, но логинится через 8000. В официальной документации Self-Hosted Supabase тоже указан 8000.
  3. Логинимся и радуемся.

Note: Supabase-Analytics почему-то периодически отваливается. Советы из комментов ниже не помогли.

Владислав
07.02.2025, 18:03

"" и /""

Владислав
07.02.2025, 18:07

Короче хз как тут комменты форматируются: кавычка обратный слэш, обратный слэш кавычка кавычка.

Timeweb Cloud
Timeweb Cloud
10.02.2025, 14:05

Добрый день!

Похоже, проблема была связана с обновлением Supabase. Мы обновили статью, и теперь установка проходит без проблем — все модули работают корректно. Если вдруг что-то пойдёт не так, дайте нам знать!

Ольга
20.12.2024, 23:50

Столкнулся с проблемой Container supabase-analytics Error. Использовал решение по ссылке https://github.com/supabase/supabase/issues/16442 Destroy analytics to transition to postgres self hosted solution without other data loss

Enter the container and use your .env POSTGRES_PASSWORD value to login docker exec -it $(docker ps | grep supabase-db | awk '{print $1}') psql -U supabase_admin --password Drop all the data in the _analytics schema DROP PUBLICATION logflare_pub; DROP SCHEMA _analytics CASCADE; CREATE SCHEMA _analytics;\q Drop the analytics container docker rm supabase-db

supabase запустился. Похоже, что supabase что-то обновилось и теперь не даёт запускать аналитику на supabase external

Иван
03.02.2025, 21:50

Выполнив данные рекомендации supabase заработал, т.е. меня пускает и сайт грузится, но не весь. Вместо полей серые заглушки и нет возможности создать проект.

Ольга
03.02.2025, 22:04

Здравствуйте! Изначально у меня тоже все работало, кроме хранилища медиа. Мне ещё помогли вот эти обсуждения (ПОЧИНИТЬ КОНТЕЙНЕРЫ storage и studio) https://github.com/supabase/supabase/issues/28105 https://github.com/supabase/supabase/pull/29805 И также помогло редактирование файла .env. При этом на домен были установлены бесплатные сертификаты через nginx,как в видео https://rutube.ru/video/5c4360639a8e6114564fd2825f94ae5e/ Файл env: SITE_URL=https://бесплатный.домен.net ADDITIONAL_REDIRECT_URLS= JWT_EXPIRY=3600 DISABLE_SIGNUP=false API_EXTERNAL_URL=https://бесплатный.домен.net SUPABASE_PUBLIC_URL=https://бесплатный.домен.net

Timeweb Cloud
Timeweb Cloud
10.02.2025, 14:06

Добрый день!

Похоже, проблема была связана с обновлением Supabase. Мы обновили статью, и теперь установка проходит без проблем — все модули работают корректно. Если вдруг что-то пойдёт не так, дайте нам знать!

Иван
10.11.2024, 13:39

Здравствуйте! На шаге "Создание Docker файлов и переменных окружения" возникает проблема. Когда ввожу команду wget -O ./docker/docker-compose.yml https://raw.githubusercontent.com/tecspda/timeweb/main/supabase/docker-compose.yml wget -O ./docker/.env https://raw.githubusercontent.com/tecspda/timeweb/main/supabase/.env , возвращается ответ ./docker/docker-compose.yml: No such file or directory

Что делать в этом случае?

Timeweb Cloud
Timeweb Cloud
11.11.2024, 14:07

Добрый день!

Видим, что коллеги уже помогли вам разобраться в тикете. Ошибку в статье исправили. Спасибо, что обратили на неё внимание!

Георгий
10.10.2024, 16:22

Добрый день! Спасибо за статью! Решил воспользоваться гайдом, дошел до шага создания докер-контейнера: docker compose up -d. Выходит ошибка: no port specified: : <empty>. Правильно ли я понимаю, что нужно дополнительно проверить все ли порты указаны в docker-compose.yml?

Timeweb Cloud
Timeweb Cloud
11.10.2024, 16:47

Добрый день!

Уточните, пожалуйста, использовали ли вы файлы docker-compose.yml и .env, предложенные в статье:

wget -O ./docker/docker-compose.yml https://raw.githubusercontent.com/tecspda/timeweb/main/supabase/docker-compose.yml
wget -O ./docker/.env https://raw.githubusercontent.com/tecspda/timeweb/main/supabase/.env

При их использовании и при условии, что порты не изменялись вручную, такая ошибка возникать не должна. Также выполните запуск docker compose с флагом --verbose и пришлите полный лог ошибки, которая возникает при запуске:

docker compose --verbose up
Георгий
11.10.2024, 17:37

Добрый день! Спасибо за помощь!

Да, я использовал файлы docker-compose.yml и .env, предложенные в статье.

Проблема решилась установкой supabase по инструкции с https://supabase.com/docs/guides/self-hosting/docker

Мне кажется, что одна из причин ошибки в том, что у меня в пароле для postgres были специальные символы.

Также помогли после смены POSTGRES_PASSWORD в .env - эти шаги:

docker compose down -v 

rm -rf volumes/db/data/ 

docker compose up -d 
Денис
19.09.2024, 16:44

Здравствуйте. Благодарю за инструкцию. А если уже имеется сервер, то как установить на него Portainer?

Timeweb Cloud
Timeweb Cloud
20.09.2024, 12:03

Добрый день!

На существующий сервер вы можете установить Portainer по этой инструкции.