СервисТрек · документы проекта

Инфраструктура: серверы, публикация, деплой

Актуально на 2026-08-22. При изменениях инфраструктуры обновлять этот файл.

Топология

Узел IP Роль ОС
nginx 10.90.21.21 Фронтовой reverse-proxy, домены, TLS Debian 12 (bookworm)
projects (ai-projects) 10.90.21.26 Сервер проектов: контент, будущие приложения, БД Debian 13 (trixie), Proxmox LXC

Публичный вход: https://projects.gcetera.com → DNS A → публичный IP сети → NAT → 10.90.21.21 → proxy_pass → http://10.90.21.26.

Публичные адреса проекта «СервисТрек»

URL Что там
/ Портал проектов (список проектов, карточка СервисТрек)
/service-inventory/demo/ Демо-сайт для заказчика (demo/index.html)
/service-inventory/status/STATUS.html Статус работ (генерируется из docs/STATUS.md)
/service-inventory/status/ Все документы проекта (README, VISION, DATA-MODEL, DECISIONS, INTERVIEW, CHANGELOG, SERVER)

HTTP автоматически редиректит на HTTPS. Сертификат Let's Encrypt для projects.gcetera.com, обновление — certbot на .21 (стандартный таймер).

Где что лежит

Сервер проектов .26

/srv/projects/service-inventory/repo/   ← полная копия репозитория (без .git), источник правды — git
/srv/projects/service-inventory/app/    ← MVP API (src/): node server.mjs, БД app/data/app.db (WAL)
/srv/www/index.html                     ← портал проектов
/srv/www/service-inventory/
    demo/index.html                     ← публикуемое демо (копия из repo/demo/)
    status/*.html                       ← pandoc-сборка из repo/docs/*.md (+ md/*.md исходники)
/etc/nginx/sites-available/projects.conf ← внутренний сайт (root /srv/www)
/etc/systemd/system/servicetrack.service← автозапуск API; слушает 127.0.0.1:8090 (наружу НЕ открыт)

Node.js 22 LTS на .26 установлен из NodeSource (node -v → v22.x). Лог сервиса: journalctl -u servicetrack. Повторный импорт xlsx: cd /srv/projects/service-inventory/app && node tools/import-xlsx.mjs --db data/app.db --dir ../repo/data/source-xlsx

Прокси .21

/etc/nginx/sites-enabled/projects.conf  ← vhost projects.gcetera.com (:80 → 301, :443 ssl → proxy_pass .26)
/etc/nginx/backup/default.bak.*         ← бэкап их исходного default-конфига перед нашими правками

Схема добавления нового проекта: каталог /srv/projects/<имя>/repo, публикация в /srv/www/<имя>/…, location в конфиге .26, при необходимости отдельный vhost на .21.

Доступ ИИ с ПК пользователя

В ~/.ssh/config заведены алиасы (ключ ~/.ssh/id_ed25519_projects, ed25519, без пароля):

Host projects   → root@10.90.21.26   # сервер проектов
Host nginx      → root@10.90.21.21   # фронтовой прокси

Публичный ключ добавлен в /root/.ssh/authorized_keys обоих серверов. Парольная аутентификация SSH пока включена (владелец планирует сменить пароли); после смены рекомендуется отключить пароли совсем (PasswordAuthentication no).

⚠️ VPN на ПК владельца должен быть ВЫКЛЮЧЕН для доступа к локальной сети 10.90.21.x.

Процедура деплоя (после изменений в проекте)

Из корня репозитория на ПК:

bash deploy/deploy.sh

Скрипт: rsync репозитория → repo/ на .26, пересборка публичных страниц (pandoc), обновление портала. Затем проверить https://projects.gcetera.com/service-inventory/status/STATUS.html.

Ручной вариант:

rsync -a --exclude .git --delete ./ projects:/srv/projects/service-inventory/repo/
ssh projects 'bash /srv/projects/service-inventory/repo/deploy/refresh-public.sh'

Резервное копирование