Skip to content

Template · Other

Penpot

Open-source design and prototyping platform (frontend, backend, exporter) with Postgres and Redis.

Deploy on Skiffly

Opens the dashboard with this template pre-selected. Sign in with GitHub if you are new; the free tier needs no card.

  • Postgrespostgres:17
  • Redisredis:7-alpine
  • Penpot Backendpenpotapp/backend:latest
  • Penpot Exporterpenpotapp/exporter:latest
  • Penpotpenpotapp/frontend:latest
Upstream documentation

What gets deployed

5 services in the environment you pick, on the private network of the project.

About this template

penpotapp/frontend, penpotapp/backend and penpotapp/exporter (latest), PostgreSQL 17 and Redis. Registration is open; email verification is disabled.

Postgres

Image: postgres:17

  • Port 5432/tcp
  • 10 GB volume at /var/lib/postgresql/data
  • 1 vCPU · 1 GB

Redis

Image: redis:7-alpine

  • Port 6379/tcp
  • 2 GB volume at /data
  • 0.5 vCPU · 512 MB

redis-server --appendonly yes --dir /data

Penpot Backend

Image: penpotapp/backend:latest

  • Port 6060/tcp
  • 10 GB volume at /opt/data/assets
  • 1 vCPU · 2 GB

Penpot Exporter

Image: penpotapp/exporter:latest

  • Port 6061/tcp
  • 1 vCPU · 1 GB

Penpot

Image: penpotapp/frontend:latest

  • Port 8080/http
  • Public domain with TLS
  • 0.5 vCPU · 512 MB

Variables

Generated secrets never leave the platform; references are resolved on the private network. Anything marked required is asked for at deploy time.

Postgres

NameValue
POSTGRES_USERpenpotSuperuser name
POSTGRES_PASSWORDgenerated (password)Generated at deploy
POSTGRES_DBpenpotDatabase created on first start
PGDATA/var/lib/postgresql/data/pgdata
DATABASE_URLpostgresql://${{self.POSTGRES_USER}}:${{self.POSTGRES_PASSWORD}}@${{self.SKIFFLY_PRIVATE_DOMAIN}}:5432/${{self.POSTGRES_DB}}Connection string on the private network

Redis

NameValue
REDIS_URLredis://${{self.SKIFFLY_PRIVATE_DOMAIN}}:6379Private network only, no auth

Penpot Backend

NameValue
PENPOT_FLAGSenable-registration enable-login-with-password disable-email-verification enable-prepl-server
PENPOT_PUBLIC_URI${{Penpot.PENPOT_PUBLIC_URI}}
PENPOT_DATABASE_URIpostgresql://${{Postgres.SKIFFLY_PRIVATE_DOMAIN}}/${{Postgres.POSTGRES_DB}}
PENPOT_DATABASE_USERNAME${{Postgres.POSTGRES_USER}}
PENPOT_DATABASE_PASSWORD${{Postgres.POSTGRES_PASSWORD}}
PENPOT_REDIS_URI${{Redis.REDIS_URL}}/0
PENPOT_ASSETS_STORAGE_BACKENDassets-fs
PENPOT_STORAGE_ASSETS_FS_DIRECTORY/opt/data/assets
PENPOT_TELEMETRY_ENABLEDfalse
PENPOT_SECRET_KEYgenerated (secret)
PENPOT_SMTP_DEFAULT_FROMno-reply@example.com
PENPOT_SMTP_DEFAULT_REPLY_TOno-reply@example.com

Penpot Exporter

NameValue
PENPOT_PUBLIC_URIhttp://${{Penpot.SKIFFLY_PRIVATE_DOMAIN}}:8080
PENPOT_REDIS_URI${{Redis.REDIS_URL}}/0

Penpot

NameValue
PENPOT_PUBLIC_URIhttps://${{self.SKIFFLY_PUBLIC_DOMAIN}}
PENPOT_FLAGSenable-registration enable-login-with-password
PENPOT_BACKEND_URIhttp://${{Penpot Backend.SKIFFLY_PRIVATE_DOMAIN}}:6060
PENPOT_EXPORTER_URIhttp://${{Penpot Exporter.SKIFFLY_PRIVATE_DOMAIN}}:6061

Deploy button for your README

Add a one-click deploy link to your repository or docs. Two variants: for light and dark backgrounds.

Deploy on SkifflyDeploy on Skiffly
Markdown · Light background
[![Deploy on Skiffly](https://skiffly.dev/button.svg)](https://skiffly.dev/templates/penpot)
Markdown · Dark background
[![Deploy on Skiffly](https://skiffly.dev/button-dark.svg)](https://skiffly.dev/templates/penpot)
HTML
<a href="https://skiffly.dev/templates/penpot"><img src="https://skiffly.dev/button.svg" alt="Deploy on Skiffly" height="32"></a>

Deploy Penpot in one click

Volumes, secrets and domain pre-wired. Runs on EU nodes, paid per minute from a prepaid balance.