Самостоятельное развёртывание на Railway
ChurchApps публикует шаблон Railway для развёртывания в один клик. Он даёт вашей церкви собственный приватный экземпляр B1 Admin, портала участников B1, API и базы данных MySQL — всё работает на инфраструктуре, которой вы владеете и за которую платите напрямую. Это руководство поможет запустить систему примерно за 15 минут, а затем проведёт через настройку после развёртывания, которая нужна большинству церквей.
Быстрый старт
- Нажмите кнопку Deploy on Railway выше.
- Войдите в Railway (или создайте бесплатную учётную запись) и добавьте способ оплаты.
- Нажмите Deploy, ничего не меняя, — каждая переменная имеет разумное значение по умолчанию.
- Подождите 5–10 минут, пока все четыре сервиса не станут зелёными.
- Откройте адрес сервиса B1Admin, нажмите Register и создайте учётную запись. Первая учётная запись автоматически становится администратором сервера.
- Следуйте подсказкам в приложении, чтобы создать первую церковь.
На этом всё. У вас полностью работающий экземпляр ChurchApps. Всё, что ниже, — необязательная доработка.
Развёртывание сейчас находится в бета-версии. Если вы столкнулись с чем-то, чего нет в документации, создайте задачу на github.com/ChurchApps/Api/issues и приложите журналы развёртывания.
Что понадобится
Что развёртывается
Шаблон создаёт четыре сервиса в одном проекте Railway:
| Сервис | Назначение | URL после развёртывания |
|---|---|---|
| MySQL | Хранит все данные (один экземпляр, несколько схем) | только внутренний |
| Api | Бэкенд для membership, content, giving, attendance и др. | https://api-<id>.up.railway.app |
| B1Admin | Веб-приложение для сотрудников и администраторов | https://b1admin-<id>.up.railway.app |
| B1App | Веб-приложение для участников и сайт церкви | https://b1app-<id>.up.railway.app |
Схемы базы данных создаются автоматически при первом запуске, через миграцию запуска API.
Первоначальная настройка
Теперь, когда система запущена, вот что большинство церквей настраивают дальше — примерно в порядке приоритета.
1. Email (настоятельно рекомендуется)
Без email участники всё равно могут регистрироваться и пользоваться системой, но они не смогут сбросить забытый пароль — это должен сделать за них администратор. Настройка SMTP занимает около 5 минут.
В панели Railway откройте сервис Api → Variables и добавьте:
MAIL_SYSTEM=SMTP
SMTP_HOST=<адрес вашего провайдера>
SMTP_USER=<ваше имя пользователя>
SMTP_PASS=<ваш пароль или ключ API>
SMTP_SECURE=false
SUPPORT_EMAIL=noreply@yourchurch.org
Стоит знать о трёх провайдерах:
Resend — самый простой бесплатный вариант (100 писем в день)
- Зарегистрируйтесь на resend.com.
- Подтвердите домен отправки (или используйте тестовый отправитель
onboarding@resend.dev, чтобы начать). - Создайте ключ API.
- Задайте
SMTP_HOST=smtp.resend.com,SMTP_USER=resend,SMTP_PASS=re_xxxxxxxxx.
Gmail — бесплатно для личного использования (~500 в день)
- Включите двухфакторную аутентификацию в учётной записи Google.
- Создайте пароль приложения.
- Задайте
SMTP_HOST=smtp.gmail.com,SMTP_USER=your-address@gmail.com,SMTP_PASS=<16-символьный пароль приложения>.
AWS SES — самый дешёвый при больших объёмах
- Подтвердите домен отправки в AWS.
- Выйдите из песочницы SES, если будете отправлять на неподтверждённые адреса.
- Создайте учётные данные SMTP в разделе SES → SMTP Settings → Create credentials.
- Задайте
SMTP_HOST=email-smtp.us-east-2.amazonaws.com,SMTP_USER=AKIA...,SMTP_PASS=<пароль SMTP SES>.
После сохранения переменных сервис Api перезапускается автоматически. Проверьте, инициировав сброс пароля на тестовой учётной записи.
Если указать MAIL_SYSTEM=SMTP с неверными учётными данными, регистрация будет выглядеть успешной, но письмо с подтверждением так и не придёт. Либо исправьте учётные данные, либо удалите MAIL_SYSTEM, чтобы вернуться к режиму без email.
2. Собственные домены
Адреса *.up.railway.app работают, но большинство церквей хотят свои.
Для каждого веб-сервиса (B1Admin и B1App):
- Откройте сервис в Railway → Settings → Networking.
- Нажмите + Custom Domain и введите имя хоста:
admin.yourchurch.orgдля B1Adminapp.yourchurch.org(илиwww) для B1App
- Добавьте CNAME-запись, которую покажет Railway, у вашего DNS-провайдера.
- Подождите несколько минут, пока распространится DNS. Railway сам выпустит TLS-сертификат.
Затем обновите переменные сервиса Api, чтобы ссылки в письмах вели на новые домены:
B1ADMIN_ROOT=https://admin.yourchurch.org
А в сервисе B1Admin:
REACT_APP_API_BASE=https://api.yourchurch.org (если вы также задаёте собственный домен API)
REACT_APP_B1_WEBSITE_URL=https://{subdomain}.yourchurch.org
Токен {subdomain} записывается буквально — во время выполнения он заменяется поддоменом каждой церкви (см. раздел «Несколько сайтов» ниже).
3. Несколько сайтов (несколько церквей на одном экземпляре)
ChurchApps изначально многопользовательская система — одно развёртывание может обслуживать любое количество церквей, у каждой свои люди, группы и сайт. Новые церкви добавляются полностью через административный интерфейс; никаких изменений инфраструктуры не требуется.
Добавление дополнительных церквей
- В B1 Admin перейдите в Settings → Manage Church → Switch Church → Create New.
- У каждой церкви есть уникальный slug поддомена (например,
firstchurch,gracecommunity). - Новая церковь получает собственные данные, участников, сайт и настройки пожертвований, полностью изолированные от других церквей на том же экземпляре.
Направление каждой церкви на собственный адрес
Есть два способа публично открыть церкви:
| Схема | Пример | Настройка |
|---|---|---|
| По пути (работает сразу) | app.yourchurch.org/firstchurch | Дополнительная настройка не нужна |
| По поддомену (более аккуратные адреса) | firstchurch.yourchurch.org | Подстановочная DNS-запись и подстановочный собственный домен |
Для маршрутизации по поддомену на Railway:
- В DNS-провайдере создайте подстановочную CNAME-запись:
*.yourchurch.org → <цель railway для b1app>. - В Railway, в сервисе B1App → Settings → Networking, добавьте
*.yourchurch.orgкак собственный домен. - В сервисе B1Admin задайте
REACT_APP_B1_WEBSITE_URL=https://{subdomain}.yourchurch.org.
После повторного развёртывания сайт каждой церкви автоматически открывается по адресу <их-поддомен>.yourchurch.org.
Подстановочные собственные домены требуют платного тарифа Railway. Маршрутизация по пути работает на любом тарифе и функционально идентична — просто адресная строка выглядит менее аккуратно.
4. Онлайн-пожертвования (Stripe / PayPal)
Пожертвования настраиваются для каждой церкви внутри административного интерфейса, а не через переменные окружения — так каждая церковь может использовать собственную торговую учётную запись.
- Получите учётные данные разработчика в Stripe (Developers → API keys) или PayPal (My Apps & Credentials).
- В B1 Admin перейдите в Settings → Giving Settings.
- Выберите провайдера, вставьте публичный и секретный ключи и настройте обработку комиссий.
- По желанию добавьте
GOOGLE_RECAPTCHA_SECRET_KEYв сервис Api в Railway, чтобы защитить публичные формы пожертвований от ботов.
5. Хранение файлов
Шаблон создаёт постоянный том на 1 ГБ, подключённый к сервису Api, для фото участников, файлов проповедей и загруженных документов.
Чтобы увеличить его: откройте сервис Api → Volumes → измените размер ползунком.
Для больших развёртываний (100+ ГБ или много одновременных загрузок) переключитесь на S3, задав в сервисе Api:
FILE_STORE=S3
AWS_S3_BUCKET=<your-bucket>
AWS_ACCESS_KEY_ID=<key>
AWS_SECRET_ACCESS_KEY=<secret>
AWS_REGION=us-east-2
Существующие файлы в томе автоматически не переносятся — скопируйте их в бакет, прежде чем менять переменную.
6. Дополнительные интеграции функций
Они открывают отдельные возможности и могут быть добавлены позже через панель Railway. Задавайте их в сервисе Api.
| Переменная | Какую функцию включает |
|---|---|
OPENAI_API_KEY или OPENROUTER_API_KEY | Поиск с ИИ-помощником и предложения по контенту |
YOUTUBE_API_KEY | Поиск и встраивание проповедей с YouTube |
PEXELS_KEY | Выбор стоковых изображений для конструктора сайтов |
VIMEO_TOKEN | Поддержка проповедей с Vimeo |
API_BIBLE_KEY | Поиск стихов Библии в уроках и контенте |
YOUVERSION_API_KEY | Интеграция с YouVersion Bible |
WEB_PUSH_PUBLIC_KEY + WEB_PUSH_PRIVATE_KEY | Push-уведомления в браузере (создайте пару ключей VAPID) |
HUBSPOT_KEY | Необязательная синхронизация с CRM для новых регистраций |
Обновление
Каждый сервис связан со своим репозиторием GitHub. Push в main в ChurchApps/Api, ChurchApps/B1Admin или ChurchApps/B1App запускает автоматическое повторное развёртывание.
Чтобы зафиксировать конкретную версию, измените настройку Branch каждого сервиса на тег или ветку релиза. Это рекомендуемая схема для продакшна: автоматическое развёртывание из main подхватывает незавершённую работу.
Стоимость
Реальные диапазоны для небольшой церкви (менее 200 участников, небольшой трафик):
| Компонент | Примерная стоимость в месяц |
|---|---|
| Базовый тариф Railway | $5 |
| Плагин MySQL | $5 + ~$1 за хранилище |
| Вычислительные ресурсы 3 веб-сервисов | $3–10 вместе |
| Том 1 ГБ | $0.25 |
| Итого | ~$15–25 в месяц |
Стоимость растёт линейно с трафиком, загрузкой фото и размером базы данных. Railway показывает текущее использование на вкладке Usage проекта — там можно задать лимиты расходов, чтобы ограничить риск.
Устранение неполадок
| Симптом | Вероятная причина | Решение |
|---|---|---|
Сборка падает с EBUSY: rmdir '/app/node_modules/.cache' | Конфликт кеша Nixpacks | Задайте NIXPACKS_NO_CACHE=true для затронутого сервиса |
Сборка B1Admin падает с Missing: @types/... | Рассинхронизированный package-lock.json | Загрузите последний main |
| Развёртывание Api зависает на "Deploying" | Проверка работоспособности не проходит — /health не возвращает 200 | Посмотрите журналы развёртывания; обычно не хватает обязательной переменной окружения |
| B1Admin пишет "check your email", но письмо не приходит | Задан MAIL_SYSTEM=SMTP, но учётные данные отсутствуют или неверны | Исправьте учётные данные или удалите MAIL_SYSTEM, чтобы отключить email |
Вход перенаправляет на api.churchapps.org | REACT_APP_STAGE равен prod | Задайте REACT_APP_STAGE=custom в сервисе B1Admin |
| Все поддоменные церкви показывают одинаковое содержимое | В REACT_APP_B1_WEBSITE_URL нет токена {subdomain} | Задайте, например, https://{subdomain}.yourchurch.org |
| Собственный домен показывает "Application not found" | DNS ещё не распространился или сертификат Railway в ожидании | Подождите 5 минут; проверьте DNS командой dig admin.yourchurch.org |
Если вы столкнулись с чем-то, чего нет в этом списке, создайте задачу на github.com/ChurchApps/Api/issues и приложите журналы развёртывания.
Связанные статьи
- Самостоятельное развёртывание через Docker — тот же стек на собственном железе или VPS
- Первоначальная настройка — первые шаги после создания церкви
- Первоначальная настройка сайта — настройка публичного сайта церкви
- Настройки пожертвований — подключение Stripe или PayPal
- Локальная настройка API — запуск стека локально для разработки
- Развёртывание API (AWS) — как развёртывается официальный SaaS ChurchApps