Support

Installation Manual

SeaVesselManager · Complete installation & first-configuration manual · Updated May 2026

This manual walks you through the whole journey: requesting access, downloading your personal package, running the setup wizard on Windows, macOS or Linux, logging in for the first time, activating your licence, configuring your fleet, updating, backing up, and troubleshooting. Everything runs inside Docker containers.

🔒
SeaVesselManager is distributed by request only. The old public one-line installers have been retired and the package ZIP is no longer publicly downloadable. Start at Step 0 — Request Access to get your personal download link.
You only need Docker. The bundled setup.ps1 / setup.sh wizard automatically sets up PostgreSQL, Redis, the backend API, and the web app. No manual database or Node.js setup required.

How you get SeaVesselManager

1

Request access

Submit the form at seavesselmanager.com/request-access. A human reviews every request.

2

Receive your personal link

On approval — usually within one business day — you get an email with a private download link, valid for 7 days and usable up to 3 times.

3

Extract and run the bundled wizard

Unzip svm-server-package-<version>.zip and run setup.ps1 (Windows) or setup.sh (macOS/Linux) from inside the extracted folder.

4

Log in, then activate your licence

Open http://localhost:3000. The system runs for 30 days without a licence; then activate the free Community Edition key support issues you.

📧 Request access →

SeaVesselManager fleet dashboard showing vessel status cards, open work orders and upcoming maintenance across the fleet
The SeaVesselManager fleet dashboard — what you see after installation and first login.

What gets installed

ComponentPortWhat it does
PostgreSQL 17InternalDatabase — stores all your data
RedisInternalCaching and real-time events
Backend API4001The REST API your app communicates with
Frontend3000The web application users open in a browser
Admin Panel8080Server status and QR-code onboarding

Choose your platform

🍗

Windows

Windows 10/11. Requires Docker Desktop.

Windows guide →

🍎

macOS

Intel and Apple Silicon. Requires Docker Desktop.

macOS guide →

🍏

Linux / VPS

Ubuntu, Debian, DigitalOcean, AWS, Hetzner.

Linux guide →

🖥️

Desktop Client

Native thin client. Install the server first.

Desktop guide →

Step 0 — Request Access

Every installation starts here · reviewed by a human · usually within one business day

🔒
There is no public download. The one-line installers that used to be published here have been retired, and the server package ZIP is locked down server-side. The only way to obtain SeaVesselManager is a personal, time-limited download link issued to you after review.

📧 Request your access link

Fill in the short form and we will review your request and email your personal download link.

Open the request form →

Direct URL: https://seavesselmanager.com/request-access

1

Submit the request form

The form at seavesselmanager.com/request-access asks for:

FieldWhy we ask
Full nameWho the licence is issued to
CompanyOwner / manager / yard the installation belongs to
Work emailWhere the personal download link is sent — use a company address, not a free webmail one
Fleet sizeNumber of vessels, so we can tell you whether Community Edition (up to 4 vessels) is enough
Intended useEvaluation, on-board vessel install, office/shore install, or cloud deployment
2

We review your request

A person reviews every submission — usually within one business day (longer over weekends and public holidays). Community Edition licence keys are only issued after this review.

💬
Nothing is automated here on purpose. If we need to clarify your fleet size or deployment mode, we simply reply to your email before issuing the link.
3

Your personal download link arrives by email

On approval you receive an email containing a download link that is unique to you, of the form:

https://seavesselmanager.com/access/download.php?t=<TOKEN>
PropertyValue
Validity7 days from the moment it is issued
Downloads allowedUp to 3 times
Shareable?No — the token is tied to your request. Do not forward it.
Expired or used up?Email support@seavesselmanager.com and we reissue it
⏱️
Download the ZIP and keep a copy on your own storage. Once the link expires or the 3 downloads are used, it stops working — you do not need it again for updates, only for a fresh install.
📧
No email after a business day? Check your spam/quarantine folder for mail from seavesselmanager.com, then contact support@seavesselmanager.com.
4

Download and extract the package

Open your personal link in a browser (or fetch it with curl on a headless server) and save svm-server-package-<version>.zip. Extract it to the folder you want the server to live in.

The SeaVesselManager gated download page showing the server package ZIP available through a personal access link
Your personal download page — reached only through the tokenised link emailed to you.
PlatformRecommended location
WindowsC:\SVM\Server
macOS / Linux/opt/seavesselmanager
5

Run the bundled setup wizard

The ZIP contains the setup wizard — there is nothing else to download.

Windows (PowerShell, from inside the extracted folder):

powershell -ExecutionPolicy Bypass -File setup.ps1

macOS / Linux (from inside the extracted folder):

chmod +x setup.sh && ./setup.sh

Continue to the platform guide for the full walkthrough: Windows · macOS · Linux / VPS.

What the wizard asks you

PromptDefault / what to enter
Server LAN IPAuto-detected — press Enter to accept
API port4001
Frontend port3000
Admin port8080
Deployment modevessel (on board), office (shore) or cloud (VPS)
Server nameA recognisable name, e.g. Office Server
Vessel nameThe vessel this install belongs to, e.g. MV Arctic Star
Cloud sync URLOptional — leave blank unless you are pairing a vessel with an office server

The wizard then generates all secrets, writes the .env file, and starts the Docker containers for you.

Licensing at a glance

⏱️

30-day grace period

Runs fully featured for 30 days with no licence key at all.

🎉

Community Edition

Free key for up to 4 vessels, never expires. Issued by support after your access review.

See Activate the Community Edition licence for the activation steps.

Before You Start

One requirement — Docker Desktop

🐳
Docker Desktop must be installed and running before you run the installer. Open Docker Desktop and wait for the whale icon to show "Engine running". The installer will fail with a clear error if Docker is installed but not started.

System requirements

RequirementMinimumNotes
Docker DesktopVersion 24+Free for personal & small team use. Engine must be running.
RAM2 GB free4 GB recommended
Disk5 GB freeDocker images + database
Ports3000, 4001, 8080Must be free on host machine
🍗 Windows — Install Docker Desktop
  1. Go to docker.com/products/docker-desktop
  2. Click Download for Windows and run the installer
  3. Launch Docker Desktop from the Start menu
  4. Wait for the whale icon to show "Engine running"
  5. Verify: docker --version
🐳 Docker Desktop
📦
🖼️
🌐
Engine running
Containers
svm-server-postgres:5432Running
svm-server-redis:6379Running
svm-server-backend:4001Running
svm-server-frontend:3000Running
🍎 macOS — Install Docker Desktop
  1. Go to docker.com/products/docker-desktop
  2. Download for Apple Silicon (M1/M2/M3/M4) or Intel
  3. Open the .dmg and drag Docker to Applications
  4. Launch Docker and wait for the whale icon in the menu bar to stop animating
FinderFileEditView
🔋🐳🌎09:41
🐳
Docker Desktop
4.38.0
Status
Docker EngineRunning
KubernetesDisabled
🍏 Linux — Install Docker Engine
curl -fsSL https://get.docker.com | sh
sudo usermod -aG docker $USER
newgrp docker

