Overview
Each release is a single .tgz archive. Inside: Compose files,
a host .env, helper scripts, and two image archives
(pam-images-amd64.tar and pam-images-arm64.tar).
On first start, the image-load service imports the archive that
matches the Docker engine architecture.
Sign in, open Products, download the entitled pack.
Unpack the .tgz on the host that will run Docker.
Run start (or docker compose up -d).
Open the web UI and apply your signed license key.
Walkthrough
Watch the full path from pack download through host install and license activation before you dig into the written steps below.
How to download
Packs are not public files. You need an account and a fixed-term license whose term covers the release (one-time prepaid purchase; not perpetual; does not auto-renew).
- Create an account and verify your email.
- Purchase a plan from Pricing, then generate your license key on Licenses.
- Sign in and open Products.
- Download the published
pam-terminal-<version>.tgzfor your term.
The same pack includes both amd64 and arm64 images. You do not pick an architecture at download time — the host Docker engine selects the matching tar on start.
Copy the .tgz to the target machine over USB or an internal share. The pack does not pull images from a registry.
Requirements
Docker
- Docker Engine 24+ or Docker Desktop 4.x
- Compose V2 plugin — the
docker composecommand - Not the legacy
docker-composev1 binary
Host
- 64-bit OS only (see platforms)
- Several GB free for image tars + volumes
- Open ports from
.env(default HTTP 8080, HTTPS 443)
Supported platforms
Images ship for 64-bit hosts only.
| Architecture | Also called | Typical hosts | Status |
|---|---|---|---|
| amd64 | x86-64 | Intel / AMD 64-bit PCs and servers | Supported |
| arm64 | AArch64 | Ampere, AWS Graviton, Apple Silicon (Docker Desktop) | Supported |
| x86 | i386 / 32-bit | Legacy 32-bit PCs | Not supported |
Operating systems
| OS | How you run Docker | Scripts |
|---|---|---|
| Linux (Ubuntu, Debian, RHEL, and similar) | Docker Engine + Compose plugin | *.sh |
| Windows 10 / 11 / Server | Docker Desktop, or Engine where supported | *.ps1 |
| macOS (Intel or Apple Silicon) | Docker Desktop | *.sh |
Install
Extract the archive into a dedicated directory and keep that directory as
the Compose project root. .env must be a file,
not a directory (Compose sometimes creates a stub folder).
Install Docker Engine and the Compose plugin, then extract and start:
mkdir -p /opt/pam-terminal && tar -xzf pam-terminal-<version>.tgz -C /opt/pam-terminal
cd /opt/pam-terminal
chmod +x *.sh
./start.sh
Install Docker Desktop. In PowerShell, from the extracted folder:
mkdir pam-terminal; tar -xzf pam-terminal-<version>.tgz -C pam-terminal
cd pam-terminal
.\start.ps1
Install Docker Desktop. Apple Silicon uses arm64; Intel Macs use amd64.
mkdir -p pam-terminal && tar -xzf pam-terminal-<version>.tgz -C pam-terminal
cd pam-terminal
chmod +x *.sh
./start.sh
After start, open http://localhost:8080 (or the port in
PAM_WEB_PORT). First boot creates secrets in .env
and named Docker volumes.
Operate
Run these from the extracted pack directory. Linux and macOS use the
.sh scripts; Windows uses the matching .ps1.
You can also call Compose directly.
start
Bring the stack up
Checks that .env and both image tars exist, then runs
docker compose --env-file .env up -d.
Compose starts image-load first (imports the matching tar),
then env-init, Postgres, guacd, and pam-web.
./start.sh
# Windows: .\start.ps1
stop
Stop containers, keep data
Runs docker compose down without -v.
Named volumes stay on the host so recordings, the database, and secrets survive.
./stop.sh
# Windows: .\stop.ps1
upgrade
Replace images, keep volumes
Recreates containers from the files in the current directory:
docker compose down then up -d.
Existing .env secrets are kept; empty fields are filled by env-init.
./upgrade.sh
# Windows: .\upgrade.ps1
load
Optional image import
Manually runs docker load on pam-images-<arch>.tar
for the engine architecture. You normally skip this —
docker compose up -d already loads via the image-load service.
./load.sh
# Windows: .\load.ps1
docker compose down -v to upgrade
The -v flag deletes named volumes. That wipes the database,
recordings, drive files, and secrets. Stop and upgrade scripts omit -v on purpose.
License
The appliance runs on your infrastructure. After purchase, generate a signed license key on Licenses with your Machine ID. Paste it in the product admin. Keys can be machine-bound; keep the same host when you upgrade.
Offline / air-gapped sites do not need this website at runtime. The license file travels with you.
Data & upgrades
Persistent state lives in Docker named volumes, not in the extracted folder:
pam_pgdata— application databasepam_recordings— session recordingspam_drive— file transfer / drivepam_secrets— generated secretspam_dataprotection— data-protection keyspam_logs— application logs
Ports and secrets are in the host .env (bound into the container
as /pam-env/.env). To upgrade: extract the new pack into the
same project directory (keep .env and do not delete volumes),
then run upgrade.
FAQ
If the first start fails, these are the usual causes — and what to do. The pack itself does not need internet, .NET, or Node.js; it does need a working Docker that can run Linux containers.
Which environments are not suitable?
32-bit Windows and 32-bit CPUs are not supported. Windows containers mode is not supported — Docker Desktop must run Linux containers. Very old Docker without Compose V2, and uncertified engines such as Podman, are also outside the supported set. You need a 64-bit host (amd64 or arm64).
Is Docker the only thing I need to install?
Yes. Install Docker Engine 24+ or Docker Desktop 4.x with Compose V2
(the command docker compose, not the old docker-compose).
The pack does not include Docker. You do not need a public registry, Git,
or any application SDK.
What must be enabled on Windows?
Install Docker Desktop with WSL 2 and switch it to Linux containers.
Confirm docker version shows a Linux server
(linux/amd64 or linux/arm64).
If WSL 2 is off or the engine is not running, compose will not start.
Can I run it without internet?
Yes. Application images are inside the .tgz; do not run
docker compose pull. Docker itself must already be installed
on the host (offline, if the site has no network).
docker compose up fails: port is already allocated
Another service is using the HTTP or HTTPS port (defaults are 80 and 443).
Stop that service, or change PAM_WEB_PORT and
PAM_WEB_HTTPS_PORT in the host .env and run
docker compose up -d again.
Import fails or the database will not start
Leave several gigabytes free (about 3–4 GB) for the image archives and the first volumes. A full disk usually fails during image import or Postgres initialization.
Error: .env is a directory
Docker created an empty folder named .env because a file was
missing. Delete that folder, keep .env.example, then run
docker compose up -d again. The env-init service
will create a real .env file.
Error: No such image: pam-web:offline
Compose tried to create the application before the offline images were
imported. Use the current pack, then from the extracted folder run
docker compose down and docker compose up -d.
On an older pack, run docker compose up -d image-load first,
then docker compose up -d.
I ran docker compose down -v and data is gone
The -v flag deletes named volumes: database, recordings,
drive files, and secrets. Do not use it for upgrades. Extract the new pack
into the same folder so the existing .env is kept, then run
docker compose up -d (or the upgrade helper).
Permission denied, or Docker cannot be reached
The pack needs the Docker socket. Rootless Docker, a missing socket, or
strict SELinux/AppArmor rules can block image-load and the web
container. Use a standard Docker Desktop install or a rootful Engine.
Extract or start hangs on Windows
Antivirus or endpoint protection sometimes locks the large image tar files.
Add an exclusion for the pack folder, or wait for the scan to finish and
try docker compose up -d again.
Can I use Podman or another container engine?
The pack expects Docker Engine or Docker Desktop and a Docker socket. Other engines are not certified.
Which image tar is used?
Both tars ship in the archive. image-load (or load)
picks pam-images-amd64.tar or pam-images-arm64.tar
from the Docker engine architecture.
Where is the admin password?
After the first successful start it is written to .env as
PAM_ADMIN_PASSWORD. You can also run
docker compose logs env-init. Default user is admin.
Need a walkthrough?
Talk to us — we can review your host and license term.