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:
12
Makefile
12
Makefile
@ -1,4 +1,4 @@
|
|||||||
.PHONY: help install run build db-init db-reset docker-build docker-shell clean clean-all
|
.PHONY: help install run build db-init db-reset docker-build docker-shell clean clean-all bundle bundle-clean
|
||||||
|
|
||||||
DC := docker compose
|
DC := docker compose
|
||||||
|
|
||||||
@ -17,6 +17,8 @@ help:
|
|||||||
@echo " make docker-shell Open an interactive bash shell in the container"
|
@echo " make docker-shell Open an interactive bash shell in the container"
|
||||||
@echo " make clean Remove node_modules and build/ (keeps data/)"
|
@echo " make clean Remove node_modules and build/ (keeps data/)"
|
||||||
@echo " make clean-all Also wipe data/ (destroys the DB)"
|
@echo " make clean-all Also wipe data/ (destroys the DB)"
|
||||||
|
@echo " make bundle Produce dist/avtoambor-deploy.zip for Windows 7"
|
||||||
|
@echo " make bundle-clean Remove dist/"
|
||||||
@echo ""
|
@echo ""
|
||||||
|
|
||||||
install:
|
install:
|
||||||
@ -54,3 +56,11 @@ clean:
|
|||||||
clean-all: clean
|
clean-all: clean
|
||||||
@rm -rf data
|
@rm -rf data
|
||||||
@echo "wiped data/ as well."
|
@echo "wiped data/ as well."
|
||||||
|
|
||||||
|
# Windows 7 deploy bundle. Must be run with Node 16 active (.nvmrc).
|
||||||
|
bundle:
|
||||||
|
@bash scripts/make-bundle.sh
|
||||||
|
|
||||||
|
bundle-clean:
|
||||||
|
@rm -rf dist
|
||||||
|
@echo "removed dist/"
|
||||||
|
|||||||
106
deploy/README.md
Normal file
106
deploy/README.md
Normal 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 обновила переменные окружения.
|
||||||
|
- **Браузер открылся, но показывает «Не удаётся открыть страницу»** — сервер
|
||||||
|
ещё запускается. Подождите 5–10 секунд и обновите страницу (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
32
deploy/backup.bat
Normal 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
305
deploy/index.html
Normal 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> — подождите 5–10 секунд и обновите страницу (<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> — 5–10 сония интизор шавед ва саҳифаро нав кунед (<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 5–10 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
43
deploy/install.bat
Normal 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
|
||||||
BIN
deploy/node-v16.20.2-x64.msi
Normal file
BIN
deploy/node-v16.20.2-x64.msi
Normal file
Binary file not shown.
BIN
deploy/node-v16.20.2-x86.msi
Normal file
BIN
deploy/node-v16.20.2-x86.msi
Normal file
Binary file not shown.
42
deploy/start.bat
Normal file
42
deploy/start.bat
Normal 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
|
||||||
2282
package-lock.json
generated
2282
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
14
package.json
14
package.json
@ -3,6 +3,9 @@
|
|||||||
"version": "0.1.0",
|
"version": "0.1.0",
|
||||||
"private": true,
|
"private": true,
|
||||||
"type": "module",
|
"type": "module",
|
||||||
|
"engines": {
|
||||||
|
"node": "16.x"
|
||||||
|
},
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"dev": "vite dev --host 0.0.0.0 --port 3000",
|
"dev": "vite dev --host 0.0.0.0 --port 3000",
|
||||||
"build": "vite build",
|
"build": "vite build",
|
||||||
@ -11,12 +14,13 @@
|
|||||||
"db:init": "node scripts/init-db.js"
|
"db:init": "node scripts/init-db.js"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@sveltejs/adapter-node": "^5.2.0",
|
"@sveltejs/adapter-node": "1.3.1",
|
||||||
"@sveltejs/kit": "^2.5.0",
|
"@sveltejs/kit": "1.30.4",
|
||||||
"svelte": "^4.2.0",
|
"@sveltejs/vite-plugin-svelte": "2.5.3",
|
||||||
"vite": "^5.2.0"
|
"svelte": "4.2.19",
|
||||||
|
"vite": "4.5.5"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"better-sqlite3": "^11.3.0"
|
"better-sqlite3": "7.6.2"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
85
scripts/make-bundle.sh
Executable file
85
scripts/make-bundle.sh
Executable file
@ -0,0 +1,85 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
# Build dist/avtoambor-deploy.zip — a self-contained Windows 7 bundle.
|
||||||
|
#
|
||||||
|
# The bundle's node_modules/better-sqlite3 ships a native binary for
|
||||||
|
# win32-x64 + Node 16 (ABI v93), fetched via prebuild-install. The local
|
||||||
|
# dev tree (../node_modules/) is never touched, so `make run` / `npm run
|
||||||
|
# dev` keep working with the Linux binary.
|
||||||
|
|
||||||
|
set -euo pipefail
|
||||||
|
|
||||||
|
cd "$(dirname "$0")/.."
|
||||||
|
ROOT="$(pwd)"
|
||||||
|
DIST="$ROOT/dist"
|
||||||
|
STAGE="$DIST/avtoambor"
|
||||||
|
ZIP="$DIST/avtoambor-deploy.zip"
|
||||||
|
NODE_VERSION="16.20.2"
|
||||||
|
NODE_ABI="93"
|
||||||
|
|
||||||
|
# Sanity: we need Node 16 active so the build matches the runtime target.
|
||||||
|
NODE_MAJOR="$(node -p 'process.versions.node.split(".")[0]' 2>/dev/null || echo 0)"
|
||||||
|
if [ "$NODE_MAJOR" != "16" ]; then
|
||||||
|
echo "make-bundle.sh: Node 16 must be active (got $(node --version 2>/dev/null || echo none))."
|
||||||
|
echo " run: nvm use (reads .nvmrc → 16.20.2)"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
for cmd in npm zip rsync; do
|
||||||
|
command -v "$cmd" >/dev/null || { echo "make-bundle.sh: missing required tool: $cmd"; exit 1; }
|
||||||
|
done
|
||||||
|
|
||||||
|
echo "==> Building production output (vite build)"
|
||||||
|
npm run build
|
||||||
|
|
||||||
|
echo "==> Preparing staging directory: $STAGE"
|
||||||
|
rm -rf "$DIST"
|
||||||
|
mkdir -p "$STAGE"
|
||||||
|
|
||||||
|
echo "==> Installing production dependencies into staging"
|
||||||
|
cp package.json package-lock.json "$STAGE/"
|
||||||
|
( cd "$STAGE" && npm ci --omit=dev --no-audit --no-fund )
|
||||||
|
|
||||||
|
echo "==> Swapping better-sqlite3 native binary → win32-x64 / node v$NODE_ABI"
|
||||||
|
BS3="$STAGE/node_modules/better-sqlite3"
|
||||||
|
[ -d "$BS3" ] || { echo "make-bundle.sh: better-sqlite3 not present in staging"; exit 1; }
|
||||||
|
(
|
||||||
|
cd "$BS3"
|
||||||
|
# Remove the Linux binary that npm just installed; prebuild-install would
|
||||||
|
# otherwise skip the download believing the binary is already in place.
|
||||||
|
rm -rf build/Release
|
||||||
|
npx --no-install prebuild-install \
|
||||||
|
--runtime=node \
|
||||||
|
--target="v$NODE_VERSION" \
|
||||||
|
--platform=win32 \
|
||||||
|
--arch=x64 \
|
||||||
|
--verbose
|
||||||
|
)
|
||||||
|
# Confirm the swap landed.
|
||||||
|
if [ ! -f "$BS3/build/Release/better_sqlite3.node" ]; then
|
||||||
|
echo "make-bundle.sh: prebuild-install did not produce build/Release/better_sqlite3.node"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
echo " binary: $(file "$BS3/build/Release/better_sqlite3.node" | cut -d: -f2-)"
|
||||||
|
|
||||||
|
echo "==> Copying app files into staging"
|
||||||
|
rsync -a --delete build/ "$STAGE/build/"
|
||||||
|
mkdir -p "$STAGE/scripts"
|
||||||
|
cp scripts/init-db.js "$STAGE/scripts/"
|
||||||
|
mkdir -p "$STAGE/src/lib/server"
|
||||||
|
cp src/lib/server/schema.sql src/lib/server/seed.sql "$STAGE/src/lib/server/"
|
||||||
|
mkdir -p "$STAGE/data" "$STAGE/backups"
|
||||||
|
|
||||||
|
echo "==> Copying deploy/ assets to the bundle root (double-click access)"
|
||||||
|
# README, .bat launchers, MSI installers — all at the top level of the zip.
|
||||||
|
cp deploy/install.bat deploy/start.bat deploy/backup.bat "$STAGE/"
|
||||||
|
cp deploy/README.md "$STAGE/"
|
||||||
|
cp deploy/node-v16.20.2-x64.msi "$STAGE/"
|
||||||
|
cp deploy/node-v16.20.2-x86.msi "$STAGE/"
|
||||||
|
|
||||||
|
echo "==> Creating zip: $ZIP"
|
||||||
|
( cd "$DIST" && zip -rq "$(basename "$ZIP")" "$(basename "$STAGE")" )
|
||||||
|
|
||||||
|
ZIP_SIZE="$(du -h "$ZIP" | cut -f1)"
|
||||||
|
echo
|
||||||
|
echo "Bundle ready:"
|
||||||
|
echo " $ZIP ($ZIP_SIZE)"
|
||||||
@ -1,16 +1,5 @@
|
|||||||
<script>
|
<script>
|
||||||
import { onNavigate } from '$app/navigation';
|
|
||||||
import Header from '$lib/components/Header.svelte';
|
import Header from '$lib/components/Header.svelte';
|
||||||
|
|
||||||
onNavigate((navigation) => {
|
|
||||||
if (!document.startViewTransition) return;
|
|
||||||
return new Promise((resolve) => {
|
|
||||||
document.startViewTransition(async () => {
|
|
||||||
resolve();
|
|
||||||
await navigation.complete;
|
|
||||||
});
|
|
||||||
});
|
|
||||||
});
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<Header />
|
<Header />
|
||||||
|
|||||||
Reference in New Issue
Block a user