Куда пропал мой сервер?
Сижу я, значит, "в базе", собираю статистику по пользователям. Вдруг подключение обрывается. Переподключиться не удаётся - отпадает на этапе ssh-коннекта к самому серверу. IP вообще перестал пинговаться. В личном кабинете хостера моего сервера нет вообще. А через минуту приходит на почту письмо о том, что сервер удалён. Причём, падает в спам.Письмо об удалении
Сразу же пишу в поддержку не очень вежливое сообщение.
Понимаю, что начинаются проблемы, и в выходные отдохнуть не получится. Но ещё надеюсь на быстрое восстановление, ведь у меня куплена услуга бэкапов на внешнем хранилище. Параллельно ищу в почте хоть одно уведомление от хостера - проверяю весь спам, все входящие за последние 2 недели - пусто. У специалиста почему-то цель доказать, что уведомления были. Отправляю в ответ скриншот из Gmail с поиском всех писем по названию их компании.
Несколько раз спрашиваю про восстановление из бэкапов - в ответ получаю "ждите".
Дальше все скрины переписок буду добавлять под спойлер
Скрин переписки 2
Жду почти час. От поддержки тишина, напоминаю о себе. В ответ - "ждите, я отпишу". Ещё через некоторое время приходит ответ, из которого становится понятно, что ничего восстановить не удастся. И тут есть интересный момент №1 - специалист уточняет у меня, был ли сделан клон сервера. И действительно, я хотел сделать себе что-то типа UAT/препрода с полной копией проекта и актуальной базой за пару недель до описываемых событий. И по совету поддержки купил новый сервер (с оплатой на несколько дней) и создал тикет, чтобы развернули там актуальную копию из бэкапов (по обещаниям это должно было занять 1 день). 4 дня спустя копию никто так и не развернул, я перестал оплачивать тот сервер, и он удалился.
Скрин переписки 3
Ну и последнее сообщение поддержки о том, что всё плохо, но попробуют восстановить. Это уже спустя 2 часа после удаления. После этого меня просто игнорировали - я спросил ещё дважды, есть ли новости, но ответа не получил. Повесил заглушку на сайте и решил подождать до следующего утра, а заодно переспать со всеми этими мыслями о том, что дальше делать. Всё, что было локально - это бэкап базы почти 4-месячной давности (а ведь ещё было около 150 тыс. изображений), все видео (они лежат в отдельном хранилище) и 20 открытых вкладок с базой в TablePlus (к слову, часть данных оттуда удалось вытащить).
Скрин переписки 4
Ожидаемо, с утра ответа от поддержки не было. Попросил коллегу со своего компьютера написать им в чат - ответили сразу же. На вопрос "Где бэкапы, Лебовски?" был ответ, что они все удалены вместе с сервером, восстановить ничего не удалось.
Что же произошло?
Просрочка оплаты. Почему-то в их личном кабинете нет возможности добавить автоплатежи картой. В рабочей суматохе я забыл оплатить сервер. Раньше (у предыдущих хостеров) это решалось уведомлениями за несколько дней до необходимой оплаты. Либо же остановкой сервера до оплаты. В этот раз уведомлений не было, а сервер по истечении недели молча удалился. И все бэкапы, лежавшие на холодном хранилище, вместе с ним. Есть ли тут моя вина? Конечно - ответственность за оплату на мне. Но такой подход я встретил впервые.Уже по факту я проверил их почтовый сервер на чёрные списки и обнаружил такую картину.
Видимо, поэтому Gmail эти письма (если они были) решил даже в спам не класть. Как при этом дошло письмо об удалении - загадка.
Почему я выбрал этот новый и не особо известный хостинг? До этого проект хостился на одном из старожилов - хостере с 20-летним стажем. За месяц хостинг дважды лежал целиком под DDoS (хотя у них даже есть услуга защиты от оного). Первый раз 4 часа, второй раз вообще весь день. Вот и решил воспользоваться услугами компании помоложе. И да, когда я переезжал с него, был интересный момент №2 - я просил поддержку сделать образ виртуального сервера, чтобы перенести. И даже оплатил эту услугу. Но по какой-то "счастливой" случайности специалист молчал несколько дней, за которые я успешно перенёс всё вручную, а образ так и не был создан (а ведь это могло сильно помочь в восстановлении контента). В общем, как выбирать VPS/VDS в RU сегменте - для меня до сих пор загадка.
Ещё немного об общении с хостером
В процессе размышлений о том, что же делать с проектом, я заглянул в оферту хостера. И нашёл там пункт:Имеет право. Тем не менее, я пообщался со знакомым юристом, получил совет написать досудебку в любом случае. О чём и написал в письме хостеру. Получил вот такой ответ (авторский текст без изменений).Исполнитель имеет право
...
4.2.12 В случае не поступления оплаты от Заказчика или поступления оплаты не в полном объеме, не начинать оказание Услуг, либо незамедлительно приостановить предоставление Услуг до момента оплаты, уведомив об этом Заказчика.
На вопрос о том, какой смысл в услуге бэкапов, если они (бэкапы) сразу удаляются, и нет возможности отделить их от услуги самого сервера, получил тоже прекрасный ответ.Добрый день!
Ваш сервер, был удален через 7 дней, после просрочки оплаты.
Наша система автоматически уведомляет о дате оплаты за 7 дней.
То, что Вы скинули в 4.2.12 это не обязательное требование, мы можем остановить, а можем нет.
За балансом Вы должны следить сами, письмо, по какой причине не дошло до вашего Email мы не знаем.
Претензию, Вы можете написать, но это пустая трата времени, у нас так же в оферте написано, что в случае каких либо сбоев и потери ваших данных по техническим причинам, мы можем возместить только сумму не более чем стоимость оплаченных вами услуг за 12 месяцев, не более того. В вашем случае, никаких сбоев не было, вы не оплатили услуги, по этой причине ваш сервер был удален. Он проработал бесплатно, неделю.
C уважением, Николай!
И следом ещё одно письмо:Добрый день!
Что значит нет смысла? Бэкапы хранятся пока услуга активна, или вы хотите чтобы мы хранили бэкапы после удаления сервера?
Бэкапы в конкретном случае делаются, для восстановления вашего виртуально сервера, в случае каких то проблем с ним (пока услуга активна), но после удаления сервера, бэкапы так же удаляются.
Если Вы нимательно читали то в оферте написано :
4.2. Исполнитель имеет право:
4.2.12. В случае не поступления оплаты от Заказчика или поступления оплаты не в полном объеме,
не начинать оказание Услуг, либо незамедлительно приостановить предоставление Услуг до момента
оплаты, уведомив об этом Заказчика.
Тут нет ни слова, что обязан отключить, мы имеем право отключить, а так же можем не отключать. За балансом и сроками оплаты услуг, вы обязаны следить сами, система удалила ваш виртуальный сервер не в день оплаты, а через 7 дней просрочки.
Так же, в Соглашение об уровне предоставления услуги (SLA - Service Level Agreement) - (https://ml.cloud/documents/appendix_3_SLA.pdf) написано :
6.3.2. При утрате данных пользователя без возможности восстановления из резервной копии (если
такая утрата обусловлена взломом сервера, администрируемого Исполнителем, либо является
следствием действий сотрудника Исполнителя, связана с аварией на оборудовании Исполнителя),
Заказчику компенсируется документально подтвержденный ущерб, но не более стоимости услуг за 12
месяцев.
Хотя даже и этот пункт не попадает под ваш случай. Вы просрочили оплату, сервер удален, никаких других причин тут нет.
С уважением, Николай!
А потом ответ на предложение компенсировать часть расходов:Добрый день!
Давай те по существу, что Вы хотите?
С уважением, Александр!
Подход профессиональный, вызывает доверие. Как мне предлагалось привязать карту при отсутствии такой функции в ЛК - я не знаю, а от предложения бесплатного сервера по доброте душевной отказался.Добрый вечер!
С этим мы не можем вам помочь.
Мы по доброте душевной, можем Вам активировать ВПС (той же конфигурации) на пол года, и это не в качестве компенсации, а просто по той причине, что нам вас жалко по человечески, хотя все что произошло, это сугубо ваша вина, 1 - за датой оплаты вы должны следить сами, вы могли закинуть денег на баланс с запасом, или привязать карту для автоматических списаний. 2 - бэкапы самих сайтов, вы так же должны делать сами!
С уважением, Александр!
И я, конечно, не сторонник теорий заговоров, но за день или два до удаления сервера мне пришло письмо от какой-то компании с вопросом о том, не хочу ли я продать свой проект. На что я ответил отказом.
Что было дальше?
Сразу промелькнула мысль - проект придётся закрыть. Это был бы самый простой вариант, конечно. Но ответственность перед пользователями и сожаления о проделанной для запуска проекта работе пересилили. Взял несколько выходных дней на основной работе, запасся чаем и едой и сел за восстановление. Развернул базу 4-месячной давности, посмотрел старые посты без картинок...Первое, что сильно помогло, это сохранившиеся sitemap-файлы, в которых был список ссылок на все посты на момент падения. Выбрал те, что отсутствуют в базе, и получил список постов для восстановления.
Дальше глянул, что есть в кэше Гугла, Бинга и Яндекса. Как оказалось, есть там много, но, увы, без картинок. При этом в Бинге страницы начали таять буквально на глазах - при запросе страницы он её сразу начинал переиндексировать, и в кэш попадала 404. Яндекс же хранил кэш без каких-либо попыток его обновить, если сервер отдавал 404. Написал парсер кэша Яндекса, собрал оттуда за несколько часов посты вместе с юзернеймами, тэгами и оценками. Посты собрал, но вот часть из них была создана пользователями, которые тоже удалились. Восстановить пользователей возможным не представлялось, т.к. у меня был только список логинов, а email'ов не было. Создал юзера vombat-zombie, стал добавлять ему посты без пользователей, сохраняя отдельно оригинальный логин. Параллельно написал механизм, который возвращал посты, если пользователь заново зарегистрировался. Пока ложных срабатываний не было. Или я об этом не знаю.
Теперь у нас есть практически все посты, но нет ни одного изображения. Любители длиннотекстов порадовались, а я думал, что делать дальше.
Большой плюс (для восстановления, конечно) UGC-проектов - контент часто постится сразу на несколько подобных площадок. У меня даже предусмотрен механизм импорта постов со своего аккаунта Пикабу при регистрации на Вомбате. Дописал логику, чтобы можно было не только импортировать новые, но и обновить картинки у текущих постов, если найдены соответствия по URL.
А каким файлообменником для бэкапов вы пользуетесь? Конечно же
Позже были написаны парсеры DTF (спасибо за удобное API) и Dzen (это было ужасно), которые вытащили ещё часть изображений. Были единичные случаи, когда картинки не соответствовали посту, но, как правило, пользователи об этом быстро сообщали, а мы исправляли.
Неожиданно подкинул картинок CDN Cloudinary, который использовался на проекте некоторое время назад. Как оказалось, он хранил все ассеты изображений, которые к нему попали. Ещё несколько десятков тысяч файлов были извлечены оттуда.
Оставшиеся без картинок посты я скрыл из общей ленты и сделал доступными для редактирования самими авторами - на текущий момент 1112 постов исправлено пользователями.
По итогу я запустил сайт через 4 дня от момента удаления, а за пару недель было восстановлено около 80% утраченных постов. К сожалению, комментарии восстановить не удалось, т.к. их не было в индексе поисковиков - они приезжают асинхронно.
Аудитория отнеслась к произошедшему довольно лояльно, сейчас проект продолжает свою работу, а я написал синхронизацию изображений и дампа БД на внешнее хранилище, что, разумеется, увеличит ежемесячные траты на проект, но уменьшит траты нервных клеток.
Как сервер с моим проектом был удалён вместе с бэкапами
Не так давно на Хабре была небольшая волна постов и комментариев о том, как можно быстро и эффективно потерять данные своего проекта — неработающие или отсутствующие бэкапы, ошибки «железа»...
habr.com