Запускаем Supabase через Docker и Traefik

Эта инструкция описывает процесс развертывания 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 можете узнать в официальном разделе документации.