Для читателя всё выглядит просто: он открыл сайт, нажал «Подписаться», оплатил, а через день получил выпуск в почтовый ящик. Одна услуга, одна кнопка, одно письмо. Для автора за этой картинкой стоят как минимум четыре отдельные системы: место, где живут тексты, список людей с их статусами, платёжный аккаунт и почтовая инфраструктура, которая доставляет выпуски. Когда вы поднимаете собственный Ghost, вы берёте под контроль только первую часть. Остальные придётся подключить и проверить отдельно. Поэтому на вопрос «что нужно Ghost для платной рассылки, кроме VPS?» честный ответ: ещё три вещи, и каждая со своими условиями.

Четыре системы под одной кнопкой

Начнём с того, что именно делает Ghost. Раздел Memberships описывает его как набор из регистрации участников, платных подписок и рассылок. Подтверждение регистрации и вход проходят по ссылке из письма, а доступ к закрытому материалу зависит от состояния участника и его уровня. У контента бывают уровни Public, Members only, Paid-members only и Specific tiers. То есть решение «пустить или не пустить» принимает сам Ghost, глядя на статус человека в своей базе.

Теперь разложим по полочкам, что за что отвечает.

  • Размещение публикаций. Это сам Ghost на вашем сервере: сайт, админка, тема, посты, маршруты. Здесь работает VPS.
  • Учёт участников. База Ghost хранит email, имя, флаг subscribed_to_emails, stripe_customer_id и статус: free, paid или complimentary. Это ваша таблица людей, но не бухгалтерия.
  • Платежи. Штатные платные подписки работают через прямую интеграцию со Stripe, а сами платежи и платёжные данные находятся в Stripe-аккаунте владельца публикации. Ghost лишь знает, что клиент существует и что подписка активна.
  • Доставка писем. Здесь две разные дороги, о которых ниже. Сервер с Ghost их не заменяет.

Полезно держать эту схему в голове, потому что у каждой системы свой способ сломаться и свой способ переехать. Сменить VPS можно за вечер. Сменить платёжную систему или репутацию почтового домена так быстро не получится. Если вы смешиваете их в один «переезд сайта», вы рискуете что-то потерять незаметно, например подписку, которая продолжает списывать деньги, но уже не открывает доступ.

Сначала Stripe, потом разговор о серверах

Порядок размышлений у многих перевёрнут. Сначала выбирают тариф VPS, ставят Ghost, настраивают тему, а уже потом вспоминают, что платные подписки требуют платёжного провайдера. На дату проверки документация Ghost называет Stripe единственным нативно поддерживаемым платёжным провайдером. Любой другой сценарий оплаты означает отдельную интеграцию, которую придётся строить и сопровождать самостоятельно.

Отсюда практический вывод: до обсуждения переезда выясните, доступен ли Stripe лично вам. Это зависит от вашей страны, юридического статуса и способа получения выплат, и никакой хостинг этого не изменит. Тот факт, что VPS можно оплатить картой РФ или через СБП, говорит только о вашем расчёте с хостингом. Подписчикам Ghost он ничего не гарантирует: их платежи идут через ваш Stripe-аккаунт по его правилам. Если Stripe для вас недоступен, у вас остаются другие пути: бесплатная публикация с рассылкой, платные материалы по самодельной схеме или внешние инструменты. Но это уже другой проект, и называть его «Ghost с платной подпиской из коробки» неверно.

Если же Stripe подключён, дальше всё довольно приятно. По документации по tiers, после подключения можно завести несколько уровней со своими названиями, преимуществами и месячной или годовой ценой, а Portal покажет посетителю выбранные уровни и варианты периодичности. Там же есть практичный совет: цену уровня менять в Ghost Admin, а не напрямую в Stripe. Причина понятна: Ghost и Stripe должны сходиться в том, что именно продаётся, и правка с одной стороны легко создаёт расхождение.

Два уровня вместо пяти

Соблазн сделать сразу много tiers понятен: «базовый», «поддерживающий», «с архивом», «годовой со скидкой». Но каждый уровень надо потом объяснять читателю, проверять в Portal и учитывать при доступе к постам. Для первого запуска разумнее два состояния: бесплатный участник, который получает открытые выпуски, и платный, который читает остальное. Всё остальное добавляйте, когда увидите реальные вопросы людей.

Две почтовые дороги, которые путают

Теперь самое частое недоразумение. Слово «почта» в Ghost означает две разные вещи.

Первая — транзакционные письма. Это ссылка для входа, подтверждение регистрации, служебные сообщения участнику. По документации о Mailgun и рассылках, их можно отправлять через SMTP или другой поддерживаемый почтовый сервис. Письмо одно, адресат один, и пришло оно в ответ на действие самого человека.

Вторая — массовый выпуск рассылки. Это один материал, который уходит сразу всем подписчикам. Встроенная массовая доставка использует bulk mail API, и на дату проверки поддерживается Mailgun. Обычная SMTP-конфигурация эту доставку не заменяет. Конфигурационная документация подтверждает: Mailgun для транзакционной почты необязателен, а для встроенной массовой рассылки нужен.

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

