All Docs

Updating PacketPilot Analyze

How to update PacketPilot Analyze — online with Docker pull, or offline with a full release package for air-gapped environments.

Updating PacketPilot Analyze

PacketPilot Analyze is a Docker Compose stack. Updating means replacing the service images and optionally updating the compose file and environment template.


Finding Your Current Version

The running Analyze version is shown in two places:

  1. Web UI footer — every page has a version number in the bottom-right corner
  2. API endpointGET /api/version returns the current version:
curl http://localhost:8000/api/version
# {"version": "1.0.0", "buildDate": "2026-05-11T18:00:00Z"}

Online Update (Connected)

Use this method when the Analyze server has internet access.

Step 1: Check for Updates

Compare the version shown in the web UI footer against the latest release on packetpilot.db-electronics.no/docs/updates/analyze.

Or use the API directly:

curl http://localhost:8000/api/version
# {"version": "1.0.0", "buildDate": "2026-05-11T18:00:00Z"}

Step 2: Pull Latest Images

Navigate to your Analyze deployment directory and pull the updated images:

cd ~/packetpilot-analyze
docker compose pull

This downloads only the layers that have changed since your last pull. It is significantly faster than a full download.

Step 3: Update the Compose File (If Provided)

If the release includes an updated docker-compose.yml, compare it with your current one and merge any new or changed settings:

# Backup current
cp docker-compose.yml docker-compose.yml.backup

# Pull the new compose file (or download from the release page)
# Then check for new/changed service definitions
diff docker-compose.yml.backup docker-compose.yml

Key things to preserve from your current setup:

  • Volume mappings (/data, /postgres)
  • Port bindings (if you've changed them from defaults)
  • Environment variable values in .env (never overwrite .env with a fresh .env.example)

Step 4: Restart the Stack

docker compose down
docker compose up -d

Step 5: Verify

docker compose ps
# All services should show "Up"

Check the web UI footer — the version number should reflect the new release.


Air-Gapped Update (Offline)

Use this method when the Analyze server has no internet access.

The process has two phases: prepare on a connected machine, then deploy on the air-gapped server.

Phase 1: Prepare on a Connected Machine

1a. Pull and Export All Images

On a machine with Docker and internet access:

# Create a working directory
mkdir -p ~/packetpilot-offline-update
cd ~/packetpilot-offline-update

# Pull the latest images
docker pull postgres:16-alpine
docker pull ollama/ollama:latest
docker pull packetpilot/backend:latest
docker pull packetpilot/frontend:latest
docker pull packetpilot/license-server:latest

# Export each image as a tarball
docker save postgres:16-alpine -o postgres.tar
docker save ollama/ollama:latest -o ollama.tar
docker save packetpilot/backend:latest -o backend.tar
docker save packetpilot/frontend:latest -o frontend.tar
docker save packetpilot/license-server:latest -o license-server.tar

Image tags may differ. Check the current docker-compose.yml in your deployment for the exact image names and tags used in your release.

1b. Download the Release Package

Download the latest PacketPilot-Analyze-Suite-vX.Y.zip release package from the download link. This contains:

  • docker-compose.yml (updated)
  • .env.example (compare with your current .env)
  • CHANGELOG.md / release notes
  • VERSION file (semantic version + build date)

1c. Calculate Checksums

# Generate checksums for all tarballs and the zip package
sha256sum *.tar *.zip > checksums.txt

1d. Transfer to Air-Gapped Environment

Transfer the entire ~/packetpilot-offline-update/ directory to the air-gapped machine using USB drive or your approved transfer medium:

Required files:

postgres.tar
ollama.tar
backend.tar
frontend.tar
license-server.tar
docker-compose.yml       # updated compose file
.env.example             # compare with existing .env
CHANGELOG.md             # release notes
VERSION                  # version file
checksums.txt            # SHA-256 checksums for verification

Phase 2: Deploy on the Air-Gapped Server

2a: Verify Checksums

Before loading any images, verify the checksums of the transferred files:

# On the air-gapped server
sha256sum --check checksums.txt

If any file shows FAILED, discard it and re-transfer that file.

2b: Backup Current Deployment

cd ~/packetpilot-analyze

# Backup data
docker compose exec postgres pg_dump -U postgres packetpilot > backup_$(date +%Y%m%d).sql

# Backup current compose file
cp docker-compose.yml docker-compose.yml.backup

# Backup current .env
cp .env .env.backup

2c: Load Images

cd ~/packetpilot-offline-update

docker load -i postgres.tar
docker load -i ollama.tar
docker load -i backend.tar
docker load -i frontend.tar
docker load -i license-server.tar

Verify the images are loaded:

docker images | grep -E 'postgres|ollama|backend|frontend|license-server'

2d: Update Compose File

Compare the new docker-compose.yml with your backup and merge any new service settings:

diff docker-compose.yml.backup docker-compose.yml

Apply only changes that are new in the compose file — preserve your volume mappings, port bindings, and .env values.

2e: Update Ollama Model (If Required)

If the release includes a new or updated Ollama model:

docker load -i ollama-mistral.tar   # or whatever model tarballs are in the release

Then update OLLAMA_MODEL in .env if the model name changed.

2f: Restart the Stack

cd ~/packetpilot-analyze
docker compose down
docker compose up -d

2g: Verify

docker compose ps
# All services should show "Up"

curl http://localhost:8000/api/version
# Should return the new version

Open the web UI at http://localhost:3000 and confirm the footer shows the updated version.


Version Endpoint

The Analyze backend exposes the current version at:

GET /api/version

Response:

{
  "version": "1.2.0",
  "buildDate": "2026-05-11T18:00:00Z"
}

buildDate is null if no build date is configured.

This endpoint does not require authentication.


Data Persistence

Your data is stored in Docker volumes, not in the images. Updating images does not affect:

  • Existing cases and findings
  • Uploaded artifacts
  • User accounts and API tokens
  • License state

Only the service containers are replaced. Volumes are preserved across updates as long as your docker-compose.yml references the same volume names.


Rollback (If Needed)

If an update causes problems:

# Stop the stack
docker compose down

# Restore the previous compose file
cp docker-compose.yml.backup docker-compose.yml

# Restore the previous images (if you kept the old tarballs)
docker load -i postgres-backup.tar
# ... load other backup tarballs ...

# Restart
docker compose up -d

If you did not keep backup tarballs, pull the previous image tags from the registry (connected machine required) or restore from the database backup (backup_YYYYMMDD.sql).


Getting Help

If an update fails or causes unexpected behavior, contact support@db-electronics.no with:

  • The output of docker compose ps
  • The output of docker compose logs for the affected service
  • Your current version (from /api/version)