Стенд команды на своём компьютере
Стенд — это ветка main, которая сама пересобирается при каждом новом коммите и открыта команде по
постоянному адресу с HTTPS. Нужен всегда включённый компьютер с Windows, Node.js 24+, Git и Tailscale.
GitHub main ──(раз в 5 минут git fetch)──▶ D:\Work\TSMC\TSMC-stand\slot-a | slot-b сборки по очереди │ новый коммит: install → build → резервная копия → переключение ▼ node, порт 3400 ◀── D:\Work\TSMC\TSMC-stand\data база и вложения ▲ Tailscale Funnel ─────────────┘ https://<компьютер>.<сеть>.ts.net- Новый коммит собирается в свободном слоте, пока работает старая версия. Если сборка упала, стенд остаётся на прежней версии. Если новая версия не ответила за 2 минуты, запускается прежняя.
- Перед каждым переключением делается резервная копия данных (
D:\Work\TSMC\TSMC-stand\backups, последние 10). - В шапке стенда — плашка «Стенд · abc1234», при наведении — коммит и время сборки.
- Данные — демо-проекты с историей прогонов, но без демо-аккаунтов: их пароль публичный, на стенде они заблокированы и остаются только авторами истории. Войти можно администратором стенда, он создаёт аккаунты команды («Пользователи» в шапке).
Установка
Заголовок раздела «Установка»-
Сон. Параметры → Система → Питание: «Переводить в спящий режим» — «Никогда». Иначе компьютер включён, а стенд спит.
-
Стенд. Из папки репозитория:
Окно терминала pwsh -File scripts\stand\stand.ps1 installСкрипт клонирует репозиторий в
D:\Work\TSMC\TSMC-stand\repo, записывает настройки вD:\Work\TSMC\TSMC-stand\stand.json, регистрирует задачу планировщика «TSMC stand» (запуск при входе в Windows) и запускает её. Первая сборка занимает минуту-две. В конце он показывает адрес и пароль администратора стенда — он же лежит вstand.json; после первого входа смените его в профиле.Параметры:
-Root(папка, по умолчаниюD:\Work\TSMC\TSMC-stand),-Port(3400),-Branch(main),-NodeDir(папка сnode.exe; по умолчанию текущий Node из nvm),-AdminEmail. -
Публичный адрес. Tailscale должен быть установлен и войти в вашу сеть. Один раз:
Окно терминала & 'C:\Program Files\Tailscale\tailscale.exe' funnel --bg 3400Если Funnel в сети ещё не включён, команда покажет ссылку на страницу администрирования Tailscale: откройте её и разрешите HTTPS-сертификаты и Funnel для этого компьютера, затем повторите команду. Настройка сохраняется службой Tailscale и переживает перезагрузки. Проверка:
tailscale funnel status.
Управление
Заголовок раздела «Управление»D:\Work\TSMC\TSMC-stand\stand.ps1 status # что запущено, какой коммит, отвечает лиD:\Work\TSMC\TSMC-stand\stand.ps1 update # проверить main сейчас, не дожидаясь 5 минутD:\Work\TSMC\TSMC-stand\stand.ps1 logs # журнал стенда и ошибки сервераD:\Work\TSMC\TSMC-stand\stand.ps1 stop # остановить (задача запустит снова при следующем входе)D:\Work\TSMC\TSMC-stand\stand.ps1 uninstall # убрать задачу; данные и сборки остаютсяКопия скрипта в папке стенда сама находит свою папку (по stand.json рядом), поэтому -Root этим командам
не нужен, даже если стенд установлен не в папку по умолчанию.
Журналы — в D:\Work\TSMC\TSMC-stand\logs: stand.log (переключения версий), build.log (вывод сборок),
server-<время>-<коммит>.out.log и .err.log (сервер, свой файл на каждый запуск, последние 20). Если новая
версия не запустилась, имя файла с её ошибками стоит в stand.log.
stand.json перечитывается при каждой проверке, поэтому смена порта или ветки применяется без перезапуска
(новый порт — после следующего переключения). После изменения самого stand.ps1 в репозитории повторите
install: задача запускает копию скрипта из папки стенда, чтобы обновление репозитория не меняло работающий
надзиратель. Настройки и пароль при повторной установке сохраняются.
Если что-то пошло не так
Заголовок раздела «Если что-то пошло не так»- Стенд не открывается после перезагрузки. Задача запускается при входе в Windows: войдите в систему.
- Сломанный коммит в
main. Стенд остаётся на прежней версии и не пересобирает этот коммит снова; следующий коммит соберётся как обычно.stand.ps1 updateпробует сломанный коммит ещё раз. - Вернуть данные из копии.
stand.ps1 stop, затем из папки текущего слота (D:\Work\TSMC\TSMC-stand\slot-aилиslot-b, см.status):node packages\server\bin\tsmc-server.js restore D:\Work\TSMC\TSMC-stand\backups\tsmc-backup-<время>с переменнойTSMC_DB=D:\Work\TSMC\TSMC-stand\data\tsmc.db, и снова запустить задачу «TSMC stand». - Начать с чистых демо-данных.
stand.ps1 stop, удалитьD:\Work\TSMC\TSMC-stand\data, запустить задачу. Администратор создаётся заново с паролем изstand.json.
Безопасность
Заголовок раздела «Безопасность»Стенд открыт в интернет. Вход обязателен для всего, кроме страницы входа и /api/health; после пяти
неудачных попыток пара «адрес + email» блокируется на 15 минут. Не давайте на стенде паролей, которые
используются где-то ещё. Funnel можно выключить в любой момент: tailscale funnel --bg 3400 off
(локально стенд продолжит работать).