10 KiB
Installing AvtoAmbor on Windows (7 or higher)
This guide installs AvtoAmbor as a background service that starts automatically
when the machine boots, and opens itself in the default browser on login. After
setup the shop staff just turn the computer on — the app is running at
http://localhost:3000 before they log in, and a browser tab opens to it
right after they log in.
Node.js version note for Windows 7 / 8 Node.js 20 (used in the Docker dev image) officially supports Windows 10+ only. On Windows 7 or 8 install Node.js 16.x instead (the last line that runs on those versions). SvelteKit's Node adapter and
better-sqlite3both run fine on Node 16. On Windows 10 or 11 use Node.js 20 LTS.
1. Prepare the build on the dev machine
On the Linux dev box, produce a production build and gather the files needed on the Windows host.
make build # produces ./build (SvelteKit adapter-node output)
make db-init # ensure data/avtoambor.db exists (skip if you already have one)
Then create a single folder you'll copy to Windows. Call it avtoambor-dist:
avtoambor-dist/
├── build/ # entire ./build directory from `make build`
├── data/
│ └── avtoambor.db # the SQLite database
├── package.json
├── package-lock.json
└── scripts/ # only if you want db-init available on the host
node_modules/ is not copied — it will be reinstalled on Windows so the
native better-sqlite3 binary matches the Windows Node version.
Zip the folder and transfer it (USB stick, network share, scp, etc.).
2. On the Windows machine — one-time install
2.1 Install Node.js
- Windows 10 / 11: download the LTS x64 MSI from https://nodejs.org and
run the installer with defaults. Verify in a new
cmdwindow:node --version npm --version - Windows 7 / 8: download Node.js v16.20.2 from
https://nodejs.org/dist/v16.20.2/ (
node-v16.20.2-x64.msi). Install with defaults. Same verification.
If the node command isn't found in a new terminal, log out and back in (the
installer adds PATH entries that don't apply to already-open shells).
2.2 Install build tools for better-sqlite3
better-sqlite3 is a native module and needs a C++ toolchain to compile on
first install:
npm install --global --production windows-build-tools
On Node 16+ this package is deprecated but still works. Alternatively, install "Desktop development with C++" from the Visual Studio Build Tools 2019 installer (https://aka.ms/vs/16/release/vs_buildtools.exe) plus Python 3.
2.3 Lay the app down
Pick a stable location — C:\AvtoAmbor is the convention used below. Extract
the zip so you end up with:
C:\AvtoAmbor\
├── build\
├── data\avtoambor.db
├── package.json
├── package-lock.json
└── scripts\
Open cmd.exe as Administrator, cd into the folder, and install
production dependencies:
cd C:\AvtoAmbor
npm ci --omit=dev
This compiles better-sqlite3 against the installed Node version. It can take
a few minutes the first time.
2.4 Smoke-test
Still in C:\AvtoAmbor:
node build\index.js
You should see a line like Listening on 0.0.0.0:3000. Open
http://localhost:3000 in any browser to confirm the UI loads. Press
Ctrl+C to stop.
3. Run as a Windows service that starts on boot
We use NSSM (the Non-Sucking Service Manager) — it's a single tiny .exe,
no installer needed, and runs identically on Windows 7 through 11.
3.1 Install NSSM
- Download
nssm-2.24.zipfrom https://nssm.cc/release/nssm-2.24.zip. - Extract it. Copy
nssm-2.24\win64\nssm.exetoC:\AvtoAmbor\nssm.exe(usewin32\nssm.exeinstead if your Windows is 32-bit).
3.2 Register the service
In an Administrator cmd.exe:
cd C:\AvtoAmbor
nssm install AvtoAmbor
A GUI window opens. Fill in:
| Tab | Field | Value |
|---|---|---|
| Application | Path | C:\Program Files\nodejs\node.exe |
| Application | Startup directory | C:\AvtoAmbor |
| Application | Arguments | build\index.js |
| Details | Display name | AvtoAmbor |
| Details | Description | Auto-parts inventory web app |
| Details | Startup type | Automatic |
| Log on | (leave as) | Local System account |
| Process | Process priority | Normal |
| I/O | Output (stdout) | C:\AvtoAmbor\logs\out.log |
| I/O | Error (stderr) | C:\AvtoAmbor\logs\err.log |
| File rotation | Rotate Files | ✔ (rotate at 10 MB is fine) |
| Environment | (one var per line) | NODE_ENV=production |
PORT=3000 |
||
HOST=0.0.0.0 |
||
TZ=Asia/Dushanbe |
Create the log folder first:
mkdir C:\AvtoAmbor\logs
Click Install service, then start it:
nssm start AvtoAmbor
Verify:
sc query AvtoAmbor
Should report STATE : 4 RUNNING. Open http://localhost:3000 in a browser
— the app should respond.
Prefer the command line? The same service can be created without the GUI:
nssm install AvtoAmbor "C:\Program Files\nodejs\node.exe" "build\index.js" nssm set AvtoAmbor AppDirectory C:\AvtoAmbor nssm set AvtoAmbor AppStdout C:\AvtoAmbor\logs\out.log nssm set AvtoAmbor AppStderr C:\AvtoAmbor\logs\err.log nssm set AvtoAmbor AppEnvironmentExtra NODE_ENV=production PORT=3000 HOST=0.0.0.0 TZ=Asia/Dushanbe nssm set AvtoAmbor Start SERVICE_AUTO_START nssm start AvtoAmbor
3.3 Allow port 3000 if other machines on the LAN need access
Skip this section if only the local machine ever opens the app.
netsh advfirewall firewall add rule name="AvtoAmbor 3000" dir=in action=allow protocol=TCP localport=3000
4. Open the app in a browser automatically on login
The service runs before any user logs in, but you probably want a browser tab to open as soon as the shop user logs in.
- Press
Win + R, typeshell:startup, press Enter. That opensC:\Users\<user>\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup. - Right-click → New → Shortcut.
- Location of the item:
(Use
"C:\Program Files\Google\Chrome\Application\chrome.exe" --start-maximized --app=http://localhost:3000msedge.exefromC:\Program Files (x86)\Microsoft\Edge\Application\if Chrome isn't installed, orfirefox.exefromC:\Program Files\Mozilla Firefox\.) - Name the shortcut
AvtoAmbor.
--app= opens the page in a kiosk-style frameless window — feels more like a
desktop app and hides the address bar. Drop the flag if you want a normal
browser window.
Tip — start the browser slightly after login If Chrome opens before the service has fully started, the first load may fail. Replace the shortcut target with a small batch file (
C:\AvtoAmbor\open-browser.bat) that waits a few seconds:@echo off timeout /t 5 /nobreak >nul start "" "C:\Program Files\Google\Chrome\Application\chrome.exe" --start-maximized --app=http://localhost:3000and point the Startup shortcut at that batch file.
5. Day-to-day operations
| Task | Command (Admin cmd) |
|---|---|
| Start the service | nssm start AvtoAmbor |
| Stop the service | nssm stop AvtoAmbor |
| Restart | nssm restart AvtoAmbor |
| Check status | sc query AvtoAmbor |
| Edit service settings | nssm edit AvtoAmbor |
| Remove the service | nssm remove AvtoAmbor confirm |
| Tail the app log | type C:\AvtoAmbor\logs\out.log |
| Tail the error log | type C:\AvtoAmbor\logs\err.log |
The Services snap-in (services.msc) also shows AvtoAmbor and can be
used by anyone with admin rights.
6. Backups
The SQLite database is a single file: C:\AvtoAmbor\data\avtoambor.db. Stop
the service before copying it, or use the in-app backup endpoint if one
exists. A minimal nightly backup with Task Scheduler:
- Create
C:\AvtoAmbor\backup.bat:@echo off set STAMP=%date:~-4%-%date:~-10,2%-%date:~-7,2% copy /Y "C:\AvtoAmbor\data\avtoambor.db" "C:\AvtoAmbor\backups\avtoambor-%STAMP%.db" mkdir C:\AvtoAmbor\backups- Task Scheduler → Create Basic Task → Daily → run
backup.batat e.g. 02:00 → "Run whether user is logged on or not" + highest privileges.
7. Upgrading to a new version of the app
nssm stop AvtoAmbor
Replace C:\AvtoAmbor\build\ with the new build/ directory. If
package.json or package-lock.json changed, also copy those over and run:
cd C:\AvtoAmbor
npm ci --omit=dev
Then:
nssm start AvtoAmbor
The database in data\ is untouched by an upgrade.
8. Troubleshooting
- Service won't start, no useful error
Check
C:\AvtoAmbor\logs\err.log. The two most common causes are (a)better-sqlite3was compiled against a different Node version — rerunnpm ci --omit=dev; (b) port 3000 is already in use —netstat -ano | findstr :3000to find the offending PID. Error: The module was compiled against a different Node.js versionYou upgraded Node. FromC:\AvtoAmborrunnpm rebuild better-sqlite3.- Browser shows "This site can't be reached" right after login The service hadn't finished starting. Use the batch-file delay trick in §4.
- Database is locked
Something else has the DB open — usually a stray
node.exefrom a previous manual run. End it in Task Manager, thennssm restart AvtoAmbor. - Need to access from another PC on the LAN
Confirm the firewall rule (§3.3) and open
http://<windows-host-ip>:3000from the other machine. Find the IP withipconfig.