Субабаза отлична, я люблю Субаза. Но в тот момент, когда я увидел, что Backups сидят за платным планом, мой мозг сделал то, что делает мозг каждого сломанного основателя: “I can build that.” И да, вы можете. На бесплатном плане. С реальной автоматизацией. Без сервера. Без пробуждения в 2 утра, чтобы помнить "о, да, я должен сбросить свою базу данных". Эта статья показывает, как я создал Использование , плюс все раздражающие небольшие ошибки, которые вы, вероятно, найдете (так что вам не нужно). automatic Supabase Postgres backups every 12 hours GitHub Actions Что мы строим Одновременная установка, которая: Бегает каждые 12 часов Подключиться к базе данных Supabase Postgres Создает файл резервного копирования .dump (сжатый, правильный формат) Хранит его в частном репо GitHub в качестве файлов версии Нет платного плана Supabase. Нет сторонних услуг. Нет VPS. Просто GitHub делает скучную работу. Единственное, что вы должны понять База данных похожа на зонт. Если вы ждете дождя, вы уже мокрые. Также, «Я просто воссоздаю его» - это ложь, которую вы говорите себе, когда вы никогда не воссоздали его, бесплатный план Supabase в основном черная дыра, если вас взломают, нет истории, к которой можно бы вернуться. Шаг 0: Создание частного репо Создать а Репозиторий GitHub назвал что-то вроде: private myapp-db резервные копии Защитные баки notpayingforshiii-db-backups (если это я) Этот репо будет хранить ваши резервные файлы. github repo, посвященный резервным копиям Шаг 1: Получите правильную строку соединения Supabase (эта часть имеет значение) Войдите в свой проект Supabase: → Settings → Database → Connection string А теперь вот ловушка: Используйте Session Pooler (не прямой) Если вы находитесь на бесплатном плане, Supabase часто показывает: Прямое подключение: не совместимо с IPv4 Сеансовый пулер: совместим с IPv4 Если вы используете Direct, ваш рабочий процесс потерпит неудачу и вы подумаете, что вселенная ненавидит вас. Сет : Метод: Session Pooler Тип: URI Вы получите строку соединения, как: postgresql://postgres.<your-project-ref>:YOUR_PASSWORD@aws-1-<region>.pooler.supabase.com:5432/postgres Это важно: Замените местонахождение [YOUR-PASSWORD] вашим паролем Supabase, если вы не помните его, есть ссылка на восстановление пароля db на этом всплывающем окне подключения. Шаг 2: Добавьте строку соединения в качестве секрета GitHub В вашем GitHub репо: Settings → Secrets and variables → Actions → New repository secret Создайте свой секрет: Название: SUPABASE_DB_URL Значение: вставьте полную строку соединения Session Pooler Не добавляйте дополнительных пространств. Не добавляйте новостей. Добавьте свой секрет Шаг 3: Добавление файла рабочего процесса GitHub Actions В своем репо создайте этот файл: .github/workflows/backup.yml Да, включая точки. GitHub создаст папки автоматически. Теперь введите этот полный рабочий процесс: name: Supabase Backupon: schedule: - cron: "0 */12 * * *" workflow_dispatch:jobs: backup: runs-on: ubuntu-latest steps: - name: Checkout repo uses: actions/checkout@v4 - name: Install matching PostgreSQL client env: DATABASE_URL: ${{ secrets.SUPABASE_DB_URL }} run: | sudo apt-get update sudo apt-get install -y wget ca-certificates lsb-release postgresql-client SERVER_VERSION=$(psql "$DATABASE_URL" -tAc "SHOW server_version_num;" | cut -c1-2) echo "SERVER_VERSION=$SERVER_VERSION" >> $GITHUB_ENV wget -qO - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add - echo "deb http://apt.postgresql.org/pub/repos/apt/ $(lsb_release -cs)-pgdg main" | sudo tee /etc/apt/sources.list.d/pgdg.list sudo apt-get update sudo apt-get install -y postgresql-client-$SERVER_VERSION - name: Run pg_dump env: DATABASE_URL: ${{ secrets.SUPABASE_DB_URL }} run: | mkdir -p backups /usr/lib/postgresql/$SERVER_VERSION/bin/pg_dump "$DATABASE_URL" \ --format=custom \ --file=backups/supabase_$(date +%F_%H-%M).dump - name: Commit backup run: | git config user.name "supabase-backup-bot" git config user.email "backup@github.com" git add backups git commit -m "Automated Supabase backup" || echo "No changes" git pushWhat this does: Открывает версию Supabase DB Postgres Устанавливает соответствующий pg_dump Создание файла .dump Включите его в свое репо Эта версия является Если Supabase обновляет Postgres позже, рабочий процесс адаптируется. future-proof Шаг 4: Дайте GitHub Actions разрешение нажимать Делай это , потому что резервное копирование провалится, когда оно попытается Вернуться в ваше репо. before you run the workflow save (commit + push) the database dump Вот как это сделать возможным: Repo → Settings → Actions → General → Workflow Выберите: ✅ Разрешения на чтение и запись Клик . Save Шаг 5: Запустите его вручную один раз Теперь проверьте его, чтобы убедиться, что он работает, прежде чем вы отдыхаете легко. Перейти к вашему репо: Actions → Supabase Backup → Run workflow Если это удастся: Вы увидите новую папку: Backups/ Файл, похожий на: supabase_2026-01-24_00-15.dump А как насчет складских букетов? Эта поддержка предназначена для вашего . Postgres database Он не включает: Supabase Storage файлы (изображения, видео, загрузки) Код функции Edge Логос Если вам также нужны резервные копии хранилища, вам понадобится отдельный процесс (совместимая с S3 синхронизация или скрипт — я мог бы расширить это, чтобы сделать все это, но в моем случае мне понадобилась только база данных). Бонус: держите свое репо от роста навсегда (необязательно) Если вы не хотите, чтобы накопились бесконечные резервные копии, вы можете автоматически удалить старые файлы (например, сохранить последние 30). Окончательные мысли Вам не нужен платный план, чтобы иметь взрослые резервные копии. Вам нужно только: GitHub репо Одна тайна Один рабочий поток Разрешение Toggle И теперь ваша база данных имеет резервные копии каждые 12 часов, пока вы спите, доставляете и притворяетесь, что вы не ответственны за производство. Если вы нашли это полезным, не стесняйтесь украсть его.