Две почтовые дороги в Ghost
ПараметрТранзакционные письмаВыпуск рассылки
Что этоВход, подтверждение, служебные сообщенияОдин материал многим подписчикам
Способ отправкиSMTP или другой поддерживаемый почтовый сервисBulk mail API, на дату проверки Mailgun
Чем проверятьВход тестовым участникомТестовый выпуск небольшой группе
Если не работаетЛюди не могут войти или подтвердитьсяВыпуск не доходит до читателей

Существует и третий путь: отказаться от встроенной рассылки и синхронизировать участников с внешней платформой через интеграцию. Тогда Ghost остаётся местом публикаций и учёта доступа, а письма отправляет другой сервис. Это разумный вариант, если Mailgun вам не подходит, но тогда вы отвечаете за то, чтобы статусы участников и подписки в двух системах не расходились.

Домен отправителя: доверие, которое можно проверить

Когда выпуск уходит тысяче людей от имени вашего домена, почтовые провайдеры смотрят, можно ли этому домену верить. Для этого служат записи SPF, DKIM и DMARC, и конфигурационная документация Ghost рекомендует корректно настраивать их для sending domains. Важно трезво понимать, что они дают. Они помогают подтвердить, что письмо действительно отправлено от имени домена с ведома владельца. Они не гарантируют, что письмо попадёт во «Входящие», а не в «Промоакции» или спам, и не исключают отказов. Любой текст, обещающий попадание в основной ящик, обещает лишнее.

В настройках Ghost есть тонкость, которую легко упустить. Параметр mail.from задаёт отправителя по умолчанию, а адрес поддержки может использоваться в сообщениях участникам. При этом у каждой рассылки могут быть свои адреса отправителя и reply-to, и они переопределяют значения по умолчанию для этой рассылки. Поэтому полезно заранее решить, как выглядят ваши письма для читателя:

  • служебные письма приходят с одного адреса, на который не страшно получать ответы;
  • выпуск идёт от имени автора или издания;
  • reply-to ведёт туда, где ответ действительно прочтут.

Когда читатель нажмёт «ответить» на платный выпуск, чтобы спросить про оплату, письмо не должно уйти в несуществующий ящик. Это мелочь, но именно такие мелочи определяют, доверяют ли вам.

Отдельно о том, как проверять. Не стоит смотреть только на то, что Mailgun принял задание. Заведите тестовых участников с адресами у разных почтовых сервисов, отправьте им пробный выпуск и откройте результат глазами читателя: от кого письмо, куда ведёт ссылка отписки, как выглядит вёрстка, в какую папку оно попало. Если часть писем ушла в спам, это сигнал разбираться с записями домена и содержимым, а не повод считать систему сломанной или, наоборот, идеальной.

Нужен сервер под эту задачу?

Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации Россия, США, Франция и Великобритания. Оплата картой РФ и по СБП.

АРЕНДОВАТЬ СЕРВЕР

Что понадобится от VPS

Теперь можно вернуться к серверу. Официальная инструкция по установке для production рассчитана на Ubuntu 22.04, 24.04 или 26.04, NGINX, поддерживаемую версию Node.js, MySQL 8.0 или 8.4 и systemd. В требованиях указан минимум 1 ГБ памяти и зарегистрированный домен. Это условия, при которых Ghost-CLI установится, а не оценка того, сколько подписчиков выдержит платная рассылка. Сколько ресурсов нужно вашему проекту, покажут замеры на вашем трафике, а не таблица тарифов.

На VPS MAATRIX доступен root-доступ, диски NVMe и процессоры AMD EPYC, а линейка тарифов начинается с Ba (1 vCPU, 2 ГБ RAM, 40 ГБ NVMe) и идёт через Uab (2 vCPU, 4 ГБ, 80 ГБ) к более крупным. Для публикации с одной рассылкой разумно начинать с небольшого тарифа и смотреть на загрузку: Ghost, MySQL и NGINX делят одну память, и именно её обычно проверяют первой. Запас лучше иметь на случай импорта и сборки темы, но эти цифры не являются обещанием ёмкости. Заказывая сервер, проверьте в форме заказа доступную ОС и локацию.

Порядок первых шагов важен из-за DNS: A-запись должна указывать на сервер до настройки SSL, а Ghost-CLI использует полный адрес публикации вместе с протоколом. Адрес, который вы укажете при установке, станет адресом всех ссылок в письмах и в Stripe, так что менять его потом неприятно. Подробный разбор самой установки есть в материале о том, как установить и настроить Ghost на VPS, здесь мы на нём не задерживаемся.

Есть и оговорка про способ установки. Документация различает установку через CLI и новый вариант с Docker Compose: для полностью self-hosted ActivityPub и веб-аналитики она направляет к Docker Compose. Поэтому не стоит ожидать, что любая CLI-установка получит эти функции.

Что унести с собой: контент, люди и файлы

Независимость от одной установки означает, что вы умеете забрать свои данные и поднять их в другом месте. У Ghost для этого есть несколько инструментов, и каждый покрывает только часть.

