Обновлено:

Быстрый старт

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

Цель простая: сначала собрать и проверить локальный dist/, потом выложить его в web-root, потом проверить HTTP-ответы.

Что важно перед началом

Не трогайте Nginx, HAProxy и другие сервисы, если меняется только контент сайта.

Для обычного обновления нужны только:

~/getsrv-static-src
/var/www/getsrv.app
npm run build
rsync dist/
nginx -t
systemctl reload nginx

1. Перейти в проект

cd ~/getsrv-static-src

Проверьте, что вы в правильной директории:

pwd

Ожидаемо:

/home/manowar/getsrv-static-src

2. Собрать сайт

npm run build

Нормальный результат заканчивается примерно так:

[build] Complete!

Если build упал — дальше не идти. Нельзя деплоить пустой или неполный dist/.

3. Проверить, что сборка похожа на рабочую

find dist -type f -name '*.html' | wc -l
find dist/assets -maxdepth 1 -type f | sort

Ожидаемо:

  • HTML-страницы есть;
  • CSS/JS лежат в dist/assets/;
  • нет случайных файлов за пределами ожидаемой структуры.

4. Проверить внешние runtime-ссылки

grep -RInE 'https?://' dist --exclude='sitemap*.xml' --exclude='robots.txt' | grep -v 'https://getsrv.app' || true

Для этого сайта нормальный результат — пустой вывод.
Если появились сторонние URL, сначала надо понять, откуда они взялись.

5. Выложить сборку

sudo rsync -a --delete dist/ /var/www/getsrv.app/
sudo find /var/www/getsrv.app -type d -exec chmod 755 {} \;
sudo find /var/www/getsrv.app -type f -exec chmod 644 {} \;
sudo chown -R www-data:www-data /var/www/getsrv.app

--delete важен: он удаляет старые файлы, которых уже нет в новой сборке.

6. Проверить Nginx и перечитать конфиг

sudo nginx -t
sudo systemctl reload nginx

Если nginx -t не прошёл — reload делать нельзя.

7. Быстрый smoke-test

curl -kI https://getsrv.app/
curl -kI https://getsrv.app/ru/docs/
curl -kI https://getsrv.app/ru/tools/
curl -kI https://getsrv.app/no-such-page

Ожидаемо:

/                 200
/ru/docs/         200
/ru/tools/        200
/no-such-page     404

8. Проверить кэш и security headers

HTML-страницы должны отдавать короткую cache policy:

Cache-Control: public, must-revalidate

Ассеты в /assets/ должны отдавать долгий immutable cache:

ASSET="$(find /var/www/getsrv.app/assets -maxdepth 1 -type f | head -n 1 | sed 's#^/var/www/getsrv.app##')"
curl -kI "https://getsrv.app$ASSET"

Ожидаемо:

Cache-Control: public, max-age=31536000, immutable

Когда остановиться

Остановитесь и не деплойте, если:

  • npm run build упал;
  • dist/ пустой или явно неполный;
  • появились неожиданные внешние URL;
  • nginx -t показывает ошибку;
  • smoke-test возвращает не те HTTP-коды;
  • после выкладки пропали security headers.

Минимальный порядок одной командой

Когда процедура уже знакома:

cd ~/getsrv-static-src &&
npm run build &&
sudo rsync -a --delete dist/ /var/www/getsrv.app/ &&
sudo find /var/www/getsrv.app -type d -exec chmod 755 {} \; &&
sudo find /var/www/getsrv.app -type f -exec chmod 644 {} \; &&
sudo chown -R www-data:www-data /var/www/getsrv.app &&
sudo nginx -t &&
sudo systemctl reload nginx

После этого всё равно сделайте хотя бы короткий curl -kI.