Сервер установки: развёртывание сайта и установка с него

Понадобятся базовые навыки из Азбуки: SSH, домен и A-запись.

Сайт документации из каталога site/ — это одновременно сервер установки: привязав к нему домен, вы ставите mitdev на любой новый сервер одной командой:

curl -fsSL https://mitdev.example.com/get | sudo bash

Ниже — полный путь от пустого сервера до рабочей схемы.

Шаг 1. Подготовьте сервер для сайта

Подойдёт самый маленький VPS (1 ГБ RAM достаточно — сайт статический). Проще всего подготовить его этим же фреймворком:

git clone https://github.com/your-org/mitdev.git
cd mitdev
sudo ./install.sh
# компоненты: Nginx, Certbot, UFW, Fail2Ban (Node/Docker не обязательны)

Шаг 2. Привяжите домен

В DNS-панели создайте A-запись на IP сервера:

mitdev.example.com.  A  203.0.113.10

Проверка: dig +short mitdev.example.com должен вернуть IP сервера.

Шаг 3. Соберите сайт

На рабочей машине (нужен Node.js ≥ 18; на веб-сервере Node не нужен):

cd mitdev/site
npm install
node build.mjs --url https://mitdev.example.com   # ваш домен!

Домен запекается в скрипт /get и примеры команд — не пропускайте --url. Результат — каталог site/public/:

Файл Что это
index.html, *.html, assets/ сайт документации
get скрипт установки одной командой
mitdev.tar.gz дистрибутив (его скачивает get)

Шаг 4. Выложите сайт на сервер

# с рабочей машины:
rsync -av site/public/ [email protected]:/tmp/mitdev-docs/

# на сервере:
sudo mkdir -p /var/www/mitdev-docs
sudo rsync -a --delete /tmp/mitdev-docs/ /var/www/mitdev-docs/
sudo chown -R www-data:www-data /var/www/mitdev-docs

Конфигурация nginx — /etc/nginx/sites-available/mitdev-docs.conf:

server {
    listen 80;
    listen [::]:80;
    server_name mitdev.example.com;

    root /var/www/mitdev-docs;
    index index.html;

    location / {
        try_files $uri $uri.html $uri/ =404;
    }

    # Установочные артефакты не должны кэшироваться прокси/CDN —
    # иначе /get будет ставить устаревшую версию.
    location ~ ^/(get|mitdev\.tar\.gz|version\.txt)$ {
        add_header Cache-Control "no-store";
    }
}

Используете CDN (Cloudflare и т.п.)? После каждой перезаливки очищайте его кэш для /get, /mitdev.tar.gz, /version.txt — или создайте правило «не кэшировать» для этих путей. Проверка, что сайт отдаёт свежую версию:

curl -s https://mitdev.example.com/version.txt

Включение и SSL:

sudo ln -s /etc/nginx/sites-available/mitdev-docs.conf /etc/nginx/sites-enabled/
sudo nginx -t && sudo systemctl reload nginx
sudo mitdev ssl mitdev.example.com     # Let's Encrypt + redirect на https

Шаг 5. Проверьте

curl -fsSL https://mitdev.example.com/get | head -5          # скрипт отдаётся
curl -fsSLo /dev/null -w '%{http_code}\n' \
  https://mitdev.example.com/mitdev.tar.gz                 # 200

Откройте https://mitdev.example.com в браузере — главная страница с командой установки и вся документация.

Шаг 6. Устанавливайте новые серверы

На каждом новом сервере (Ubuntu 22.04, от root):

curl -fsSL https://mitdev.example.com/get | sudo bash

Скрипт скачает дистрибутив с вашего домена, распакует в /opt/mitdev-src и запустит обычный TUI-инсталлятор — дальше всё как при ручной установке (выбор компонентов, пользователь, SSH и т.д.). TUI работает и при запуске через pipe: скрипт сам подключает терминал.

Скачивание с другого хоста (например, staging-копии сайта):

MITDEV_URL=https://staging.example.com bash <(curl -fsSL https://staging.example.com/get)

Обновление сайта и дистрибутива

HTML руками не редактируется. Цикл обновления:

# 1. правите docs/*.md или код проекта
# 2. пересборка (обновляет и mitdev.tar.gz):
cd site && node build.mjs --url https://mitdev.example.com
# 3. перезаливка:
rsync -av --delete public/ [email protected]:/var/www/mitdev-docs/

Новые серверы сразу получают свежую версию; уже установленные обновляются через git pull в /opt/mitdev или повторный curl …/get | sudo bash (установка идемпотентна).

Замечания по безопасности