Инфраструктура: серверы, публикация, деплой
Актуально на 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'Резервное копирование
- Источник правды — git-репозиторий на ПК владельца (история коммитов).
- На серверах бэкапы пока НЕ настроены. Рекомендация: ежедневные
бэкапы LXC-контейнера
.26на уровне Proxmox (как сделано у Magnika: nightly на NAS, retention 14+). - Контент полностью восстанавливается повторным деплоем с ПК.