Розгортання на Proxmox
Уся різниця між встановленням на Proxmox і встановленням на робочу станцію - один факт: у контейнера немає графічної карти. Усе інше випливає з цього, плюс звичайна обережність щодо сервісу, який має пережити вихід із системи. Тут описано лише те, що відрізняється від Налаштування.
1 · Контейнер
Section titled “1 · Контейнер”Непривілейований LXC - правильна форма: без модулів ядра, без прокидання пристроїв, без Docker.
| Шаблон | Debian 13 або Ubuntu 24.04 |
| Ядра | 4 (2 працює; збірки повільніші) |
| RAM | 4 ГБ (2 ГБ запускається, але next build - впритул) |
| Диск | 20 ГБ - node_modules та .next займають ~2 ГБ |
| Непривілейований | так · Nesting: не потрібен |
| Мережа | статичний IP або резервування DHCP - ви будете вводити його часто |
pct create 120 local:vztmpl/debian-13-standard_amd64.tar.zst \ --hostname maven-teams \ --cores 4 --memory 4096 --rootfs local-lvm:20 \ --net0 name=eth0,bridge=vmbr0,ip=dhcp \ --unprivileged 1 --features nesting=0 \ --onboot 1pct start 120pct enter 120--onboot 1 має значення: контейнер, який не стартує разом із вузлом, - це сервіс, який
зникає після наступного перезавантаження хоста.
2 · Node 22.22+ із NodeSource
Section titled “2 · Node 22.22+ із NodeSource”Власний nodejs Debian надто старий - node:sqlite там не буде.
apt update && apt install -y curl git ca-certificatescurl -fsSL https://deb.nodesource.com/setup_22.x | bash -apt install -y nodejsnode --version # must be >= 22.22.03 · Користувач, від імені якого запускати
Section titled “3 · Користувач, від імені якого запускати”Не запускайте це від root - у Workflows є shell-кроки, а CLI агентів мають доступ до файлів.
adduser --disabled-password --gecos "" mavensu - maven4 · Встановлення та примусове хмарне розміщення
Section titled “4 · Встановлення та примусове хмарне розміщення”git clone <your-repository-url> ~/maven-teamscd ~/maven-teamsnpm installnpm run buildexport MAVEN_FORCE_CLOUD=1MAVEN_FORCE_CLOUD повністю перекриває зондування GPU. Ключі провайдерів тепер
обов’язкові, а не необов’язкові: без GPU і без ключа можливості ніде виконуватися, і
екран Local / Cloud так і каже. Вставте ключі в Settings →
Secrets, перш ніж вирішувати, що щось зламано. Для точнішого контролю залиште змінну незаданою і
натомість задайте кожну можливість на тому екрані.
5 · Сервіс і те, що всі роблять неправильно
Section titled “5 · Сервіс і те, що всі роблять неправильно”~/.config/systemd/user/maven-teams.service:
[Unit]Description=MAVEN TeamsAfter=network.target
[Service]Type=simpleWorkingDirectory=%h/maven-teamsEnvironment=NODE_ENV=productionEnvironment=PORT=3400Environment=HOST=0.0.0.0Environment=MAVEN_STATE_DIR=%h/.maven-teamsEnvironment=MAVEN_FORCE_CLOUD=1Environment=MAVEN_MACHINE=proxmoxExecStart=/usr/bin/npm startRestart=on-failureRestartSec=5
[Install]WantedBy=default.targetMAVEN_MACHINE - це ім’я, яким ця машина підписує свої події; «proxmox» краще за
hostname контейнера, який ви не впізнаєте через пів року.
systemctl --user daemon-reloadsystemctl --user enable --now maven-teams.serviceexit # back to rootloginctl enable-linger mavenБез lingering сервіс помирає, коли закривається SSH-сесія. Він виглядатиме
ідеально, поки ви тестуєте, і зникне тієї ж миті, коли ви від’єднаєтеся. Перевірте, що він
виживає: від’єднайтеся повністю, під’єднайтеся знову і виконайте
su - maven -c 'systemctl --user status maven-teams --no-pager'.
6 · Доступ до нього
Section titled “6 · Доступ до нього”Типово Teams прив’язується лише до 127.0.0.1 - у контейнері це марно. Юніт вище задає
HOST=0.0.0.0; перевірте, що це справді спрацювало:
ss -tlnp | grep 3400 # expect 0.0.0.0:3400, not 127.0.0.1:3400Потім із локальної мережі: http://<container-ip>:3400. Не прокидайте цей порт в
інтернет. Шлюз PIN і захист same-origin не дають браузеру у вашій власній мережі
діяти від вашого імені; це не система автентифікації. Віддалений доступ іде
через VPN (WireGuard на хості Proxmox) або зворотний проксі, що виконує справжню
автентифікацію.
7 · Резервні копії
Section titled “7 · Резервні копії”Proxmox робить резервну копію контейнера, що покриває все; а та частина, яка має значення, достатньо мала, щоб скопіювати її окремо:
# from the hostpct exec 120 -- tar czf - -C /home/maven/.maven-teams events \ > /var/lib/vz/dump/maven-teams-events-$(date +%F).tar.gzВідновлення - це tar xzf у те саме місце й перезапуск; індекс наздоганяє при
першому запиті. Збережіть identity.json - його повторне створення означає, що ця машина підписуватиме
майбутні події як інша машина.
8 · Оновлення
Section titled “8 · Оновлення”su - mavencd ~/maven-teams && git pull && npm install && npm run buildsystemctl --user restart maven-teamsЗробіть знімок (snapshot) Proxmox перед версією, яку ще не запускали; відкат знімка миттєвий.
9 · Коли щось не так
Section titled “9 · Коли щось не так”| Симптом | Куди дивитися |
|---|---|
Нічого на :3400 |
systemctl --user status maven-teams, потім journalctl --user -u maven-teams -n 100 |
| Сервіс зникає після виходу з системи | loginctl show-user maven | grep Linger - має бути yes |
| Транскрипція триває хвилини | MAVEN_FORCE_CLOUD=1 не задано, або задано у вашій оболонці, але не в юніті |
| «Neither path works yet» на якійсь можливості | Немає GPU і немає ключа провайдера. Вставте ключ. |
| Застосунок стартує, кожна сторінка дає помилку | node --version - нижче 22.22 імпорт індексу кидає виняток |
| Пошук нічого не знаходить | curl -X POST http://localhost:3400/api/events/verify перебудовує індекс |
| Журнал аудиту каже, що ланцюжок зламано | Хтось редагував log.jsonl. Відновіть із резервної копії; не лагодьте вручну. |