Pangolin | Pangolin Cloud | Blueprints Docs
Community library of ready-to-use Pangolin Blueprints for applications.
Some Available Blueprints
grafana: dashboards and observability UIhomepage: self-hosted dashboard with starter config filesimmich: photo and video backup
What is Pangolin and what are Blueprints?
Pangolin is an identity-based tunneled reverse proxy that exposes your services with SSO. You can also use it as your VPN.
In Pangolin, a blueprint is a declarative way to define resources and their settings without manual configuration within the dashboard. Within this repository, each service has predefined labels which will automatically create and configure the corresponding resources in the Pangolin dashboard.
Use this repository to expose common self-hosted services within minutes without having to set up a reverse proxy, open up ports, or configure network settings.
- Watch the video (YouTube): https://www.youtube.com/watch?v=j_chhXwFD9w
Quick Start
- Either:
- Create a free account at app.pangolin.net and attach a base domain to your account.
- Have a Self Hosted Pangolin ready to use.
- Within the dashboard, create a site, then copy that site's configuration.
You need these three values in this repo:
PANGOLIN_ENDPOINT=https://app.pangolin.net
NEWT_ID=...
NEWT_SECRET=...
NEWT_ID identifies the site connector, NEWT_SECRET authenticates it, and the Pangolin Cloud endpoint is https://app.pangolin.net or replace with your Pangolin dashboard url.
- Clone this repository and create the shared repo env:
git clone https://github.com/fosrl/blueprints
cd blueprints && cp .env.example .env
- Edit
.envand replace everyCHANGE_MEvalue.
BASE_DOMAIN=yourdomain.com
PANGOLIN_ENDPOINT=https://app.pangolin.net ## change if self hosted
NEWT_ID=CHANGE_ME
NEWT_SECRET=CHANGE_ME
- See what is available:
./bin/blueprint list
- Initialize a blueprint:
./bin/blueprint init <service>
This creates services/<service>/.env from the example and replaces any GENERATE_<IDENTIFIER> placeholders automatically. If the same token appears more than once, the generated value is reused.
-
Review
services/<service>/.envand change anything app-specific. Sanity check that./bin/blueprint config <service>produces configuration you expect. -
Start it:
./bin/blueprint up <service>
up also starts newt automatically and prints the expected public URL when the stack comes up cleanly.
Useful follow-up commands:
./bin/blueprint config <service>
./bin/blueprint logs <service>
./bin/blueprint down <service>
Shared Auth Defaults
Define shared auth once in the root .env:
GLOBAL_AUTH_SSO_ENABLED=true
GLOBAL_AUTH_SSO_ROLE_0=Member
GLOBAL_AUTH_SSO_ROLE_1=Support
[email protected]
Override or extend auth for one blueprint in services/<service>/.env:
RESOURCE_AUTH_SSO_ROLE_0=Support
[email protected]
RESOURCE_AUTH_BASIC_USER=admin
RESOURCE_AUTH_BASIC_PASSWORD=GENERATE_SERVICE_BASIC_AUTH_PASSWORD
Scalar RESOURCE_AUTH_* values override GLOBAL_AUTH_* values. Indexed RESOURCE_AUTH_* arrays are appended after the global arrays.
Preview the generated labels without starting the stack:
./bin/blueprint auth <service>
Updating Images
Most blueprints expose image names and tags through services/<service>/.env.
Typical flow:
- Edit the relevant image tag in
services/<service>/.env. - Pull the updated image:
./bin/blueprint pull <service>
- Recreate the stack:
./bin/blueprint up <service>
For raw Compose operations, use:
./bin/blueprint cmd <service> images
./bin/blueprint cmd <service> pull
./bin/blueprint cmd <service> restart
./bin/blueprint cmd <service> exec <container> sh
Create A Blueprint
Scaffold a new blueprint from the template:
./bin/blueprint new my-service
Override the defaults if needed:
./bin/blueprint new \
--name "My Service" \
--subdomain my-service \
--container-name my-service \
--port 8080 \
my-service
After scaffolding:
./bin/blueprint init my-service
./bin/blueprint auth my-service
./bin/blueprint config my-service
How It Is Organized
- The root stack runs
newtand owns the shared Pangolin connection. - Each blueprint runs as its own Compose project under
services/<name>/. - The root
.envstores shared values such asBASE_DOMAIN,PANGOLIN_ENDPOINT,NEWT_ID,NEWT_SECRET,PANGOLIN_DOCKER_NETWORK, and optionalGLOBAL_AUTH_*defaults. - Each blueprint has its own
.envfor app-specific values and optionalRESOURCE_AUTH_*overrides. - Public hostnames are derived from
${SERVICE_SUBDOMAIN}.${BASE_DOMAIN}.
Contributing
If you want to add a blueprint:
- Run
./bin/blueprint new <your-app>. - Keep the setup small and easy to understand.
- Make sure
./bin/blueprint init <your-app>produces a usable.env. - Run
./bin/blueprint auth <your-app>and./bin/blueprint config <your-app>. - Document what the blueprint exposes and what users need to change.
Start with CONTRIBUTING.md and COMMUNITY.md.
License
This repository is licensed under the MIT License. See LICENSE. Individual services may have their own upstream licenses and terms.