Verify: docker --version and docker compose version

Install on Windows

Windows 10 / 11 · PowerShell · Installs to C:\SVM\Server

🐳
Docker Desktop must be running before you start. Open Docker Desktop and wait for "Engine running" in the taskbar.
🔒
You need your personal download link first. If you do not have one yet, complete Step 0 — Request Access. Replace YOUR_TOKEN in the commands below with the token from your email link.
1

Open PowerShell as Administrator

Press Win + X and choose Terminal (Admin) or Windows PowerShell (Admin).

📄Apps and Features
🛠️Terminal (Admin)
⚙️Settings
🔍Search
2

Download your personal package and extract it

You can click the link in your email and unzip it with File Explorer, or do it all from PowerShell:

New-Item -ItemType Directory -Force -Path C:\SVM\Server | Out-Null
Set-Location C:\SVM\Server

# Paste the token from your personal email link
Invoke-WebRequest -Uri "https://seavesselmanager.com/access/download.php?t=YOUR_TOKEN" -OutFile pkg.zip

Expand-Archive -Path pkg.zip -DestinationPath . -Force
Move-Item .\svm-server-package\* . -Force
Remove-Item .\svm-server-package, .\pkg.zip -Recurse -Force
Windows PowerShell (Admin)
PS C:\SVM\Server> Invoke-WebRequest -Uri "https://seavesselmanager.com/access/download.php?t=YOUR_TOKEN" -OutFile pkg.zip
Verifying access token...
✓ Token valid · 2 of 3 downloads remaining
svm-server-package-v4.84.zip ████████████████████ 100% 18 MB
PS C:\SVM\Server> Expand-Archive -Path pkg.zip -DestinationPath . -Force
✓ Extracted to C:\SVM\Server
⚠️
If the download returns an error page instead of a ZIP, the link has expired (7 days) or all 3 downloads were used. Email support@seavesselmanager.com for a fresh link.
3

Run the bundled setup wizard

From inside the extracted folder, run setup.ps1:

cd C:\SVM\Server
powershell -ExecutionPolicy Bypass -File setup.ps1
Windows PowerShell (Admin)
PS C:\SVM\Server> powershell -ExecutionPolicy Bypass -File setup.ps1
⚓ SeaVesselManager Setup
✓ Docker Desktop detected · Engine running
Detecting LAN IP...
✓ 192.168.1.100
Starting setup wizard...
💡
-ExecutionPolicy Bypass is needed because the script is not signed for your machine. It only applies to this one run and does not change your system policy.
4

Answer the setup questions

Press Enter to accept all defaults, or type a custom value:

SeaVesselManager Setup
⚓ SeaVesselManager Setup

Server LAN IP [auto-detected: 192.168.1.100]:
API port [4001]:
Frontend port [3000]:
Admin port [8080]:
Deployment mode (vessel/office/cloud) [vessel]: vessel
Server name [SeaVesselManager]: Bridge Server
Vessel name: MV Arctic Star
Cloud sync URL (optional, Enter to skip):

✓ Secrets generated
✓ Configuration saved to .env
Starting containers...
QuestionWhat to enter
Server LAN IPPress Enter — auto-detected
API portPress Enter for 4001
Frontend portPress Enter for 3000
Admin portPress Enter for 8080
Deployment modevessel (on-board), office (shore) or cloud (VPS)
Server nameA recognisable name, e.g. Bridge Server
Vessel nameThe vessel this install belongs to, e.g. MV Arctic Star
Cloud sync URLOptional — only when pairing a vessel install with an office server
The wizard generates every secret (JWT signing key, database password) itself and writes them to .env. You never have to invent or type credentials.
5

Wait for Docker to pull images

First run downloads ~500 MB of Docker images. Takes 3–5 minutes.

Docker Image Pull
Pulling postgres:17-alpine...
17-alpine: ███████████████▒▒▒ 78% 89.2MB/112MB
Pulling sin92gh/seavesselmanager-backend:latest...
latest: ███████████████████▒ 95% 287MB/302MB
Pulling sin92gh/seavesselmanager-frontend:latest...
latest: ███▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒ 18% 22MB/124MB
This may take a few minutes...
6

Open the web app

When setup completes, open your browser and go to http://localhost:3000

Log in with superadmin / superadmin. Change the password immediately — see First Login & Admin Password.

🔒
The system runs for 30 days without a licence. Before that runs out, activate the free Community Edition key — see Activate the Community Edition licence.

Managing the server

cd C:\SVM\Server

docker ps                                    # check all 5 containers are running
docker compose up -d                         # start
docker compose down                          # stop
docker logs svm-server-backend --tail 50     # view backend logs

Updating to a new version

SeaVesselManager ships new versions through Docker Hub. The customer package pins a specific version in docker-compose.yml, so docker compose pull on its own keeps re-pulling that same version. Bump the pinned tag first:

cd C:\SVM\Server

# 1. Back up, then bump the pinned image tags (PowerShell)
Copy-Item docker-compose.yml docker-compose.yml.bak
(Get-Content docker-compose.yml) -replace ':v4\.84',':v4.85' -replace 'APP_VERSION=v?4\.84','APP_VERSION=4.85' | Set-Content docker-compose.yml

# 2. Confirm the new tags
Select-String -Path docker-compose.yml -Pattern 'image:|APP_VERSION'

# 3. Pull the new images and recreate
docker compose pull
docker compose up -d --force-recreate backend frontend
docker compose logs -f backend
# Watch for: "Nest application successfully started", then Ctrl+C
💡
Postgres and Redis are not recreated — your data stays intact. Only the backend and frontend containers are replaced with the new images.

Install on macOS

Intel · Apple Silicon (M1/M2/M3/M4) · Installs to /opt/seavesselmanager

🐳
Docker Desktop must be running. Launch Docker from Applications and wait for the menu bar whale icon to stop animating.
🔒
You need your personal download link first. If you do not have one yet, complete Step 0 — Request Access. Replace YOUR_TOKEN below with the token from your email link.
1

Open Terminal

Press Cmd + Space, type Terminal, press Enter.

2

Download your personal package and extract it

Paste the token from your email link in place of YOUR_TOKEN:

sudo mkdir -p /opt/seavesselmanager && sudo chown $(whoami) /opt/seavesselmanager
cd /opt/seavesselmanager