По документации по экспорту, Admin export может включать контент и настройки (посты, страницы, теги, tiers, settings) в JSON и участников с labels и статусом подписки в CSV. Отдельно выбираются аналитика постов в CSV, архив каждой установленной темы и файлы routes.yaml и redirects.yaml. Выбранное собирается в ZIP, а на self-hosted установке скачивание идёт через браузер. Экспорт медиа через этот интерфейс указан для Ghost(Pro), поэтому на своём сервере картинки и файлы нужно копировать отдельно.

Теперь главное: этот экспорт не полная копия сайта. Согласно руководству по резервному копированию и восстановлению, обычный Admin export не включает комментарии, историю активности участников и медиафайлы. Для восстановления или точной копии документация описывает другой путь: прямая копия базы MySQL плюс папка content. Это два разных инструмента с разными задачами. Первый переносит материал и людей, второй воспроизводит установку.

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

Порядок переноса платных участников

Здесь легко ошибиться, поэтому порядок принципиален. Руководство требует, чтобы перед импортом платных участников новый Ghost был подключён в Live mode к тому же Stripe-аккаунту, который использовался на прежней установке. Только после этого импортируется members.csv, и Ghost сообщает о завершении импорта. Если подключить другой аккаунт или тестовый режим, платные участники окажутся без связи со своими подписками.

Связь держится на поле stripe_customer_id. По документации по импорту участников, обязателен только email, а остальные поля необязательны: name, note, subscribed_to_emails, stripe_customer_id, complimentary_plan, labels и created_at. Значение auto заставляет Ghost искать email в подключённом Stripe-аккаунте. Это удобно, но проверьте результат выборочно: совпадение по адресу не заменяет проверку конкретных людей.

Отдельная ловушка скрыта в поле subscribed_to_emails. Для новых участников true подпишет их на рассылки с включённой опцией подписки при регистрации, а false отпишет от всех. У существующих участников true обычно сохраняет текущие предпочтения, кроме тех, кто ранее отписался от всех рассылок, а false отпишет всех. Представьте, что вы подготовили CSV наспех и во всех строках поставили false. Люди останутся платными, но перестанут получать выпуски, и узнаете вы об этом по первым письмам с вопросом, куда делась рассылка.

Репетиция на копии

Полезная привычка: сначала собрать новый Ghost рядом со старым и прогнать весь маршрут на нём, не трогая публичный адрес. Развернуть тему, восстановить content и медиа, загрузить контент, проверить маршруты и редиректы, затем права на файлы и перезапуск сервиса: руководство называет это отдельными шагами. Тестовых участников добавить вручную, получить письмо со ссылкой входа, открыть платный пост под разными статусами. Только когда вход и доступ ведут себя как надо, имеет смысл менять DNS. Для данных читателей на репетиции используйте тестовые адреса, а реальный CSV держите под ограниченным доступом: в нём персональные данные.

Отписка, отмена и удаление: три разных действия

Последняя развилка касается того, что делает читатель, когда хочет «перестать». В голове у него одно действие, а в системах — три разных.

  • Отписка от писем. Каждая рассылка Ghost содержит ссылку для отписки, и переход по ней меняет состояние получения рассылки на unsubscribed. Человек остаётся участником, его статус и платная подписка не затронуты.
  • Отмена платной подписки. Это операция в Stripe-связке: она определяет, будет ли человек платить дальше и сохранится ли доступ к платным материалам.
  • Удаление участника из Ghost. Согласно документации по управлению участниками, массовое удаление не прекращает активные подписки в Stripe.

Последний пункт заслуживает остановки. Если вы чистите базу после переезда или удаляете «лишних» участников пачкой, платёж у человека при этом может продолжаться, хотя в Ghost его уже нет. Для читателя это выглядит как списание денег за то, чего он не получает. Поэтому любую чистку платных участников стоит начинать с отмены подписок там, где это нужно, а потом уже убирать записи. Для групповых действий пригодятся фильтры и labels из раздела участников: они позволяют выделить нужную группу и посмотреть на неё до того, как что-то будет сделано.

Есть и обратная сторона. Человек, который отписался от писем, но продолжает платить, имеет полное право на недоумение: он платит, а выпусков нет. Ему можно объяснить, что доступ к материалам на сайте остаётся, а получение писем можно включить обратно в настройках аккаунта. Хорошо, если эта разница описана на странице тарифов заранее, а не в ответе на гневное письмо.

Первый выпуск и аудитория, которая принадлежит вам

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

Момент, когда читатель открыл первое письмо с вашего домена, оплаченное через ваш Stripe-аккаунт и прочитанное на вашем сайте, — маленькая победа, но значит она больше, чем кажется. Список участников, тексты, темы, маршруты и статусы теперь лежат у вас, и вы знаете, как их выгрузить. Если когда-нибудь придётся переезжать, автору понадобятся ZIP с экспортом, копия базы и папки content, доступ к тому же Stripe-аккаунту и настроенный домен отправителя. Тогда аудитория переедет вместе с вами, и читатель, возможно, даже не заметит, что за его письмом стоит уже другой сервер.