SealRoute SealRoute
Sign In
Back to home

Install SealRoute on your server

A 7-step walkthrough that takes you from a fresh Linux box with Docker to a fully activated SealRoute instance. Every step has the exact command or screenshot you need.

Prerequisites

  • A Linux host (Ubuntu 22.04+ or any modern distro) with at least 2 GB RAM and 10 GB disk.
  • Docker Engine (24+) and the Docker Compose v2 plugin. Verify with:
    docker --version
    docker compose version
  • Either a public domain (with HTTPS in front) or just a port you control on localhost. The default docker-compose.yml ships a Caddy reverse proxy that handles HTTPS automatically when you set HOST=your.domain.
  • An Aplindo license. You can also buy one inline from the running app in Step 5 below.

Step 1 - Pull the docker-compose file

Create a working directory and grab the production compose file from the repo. It already wires up SealRoute, Postgres, and Caddy.

mkdir sealroute && cd sealroute
curl -L https://raw.githubusercontent.com/buyungbahari/sealroute/master/docker-compose.yml -o docker-compose.yml

If you prefer to clone the whole repository: git clone https://github.com/buyungbahari/sealroute.git && cd sealroute. Either way, the next steps are the same.

Step 2 - Configure your environment

SealRoute reads its configuration from environment variables. Create a .env file next to your compose file. The minimum you need:

# Where the app is reachable from a browser. Use https://your.domain in
# production or http://localhost:3000 for a local trial.
APP_URL=https://your.domain
HOST=your.domain

# Generate with `openssl rand -hex 64` and keep it secret.
SECRET_KEY_BASE=replace-me-with-a-long-random-string

# --- Aplindo licensing ------------------------------------------------------
APLINDO_LICENSE_API_URL=https://license.aplindo.com
APLINDO_LICENSE_PRODUCT_SLUG=SealRoute
APLINDO_LICENSE_DEFAULT_AMOUNT_IDR=5000000.00
APLINDO_LICENSE_HEARTBEAT_SECONDS=3600

A more complete example with optional knobs lives in .env.local.example.

Step 3 - Start the stack

Bring up SealRoute, Postgres, and the reverse proxy in the background:

docker compose up -d

Watch the boot logs until you see Puma listening on tcp://0.0.0.0:3000:

docker compose logs -f app

First boot also runs the database migrations. On a 2 GB host this typically completes in under a minute.

Step 4 - Initial setup

Open the app in your browser. Since there are no users yet, SealRoute redirects you to the /setup page. This is where you create the first admin account and your account’s metadata.

Empty SealRoute /setup form

Fill in:

  • First name / Last name - your name as the first admin.
  • Email - this is the admin login and where signing notifications will be sent.
  • Company name - shown to signers in emails and on the signing page.
  • Password - at least 8 characters, mix of letters and numbers recommended.
  • App URL - prefilled from APP_URL in your .env. Used to generate signing links in emails.
  • Language - default UI language for new submitters.
SealRoute /setup form filled with sample data

Click Submit. SealRoute creates the account, signs you in, and redirects you to the /license page.

Step 5 - Buy a license

A self-hosted SealRoute instance needs an active license to leave signed-in screens unblocked. The /license page has two cards: Buy license on top and Activate license below.

SealRoute /license page showing Buy license and Activate license cards

In the Buy license card, set the number of Seats you need. The total recalculates automatically as you change the seat count.

Buy license card with seats set to 5 and total recalculated to IDR 25.000.000

Click Buy license. SealRoute opens a modal with the Aplindo checkout iframe. Complete the payment there. Once the transaction succeeds, Aplindo emails the license key to the address you entered, and the same key is also displayed on the checkout success page.

Step 6 - Activate your license

Copy the license key from the success page or your email, then paste it into the Activate license card on /license:

Activate license card with a sample XXXX-XXXX-XXXX-XXXX license key pasted in

Click Activate. SealRoute calls the Aplindo license server, ties the key to this machine, and reloads. You will see the Current license card at the top with status active, the product slug, license ID, machine ID, expiry date, and last heartbeat timestamp.

Current license card showing status active, product, license ID, machine ID, expiry, and last heartbeat

SealRoute schedules a heartbeat job that re-checks the license with Aplindo every APLINDO_LICENSE_HEARTBEAT_SECONDS seconds (default: hourly). If the license is revoked or expires, the next heartbeat will reflect it.

Step 7 - You are done

SealRoute is now fully operational. Visit / and you will land on the empty Document Templates dashboard, ready for your first upload.

Empty SealRoute Document Templates dashboard ready for the first upload

Build your first template

Click Upload on the dashboard, drop a PDF or DOCX, then drag fields onto it - signature, date, text, checkbox, etc.

Try the API

SealRoute is a REST API first. Generate an API token in Settings → API, then head to the API documentation for end-to-end examples in 10 languages.

Need help?