Эта инструкция описывает процесс развертывания Supabase через docker, а также настройку его за обратным прокси Traefik.
Установка Supabase
Чтобы запустить Supabase на сервере, нужно выполнить следующие действия:
# Получаем код из официального репозитория
git clone --depth 1 https://github.com/supabase/supabase
# Создаём новую директорию проекта для supabase
mkdir supabase-project
# Копируем compose файлы в свой проект
cp -rf supabase/docker/* supabase-project
# Копируем env файл переменных окружения
cp supabase/docker/.env.example supabase-project/.env
# Переходим в проект
cd supabase-project
# Получаем последнии версии образов
docker compose pull
В .env файле можно заметить, что переменные с секретами не заполнены.
Чтобы сгенерировать и применить все секреты одновременно, вы можете выполнить следующую команду:
sh ./utils/generate-keys.sh
Либо воспользоваться инструкцией на официальном сайте.
Аутентификация в supabase studio
Доступ к панели управления Studio и внутреннему API защищен базовой HTTP-аутентификацией .
Перед запуском Supabase необходимо изменить пароль по умолчанию.
Пароль должен содержать хотя бы одну букву: не используйте только цифры и не добавляйте специальные символы.
Измените пароль в .env файле:
DASHBOARD_PASSWORD: пароль для Studio / панели управления.
При желании можно изменить пользователя:
DASHBOARD_USERNAME: имя пользователя для Studio / панели управления.
Запуск и остановка
Запустить все службы можно с помощью следующей команды в том же каталоге, что и ваш docker-compose.yml файл:
docker compose up -d
После запуска всех сервисов вы можете увидеть, как они работают в фоновом режиме:
docker compose ps
Через минуту или меньше все службы должны получить статус Up [...] (healthy). Если вы видите статус, например created, но не Up, попробуйте проверить логи Docker для конкретного контейнера, например,
docker compose logs analytics
Для остановки Supabase используйте:
docker compose down
Настройка Traefik
Traefik и Supabase должны находиться в одной Docker-сети, чтобы Traefik мог перенаправлять трафик.
Обычно при настройке Traefik создается внешняя сеть (часто её называют traefik-public, intranet). В инструкции ниже я буду использовать название intranet. Если ваша сеть называется иначе, замените это имя на своё.
Также вместе с сетью intranet нужно добавить сеть default. Сеть default нужна для восстановлении связи kong с остальными образами supabase.
Настройка сервиса kong
Вам нужно закомментировать прямой проброс портов (чтобы они не торчали наружу в обход Traefik) и добавить labels для Traefik.
kong:
container_name: supabase-kong
image: kong:2.8.1
restart: unless-stopped
# Удалите или закомментируйте блок ports!
# ports:
# - ${KONG_HTTP_PORT:-8000}:8000/tcp
# - ${KONG_HTTPS_PORT:-8443}:8443/tcp
environment:
# ... (оставьте оригинальные переменные окружения как есть)
networks:
- intranet # Добавляем сеть Traefik
- default
labels:
- "traefik.enable=true"
- "traefik.http.routers.files.rule=Host(`supabase.example.com`)" # Домен по которому будет доступен сайт
- "traefik.http.services.files.loadbalancer.server.port=8000" # Порт на котором отдаётся веб сайт
- "traefik.http.routers.files.entrypoints=websecure" # Укажите ваш entrypoint для HTTPS (обычно websecure или https)
- "traefik.http.routers.files.tls.certresolver=leresolver" # Укажите ваш resolver для сертификатов Let's Encrypt (например, le, myresolver)
Настройка сети
Если настройка сети есть, то нужно только добавить сеть traefik.
Объявите сеть Traefik в самом конце файла docker-compose.yml:
networks:
intranet:
external: true
default:
driver: bridge
Настройка файла .env
Supabase должен знать свой публичный адрес, иначе авторизация (GoTrue) и ссылки в панели управления не будут работать правильно.
В .env файле изменить значение:
SUPABASE_PUBLIC_URL=https://supabase.example.com
После этого запускаем docker compose и проверяем корректную работу. При заходе на сайт появится базовая авторизация, в неё нужно ввести значения указанные в .env файле в переменных DASHBOARD_USERNAME и DASHBOARD_PASSWORD.
Готово!
Всю дополнительную информацию о настройке supabase через docker можете узнать в официальном разделе документации.