curl -fsSL -o pkg.zip "https://seavesselmanager.com/access/download.php?t=YOUR_TOKEN"
unzip pkg.zip && mv svm-server-package/* . && rm -rf svm-server-package pkg.zip
Terminal — zsh
/opt/seavesselmanager $ curl -fsSL -o pkg.zip "https://seavesselmanager.com/access/download.php?t=YOUR_TOKEN"
Verifying access token...
✓ Token valid · 2 of 3 downloads remaining
svm-server-package-v4.84.zip ████████████████████ 100% 18 MB
/opt/seavesselmanager $ unzip pkg.zip
✓ Extracted to /opt/seavesselmanager
⚠️
Getting an HTML error page instead of a ZIP? The link has expired (7 days) or all 3 downloads were used. Email support@seavesselmanager.com for a fresh link.
3

Run the bundled setup wizard

From inside the extracted folder:

cd /opt/seavesselmanager
chmod +x setup.sh && ./setup.sh
SeaVesselManager Setup
/opt/seavesselmanager $ ./setup.sh
⚓ SeaVesselManager Setup
✓ Docker Engine detected (version 27.2)
Server LAN IP [auto: 192.168.0.45]:
API port [4001]:
Frontend port [3000]:
Admin port [8080]:
Deployment mode (vessel/office/cloud) [vessel]: office
Server name [SeaVesselManager]: Office Server
Vessel name: MV Arctic Star
Cloud sync URL (optional, Enter to skip):

✓ Secrets generated · .env written
✓ Docker containers started
🚀 Open http://localhost:3000 to get started
⏱️
The first run pulls roughly 500 MB of Docker images — expect 3–5 minutes before the app answers on port 3000.
4

Open the web app

Open Safari or Chrome and go to http://localhost:3000

Log in with superadmin / superadmin, then change the password immediately — see First Login & Admin Password.

🔒
Runs 30 days without a licence. Activate the free Community Edition key before then — see Activate the Community Edition licence.

Managing the server

cd /opt/seavesselmanager
docker ps
docker compose up -d
docker compose down
docker logs svm-server-backend --tail 50

Updating to a new version

SeaVesselManager ships new versions through Docker Hub. To update an existing install:

💡
The customer package pins a specific version (e.g. :v4.84) in docker-compose.yml, so docker compose pull alone keeps re-pulling that same old version. Bump the pinned tag first.
cd /opt/seavesselmanager   # or wherever docker-compose.yml lives

# 1. Back up, then bump the pinned image tags to the new version
cp docker-compose.yml docker-compose.yml.bak
sed -i 's/:v4\.84/:v4.85/g; s/APP_VERSION=v\?4\.84/APP_VERSION=4.85/g' docker-compose.yml

# 2. Confirm the new tags
grep -nE 'image:|APP_VERSION' docker-compose.yml

# 3. Pull the new images and recreate
docker compose pull
docker compose up -d --force-recreate backend frontend
docker compose logs -f backend
# Watch for: "Nest application successfully started", then Ctrl+C

Tip: swap v4.84/v4.85 for your current and target versions. To always track the newest build, set the tags to :latest and just run docker compose pull && docker compose up -d.

💡
Postgres and Redis are not recreated — your data stays intact. Only the backend and frontend containers are replaced with the new images.

Install on Linux / VPS

Ubuntu 22.04 / 24.04 · Debian 12 · Any VPS or cloud server

Docker Engine is the only requirement — not Docker Desktop. Step 1 installs it if needed.
🔒
You need your personal download link first. If you do not have one yet, complete Step 0 — Request Access. Replace YOUR_TOKEN below with the token from your email link.
1

Install Docker (skip if already installed)

curl -fsSL https://get.docker.com | sh
sudo usermod -aG docker $USER
newgrp docker
2

Download your personal package and run the setup wizard

Paste the token from your email link in place of YOUR_TOKEN. The whole install is these five lines:

mkdir -p /opt/seavesselmanager && cd /opt/seavesselmanager
curl -fsSL -o pkg.zip "https://seavesselmanager.com/access/download.php?t=YOUR_TOKEN"
unzip pkg.zip && mv svm-server-package/* . && rm -rf svm-server-package pkg.zip
chmod +x setup.sh && ./setup.sh
root@vps-01: SSH
root@vps-01:~# curl -fsSL -o pkg.zip "https://seavesselmanager.com/access/download.php?t=YOUR_TOKEN"
Verifying access token...
✓ Token valid · 2 of 3 downloads remaining
svm-server-package-v4.84.zip ████████████████████ 100% 18 MB
root@vps-01:/opt/seavesselmanager# ./setup.sh
⚓ SeaVesselManager Setup
✓ Docker Engine 27.2 detected
✓ Docker Compose 2.29 detected
Server public IP [auto: 45.92.11.55]:
API port [4001]:
Frontend port [3000]:
Admin port [8080]:
Deployment mode (vessel/office/cloud) [cloud]:
Server name [SeaVesselManager]: Cloud Server
Vessel name: MV Arctic Star
Cloud sync URL (optional, Enter to skip):
✓ Secrets generated · .env written
✓ Containers started. All 5 healthy.
🚀 http://45.92.11.55:3000
⚠️
unzip is not installed on every minimal image. If you get unzip: command not found, run sudo apt-get update && sudo apt-get install -y unzip first.
⏱️
The first run pulls roughly 500 MB of Docker images — 3–5 minutes on a normal VPS link.
3

Open firewall ports

If you are using a cloud VPS (Hetzner, DigitalOcean, AWS, etc.), open ports 3000, 4001, and 8080 in the cloud firewall dashboard first. That's what actually controls traffic.

If you also have a local firewall (ufw) on the server:

sudo ufw allow 3000/tcp
sudo ufw allow 4001/tcp
sudo ufw allow 8080/tcp
💡
Some VPS images don't have ufw installed. If you get ufw: command not found, just skip it — the cloud firewall is what matters.
4

Access the web app

http://<YOUR_SERVER_IP>:3000

Log in with superadmin / superadmin. Change the password immediately — see First Login & Admin Password. Then activate your Community Edition licence within the 30-day grace period.

Managing the server

cd /opt/seavesselmanager
docker ps
docker compose up -d
docker compose down
docker logs svm-server-backend --tail 50

Updating to a new version

SeaVesselManager ships new versions through Docker Hub. To update an existing install:

💡
The customer package pins a specific version (e.g. :v4.84) in docker-compose.yml, so docker compose pull alone keeps re-pulling that same old version. Bump the pinned tag first.
cd /opt/seavesselmanager   # or wherever docker-compose.yml lives

# 1. Back up, then bump the pinned image tags to the new version
cp docker-compose.yml docker-compose.yml.bak
sed -i 's/:v4\.84/:v4.85/g; s/APP_VERSION=v\?4\.84/APP_VERSION=4.85/g' docker-compose.yml

# 2. Confirm the new tags
grep -nE 'image:|APP_VERSION' docker-compose.yml

# 3. Pull the new images and recreate
docker compose pull
docker compose up -d --force-recreate backend frontend
docker compose logs -f backend
# Watch for: "Nest application successfully started", then Ctrl+C

Tip: swap v4.84/v4.85 for your current and target versions. To always track the newest build, set the tags to :latest and just run docker compose pull && docker compose up -d.

💡
Postgres and Redis are not recreated — your data stays intact. Only the backend and frontend containers are replaced with the new images.

Connect a Domain & Enable HTTPS

Serve SeaVesselManager on your own domain with automatic SSL

By default the app runs over plain HTTP on port 3000. To serve it on your own domain with a valid certificate (e.g. https://fleet.yourcompany.com), SeaVesselManager ships a built-in Caddy reverse proxy that obtains and auto-renews a free Let's Encrypt certificate — no NGINX or Certbot needed.

🌐
This applies to the Docker package. The native Windows installer is for LAN + desktop-client use — for a public web UI on a domain, use the Docker package.
⚠️
Before you start: this guide assumes you already installed SeaVesselManager using the Docker package (Windows/macOS/Linux installer above) and it is running on plain HTTP. You are now adding HTTPS on top.
1

Point your domain at the server

In your registrar's DNS settings, add an A-record pointing at the server's public IP:

TypeHost / NameValue
A@ (root)your.server.ip

Example (STRATO): Domains → DNS → A-Record → manage, set host @ to your server IP, then save. GoDaddy, Namecheap and Cloudflare are similar.

⏱️
DNS can take minutes to hours to propagate. Verify with nslookup yourdomain.com — it should return your server IP before you continue.
2

Open ports 80 and 443 in your cloud firewall

Caddy needs port 80 (certificate challenge) and 443 (HTTPS) reachable from the internet.

  • Hetzner / DigitalOcean / AWS / GCP: Open ports 80 and 443 in the cloud firewall (web console), not just on the server itself.
  • If you also run ufw on the server: sudo ufw allow 80/tcp && sudo ufw allow 443/tcp
💡
If your cloud provider has a firewall dashboard, changes there are required. ufw alone is not enough on most VPS hosts.
3

Enable HTTPS

Option A — during setup: when you run the installer, enter your domain at the "Public domain for HTTPS" prompt. The setup script handles everything automatically.

Option B — manually on an existing install:

cd /opt/seavesselmanager/reverse-proxy    # Linux
#   C:\SVM\Server\reverse-proxy           # Windows PowerShell

Now create the Caddy .env file. Important: the file must start with SITE_ADDRESS= followed by just the domain name. No https://, no trailing slash.

🚫
Wrong: echo "https://donto.space/" > .env
Right: echo "SITE_ADDRESS=donto.space" > .env
# Linux / macOS
echo "SITE_ADDRESS=yourdomain.com" > .env

# Windows PowerShell
"SITE_ADDRESS=yourdomain.com" | Set-Content -Path .env -Encoding UTF8

The Caddy config automatically rewrites /license/* to /api/v1/license/* so license activation works through the HTTPS proxy. This is handled automatically — no extra steps needed.

Start Caddy:

docker compose -f docker-compose.caddy.yml up -d
docker logs -f svm-server-caddy

Watch the logs. Within 30–60 seconds you should see:

Caddy
obtaining certificate for yourdomain.com...
✓ certificate obtained successfully
https://yourdomain.com is live
💡
If you see required variable SITE_ADDRESS is missing a value, you wrote the .env file incorrectly. Delete it and recreate with the exact format shown above.
4

Lock down the raw ports (required)

After HTTPS works, block direct access to the raw IP and ports. Otherwise http://YOUR_IP:3000 still works and bypasses your certificate.

Caddy reaches the containers through an internal Docker network, so you can safely bind the ports to 127.0.0.1 (localhost) only.

Linux / macOS:

⚠️
Do not use sed on YAML files. sed is a text replacer, not a YAML parser. It corrupts indentation and quotes, producing errors like services.frontend.ports must be a array. Use Python (shown below) which understands the file structure.
cd /opt/seavesselmanager

python3 << 'PYEOF'
import yaml
with open("docker-compose.yml") as f:
    data = yaml.safe_load(f)

data["services"]["frontend"]["ports"] = ["127.0.0.1:${FRONTEND_PORT:-3000}:3000"]
data["services"]["backend"]["ports"] = ["127.0.0.1:${API_PORT:-4001}:4001"]

with open("docker-compose.yml", "w") as f:
    yaml.dump(data, f, default_flow_style=False, sort_keys=False)

print("Done. Ports bound to localhost only.")
PYEOF

# Apply (postgres/redis untouched, data stays intact)
docker compose up -d

# Verify - backend/frontend should now show 127.0.0.1:... not 0.0.0.0:
docker ps --format "table {{.Names}}\t{{.Ports}}"

Windows:

cd C:\SVM\Server

# 1. Open docker-compose.yml in Notepad
notepad docker-compose.yml

# 2. Find these two lines and add 127.0.0.1: in front:
#    Before:  - "${API_PORT:-4001}:4001"
#    After:   - "127.0.0.1:${API_PORT:-4001}:4001"
#
#    Before:  - "${FRONTEND_PORT:-3000}:3000"
#    After:   - "127.0.0.1:${FRONTEND_PORT:-3000}:3000"

# 3. Save and restart
docker compose up -d

# 4. Verify
docker ps --format "table {{.Names}}\t{{.Ports}}"
🔒
After this change, the app is reachable only via https://yourdomain.com. The raw IP on port 3000 will refuse connections.
5

Test everything

TestExpected result
Open https://yourdomain.comLogin page loads, padlock icon in browser
Open http://YOUR_IP:3000Connection refused (port is localhost-only)
Open https://yourdomain.com/api/v1/healthJSON response with "status":"ok"
Open https://yourdomain.com/license/statusJSON response with "mode":"licensed" (or "trial")

Common mistakes

Mistake: echo "https://donto.space/" > .env
Fix: Must include SITE_ADDRESS= and no protocol or slash: SITE_ADDRESS=donto.space
Mistake: Only opening ports 3000/4001 in the firewall.
Fix: Caddy needs ports 80 and 443. Port 80 is used for the Let's Encrypt challenge even though all traffic goes to 443.
Mistake: Not locking down raw ports after HTTPS works.
Fix: Add 127.0.0.1: prefix in docker-compose.yml so http://IP:3000 no longer works.
Mistake: DNS hasn't propagated yet.
Fix: Run nslookup yourdomain.com on your local machine. If it doesn't return your server IP, wait and try again.
Mistake: License activation fails with 404 after enabling HTTPS.
Fix: The built-in Caddy config handles this automatically. If you use your own NGINX, add location /license/ { proxy_pass http://127.0.0.1:4001/api/v1/license/; } so the /license/* path reaches the backend.

Troubleshooting

  • Cert request hangs or fails — DNS not propagated yet, or port 80 blocked. Check nslookup and the firewall, then docker compose -f docker-compose.caddy.yml restart.
  • Browser still shows insecure / old page — hard-refresh (Ctrl/Cmd+Shift+R) to clear the cached service worker.
  • SITE_ADDRESS is missing a value — You forgot SITE_ADDRESS= in the .env file. Delete and recreate it exactly as shown in Step 3.
Advanced: use your own NGINX + Certbot instead

If you prefer your own NGINX, proxy the domain to the frontend and API (skip the built-in Caddy):

sudo apt-get install -y nginx certbot python3-certbot-nginx
server {
    listen 80;
    server_name yourdomain.com;
    location /api/       { proxy_pass http://127.0.0.1:4001; client_max_body_size 50M; }
    location /socket.io/ { proxy_pass http://127.0.0.1:4001; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection 'upgrade'; }
    location /license/   { proxy_pass http://127.0.0.1:4001/api/v1/license/; }
    location /           { proxy_pass http://127.0.0.1:3000; proxy_set_header Host $host; }
}
sudo ln -s /etc/nginx/sites-available/seavesselmanager /etc/nginx/sites-enabled/
sudo nginx -t && sudo systemctl reload nginx
sudo certbot --nginx -d yourdomain.com

Desktop Client

Native app for Windows & macOS — coming soon

🚀
Downloads are being finalised. The desktop client is built and in testing. When it ships, the installers will be delivered the same gated way as the server package — through a personal link emailed to approved users. Want to be notified? Contact us or request access.

What is the Desktop Client?

The SeaVesselManager Desktop Client is a native Tauri 2 application that wraps the full web interface in a native window. It connects to any running SeaVesselManager server on your LAN or internet — no browser, no Docker, no installation of any server components on the client machine.

🍗

Windows

Windows 10 / 11
.exe installer — ~35 MB

🍎

macOS

Intel + Apple Silicon (universal)
.dmg — ~40 MB

🌸

No Docker required

Docker only needs to run on the server machine, not on every crew member’s laptop.

🔗

Connects to any server

LAN address, domain name, or VPN — any reachable SeaVesselManager server works.

How it will work

1

Download & install

Run the .exe (Windows) or open the .dmg (macOS). No admin rights or Docker needed on the client.

2

Enter your server URL

⚓ Connect to Server
Enter the address of your SeaVesselManager server
Server URL
http://192.168.1.100:4001/api/v1
Cancel
Connect →

Enter the API address of your server, e.g. http://192.168.1.100:4001/api/v1. You can also scan the QR code from the Admin Panel at :8080.

3

Log in with your account

Use your normal SeaVesselManager username and password. The session is stored securely on your device.

4

Full access — native experience

The entire SeaVesselManager interface runs inside the app. All modules, work orders, spare parts, QHSE, and AIVA work exactly as in the browser version.

🕑
The server must be installed and running first. See Windows, macOS, or Linux install guides.

First Login & Admin Password

Do these in the first five minutes — before anyone else touches the system

1. Open the app and sign in

WhereValue
URL (same machine)http://localhost:3000
URL (other device on the LAN)http://<SERVER_LAN_IP>:3000
Usernamesuperadmin
Passwordsuperadmin — change it immediately
⏱️
If the page does not load yet, the backend may still be applying migrations on its first boot. Wait a minute, then check docker compose logs -f backend for Nest application successfully started.

After signing in you land on the fleet dashboard:

SeaVesselManager fleet dashboard immediately after first login, with fleet KPIs, vessel list and maintenance overview
The fleet dashboard on first login — empty until you add your first vessel and assets.

2. Change the admin password — now

⚠️
The default superadmin / superadmin credentials are public knowledge. Change the password before adding any real data, before opening any firewall port, and before creating other users.
1

Set a strong password

Go to Settings → Profile and set a strong password (12+ characters, stored in your password manager — there is no self-service reset on an offline vessel install).

⚙️ Settings › Profile › Change Password
Current Password
●●●●●●●●●●
New Password
●●●●●●●●●●●●
Confirm Password
●●●●●●●●●●●●
⚠️
Do this before adding any real data or letting anyone else access the system.
2

Create real user accounts

Go to Admin → Users → New User and give every person their own named account. Never share the superadmin login.

RoleAccess
superadminFull system access, including licensing and server settings
adminManage vessels, assets and data
userDay-to-day operations: work orders, running hours, stock

Vessel-level access is granted per user, so a crew account can be restricted to a single vessel.

3

Set the basics in Settings

Confirm the company name, time zone, date format and units under Settings. Getting the time zone right first avoids confusing due-date maths in PM schedules later.

4

Continue with licensing and configuration

Next: activate the Community Edition licence, then work through the first-run configuration tour.

First-login checklist

Task
1Change the superadmin password
2Create named accounts for each user, assign roles and vessel access
3Set company name, time zone, date format, units
4Activate the Community Edition licence key
5Create your first vessel
6Import assets, spare parts and PM schedules
7Take your first backup and confirm it restores

Activate the Community Edition Licence

30-day grace period · free Community Edition key · up to 4 vessels · never expires

Nothing is locked on day one. A fresh install runs fully featured for 30 days with no licence key at all. Use that time to evaluate and configure — then activate your key.

What Community Edition includes

PropertyCommunity Edition
PriceFree
VesselsUp to 4
ExpiryNever expires
ModulesFull PMS: assets, work orders, spare parts, certificates, QHSE, crew, reports, AIVA
How to get itIssued by support after your access request has been reviewed
More than 4 vessels?Contact support@seavesselmanager.com about a fleet licence

Activation steps

1

Ask support for your key

If it was not included in your approval email, reply to it or write to support@seavesselmanager.com. Include your server name and machine/installation ID from Settings → License.

2

Open Settings → License

Sign in as superadmin. The page shows your current mode (trial or licensed) and days remaining.

⚙️ Settings › License
Current mode
trial · 12 days remaining
Licence key
SVM-CE-XXXX-XXXX-XXXX-XXXX
3

Paste the key and activate

Paste the key exactly as sent — no spaces, no line breaks — and click Activate. The banner changes from the grace-period countdown to Community Edition · 4 vessels.

4

Verify from the command line

curl http://localhost:4001/api/v1/license/status
Licence check
$ curl http://localhost:4001/api/v1/license/status
{"mode":"licensed","edition":"community",
 "maxVessels":4,"expiresAt":null}
✓ Community Edition active
⚠️
If the grace period lapses before activation, the app keeps your data but restricts the UI until a valid key is entered. Activating unlocks it again immediately — nothing is lost.
💡
Running behind HTTPS and activation returns 404? The bundled Caddy config already rewrites /license/* to /api/v1/license/*. With your own NGINX, add that mapping — see Connect a Domain & Enable HTTPS.

First-Run Configuration Tour

Vessels → assets → spare parts → PM schedules — in that order

SeaVesselManager is a planned maintenance system, so the data has a natural order. Build it top-down: a vessel owns assets (equipment), assets consume spare parts, and PM schedules generate work orders against those assets.

💡
Everything below can be typed in manually or bulk-imported from Excel. For a real vessel, import — each module's Import button offers a template that matches its columns exactly.

1. Create your vessels

Go to Fleet → Add Vessel. Name, IMO number, flag state and type are the fields that matter for reporting and certificates.

⚓ Add Vessel
Vessel Name
MV Arctic Star
IMO Number
IMO 9876543
Flag State
Norway
Vessel Type
Platform Supply Vessel
Call Sign
LNXX
🔒
Community Edition allows up to 4 vessels. Adding a fifth requires a fleet licence.

2. Import your assets (equipment register)

Open Assets and either add items manually or use Import with the Excel template. Assets are hierarchical — Main Engine → Turbocharger → Bearing — so import parents before children, or let the template's parent-code column do it for you.

SeaVesselManager asset register listing shipboard equipment grouped by system with codes, criticality and running hours
The asset register — your equipment hierarchy per vessel, with criticality and running hours.

Open any asset to see its detail view: technical data, documents, linked spare parts, maintenance history and running hours.

SeaVesselManager asset details page showing technical specifications, linked spare parts, documents and maintenance history for a single piece of equipment
Asset details — technical data, documents, linked spares, running hours and full maintenance history.
FieldWhy it matters
Asset codeUnique per vessel; used by imports and PM schedules to link records
Parent assetBuilds the hierarchy so you can roll costs and jobs up per system
CriticalityDrives alert priority and class/inspection reporting
Running hoursStarting counter for hour-based PM schedules

3. Load spare parts and stock

Go to Spare Parts to create the catalogue, then Stock to set on-board quantities, minimum levels and locations. Link parts to assets so a work order can reserve exactly what it consumes.

SeaVesselManager spare parts module showing the parts catalogue with part numbers, stock quantities, minimum levels and storage locations
The spare parts module — catalogue, on-board stock, minimum levels and storage locations.
  • Set a minimum stock level on critical parts — below it, the part appears in alerts and can be pulled straight into a purchase order.
  • Record the storage location (store, rack, bin) so crew can actually find the part.
  • Link parts to their asset — deleting an asset never deletes spare parts, it only unlinks them.

4. Build your PM schedules

Under Maintenance, create planned maintenance schedules per asset. Each schedule can be calendar-based (every 6 months), running-hours-based (every 500 h), or both — whichever falls due first. Work orders are generated automatically as due dates approach.

SeaVesselManager maintenance dashboard showing due, overdue and completed planned maintenance work orders with counts per vessel
The maintenance dashboard — due, overdue and completed work orders generated from your PM schedules.
Schedule settingNotes
Interval typeCalendar, running hours, or both (first-due wins)
Last doneSet this at import so the first job is due at the right time, not immediately
Required sparesAttach the parts the job consumes — stock is decremented on completion
Instructions / checklistWhat the engineer actually has to do, plus any attachments
⚠️
Keep running hours up to date under Running Hours. Hour-based schedules cannot become due if the counters never move.

5. Meet AIVA, the built-in assistant

AIVA is the SeaVesselManager assistant. Ask it about overdue jobs, stock levels, or a specific asset's history in plain language instead of hunting through screens — useful while your team is still learning the module layout.

AIVA, the SeaVesselManager built-in AI assistant, answering a question about fleet maintenance status in a chat panel
AIVA — the built-in assistant, handy for querying maintenance and stock status in plain language.

6. Then fill in the rest

ModuleWhat to set up
CertificatesVessel and crew certificates with expiry dates — drives compliance alerts
Class SurveysSurvey windows and due dates for your classification society
CrewCrew list, ranks, assignments and certificate matrix
QHSENon-conformities, incidents, inspections and audits
ProcurementSuppliers, requisitions and purchase orders fed from low stock
DocumentsManuals and drawings attached to vessels and assets
Once your vessels, assets, spares and PM schedules are in, take a backup straight away — see Backup & Restore. Re-typing an equipment register is nobody's idea of fun.

Updating SeaVesselManager

Your data is safe — only the backend and frontend container images are replaced

Postgres and Redis containers are not touched during an update — all your vessels, work orders, and crew data are preserved.
📦
You do not need a new download link to update. Updates come from Docker Hub, not from the package ZIP. Your personal access link is only needed for a fresh install on a new machine.
📂
Database migrations apply automatically when the backend container boots. There is no manual migration command to run — just watch docker compose logs -f backend until you see Nest application successfully started.

The short version

docker compose pull
docker compose up -d --force-recreate backend frontend

Take a backup before every update — see Backup & Restore. If your docker-compose.yml pins an explicit version tag, bump it first as shown below.

Windows

💡
The customer package pins a specific version (e.g. :v4.84) in docker-compose.yml, so docker compose pull alone keeps re-pulling that same old version. Bump the pinned tag first.
cd C:\SVM\Server

# 1. Back up, then bump the pinned image tags (PowerShell)
Copy-Item docker-compose.yml docker-compose.yml.bak
(Get-Content docker-compose.yml) -replace ':v4\.84',':v4.85' -replace 'APP_VERSION=v?4\.84','APP_VERSION=4.85' | Set-Content docker-compose.yml

# 2. Confirm the new tags
Select-String -Path docker-compose.yml -Pattern 'image:|APP_VERSION'

# 3. Pull the new images and recreate
docker compose pull
docker compose up -d --force-recreate backend frontend
docker compose logs -f backend
# Watch for: "Nest application successfully started", then Ctrl+C

macOS / Linux

💡
The customer package pins a specific version (e.g. :v4.84) in docker-compose.yml, so docker compose pull alone keeps re-pulling that same old version. Bump the pinned tag first.
cd /opt/seavesselmanager   # or wherever docker-compose.yml lives

# 1. Back up, then bump the pinned image tags to the new version
cp docker-compose.yml docker-compose.yml.bak
sed -i 's/:v4\.84/:v4.85/g; s/APP_VERSION=v\?4\.84/APP_VERSION=4.85/g' docker-compose.yml

# 2. Confirm the new tags
grep -nE 'image:|APP_VERSION' docker-compose.yml

# 3. Pull the new images and recreate
docker compose pull
docker compose up -d --force-recreate backend frontend
docker compose logs -f backend
# Watch for: "Nest application successfully started", then Ctrl+C

Tip: swap v4.84/v4.85 for your current and target versions. To always track the newest build, set the tags to :latest and just run docker compose pull && docker compose up -d.

⚠️
Always use docker compose up -d --force-recreate after pulling — a plain docker compose restart does not pick up new images, and docker compose up -d alone may keep the old containers running if compose detects no config change.

What each step does

CommandWhat happens
docker compose pullDownloads the new backend and frontend images from Docker Hub
docker compose up -d --force-recreate backend frontendStops the old containers and starts new ones from the pulled images. Postgres and Redis are skipped — your data is safe.
docker compose logs -f backendStreams the backend startup log so you can confirm it boots cleanly with no migration errors

Verify the new version

curl http://localhost:4001/api/v1/health

The response includes the running version number.

Backup & Restore

All your data lives in one Postgres volume — back that up and you can rebuild anything

💾
What actually holds your data: the Docker named volume behind svm-server-postgres. The containers, images and even the extracted package folder are all disposable — the volume is not. Back it up on a schedule and copy it off the machine.

What to back up

ItemWhy
Postgres database (logical dump)Every vessel, asset, work order, spare part, certificate and audit record
.envGenerated secrets, ports and deployment mode — without it a restore needs reconfiguring
docker-compose.ymlYour pinned image versions and any port customisation
Uploads / documents volumeAttached manuals, drawings and photos

Quick backup (bundled script)

The package ships helper scripts next to docker-compose.yml:

cd /opt/seavesselmanager
./backup.sh          # writes a timestamped .sql.gz into ./backups

Manual backup with pg_dump

macOS / Linux:

cd /opt/seavesselmanager
mkdir -p backups

# Logical dump of the whole database, gzipped
docker exec -t svm-server-postgres pg_dump -U svm -d seavesselmanager \
  | gzip > backups/svm-backup-$(date +%Y%m%d-%H%M).sql.gz

# Keep the config alongside it
cp .env docker-compose.yml backups/

ls -lh backups

Windows (PowerShell):

cd C:\SVM\Server
New-Item -ItemType Directory -Force -Path .\backups | Out-Null

$stamp = Get-Date -Format 'yyyyMMdd-HHmm'
docker exec -t svm-server-postgres pg_dump -U svm -d seavesselmanager |
  Set-Content -Encoding UTF8 ".\backups\svm-backup-$stamp.sql"

Copy-Item .env, docker-compose.yml .\backups\
Backup
$ docker exec -t svm-server-postgres pg_dump -U svm -d seavesselmanager | gzip > backups/svm-backup-20260501-0730.sql.gz
dumping schema and data...
✓ backups/svm-backup-20260501-0730.sql.gz (42 MB)
💡
Check the -U user and -d database name against your .env (DB_USER / DB_NAME) if the dump errors with role does not exist.

Volume-level snapshot (alternative)

If you prefer a raw copy of the data directory instead of a logical dump, stop the stack first so the files are consistent:

cd /opt/seavesselmanager
docker compose stop

docker run --rm \
  -v svm-server_postgres_data:/data \
  -v "$(pwd)/backups":/backup \
  alpine tar czf /backup/pg-volume-$(date +%Y%m%d).tar.gz -C /data .

docker compose start
docker volume ls   # confirm the exact volume name if the command above fails

Restore

⚠️
Restoring overwrites the current database. Take a fresh backup of the existing data first, even if you think it is worthless.

Bundled script:

cd /opt/seavesselmanager
./restore.sh backups/svm-backup-20260501-0730.sql.gz

Manual restore from a gzipped dump:

cd /opt/seavesselmanager

# 1. Stop the app containers so nothing writes during the restore
docker compose stop backend frontend

# 2. Recreate an empty database
docker exec -i svm-server-postgres psql -U svm -d postgres \
  -c "DROP DATABASE IF EXISTS seavesselmanager;" -c "CREATE DATABASE seavesselmanager;"

# 3. Load the dump
gunzip -c backups/svm-backup-20260501-0730.sql.gz \
  | docker exec -i svm-server-postgres psql -U svm -d seavesselmanager

# 4. Bring the app back up (migrations run automatically on boot)
docker compose up -d backend frontend
docker compose logs -f backend
Test a restore at least once on a spare machine. A backup you have never restored is a hope, not a backup.

Suggested routine

WhenAction
DailyAutomated pg_dump to local backups/
WeeklyCopy the newest dump off the machine (office server, NAS, or cloud storage)
Before every updateManual dump plus a copy of .env and docker-compose.yml
QuarterlyRestore into a test install to prove the backup works

Troubleshooting

Start with the table, then open the matching section below

Symptom → cause → fix

SymptomLikely causeFix
port is already allocated / bind: address already in use on 3000Something else (often a Node dev server) owns the frontend portStop it, or set FRONTEND_PORT=3001 in .env and run docker compose up -d
Same error on 4001Another API or an old SeaVesselManager backend still runningdocker ps -a, remove the stale container, or set API_PORT in .env
Same error on 5432A local PostgreSQL install already owns the Postgres portStop the local service, or remove/remap the 5432 host mapping — the app talks to Postgres over the internal Docker network anyway
Same error on 8080Another admin panel / proxy on that portSet ADMIN_PORT in .env and recreate
Cannot connect to the Docker daemon / error during connectDocker is installed but not runningStart Docker Desktop and wait for Engine running; on Linux sudo systemctl start docker
Setup fails part-way, images half-pulledLow disk spacedocker system df then docker system prune -f; keep 5+ GB free
no space left on deviceDocker volume/image cache is fullFree disk, then docker system prune -a (careful: removes unused images)
A container keeps restarting (Restarting (1) in docker ps)Crash loop — usually a bad .env value or Postgres not ready yetdocker compose logs --tail 100 backend and read the first error, not the last
Backend restarts with JWT_SECRET or DB connection errors.env was edited or lost its generated secretsRestore .env from backup, or re-run the setup wizard
relation "..." does not exist on loginBackend booted before migrations completeddocker restart svm-server-backend, then watch the logs
Login page loads but every request failsFrontend cannot reach the API address in .envCheck SERVER_IP is the LAN IP, not 127.0.0.1, then recreate the frontend
Reachable on the server but not from other devicesHost firewall or cloud firewall closedOpen 3000/4001 (and 8080 if used) — cloud firewall dashboard first
UI shows a licence banner / restricted screens30-day grace period expiredActivate the Community Edition licence
Download link returns an error pageLink older than 7 days or 3 downloads usedEmail support@seavesselmanager.com for a reissue

Reading the logs

Nine out of ten problems are answered by the first error in the backend log. Run these from the folder that contains docker-compose.yml:

docker compose ps                        # state of every container (look for Restarting / Exited)
docker compose logs --tail 100 backend   # last 100 lines from the API
docker compose logs -f backend           # follow live, Ctrl+C to stop
docker compose logs --tail 50 postgres   # database startup problems
docker compose logs --tail 50 frontend   # web app build/runtime problems
docker compose logs --since 10m          # everything from the last 10 minutes
docker stats --no-stream                 # CPU / RAM per container
docker compose ps
$ docker compose ps
NAME STATUS
svm-server-postgres Up 4 minutes (healthy)
svm-server-redis Up 4 minutes (healthy)
svm-server-backend Restarting (1) 8 seconds ago
svm-server-frontend Up 4 minutes
$ docker compose logs --tail 30 backend
Error: connect ECONNREFUSED 5432 — database not ready yet
💡
Scroll to the first error in a restart loop. The later lines are usually just the same failure repeating.

Free a busy port

Windows (PowerShell):

Get-NetTCPConnection -LocalPort 3000 -State Listen |
  Select-Object LocalPort, OwningProcess, @{n='Process';e={(Get-Process -Id $_.OwningProcess).ProcessName}}

macOS / Linux:

sudo lsof -i :3000 -sTCP:LISTEN
# or
sudo ss -ltnp | grep -E ':(3000|4001|5432|8080)'

Then either stop that process, or change the port in .env and recreate:

# .env
FRONTEND_PORT=3001
API_PORT=4002
ADMIN_PORT=8081
docker compose up -d --force-recreate

Detailed walkthroughs

App won't open in browser
  1. Run docker ps — should show 5 containers
  2. Try http://localhost:3000 first
  3. Check firewall: ports 3000 and 4001 must be open
  4. View logs: docker logs svm-server-frontend --tail 30
"relation does not exist" error on login

The database schema was not created yet. Restart the backend:

docker restart svm-server-backend
Can't connect from another device
  • Make sure SERVER_IP in .env is the machine's LAN IP, not 127.0.0.1
  • Windows: Allow inbound on ports 3000 and 4001 in Windows Defender Firewall
  • Linux: sudo ufw allow 3000/tcp
Docker Desktop error on Windows (WSL 2)
wsl --install
wsl --set-default-version 2

Then restart Docker Desktop.

Reset everything (deletes all data)
⚠️
This deletes all data permanently. Back up first.
docker compose down -v
docker compose up -d
Docker is installed but the setup wizard says it can't connect

The Docker engine is not running — installing it is not the same as starting it.

  • Windows / macOS: launch Docker Desktop and wait for Engine running (whale icon steady).
  • Linux: sudo systemctl start docker && sudo systemctl enable docker
  • Linux permission denied: sudo usermod -aG docker $USER then newgrp docker.

Verify before retrying:

docker --version
docker compose version
docker info | head -20
Low disk space during or after install

The images need roughly 500 MB to pull and the database grows over time. Keep at least 5 GB free.

docker system df            # what Docker is using
docker image prune -f       # remove dangling images (safe)
docker system prune -f      # remove stopped containers + unused networks
⚠️
Never use docker system prune --volumes or docker compose down -v on a live install — both destroy the Postgres volume and therefore all your data.
A container is stuck in a restart loop
  1. docker compose ps — identify which service shows Restarting.
  2. docker compose logs --tail 100 <service> — read the first error.
  3. If it is the backend: usually Postgres was not ready, or .env is missing a value. Confirm Postgres is healthy, then docker compose up -d --force-recreate backend.
  4. If it is postgres: often a corrupted or half-initialised volume, or the host ran out of disk. Check the log for PANIC / could not write.
  5. If it is the frontend: check that API_PORT / SERVER_IP in .env are sane, then recreate it.
docker compose ps
docker compose logs --tail 100 backend
docker compose up -d --force-recreate backend
Still stuck — what to send support

Email support@seavesselmanager.com with the output of:

docker --version
docker compose version
docker compose ps
docker compose logs --tail 200 backend
curl -s http://localhost:4001/api/v1/health
🔒
Redact your .env before sharing it. It contains generated database and JWT secrets. Never paste passwords, tokens or your download link into an email or a ticket.

FAQ & Contact

Common questions about access, licensing, data and updates

Getting access

Why can't I just download SeaVesselManager?

Distribution is by request only. The package is reviewed and released per requester so we know who is running it, can match you to the right licence, and can reach you about security updates. Request access at seavesselmanager.com/request-access.

How long does approval take?

Usually within one business day. A human reviews every request, so weekends and public holidays add delay. If nothing arrives, check spam then email support@seavesselmanager.com.

My download link expired or is used up

Links are valid for 7 days and 3 downloads. Email support@seavesselmanager.com from the same address you requested with and we will reissue it.

Can I share my link with a colleague?

No — the token is tied to your request and burns one of your three downloads. Ask them to submit their own request instead.

Do I need the link again to install on a second machine?

You need the ZIP, not the link — keep a copy on your own storage. If you lost it, request a reissue.

Licensing

What happens after the 30 days?

The install keeps all its data but the UI is restricted until a valid key is entered. Activating the free Community Edition key unlocks it again immediately — nothing is deleted.

Is Community Edition really free, and does it expire?

Yes, free, and it never expires. The limit is up to 4 vessels. Larger fleets need a fleet licence — ask support@seavesselmanager.com.

Can I move my licence to another server?

Yes — contact support with the old and new installation IDs from Settings → License and we will reissue the key.

Running it

Does it work offline / with no internet at sea?

Yes. SeaVesselManager is offline-first: everything runs on the vessel's own server. Internet is only needed to pull images during install/update and, optionally, to sync with an office server.

Where is my data stored?

In the PostgreSQL Docker volume on your machine. Nothing is sent anywhere unless you deliberately configure a cloud sync URL. See Backup & Restore.

Do updates cost me my data?

No. Only the backend and frontend containers are replaced; Postgres and Redis are untouched. Migrations apply automatically on backend boot. Back up first anyway — see Updating.

Can I change the ports?

Yes — either answer the wizard's port prompts, or edit FRONTEND_PORT, API_PORT and ADMIN_PORT in .env and run docker compose up -d --force-recreate.

Can I run it on my own domain with HTTPS?

Yes — the package ships a Caddy reverse proxy that obtains and renews a free certificate. See Connect a Domain & Enable HTTPS.

Do crew laptops need Docker?

No. Docker only runs on the server. Everyone else uses a browser at http://<SERVER_IP>:3000, or the desktop thin client when it ships.

I forgot the superadmin password

There is no self-service reset on an isolated install. Contact support@seavesselmanager.com — and keep the password in a password manager. Do not send us the password you think it might be.

Contact

📧

Support

support@seavesselmanager.com
Installation, licensing and troubleshooting.

🔒

Request access

seavesselmanager.com/request-access
Start here for a new installation.

When you write in, include your version (from Settings or /api/v1/health), your platform, and the log output listed in Troubleshooting. Never include secrets from .env or your download token.

📧 Request access → Email support

Quick Reference

Default login

FieldValue
Usernamesuperadmin
Passwordsuperadmin — change immediately

URLs

AddressWhat it is
http://localhost:3000Web application
http://localhost:4001/api/v1REST API
http://localhost:4001/api/docsSwagger docs
http://localhost:8080Admin panel / QR code

Essential commands

docker ps                                     # check 5 containers running
docker logs svm-server-backend --tail 50      # backend logs
docker restart svm-server-backend             # restart backend only
docker compose down                           # stop all
docker compose up -d                          # start all
docker compose pull; docker compose up -d     # update (Windows PS)
docker compose pull && docker compose up -d   # update (macOS/Linux)

Install paths

PlatformPath
WindowsC:\SVM\Server
macOS / Linux/opt/seavesselmanager

Getting the package

StepWhere
Request accesshttps://seavesselmanager.com/request-access
Personal download link (emailed)https://seavesselmanager.com/access/download.php?t=<TOKEN> — 7 days, 3 uses
Run the wizard (Windows)powershell -ExecutionPolicy Bypass -File setup.ps1
Run the wizard (macOS/Linux)chmod +x setup.sh && ./setup.sh

Licence

ItemValue
Grace period30 days, no key required
Community EditionFree, up to 4 vessels, never expires
ActivateSettings → License, or check /api/v1/license/status
Need help? support@seavesselmanager.com