AI Gateway is now available: identity-aware access to any AI provider, eliminate API keys, and tunnel to self-hosted models. Get started

Deploy on AWS or DigitalOcean

Launch a self-hosted Pangolin server in minutes from a prebuilt AWS or DigitalOcean image

Prebuilt images are the fastest way to self-host Pangolin. They come with Docker, a firewall setup and a guided installer. Every image installs the latest Pangolin release when you set it up, so you never start on an old version.

Before you start

Whichever provider you choose, you need:

  • A domain whose DNS you control. Pangolin uses a base domain (for example example.com) for the resources you expose, and a dashboard domain (default pangolin.example.com) for the admin UI.

  • An email address for Let's Encrypt certificates.

  • DNS records pointing at the server's public IP. You can create them as soon as you know the IP:

    A   pangolin.example.com   ->  <server public IP>
    A   *.example.com          ->  <server public IP>
  • Open ports: TCP 80 and 443, and UDP 51820 (sites) and 21820 (clients). Both images open these for you.

See DNS & Networking for more detail, and Choosing a VPS for sizing.

Amazon Web Services

Pangolin publishes one Ubuntu 24.04 AMI per architecture:

ArchitectureAMI nameExample instance
x86_64pangolin-ubuntu-24.04-amd64-*t3.small
arm64 / Gravitonpangolin-ubuntu-24.04-arm64-*t4g.small

The same AMI installs either the Community Edition (the default) or the Enterprise Edition. You choose the edition when you configure the instance: set PANGOLIN_EDITION in user-data, use the Edition parameter in CloudFormation, or answer the wizard's prompt. The Enterprise Edition is free for personal use and for businesses under $100K USD gross annual revenue. See Enterprise Edition.

The AMIs are available in all default-enabled AWS regions: US East and West, Canada, São Paulo, Ireland, London, Paris, Frankfurt, Stockholm, Mumbai, Tokyo, Seoul, Osaka, Singapore and Sydney.

Graviton (t4g) instances are the most cost-effective choice. t4g.small (2 vCPU, 2 GB) suits most deployments.

Find the AMI

Search for Pangolin in AWS Marketplace and subscribe. The listing shows the AMI ID for each region and offers a one-click CloudFormation launch.

Launch and configure

Pick one way to give the instance your edition, domain and email. With CloudFormation or user-data, the instance sets itself up: it waits until the dashboard domain resolves to it, then installs Pangolin.

Choose the CloudFormation launch option on the Marketplace listing and fill in the parameters:

  • Edition: community (default) or enterprise
  • BaseDomain and LetsEncryptEmail (required)
  • DashboardDomain (optional, default pangolin.<BaseDomain>)
  • HostedZoneId (optional). If you give a Route 53 hosted zone, the DNS records are created for you.
  • VpcId, SubnetId (a public subnet), SSHLocation (your IP, e.g. 203.0.113.10/32) and optionally a KeyName

The stack creates the security group, the instance and an Elastic IP. Its outputs include the public IP, the dashboard URL, and a command that prints the setup token.

All user-data settings
SettingDefaultDescription
PANGOLIN_EDITIONcommunitycommunity or enterprise
PANGOLIN_BASE_DOMAINrequiredBase domain for resources, e.g. example.com
PANGOLIN_DASHBOARD_DOMAINpangolin.<base domain>Domain for the Pangolin dashboard
PANGOLIN_EMAILrequiredLet's Encrypt email
PANGOLIN_INSTALL_GERBILtrueEnable WireGuard tunneling. Set false to run Pangolin without tunneling
PANGOLIN_ENABLE_IPV6autoIPv6 on the Docker network. Defaults to on if the instance has an IPv6 address
PANGOLIN_ENABLE_MAXMINDtrueDownload the GeoLite2 databases for geolocation
PANGOLIN_SMTP_HOST, PANGOLIN_SMTP_PORT, PANGOLIN_SMTP_USER, PANGOLIN_SMTP_PASS, PANGOLIN_SMTP_NO_REPLYoffEmail (SMTP). Enabled when PANGOLIN_SMTP_HOST is set
PANGOLIN_WAIT_FOR_DNStrueWait for the dashboard domain to resolve to the instance before installing
PANGOLIN_DNS_TIMEOUT1800Seconds to wait for DNS before installing anyway

