Перейти к содержимому
WebShield Docs

Публикация статического сайта

Документация, лендинг или сайт-визитка на своём домене — от подключения домена до автоматической публикации из GitHub Actions.

Разместить можно любой сайт из готовых файлов: генераторы статических сайтов, лендинги и сайты-визитки, созданные вручную на HTML/CSS/JS.

Понадобится:

  • домен и доступ к панели регистратора или DNS-провайдера;
  • готовый сайт — папка, в корне которой лежит index.html.
Сайт Сборка Как загружать Автопубликация
Визитка, несколько HTML-файлов не нужна перетащить файлы в кабинет не нужна
Лендинг по ситуации ZIP-архив или CLI по желанию
Генераторы, документация обязательна CLI да, шаг 7

Загружать нужно результат сборки, а не исходники.

Генератор Команда Папка Пресет Чистые URL
Без генератора папка сайта Обычный HTML Индекс каталога
Hugo hugo --minify public/ Hugo Индекс каталога
Astro, Starlight npm run build dist/ Astro Индекс каталога
Docusaurus npm run build build/ Обычный HTML Индекс каталога
MkDocs mkdocs build site/ Обычный HTML Индекс каталога
VitePress npm run docs:build docs/​.vitepress/dist/ Обычный HTML Расширение .html
Eleventy npx @11ty/eleventy _site/ Обычный HTML Индекс каталога
Jekyll bundle exec jekyll build _site/ Jekyll Индекс каталога
Gatsby npm run build public/ Gatsby Индекс каталога
Next.js с output: 'export' npm run build out/ Next.js (export) Расширение .html
Vite (React, Vue, Svelte) npm run build dist/ SPA Только точный путь

Проверьте папку сборки:

  • index.html лежит в корне, а не во вложенной папке;
  • есть 404.html — его покажут на несуществующих адресах.

Выберите один вариант:

  • А. NS у WebShield. DNS домена переезжает к нам. Сайт работает и на www, и на example.com без ручных записей. Подходит, если зона не завязана на другого провайдера.
  • Б. DNS остаётся у вас. NS не меняются, нужные имена подключаются записями у текущего провайдера. Подходит, если зона живёт в Cloudflare, Route 53 и т. п.
  1. Личный кабинет → Домены → Добавить домен, введите example.com.

  2. Оставьте импорт записей включённым и сверьте найденный список: записи почты и других сервисов должны быть на месте.

  3. У регистратора замените NS на эти два — других быть не должно:

    nsbox.webshield.pro
    nshub.webshield.pro
  4. В разделе Домены нажмите Проверить. Нужный статус — Делегирован. Обычно это занимает пару часов, но может доходить и до двух суток – зависит от вашего регистратора.

Для сайта на www в разделе DNS должна быть запись www типа A или CNAME с любым значением, например CNAME example.com. При публикации запись переключится на WebShield, при снятии сайта — вернётся прежнее значение. Для example.com запись не нужна.

На имени не должно быть включено Proxy: имя работает либо как защищённый сервер, либо как статический сайт.

Подробнее — Передача управления доменом.

  1. Личный кабинет → Домены → Добавить домен, введите example.com — сам домен, без www.

  2. Выберите Оставить DNS у себя и добавить записи. Откроется раздел Хосты.

  3. Добавить имяwwwСтатический сайт.

  4. У DNS-провайдера добавьте запись из карточки имени:

    _acme-challenge.www.example.com. CNAME <адрес из карточки>
  5. Нажмите Проверить и дождитесь выпуска сертификата — несколько минут.

Корень домена и записи ALIAS — в статье Подключение без смены NS.

  • Вариант А: Сайты → Новый сайт → выберите DNS-имя. Имена с проксированием или уже созданным сайтом выбрать нельзя.
  • Вариант Б: сайт создан автоматически после проверки имени и уже есть в разделе Сайты.

Новый сайт находится в статусе Черновик и посетителям не виден.

Откройте сайт кнопкой Управление.

  1. Генератор сайта — выберите пресет из таблицы шага 1. Он заполнит остальные поля.
  2. Чистые URL — сверьте с таблицей. Если значение не совпадает с генератором, откроется только главная, остальные страницы вернут 404.
    • Индекс каталога — страница /about лежит в about/index.html.
    • Расширение .html — страница /about лежит в about.html.
  3. Страница 404404.html.
  4. Режим SPA — только для приложений с маршрутизацией в браузере (React Router, Vue Router). Для документации, лендинга и визитки выключите: иначе ошибочный адрес отдаст главную со статусом 200, и поисковики проиндексируют дубли.
  5. Публиковать по HTTPS — обычно включено.
  6. Защита от ботов — на старте оставьте выключенной. Для документации и лендингов, которые должны попадать в поиск, Проверку браузера не включайте без необходимости.
  7. Нажмите Сохранить настройки.

