Как я пришёл в open source в 2025-м (с утилитой для бекапа PostgreSQL), чуть не потеряв проект на ~$1500\мес в 2023-м

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

Однажды я столкнулся с проблемой, когда почти потерял коммерчески успешный пет-проект из-за устаревших резервных копий БД (ещё до того, как он стал коммерчески неуспешным). При этом, даже после частичного восстановления, все-таки потерял ~30% прибыли от проекта, много нервов и времени.

Это подтолкнуло меня на разработку своего открытого инструмента для бекапа PostgreSQL. С разными хранилищами, уведомлениями при сбоях и health check'ом. Собственно, о том, как я потерял деньги и затем разработал проект — хочу рассказать в статье ниже.

Содержание

  • Про open source проект для резервных копий PostgreSQL

  • История, как я испортил базу и не смог до конца восстановиться

  • Как начал разрабатывать проект

  • Дальнейшие планы

  • Правила по работе с БД, которые я теперь внедряю во все рабочие проекты

  • Заключение

Про open source проект для резервных копий PostgreSQL

Начну с сути: я выложил в open source свой проект для мониторинга и бекапов PostgreSQL. Проект разрабатываю и использую уже более 2-х лет. Разрабатывал с ориентиром на потребности своего рабочего и "пет" проектов.

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

Стек проекта: Go, gin, gorm, React, TypeScript, PostgreSQL и всё в Docker + Docker Compose. Изначально проект был на Java, но со временем был переписан на Go.

Фактически, это UI обвязка над стандартным pg_dump. С дополнительными функциями, которые улучшают UX стандартной утилиты и добавляют интеграции с внешними сервисами для хранения бекапов и уведомлений.

Что умеет:

  • Делать резервные копии по расписанию (например, каждый день в 4 утра или каждое воскресенье в 12 ночи) для PostgreSQL с 13-й до 17-й версии.

    Бекапы хранятся в сжатом виде локально на сервере, в S3 или Google Drive. В планах добавить Яндекс Диск, NS сервера и FTP.

    После каждого бекапа вам отправляется уведомление, что всё хорошо (или наоборот — плохо). Уведомления об успешных бекапах опциональны.

  • Уведомлять в Telegram, на почту и в Slack, если БД не отвечает.

    Причём уведомляет только через n неудачных попыток (чтобы нивелировать ложные срабатывания из-за сети) и показывает график доступности.

    В планах добавить Discord, Mattermost и другие каналы связи.

Разумеется, проект бесплатный, открытый (под MIT лицензией), self hosted и с человеческим веб-интерфейсом.

Сайт проекта - https://postgresus.com/
GitHub - https://github.com/RostislavDugin/postgresus

P.S. если проект кажется полезным и если у вас есть аккаунт на GitHub, пожалуйста, поставьте звёздочку ⭐️. Первые звёзды тяжело собирать. Буду крайне признателен за поддержку!

История, как я испортил базу и не смог до конца восстановиться

В 2023-м году у меня был пет-проект, который давал доступ к ChatGPT (ещё к 3.5) в РФ без зарубежной карты и номера телефона. Обычная перепродажа доступа через API с наценкой. Проект рос, потом пошёл на спад и я его продал. БД проекта бекапилась консольной утилитой по типу PgBackRest раз в сутки на другой сервер.

Об этом даже есть статья 2023-го года с самым кликбейтным названием, которое я смог придумать: "Как я заработал 500 000 рублей, сделав доступ к ChatGPT. А потом Яндекс убил SEO и всё (почти) закончилось"

В момент, когда проект приносил ~$1 500 на пассиве и был в пике доходности, произошло плохое: я испортил данные в базе.

Это была пятничная ночь, я был уставший, фоново отвечал на сообщения и был максимально расфокусирован. В этот момент клиент попросил поменять почту для доступа к аккаунту.

Через SSH и psql я полез в продовую базу, ввёл запрос в духе:

UPDATE users SET email = 'customer@email.com' WHERE email ILIKE '%%'

Затем отвлёкся, чтобы посмотреть нужную почту в чате и... на автомате нажал Enter. После чего увидел что-то в духе AFFECTED ROWS: 10 000.

Это был единственный раз за много-много лет, когда у меня пробил холодный пот на спине. Буквально.

Дисклеймеры

Разумеется, я знал, что неплохо бы сначала делать SELECT, сделать SAVEPOINT и т.д. Но, как во всех таких историях, базовые правила техники безопасности были проигнорированы, что привело к фатальным последствиям.

Все пользовательские почты были затерты. И тут важное уточнение: по правилам платёжных систем, если пользователь не может получить доступ к оплаченной услуге — это грубейшее нарушение. Разумеется, больше никто не мог войти в аккаунт и уже начали сыпаться жалобы.

Я полез в бекапы — и холодный пот пробил ещё раз. Последний бекап был примерно месяц назад

Источник: https://habr.com/ru/articles/927166/


Интересные статьи

Интересные статьи

Мы поддерживаем кастомизацию наших продуктов и всячески помогаем в этом разработчикам: у нас есть курсы, гайды, маркетплейс решений и т.д. При этом мы выступаем за безопасность и правильный подход, за...
Всем привет! Меня зовут Илья, я разработчик в Битрикс24. В последнее время наша команда стремится быть прозрачнее и делиться изменениями в продукте. Мы хотим, чтобы разработчики, использующие Битрикс2...
14.12.2023, Гретхен Маккартни, Лаборатория реактивного движения, Пасадена, КалифорнияУченые, анализирующие данные миссии NASA «Кассини», сделали еще один шаг к доказательству обитаемости: они нашли уб...
Остовы кораблей в бухте у острова Русский Владивосток основан всего 161 год назад, то есть моложе даже современной Австралии. Чуть раньше появиться он не мог: не было подходящей геополитики. Поя...
Как быстро определить, что на отдельно взятый сайт забили, и им никто не занимается? Если в подвале главной страницы в копирайте стоит не текущий год, а старый, то именно в этом году опека над са...