If you give only PANGOLIN_DASHBOARD_DOMAIN, the base domain is that domain with its first label removed (pangolin.example.com → example.com).

Any process on the instance can read user-data. Consider adding SMTP credentials later in /opt/pangolin/config/config.yml instead.

Get the setup token

Once installation finishes (usually a few minutes after DNS resolves), you can read the setup token without SSH:

aws ec2 get-console-output --instance-id i-... --latest --output text | grep 'Setup token'

Or over SSH:

pangolin-setup status        # waiting-dns | installing | complete | ...
sudo pangolin-setup token

Then continue with Finish setup.

DigitalOcean

The Pangolin (CE) 1-Click App runs on Ubuntu 24.04 with Docker CE. It installs the latest Pangolin release during setup. The listing is named for the Community Edition, but setup also lets you choose the Enterprise Edition.

Create the droplet

Choose a region close to your users and a plan with at least 1 GB RAM (2 GB recommended). Add your SSH key so you can log in as root.

Open Pangolin (CE) on the DigitalOcean Marketplace and click Create Pangolin (CE) Droplet.

Point DNS at the droplet

Copy the droplet's public IP and create the A records for your dashboard domain and *.<base domain>, as described in Before you start.

SSH in and run the setup

ssh root@<droplet-ip>

The setup script starts automatically on first login and downloads the latest installer. Answer the prompts as in the Quick Install Guide: edition, base domain, dashboard domain, Let's Encrypt email, tunneling and optional SMTP.

Copy the setup token

The installer prints the setup token when it finishes. To see it again:

cd /opt/pangolin && docker compose logs pangolin | grep -A2 'SETUP TOKEN'

The droplet comes with UFW enabled. Only ports 22, 80, 443 and UDP 51820, 21820 are allowed. For extra protection, restrict SSH to your IP with ufw allow from <your-ip> to any port 22 or a DigitalOcean Cloud Firewall.

Finish setup

Open the dashboard

Go to https://<dashboard domain>/auth/initial-setup.

Certificates can take a few minutes to issue after DNS resolves. A brief browser certificate warning at first is normal.

Create the admin account

Paste the setup token, then enter your admin email and a strong password. The token stops working once the first admin account exists.

Activate Enterprise (if applicable)

On an Enterprise Edition server, open Server Admin → License (/admin/license) and enter your license key. See Activate a License.

You're ready to add a site and expose your first resource.

Updating

Both images install Pangolin with Docker Compose in /opt/pangolin. To update to newer releases, follow How to Update. You don't need a new image.

Troubleshooting

AWS instance is stuck waiting for DNS

Check that the dashboard domain resolves to the instance's public IP:

dig +short pangolin.example.com @1.1.1.1

The instance keeps checking and installs anyway after PANGOLIN_DNS_TIMEOUT (30 minutes by default). If the server sits behind a load balancer, set PANGOLIN_WAIT_FOR_DNS=false. Follow progress with sudo tail -f /var/log/pangolin-setup.log.

Browser shows a certificate error

Let's Encrypt can only issue certificates once DNS points at the server and port 80 is reachable. After fixing DNS or the firewall, restart Traefik:

cd /opt/pangolin && sudo docker compose restart traefik
AWS setup failed

Run pangolin-setup status and read /var/log/pangolin-setup.log. After fixing the cause, run sudo pangolin-setup to try again.

Sites can't connect

Make sure UDP 51820 (and UDP 21820 for clients) is open in the AWS security group, or in the DigitalOcean firewall if you added one.

Was this page helpful?

⌘I

On this page