Add Windows 7 deploy bundle pipeline

Self-contained zip (dist/avtoambor-deploy.zip) for end users on Windows 7:
double-click install.bat to install Node 16, then start.bat to launch the
server. start.bat self-relaunches minimized so the console window stays out
of the way. Node is pinned to 16.x and several deps downgraded for Win7
compatibility; the unsupported View Transitions hook is dropped from the
root layout. make bundle wraps scripts/make-bundle.sh.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
David Beccue
2026-05-18 09:38:20 +05:00
parent c882ab5d43
commit 83a59f1677
13 changed files with 2113 additions and 820 deletions

106
deploy/README.md Normal file
View File

@ -0,0 +1,106 @@
# Замена Масла ГП — Установка на Windows 7 (и новее)
Программа учёта расходных материалов и инструментов. Работает локально на
вашем компьютере без интернета.
## Что внутри архива
| Файл | Назначение |
| -------------------------- | ----------------------------------------------------- |
| `install.bat` | Шаг 1 — установить Node.js (запускается один раз). |
| `start.bat` | Шаг 2 — запустить программу. |
| `backup.bat` | Создать резервную копию вручную. |
| `node-v16.20.2-x64.msi` | Установщик Node.js для 64-битной Windows. |
| `node-v16.20.2-x86.msi` | Установщик Node.js для 32-битной Windows. |
| `build/` | Программа (не редактировать). |
| `node_modules/` | Библиотеки (не редактировать). |
| `scripts/` | Служебные скрипты (создание базы данных). |
| `src/` | Файлы схемы базы данных. |
| `data/` | Здесь хранится база `avtoambor.db`. **Это ваши данные.** |
| `backups/` | Автоматические и ручные резервные копии базы. |
## Первый запуск
1. **Распакуйте архив целиком** в удобную папку, например `C:\avtoambor`.
Все файлы должны лежать рядом — не перемещайте `.bat`-файлы отдельно от
`build/` и `node_modules/`.
2. **Запустите `install.bat`** двойным щелчком.
Откроется стандартный установщик Node.js — нажимайте «Далее» до конца,
соглашайтесь со всеми значениями по умолчанию.
Если установщик попросит разрешение администратора — разрешите.
3. **Запустите `start.bat`** двойным щелчком.
Появится чёрное окно с надписью «Сервер запущен на http://localhost:3000»,
и автоматически откроется браузер с программой.
**Не закрывайте чёрное окно** пока вы работаете с программой — оно
запускает сервер. Чтобы остановить программу, закройте окно.
## Ежедневное использование
- Запускайте `start.bat`, когда нужно открыть программу.
- Окно браузера можно закрывать и снова открывать по адресу
http://localhost:3000 — данные сохраняются в файле базы.
- Для остановки программы — закройте чёрное окно сервера.
## Резервные копии
Программа автоматически копирует базу `data\avtoambor.db` в папку `backups\`
каждые 5 минут, если в базе были изменения. Старые копии прорежаются:
последние 7 дней сохраняются полностью, дальше — по одной копии на день.
Чтобы сделать копию вручную — запустите `backup.bat`.
В админ-панели программы (`http://localhost:3000/admin`, пароль внутри) есть
страница «Резервные копии» — там можно скачать любую копию или восстановить
её одним щелчком.
## Ярлык на рабочем столе (рекомендуется)
Чтобы не открывать каждый раз папку `C:\avtoambor\`, поставьте значок на
рабочий стол:
1. Откройте папку `C:\avtoambor\`.
2. Щёлкните правой кнопкой по `start.bat`**Отправить** → **Рабочий стол
(создать ярлык)**.
3. На рабочем столе появится новый значок. Переименуйте его в «Замена Масла
ГП».
4. Теперь, чтобы запустить программу, достаточно двойного клика по этому
значку.
## Автозапуск при включении компьютера (необязательно)
Если хотите, чтобы программа стартовала сама сразу после включения
компьютера — без двойного клика по значку:
1. Нажмите `Win + R`, введите `shell:startup`, нажмите Enter.
2. Перетащите ярлык с рабочего стола (тот, что создали выше) в открывшуюся
папку автозагрузки. Или создайте новый ярлык на `C:\avtoambor\start.bat`
прямо в этой папке.
3. При следующем включении компьютера программа запустится сама.
## Если что-то не работает
- **`start.bat` пишет «Node.js не найден»** — запустите `install.bat` и
после установки выйдите из системы и войдите снова (или перезагрузите
компьютер), чтобы Windows обновила переменные окружения.
- **Браузер открылся, но показывает «Не удаётся открыть страницу»** — сервер
ещё запускается. Подождите 510 секунд и обновите страницу (F5).
- **При `start.bat` чёрное окно мигает и закрывается** — щёлкните правой
кнопкой по `start.bat`, выберите «Запуск от имени администратора», чтобы
увидеть сообщение об ошибке.
- **База данных «повреждена» или потеряна** — закройте `start.bat`, в папке
`backups\` найдите свежую копию `zamena-masla-gp-ГГГГ-ММ-ДД_ЧЧ-ММ-СС.db`,
скопируйте её в `data\avtoambor.db` (с заменой), снова запустите
`start.bat`.
## Обновление до новой версии
1. Закройте `start.bat`.
2. Распакуйте новый архив **поверх старой папки** — папки `data\` и `backups\`
при этом сохранятся, ваши данные не пострадают.
3. Снова запустите `start.bat`.
---
Версия инструкции: 2026-05-18.

32
deploy/backup.bat Normal file
View File

@ -0,0 +1,32 @@
@echo off
REM One-shot backup of data\avtoambor.db into backups\ with a timestamp.
REM The server already takes automatic backups every 5 minutes when something
REM has changed; this script is for an explicit manual snapshot.
chcp 65001 >nul
setlocal
cd /d "%~dp0"
if not exist "data\avtoambor.db" (
echo Файл данных не найден: data\avtoambor.db
pause
exit /b 1
)
if not exist "backups" mkdir backups
REM Build YYYY-MM-DD_HH-MM-SS using WMIC (locale-independent).
for /f "skip=1 delims=" %%a in ('wmic os get LocalDateTime') do if not defined LDT set "LDT=%%a"
set "STAMP=%LDT:~0,4%-%LDT:~4,2%-%LDT:~6,2%_%LDT:~8,2%-%LDT:~10,2%-%LDT:~12,2%"
set "DEST=backups\zamena-masla-gp-%STAMP%.db"
copy /Y "data\avtoambor.db" "%DEST%" >nul
if errorlevel 1 (
echo Не удалось создать резервную копию.
pause
exit /b 1
)
echo Резервная копия сохранена: %DEST%
pause
endlocal

305
deploy/index.html Normal file
View File

@ -0,0 +1,305 @@
<!doctype html>
<html lang="ru">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Замена Масла ГП — установка на Windows 7</title>
<style>
body {
font-family: -apple-system, "Segoe UI", Tahoma, Arial, sans-serif;
max-width: 720px;
margin: 2rem auto;
padding: 0 1rem 3rem;
color: #1d2330;
background: #fbf7f1;
line-height: 1.55;
}
h1 { font-size: 1.6rem; margin: 0 0 0.5rem; }
h2 { font-size: 1.15rem; margin: 1.75rem 0 0.5rem; color: #00553e; }
h3 { font-size: 1rem; margin: 1.25rem 0 0.4rem; }
.lang-nav {
display: flex;
gap: 0.5rem;
margin: 1rem 0 1.5rem;
flex-wrap: wrap;
}
.lang-nav a {
padding: 0.4rem 0.85rem;
background: #fff;
border: 1px solid #c8cfdc;
border-radius: 4px;
color: #1d2330;
text-decoration: none;
font-size: 0.92rem;
}
.lang-nav a:hover { background: #eef1f6; }
.download {
display: inline-block;
margin: 1.25rem 0 0.5rem;
padding: 0.75rem 1.25rem;
background: #006a4e;
color: #fff;
font-weight: 600;
text-decoration: none;
border-radius: 4px;
}
.download:hover { background: #00553e; }
.meta { color: #6b7388; font-size: 0.9rem; }
code, kbd {
background: #eef1f6;
padding: 1px 6px;
border-radius: 3px;
font-size: 0.9em;
}
ol, ul { padding-left: 1.25rem; }
ol li, ul li { margin: 0.55rem 0; }
.note {
background: #fff;
border-left: 3px solid #006a4e;
padding: 0.6rem 0.85rem;
margin: 1rem 0;
font-size: 0.92rem;
}
.warn {
background: #fdecea;
border: 1px solid #f5c2c0;
color: #8a1f1b;
padding: 0.6rem 0.85rem;
border-radius: 4px;
margin: 1rem 0;
font-size: 0.92rem;
}
section {
border-top: 1px solid #d8dde7;
padding-top: 1rem;
margin-top: 2.5rem;
}
section:first-of-type { border-top: none; padding-top: 0; margin-top: 0; }
</style>
</head>
<body>
<h1>Замена Масла ГП</h1>
<p class="meta">Программа учёта для Windows 7 (64-бит)
· Программаи баҳисобгирӣ барои Windows 7 (64-бит)
· Inventory app for Windows 7 (64-bit)</p>
<nav class="lang-nav">
<a href="#ru">Русский</a>
<a href="#tg">Тоҷикӣ</a>
<a href="#en">English</a>
</nav>
<a class="download" href="avtoambor-deploy.zip">
Скачать архив · Боргирӣ · Download (≈ 57 МБ / MB)
</a>
<!-- =========================================================== -->
<!-- RUSSIAN -->
<!-- =========================================================== -->
<section id="ru" lang="ru">
<h2>Русский — установка на Windows 7</h2>
<div class="warn">
Программа собрана для <strong>64-битной</strong> Windows 7. Проверьте версию:
правый клик по «Компьютер» → «Свойства» → «Тип системы». Должно быть
«64-разрядная операционная система».
</div>
<h3>Установка — один раз</h3>
<ol>
<li>
Нажмите кнопку <strong>Скачать архив</strong> выше. Сохраните файл
<code>avtoambor-deploy.zip</code> на диск <code>C:\</code>.
</li>
<li>
Правый клик по архиву → <strong>Извлечь всё…</strong> → укажите путь
<code>C:\</code><strong>Извлечь</strong>. Должна появиться папка
<code>C:\avtoambor\</code>.
</li>
<li>
Откройте папку <code>C:\avtoambor\</code> и сделайте двойной клик
по <strong>install.bat</strong>. Откроется установщик Node.js — нажимайте
«Далее», соглашайтесь со всем по умолчанию. Если Windows спросит
разрешения администратора — разрешите.
</li>
<li>
После того как установщик закончит, <strong>выйдите из системы и войдите
снова</strong> (или перезагрузите компьютер).
</li>
<li>
Двойной клик по <strong>start.bat</strong>. Откроется чёрное окно с
надписью «Сервер запущен на http://localhost:3000», и автоматически
откроется браузер с программой.
</li>
</ol>
<div class="note">
<strong>Важно:</strong> чёрное окно сервера должно оставаться открытым,
пока вы пользуетесь программой. Закрытие окна = остановка сервера.
</div>
<h3>Ярлык на рабочем столе (рекомендуется)</h3>
<ol>
<li>Откройте папку <code>C:\avtoambor\</code>.</li>
<li>Щёлкните правой кнопкой по <strong>start.bat</strong><strong>Отправить</strong><strong>Рабочий стол (создать ярлык)</strong>.</li>
<li>На рабочем столе появится значок — переименуйте его в «Замена Масла ГП».</li>
<li>Теперь для запуска программы достаточно двойного клика по этому значку.</li>
</ol>
<h3>Автозапуск при включении компьютера (необязательно)</h3>
<ol>
<li>Нажмите <kbd>Win</kbd>+<kbd>R</kbd>, введите <code>shell:startup</code>, нажмите Enter.</li>
<li>Перетащите ярлык с рабочего стола (созданный выше) в открывшуюся папку.</li>
<li>При следующем включении компьютера программа запустится сама.</li>
</ol>
<h3>Резервные копии</h3>
<p>
Программа сама копирует базу данных каждые 5 минут в папку
<code>backups\</code>, если в данных были изменения.
Для ручной копии — двойной клик по <strong>backup.bat</strong>.
</p>
<h3>Если что-то не работает</h3>
<ul>
<li><strong><code>start.bat</code> пишет «Node.js не найден»</strong> — вы пропустили шаг 4 (нужно выйти из системы и зайти снова).</li>
<li><strong>Чёрное окно мигает и сразу закрывается</strong> — откройте <code>cmd</code>, выполните <code>cd C:\avtoambor</code>, затем <code>start.bat</code>. Прочитайте сообщение об ошибке.</li>
<li><strong>Браузер пишет «Не удаётся открыть страницу»</strong> — подождите 510 секунд и обновите страницу (<kbd>F5</kbd>).</li>
<li><strong>Программа потеряла данные</strong> — закройте окно сервера, в папке <code>backups\</code> найдите свежий файл <code>zamena-masla-gp-…-….db</code>, скопируйте его в <code>data\avtoambor.db</code> (с заменой), снова запустите <code>start.bat</code>.</li>
</ul>
</section>
<!-- =========================================================== -->
<!-- TAJIK -->
<!-- =========================================================== -->
<section id="tg" lang="tg">
<h2>Тоҷикӣ — насб ба Windows 7</h2>
<div class="warn">
Барнома барои <strong>Windows 7-и 64-бита</strong> омода шудааст. Версияро
тафтиш кунед: тугмаи рости муш ба «Компьютер» → «Свойства» → «Тип системы».
Бояд «64-разрядная операционная система» нависта бошад.
</div>
<h3>Насб — як маротиба</h3>
<ol>
<li>
Тугмаи <strong>Скачать архив</strong>-ро дар боло пахш кунед. Файли
<code>avtoambor-deploy.zip</code>-ро ба диски <code>C:\</code> нигоҳ доред.
</li>
<li>
Тугмаи рости муш ба архив → <strong>Извлечь всё…</strong> → роҳи
<code>C:\</code>-ро нишон диҳед → <strong>Извлечь</strong>. Папкаи
<code>C:\avtoambor\</code> бояд пайдо шавад.
</li>
<li>
Папкаи <code>C:\avtoambor\</code>-ро кушоед ва дубора ба
<strong>install.bat</strong> зер кунед. Насбкунандаи Node.js кушода
мешавад — «Далее»-ро пахш кунед ва ба ҳамаи интихобҳои стандартӣ розӣ
шавед. Агар Windows иҷозати администраторро пурсад — иҷозат диҳед.
</li>
<li>
Пас аз ба итмом расидани насбкунанда, <strong>аз система бароед ва
дубора ворид шавед</strong> (ё компютерро аз нав сар кунед).
</li>
<li>
Дубора ба <strong>start.bat</strong> зер кунед. Тирезаи сиёҳ бо навишти
«Сервер запущен на http://localhost:3000» кушода мешавад ва браузер
худаш барномаро мекушояд.
</li>
</ol>
<div class="note">
<strong>Муҳим:</strong> то даме ки бо барнома кор мекунед, тирезаи сиёҳи
сервер бояд кушода бошад. Бастани тиреза = қатъ кардани сервер.
</div>
<h3>Тугмача дар мизи корӣ (тавсия)</h3>
<ol>
<li>Папкаи <code>C:\avtoambor\</code>-ро кушоед.</li>
<li>Тугмаи рости муш ба <strong>start.bat</strong><strong>Отправить</strong><strong>Рабочий стол (создать ярлык)</strong>.</li>
<li>Дар мизи корӣ тугмачаи нав пайдо мешавад — номи онро ба «Замена Масла ГП» иваз кунед.</li>
<li>Акнун барои оғоз кардани барнома дубора ба ҳамин тугмача зер кунед.</li>
</ol>
<h3>Худкор оғоз кардан ҳангоми ба кор андохтани компютер (ихтиёрӣ)</h3>
<ol>
<li><kbd>Win</kbd>+<kbd>R</kbd>-ро пахш кунед, <code>shell:startup</code>-ро дохил кунед, Enter-ро пахш кунед.</li>
<li>Тугмачаро аз мизи корӣ (ҳамонеро ки боло сохтед) ба папкае ки кушода шуд кашед.</li>
<li>Ҳангоми навбатии ба кор андохтани компютер барнома худаш оғоз меёбад.</li>
</ol>
<h3>Нусхаҳои эҳтиётӣ</h3>
<p>
Барнома худаш базаро ҳар 5 дақиқа ба папкаи <code>backups\</code> нусха
мегирад, агар дар маълумот тағйирот бошад. Барои нусхаи дастӣ —
дубора ба <strong>backup.bat</strong> зер кунед.
</p>
<h3>Агар чизе кор накунад</h3>
<ul>
<li><strong><code>start.bat</code> «Node.js не найден» менависад</strong> — шумо қадами 4-умро гум кардаед (бояд аз система бароед ва дубора ворид шавед).</li>
<li><strong>Тирезаи сиёҳ як лаҳза пайдо шуда баста мешавад</strong><code>cmd</code>-ро кушоед, <code>cd C:\avtoambor</code> ва пас <code>start.bat</code>-ро иҷро кунед. Паёми хаторо хонед.</li>
<li><strong>Браузер «Не удаётся открыть страницу» менависад</strong> — 510 сония интизор шавед ва саҳифаро нав кунед (<kbd>F5</kbd>).</li>
<li><strong>Маълумот гум шудааст</strong> — тирезаи серверро банд кунед, дар папкаи <code>backups\</code> файли наватарини <code>zamena-masla-gp-…-….db</code>-ро ёбед, онро ба <code>data\avtoambor.db</code> нусхабардорӣ кунед (бо ҷойгузинӣ), бори дигар <code>start.bat</code>-ро иҷро кунед.</li>
</ul>
</section>
<!-- =========================================================== -->
<!-- ENGLISH -->
<!-- =========================================================== -->
<section id="en" lang="en">
<h2>English — install on Windows 7</h2>
<div class="warn">
This bundle targets <strong>64-bit Windows 7</strong>. Verify by right-clicking
"Computer" → Properties → "System type": should read "64-bit Operating System".
</div>
<h3>One-time install</h3>
<ol>
<li>Click <strong>Download</strong> above. Save <code>avtoambor-deploy.zip</code> to <code>C:\</code>.</li>
<li>Right-click the zip → <strong>Extract All…</strong> → path <code>C:\</code><strong>Extract</strong>. You should get <code>C:\avtoambor\</code>.</li>
<li>Open <code>C:\avtoambor\</code> and double-click <strong>install.bat</strong>. The Node.js installer wizard opens — click Next, accept defaults. Allow if Windows asks for admin permission.</li>
<li>When the wizard finishes, <strong>log out of Windows and log back in</strong> (or reboot) so the new <code>PATH</code> takes effect.</li>
<li>Double-click <strong>start.bat</strong>. A black console opens with "Сервер запущен на http://localhost:3000" and the browser opens to the app automatically.</li>
</ol>
<div class="note">
<strong>Important:</strong> the black server window must stay open while you
use the app. Closing it stops the server.
</div>
<h3>Desktop shortcut (recommended)</h3>
<ol>
<li>Open <code>C:\avtoambor\</code>.</li>
<li>Right-click <strong>start.bat</strong><strong>Send to</strong><strong>Desktop (create shortcut)</strong>.</li>
<li>Rename the new desktop icon to "Замена Масла ГП".</li>
<li>From now on, double-click that icon to start the app.</li>
</ol>
<h3>Autostart on boot (optional)</h3>
<ol>
<li>Press <kbd>Win</kbd>+<kbd>R</kbd>, type <code>shell:startup</code>, press Enter.</li>
<li>Drag the desktop shortcut you just made into the folder that opens.</li>
<li>Next boot, the app starts itself.</li>
</ol>
<h3>Backups</h3>
<p>
The app auto-snapshots the DB into <code>backups\</code> every 5 minutes when
there have been changes. For a manual snapshot, double-click <strong>backup.bat</strong>.
</p>
<h3>Troubleshooting</h3>
<ul>
<li><strong><code>start.bat</code> says "Node.js не найден"</strong> — you skipped step 4 (log out / reboot).</li>
<li><strong>Black window flashes and disappears</strong> — open <code>cmd</code>, run <code>cd C:\avtoambor</code> then <code>start.bat</code>, and read the error message.</li>
<li><strong>Browser shows "can't reach this page"</strong> — wait 510 seconds and refresh (<kbd>F5</kbd>).</li>
<li><strong>Lost data</strong> — close the server window, find the newest <code>zamena-masla-gp-…-….db</code> in <code>backups\</code>, copy it over <code>data\avtoambor.db</code>, restart <code>start.bat</code>.</li>
</ul>
</section>
</body>
</html>

43
deploy/install.bat Normal file
View File

@ -0,0 +1,43 @@
@echo off
REM Install Node.js 16.20.2 from a bundled MSI.
REM Picks x64 or x86 based on the Windows architecture.
chcp 65001 >nul
setlocal
cd /d "%~dp0"
if exist "%ProgramFiles%\nodejs\node.exe" (
echo Node.js уже установлен в %ProgramFiles%\nodejs.
echo Пропускаем установку.
goto :done
)
if exist "%ProgramFiles(x86)%\nodejs\node.exe" (
echo Node.js уже установлен в %ProgramFiles(x86)%\nodejs.
echo Пропускаем установку.
goto :done
)
set "MSI=node-v16.20.2-x64.msi"
if /i "%PROCESSOR_ARCHITECTURE%"=="x86" if not defined PROCESSOR_ARCHITEW6432 set "MSI=node-v16.20.2-x86.msi"
if not exist "%MSI%" (
echo Ошибка: файл %MSI% не найден рядом с install.bat.
echo Убедитесь, что архив распакован полностью.
pause
exit /b 1
)
echo Устанавливаем Node.js (%MSI%)...
echo Откроется стандартный установщик Windows — нажмите "Далее" до конца.
msiexec /i "%~dp0%MSI%"
if errorlevel 1 (
echo Установка Node.js завершилась с ошибкой.
pause
exit /b 1
)
:done
echo.
echo Готово. Закройте это окно и запустите start.bat.
pause
endlocal

Binary file not shown.

Binary file not shown.

42
deploy/start.bat Normal file
View File

@ -0,0 +1,42 @@
@echo off
REM Start the Zamena Masla GP server on http://localhost:3000.
if not "%ZMGP_MINIMIZED%"=="1" (
set ZMGP_MINIMIZED=1
start "Zamena Masla GP" /min "%~f0" %*
exit /b
)
chcp 65001 >nul
setlocal
cd /d "%~dp0"
set "NODE_EXE=%ProgramFiles%\nodejs\node.exe"
if not exist "%NODE_EXE%" set "NODE_EXE=%ProgramFiles(x86)%\nodejs\node.exe"
if not exist "%NODE_EXE%" (
echo Node.js не найден. Сначала запустите install.bat.
pause
exit /b 1
)
if not exist "data\avtoambor.db" (
echo База данных не найдена — создаём пустую...
if not exist "data" mkdir data
"%NODE_EXE%" scripts\init-db.js
if errorlevel 1 (
echo Не удалось создать базу данных.
pause
exit /b 1
)
)
set "NODE_ENV=production"
set "PORT=3000"
set "HOST=0.0.0.0"
set "ORIGIN=http://localhost:3000"
start "" http://localhost:3000
echo Сервер запущен на http://localhost:3000
echo Закройте это окно, чтобы остановить программу.
"%NODE_EXE%" build\index.js
endlocal