Installation Guide
This guide walks you through installing SeaVesselManager on your server — whether that's a Windows machine on the vessel, a Linux VPS in the cloud, or an office server.
What gets installed
| Component | Port | What it does |
|---|---|---|
| PostgreSQL | Internal | The database — stores all your data |
| Redis | Internal | Caching and real-time events |
| Backend API | 4001 | The server your app talks to |
| Frontend | 3000 | The web application users open |
| Admin Panel | 8080 | Server status and QR-code onboarding |
Pick your platform
Windows
On-vessel or office Windows server. Requires Docker Desktop.
Windows guide →Linux / VPS / Cloud
Ubuntu 22.04/24.04 server, DigitalOcean, AWS, Hetzner, etc.
Linux guide →Before You Start
What you need
| Requirement | Minimum | Notes |
|---|---|---|
| Docker | Version 24+ | Docker Desktop on Windows, Docker Engine on Linux |
| Docker Compose | V2 | Included with Docker Desktop. Use docker compose (not docker-compose) |
| RAM | 2 GB free | 4 GB recommended for production |
| Disk | 5 GB free | For Docker images and the database |
| Ports free | 3000, 4001, 8080 | Nothing else should be using these ports |
Install Docker
- Go to docker.com/products/docker-desktop
- Download and install Docker Desktop for Windows
- Start Docker Desktop and wait for it to show "Engine running"
- Open PowerShell and verify:
docker --version
Run this one command — it installs Docker and Docker Compose automatically:
curl -fsSL https://get.docker.com | sh
sudo usermod -aG docker $USER
newgrp docker
Verify it worked:
docker --version
docker compose version
Install on Windows
The setup script automatically installs: PostgreSQL database, Redis, the backend API, and the web application — all running inside Docker containers.
The only requirement is Docker Desktop. No Node.js, no PostgreSQL, no Redis, nothing else.
Installation
Download the server package
Go to seavesselmanager.com/downloads.html and download svm-server-package-latest.zip.
Extract the ZIP
Right-click the downloaded ZIP and choose Extract All. Extract to a location like C:\SVM\Server.
Run the setup script
Open PowerShell in the extracted folder and run:
powershell -ExecutionPolicy Bypass -File setup.ps1
The script will ask you a few questions:
- Server IP — your machine's local network IP (auto-detected, just press Enter)
- Deployment mode — choose
vessel(on-board ship),office, orcloud - Vessel/Server name — give it a recognisable name
- Ports — defaults are fine (3000, 4001, 8080)
Wait for startup
The script pulls Docker images (~500 MB) and starts all containers. This takes 3–5 minutes on first run depending on your internet speed.
When done you'll see the server URLs printed:
✅ SeaVesselManager is running!
Web app: http://192.168.1.100:3000
API: http://192.168.1.100:4001
Admin: http://192.168.1.100:8080
Open the web app
Open your browser and go to http://<YOUR_SERVER_IP>:3000
Log in with: username superadmin / password SuperAdmin
Managing the server
Run these commands in the C:\SVM\Server folder:
# Check if everything is running
docker ps
# Stop the server
docker compose down
# Start the server
docker compose up -d
# View logs if something is wrong
docker logs svm-server-backend --tail 50
Install on Linux / VPS
The setup script automatically installs: PostgreSQL database, Redis, the backend API, and the web application — all running inside Docker containers.
The only requirement is Docker Engine (installed in Step 1 below if you don't have it). No Node.js, no PostgreSQL, no Redis, nothing else.
Install Docker (if not already installed)
curl -fsSL https://get.docker.com | sh
sudo usermod -aG docker $USER
newgrp docker
Download and run the setup
mkdir -p /opt/seavesselmanager
cd /opt/seavesselmanager
curl -fsSL -o pkg.zip https://seavesselmanager.com/downloads/svm-server-package-latest.zip
unzip pkg.zip
mv svm-server-package/* .
rm -rf svm-server-package pkg.zip
chmod +x setup.sh
./setup.sh
Answer the setup questions
Same as Windows — the script asks for your server IP, deployment mode, server name, and ports.
For a VPS: set the Server IP to your server's public IP address and choose cloud as the deployment mode.
Verify it's running
docker ps
curl http://localhost:4001/api/v1/health
You should see: {"status":"ok","version":"..."}
Open the firewall ports (if needed)
sudo ufw allow 3000/tcp
sudo ufw allow 4001/tcp
sudo ufw allow 8080/tcp
If you plan to use NGINX with a domain name (recommended for cloud), see the Cloud Setup section — in that case you only need ports 80 and 443 open.
Docker Hub Images
SeaVesselManager publishes production Docker images to Docker Hub on every release. The server package's docker-compose.yml pulls these automatically — you don't need to do anything manually.
Available images
| Image | Docker Hub |
|---|---|
sin92gh/seavesselmanager-backend |
hub.docker.com/r/sin92gh/seavesselmanager-backend |
sin92gh/seavesselmanager-frontend |
hub.docker.com/r/sin92gh/seavesselmanager-frontend |
Pull images manually
# Always latest stable
docker pull sin92gh/seavesselmanager-backend:latest
docker pull sin92gh/seavesselmanager-frontend:latest
# Pin to a specific version
docker pull sin92gh/seavesselmanager-backend:v4.42
docker pull sin92gh/seavesselmanager-frontend:v4.42
Update to the latest release
From your server install folder (/opt/seavesselmanager on Linux or C:\SVM\Server on Windows):
# Pull latest images from Docker Hub
docker compose pull
# Restart with the new images
docker compose up -d
# Confirm everything is running
docker ps
Using images directly (advanced)
If you want to run the containers directly without the server package:
docker run -d \
--name svm-backend \
-p 4001:4001 \
-e DB_HOST=your-db-host \
-e DB_USER=svm \
-e DB_PASSWORD=yourpassword \
-e DB_NAME=seavesselmanager \
-e JWT_SECRET=your-secret \
sin92gh/seavesselmanager-backend:latest
docker-compose.yml — it includes PostgreSQL, Redis, and the admin panel pre-configured.Desktop Client
The SeaVesselManager Desktop Client is a native application that connects to your SVM server and gives you a fast, offline-capable interface — no browser required. It works alongside the web app; both connect to the same server.
Windows
Installer (.msi) or standalone .exe. Works with Windows 10 and 11.
macOS
Universal .dmg — runs on both Intel and Apple Silicon.
Linux
.AppImage or .deb package. Tested on Ubuntu 22.04+.
No server needed on device
The desktop app is just a client — your server runs on Docker elsewhere.
Download
Get the latest version from the Downloads page or directly from GitHub Releases.
| Platform | File | Notes |
|---|---|---|
| 🪟 Windows | SeaVesselManager_x64.msi | Recommended — installs to Program Files |
| 🪟 Windows | SeaVesselManager_x64-setup.exe | Standalone NSIS installer |
| 🍎 macOS | SeaVesselManager_universal.dmg | Intel + Apple Silicon |
| 🐧 Linux | sea-vessel-manager_amd64.AppImage | No install needed — just run it |
| 🐧 Linux | sea-vessel-manager_amd64.deb | Debian/Ubuntu package |
First-run setup
When you open the desktop app for the first time, a setup wizard appears asking for your server URL:
Enter your server URL
Type the address of your SVM server, e.g. http://192.168.1.50:3000 or https://fleet.yourdomain.com
Log in
Enter your SeaVesselManager username and password. Your session is saved — you won't need to log in again unless you sign out.
Done
The app connects and loads your fleet. You can add multiple server profiles under Settings if you manage more than one installation.
Updates
The desktop app checks for updates automatically on startup. When a new version is available you'll see an update prompt inside the app. You can also update manually by downloading the latest installer from the downloads page.
Cloud Setup — NGINX + SSL
After the Linux install, set up NGINX as a reverse proxy so users access your app at https://yourdomain.com instead of http://IP:3000.
Install NGINX and Certbot
sudo apt-get install -y nginx certbot python3-certbot-nginx
Create the NGINX config
sudo nano /etc/nginx/sites-available/seavesselmanager
Paste this (replace yourdomain.com with your actual domain):
server {
listen 80;
server_name yourdomain.com www.yourdomain.com;
location / {
proxy_pass http://localhost:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
location /api/ {
proxy_pass http://localhost:4001;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
client_max_body_size 50M;
}
}
sudo ln -s /etc/nginx/sites-available/seavesselmanager /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx
Enable HTTPS (free SSL certificate)
sudo certbot --nginx -d yourdomain.com -d www.yourdomain.com
Certbot will configure HTTPS automatically and set up auto-renewal.
Lock down the firewall
sudo ufw allow 22/tcp
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enable
First Steps After Install
Change the default password
Log in with superadmin / SuperAdmin, then go to Settings → Profile and set a strong password.
Add your first vessel
- Click Fleet in the left sidebar
- Click Add Vessel
- Fill in the vessel name, IMO number, flag state, and type
- Save
Create users
Go to Admin → Users → New User. Set a name, username, password and role.
| Role | What they can do |
|---|---|
superadmin | Full access to everything including admin settings |
admin | Manage vessels, users, and most data |
user | Day-to-day operations on their assigned vessels |
Try the onboarding QR code
Open the admin panel at http://<SERVER_IP>:8080. It shows a QR code users can scan with the mobile/desktop client to connect instantly — no manual URL typing needed.
Updating SeaVesselManager
Updates are delivered as new Docker images. To update, just pull the latest images and restart:
# Pull latest images from Docker Hub
docker compose pull
# Restart with the new images
docker compose up -d
# Confirm everything is running
docker ps
docker compose up -d after pulling — a plain docker compose restart does not pick up new images.Check the current version
curl http://localhost:4001/api/v1/health
The response shows the current version: {"status":"ok","version":"4.42",...}
Backup & Restore
Create a backup
Run the included backup script from your installation folder:
# Linux / cloud
cd /opt/seavesselmanager
./backup.sh
# Windows (from C:\SVM\Server in PowerShell)
docker exec svm-server-postgres pg_dump -U svm seavesselmanager > backup.sql
Backups are saved as backups/svm-backup-TIMESTAMP.sql.gz and old ones are cleaned up automatically (keeps last 30).
Schedule automatic daily backups (Linux)
crontab -e
# Add this line to run backup every day at 2am:
0 2 * * * /opt/seavesselmanager/backup.sh
Restore from a backup
# Using the restore script
./restore.sh backups/svm-backup-20260501-020000.sql.gz
# Manual restore
gunzip -c backup.sql.gz | docker exec -i svm-server-postgres psql -U svm seavesselmanager
Troubleshooting
- Make sure all containers are running:
docker ps— you should see 5 containers - Check you're using the right IP — it should be the server's local network IP, not
localhost(unless you're on the same machine) - Check the firewall isn't blocking ports 3000 and 4001
- View logs:
docker logs svm-server-backend --tail 50
The backend started before the database was ready. Wait 30 seconds and restart the backend:
docker restart svm-server-backend
If it keeps failing, check your .env file has the correct DB_PASSWORD.
The frontend can't reach the backend. Check that NEXT_PUBLIC_API_URL in your .env points to the correct server IP and port (4001). After changing .env, always rebuild:
docker compose up -d --build frontend
- Make sure
SERVER_IPin your.envis the machine's LAN IP address (like192.168.1.100), not127.0.0.1 - On Windows: check Windows Defender Firewall allows inbound on ports 3000 and 4001
- On Linux: run
sudo ufw allow 3000/tcp && sudo ufw allow 4001/tcp
Docker build cache builds up over time. Clean it monthly:
docker builder prune -af
docker image prune -af
docker compose down -v
docker compose up -d
Quick Reference
URLs
| Address | What it is |
|---|---|
http://<IP>:3000 | Web application (main app) |
http://<IP>:4001/api/v1 | REST API |
http://<IP>:4001/api/docs | API documentation (Swagger) |
http://<IP>:4001/api/v1/health | Health check |
http://<IP>:8080 | Admin panel / QR code |
Default login
| Field | Value |
|---|---|
| Username | superadmin |
| Password | SuperAdmin — change immediately after first login |
Common commands
# Check all containers are running
docker ps
# View backend logs
docker logs svm-server-backend --tail 50
# Stop everything
docker compose down
# Start everything
docker compose up -d
# Update to latest version
docker compose pull && docker compose up -d
# Clean up disk space
docker builder prune -af && docker image prune -af
Key files
| File | What it does |
|---|---|
.env | All your configuration and secrets — generated by setup |
docker-compose.yml | Defines all the containers |
backup.sh / restore.sh | Database backup and restore |
setup.ps1 / setup.sh | Initial setup wizard |