Перейти к содержимому
Artizan Templates
Язык: Русский
Сайт на заказ
Меню

Развёртывание

Разместите сайт на Cloudflare Pages, Netlify, в Docker или на Node, задайте нужные переменные окружения и подключите домен.

Выберите режим рендеринга

Задайте RENDER_MODE в .env. Значение по умолчанию подходит большинству сайтов.

РежимКогда собираются страницыХостингКогда выбирать
static (по умолчанию)во время сборкиCloudflare Pages, Netlify, nginxбольшинство сайтов
hybridво время сборки, плюс серверные эндпоинтыNode.jsсайту нужны собственные серверные эндпоинты, например контактная форма
serverпри каждом запросеNode.js за CDNтысячи страниц или контент, который должен обновляться за минуты

Код страниц одинаков во всех режимах. Нужен ли шаблону сервер, указано в его README.md.

Сначала соберите локально

Terminal
        pnpm build
      

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

Статический сайт: Cloudflare Pages или Netlify

Подключите свой закрытый репозиторий к хостингу и укажите такие настройки сборки:

НастройкаЗначение
Команда сборкиpnpm build
Папка с результатомdist/client
Версия Node.js22

Добавьте переменные окружения для сборки. Скопируйте их из своего .env:

Terminal
        PUBLIC_SITE_URL=https://example.com
PUBLIC_SANITY_PROJECT_ID=abc12345
PUBLIC_SANITY_DATASET=production
PUBLIC_SANITY_API_VERSION=2026-08-01
      

Сборка сама создаёт файлы редиректов и заголовков для хостинга (_redirects, _headers), поэтому не редактируйте их вручную.

Статический сайт: Docker (nginx)

Terminal
        docker build -f Dockerfile.static \
  --build-arg PUBLIC_SITE_URL=https://example.com \
  --build-arg PUBLIC_SANITY_PROJECT_ID=abc12345 \
  -t my-site .
docker run -p 8080:8080 my-site
      

Образ запускает nginx без root-привилегий на порту 8080. Проверка работоспособности — /api/health.

Hybrid или server: Docker (Node.js)

Terminal
        docker build -f Dockerfile.node \
  --build-arg RENDER_MODE=hybrid \
  --build-arg PUBLIC_SITE_URL=https://example.com \
  --build-arg PUBLIC_SANITY_PROJECT_ID=abc12345 \
  -t my-site .
docker run -p 3000:3000 my-site
      

Сервер слушает порт 3000, проверка работоспособности — /api/health. Задайте контейнеру время на остановку не меньше 10 секунд, чтобы запросы в процессе обработки успевали завершиться во время развёртывания.

Без Docker соберите и запустите сервер напрямую:

Terminal
        pnpm build
HOST=0.0.0.0 pnpm start
      

Значения, которые фиксируются при сборке

RENDER_MODE и все значения, начинающиеся с PUBLIC_, встраиваются в сайт при сборке. На платформах, где настройки сборки и выполнения разделены, добавляйте их как значения для сборки. Если задать их только для выполнения, сборка молча возьмёт значения по умолчанию. После изменения любого из них пересоберите сайт.

Публикация и пересборка

Статический сайт показывает новый контент после пересборки. Чтобы сайт пересобирался при каждой публикации:

  1. Создайте deploy hook у своего хостинга (он есть и у Cloudflare Pages, и у Netlify) и скопируйте его URL.
  2. На sanity.io/manage откройте свой проект → API → Webhooks и добавьте вебхук:
    • URL: адрес deploy hook
    • Trigger on: create, update, delete
    • Drafts: выключено
    • Projection: {_id, _type}

Для hybrid и server направьте вебхук на https://example.com/api/revalidate и укажите в качестве его секрета SANITY_WEBHOOK_SECRET из вашего .env. В режиме hybrid также задайте на сервере DEPLOY_HOOK_URL, чтобы публикация запускала пересборку. Значения для каждого хостинга перечислены в комментариях в .env.example.

Подключите домен

  1. Добавьте домен в настройках хостинга и следуйте его инструкциям по DNS.
  2. Укажите домен в PUBLIC_SITE_URL вместе с https:// и пересоберите сайт.
  3. Разрешите Sanity принимать запросы с этого домена:
Terminal
        pnpm sanity:setup --project abc12345 --site-url https://example.com
      

Контактные формы на статическом сайте

У статического сайта нет собственных серверных эндпоинтов. Если в шаблоне есть контактная форма, в его README.md и .env.example описаны варианты: отправлять форму во внешний сервис форм или переключиться на RENDER_MODE=hybrid.