Подходит для визитки и лендинга.

  • Файлы: перетащите файлы или папку в окно загрузки. Они добавятся к уже загруженным, совпадающие заменятся.
  • ZIP-архив: Загрузка ZIP-архива → Выбрать ZIP. Архив полностью заменяет существующую версию.

Упаковывайте содержимое папки сборки, а не саму папку:

Terminal window
cd public && zip -r ../site.zip . && cd ..

Проверьте дерево файлов и нажмите Опубликовать.

Подходит для автоматизации: CLI загружает только изменившиеся файлы и публикует сайт.

Terminal window
curl -fsSL https://raw.githubusercontent.com/webshieldpro/webshield-cli/main/install.sh | sh
webshield auth login
webshield sites publish www.example.com --dir ./dist

Токен для входа создаётся в Настройках кабинета. Флаг --dry-run покажет список изменений без загрузки.

Если сайт уже лежит в объектном хранилище WebShield, используйте блок Публикация из S3-бакета в карточке сайта.

  1. Дождитесь статуса Опубликован.

  2. Проверьте ответ:

    Terminal window
    curl -I https://www.example.com/

    Ожидаемый ответ — HTTP/2 200. При первой публикации сертификат выпускается несколько минут; если HTTPS не отвечает, повторите позже.

  3. Только вариант Б: если домен не переносили, переведите имя — добавьте у вашего DNS-провайдера запись:

    www.example.com. CNAME <адрес из карточки>

    Когда трафик пойдёт через WebShield, придёт письмо.

  4. Откройте в браузере внутренние страницы, картинки, поиск (для документации) и любой несуществующий адрес — должна показаться ваша страница 404.

Каждая публикация создаёт новую версию сайта целиком: посетители не видят промежуточного состояния, кеш сбрасывается автоматически.

  1. В карточке сайта, в блоке Токены публикации (CI), создайте токен.
  2. Сохраните его в секретах репозитория под именем WS_TOKEN. Токен может только публиковать этот сайт; отозвать его можно там же.
  3. Добавьте задание: установка CLI и одна команда публикации. Она заливает только изменившиеся файлы и публикует новую версию целиком.

GitHub Actions, Gitea и Forgejo.

.github/workflows/deploy.yml
name: Deploy
on:
push:
branches: [main]
jobs:
deploy:
runs-on: ubuntu-latest
env:
WS_TOKEN: ${{ secrets.WS_TOKEN }}
steps:
- uses: actions/checkout@v5
- run: npm ci && npm run build # сборка → ./dist
- name: Установка CLI
run: curl -fsSL https://raw.githubusercontent.com/webshieldpro/webshield-cli/main/install.sh | sh
- name: Публикация
run: ~/.local/bin/webshield sites publish www.example.com --dir ./dist

GitLab CI — токен добавьте в Settings → CI/CD → Variables как WS_TOKEN, Masked и Protected:

.gitlab-ci.yml
deploy:
image: node:22
rules:
- if: $CI_COMMIT_BRANCH == "main"
script:
- npm ci && npm run build # сборка → ./dist
- curl -fsSL https://raw.githubusercontent.com/webshieldpro/webshield-cli/main/install.sh | sh
- ~/.local/bin/webshield sites publish www.example.com --dir ./dist

Замените команду сборки и папку на свои из таблицы шага 1. Подробнее — публикация из CI.

Задача Для кого Где настроить
Форма заявки или обратной связи без своего сервера лендинг, визитка Формы на статическом сайте
Перенаправить старые адреса после переезда документация, лендинг Переадресации
Отправлять часть путей на свой сервер лендинг с API API на том же домене
Посещаемость и доля ботов все Статистика
Симптом Причина и решение
При создании сайта — «Create an A or CNAME DNS record for this host first» Для имени нет записи в DNS. Создайте A или CNAME (шаг 2).
Имени нет в списке или его нельзя выбрать На имени включено Proxy или сайт уже создан.
404 на всех страницах, включая главную index.html не в корне: архив упакован вместе с папкой.
Главная открывается, остальные страницы — 404 Неверный режим Чистых URL. Посмотрите в папке сборки, как лежит страница: about/index.html или about.html.
Не грузятся стили и скрипты В сборке указан базовый путь или адрес локального сервера. Проверьте base/baseURL/site_url в настройках генератора.
Несуществующий адрес открывает главную Включён Режим SPA. Выключите его для документации и лендингов.
HTTPS не работает дольше 30 минут Если у домена есть CAA-записи, добавьте letsencrypt.org. Для варианта А проверьте статус Делегирован.
Публикация завершается ошибкой с номером строки Ошибка в файле _redirects — исправьте указанную строку.
Загрузка отклоняет .exe, .apk и подобные Исполняемые файлы доступны только на коммерческих тарифах.

Если решения нет в таблице — смотрите Решение проблем или напишите в поддержку из кабинета.