Публикация статического сайта
Документация, лендинг или сайт-визитка на своём домене — от подключения домена до автоматической публикации из GitHub Actions.
Разместить можно любой сайт из готовых файлов: генераторы статических сайтов, лендинги и сайты-визитки, созданные вручную на HTML/CSS/JS.
Понадобится:
- домен и доступ к панели регистратора или DNS-провайдера;
- готовый сайт — папка, в корне которой лежит
index.html.
Как публиковать
Заголовок раздела «Как публиковать»| Сайт | Сборка | Как загружать | Автопубликация |
|---|---|---|---|
| Визитка, несколько HTML-файлов | не нужна | перетащить файлы в кабинет | не нужна |
| Лендинг | по ситуации | ZIP-архив или CLI | по желанию |
| Генераторы, документация | обязательна | CLI | да, шаг 7 |
1. Подготовка файлов
Заголовок раздела «1. Подготовка файлов»Загружать нужно результат сборки, а не исходники.
| Генератор | Команда | Папка | Пресет | Чистые 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— его покажут на несуществующих адресах.
2. Подключение домена
Заголовок раздела «2. Подключение домена»Выберите один вариант:
- А. NS у WebShield. DNS домена переезжает к нам. Сайт работает и на
www, и наexample.comбез ручных записей. Подходит, если зона не завязана на другого провайдера. - Б. DNS остаётся у вас. NS не меняются, нужные имена подключаются записями у текущего провайдера. Подходит, если зона живёт в Cloudflare, Route 53 и т. п.
Вариант А: NS у WebShield
Заголовок раздела «Вариант А: NS у WebShield»-
Личный кабинет → Домены → Добавить домен, введите
example.com. -
Оставьте импорт записей включённым и сверьте найденный список: записи почты и других сервисов должны быть на месте.
-
У регистратора замените NS на эти два — других быть не должно:
nsbox.webshield.pronshub.webshield.pro -
В разделе Домены нажмите Проверить. Нужный статус — Делегирован. Обычно это занимает пару часов, но может доходить и до двух суток – зависит от вашего регистратора.
Для сайта на www в разделе DNS должна быть запись www типа A или CNAME с любым значением, например CNAME example.com. При публикации запись переключится на WebShield, при снятии сайта — вернётся прежнее значение. Для example.com запись не нужна.
На имени не должно быть включено Proxy: имя работает либо как защищённый сервер, либо как статический сайт.
Подробнее — Передача управления доменом.
Вариант Б: DNS остаётся у вас
Заголовок раздела «Вариант Б: DNS остаётся у вас»-
Личный кабинет → Домены → Добавить домен, введите
example.com— сам домен, безwww. -
Выберите Оставить DNS у себя и добавить записи. Откроется раздел Хосты.
-
Добавить имя →
www→ Статический сайт. -
У DNS-провайдера добавьте запись из карточки имени:
_acme-challenge.www.example.com. CNAME <адрес из карточки> -
Нажмите Проверить и дождитесь выпуска сертификата — несколько минут.
Корень домена и записи ALIAS — в статье Подключение без смены NS.
3. Создайте сайт
Заголовок раздела «3. Создайте сайт»- Вариант А: Сайты → Новый сайт → выберите DNS-имя. Имена с проксированием или уже созданным сайтом выбрать нельзя.
- Вариант Б: сайт создан автоматически после проверки имени и уже есть в разделе Сайты.
Новый сайт находится в статусе Черновик и посетителям не виден.
4. Настройте раздачу
Заголовок раздела «4. Настройте раздачу»Откройте сайт кнопкой Управление.
- Генератор сайта — выберите пресет из таблицы шага 1. Он заполнит остальные поля.
- Чистые URL — сверьте с таблицей. Если значение не совпадает с генератором, откроется только главная, остальные страницы вернут 404.
- Индекс каталога — страница
/aboutлежит вabout/index.html. - Расширение .html — страница
/aboutлежит вabout.html.
- Индекс каталога — страница
- Страница 404 —
404.html. - Режим SPA — только для приложений с маршрутизацией в браузере (React Router, Vue Router). Для документации, лендинга и визитки выключите: иначе ошибочный адрес отдаст главную со статусом 200, и поисковики проиндексируют дубли.
- Публиковать по HTTPS — обычно включено.
- Защита от ботов — на старте оставьте выключенной. Для документации и лендингов, которые должны попадать в поиск, Проверку браузера не включайте без необходимости.
- Нажмите Сохранить настройки.
5. Загрузите файлы и опубликуйте
Заголовок раздела «5. Загрузите файлы и опубликуйте»Через кабинет
Заголовок раздела «Через кабинет»Подходит для визитки и лендинга.
- Файлы: перетащите файлы или папку в окно загрузки. Они добавятся к уже загруженным, совпадающие заменятся.
- ZIP-архив: Загрузка ZIP-архива → Выбрать ZIP. Архив полностью заменяет существующую версию.
Упаковывайте содержимое папки сборки, а не саму папку:
cd public && zip -r ../site.zip . && cd ..Проверьте дерево файлов и нажмите Опубликовать.
Через CLI
Заголовок раздела «Через CLI»Подходит для автоматизации: CLI загружает только изменившиеся файлы и публикует сайт.
curl -fsSL https://raw.githubusercontent.com/webshieldpro/webshield-cli/main/install.sh | shwebshield auth loginwebshield sites publish www.example.com --dir ./distТокен для входа создаётся в Настройках кабинета. Флаг --dry-run покажет список изменений без загрузки.
Из S3-бакета
Заголовок раздела «Из S3-бакета»Если сайт уже лежит в объектном хранилище WebShield, используйте блок Публикация из S3-бакета в карточке сайта.
6. Проверьте
Заголовок раздела «6. Проверьте»-
Дождитесь статуса Опубликован.
-
Проверьте ответ:
Terminal window curl -I https://www.example.com/Ожидаемый ответ —
HTTP/2 200. При первой публикации сертификат выпускается несколько минут; если HTTPS не отвечает, повторите позже. -
Только вариант Б: если домен не переносили, переведите имя — добавьте у вашего DNS-провайдера запись:
www.example.com. CNAME <адрес из карточки>Когда трафик пойдёт через WebShield, придёт письмо.
-
Откройте в браузере внутренние страницы, картинки, поиск (для документации) и любой несуществующий адрес — должна показаться ваша страница 404.
7. Настройте автопубликацию
Заголовок раздела «7. Настройте автопубликацию»Каждая публикация создаёт новую версию сайта целиком: посетители не видят промежуточного состояния, кеш сбрасывается автоматически.
- В карточке сайта, в блоке Токены публикации (CI), создайте токен.
- Сохраните его в секретах репозитория под именем
WS_TOKEN. Токен может только публиковать этот сайт; отозвать его можно там же. - Добавьте задание: установка CLI и одна команда публикации. Она заливает только изменившиеся файлы и публикует новую версию целиком.
GitHub Actions, Gitea и Forgejo.
name: Deployon: 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 ./distGitLab CI — токен добавьте в Settings → CI/CD → Variables как WS_TOKEN, Masked и Protected:
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 и подобные |
Исполняемые файлы доступны только на коммерческих тарифах. |
Если решения нет в таблице — смотрите Решение проблем или напишите в поддержку из кабинета.