
Deploy Penpot on Your Own Server
The open-source solution for design and prototyping.
Want to deploy Penpot on your server faster? Try Senate with one-command setup, automatic HTTPS and monitoring.
What is Penpot?
The open-source solution for design and prototyping.
Self-Host Penpot
Follow these steps to deploy on your own server.
Install Docker
Skip this step if Docker is already installed on your server.
curl -fsSL https://get.docker.com | sh
Configure
Customize the settings below. Defaults work for most cases.
General
Deploy
Copy the configuration and run it on your server.
services:
penpot:
image: penpotapp/frontend:1.18.4
environment:
PENPOT_BACKEND_URI: http://penpot-backend:6060
PENPOT_EXPORTER_URI: http://penpot-exporter:6061
PENPOT_FLAGS: enable-registration enable-login enable-smtp
volumes:
- penpot-assets-data:/opt/data
depends_on:
- penpot-backend
- penpot-exporter
penpot-backend:
image: penpotapp/backend:1.18.4
environment:
PENPOT_ASSETS_STORAGE_BACKEND: assets-fs
PENPOT_DATABASE_PASSWORD: 37eeb2355d382b3d
PENPOT_DATABASE_URI: postgresql://penpot-postgres/penpot
PENPOT_DATABASE_USERNAME: penpot
PENPOT_FLAGS: enable-registration enable-login enable-smtp
PENPOT_PUBLIC_URI: ""
PENPOT_REDIS_URI: redis://penpot-redis:6379/0
PENPOT_REGISTRATION_DOMAIN_WHITELIST: ""
PENPOT_SMTP_DEFAULT_FROM: user@example.com
PENPOT_SMTP_DEFAULT_REPLY_TO: no-reply@example.com
PENPOT_SMTP_HOST: smtp.example.com
PENPOT_SMTP_PASSWORD: ""
PENPOT_SMTP_PORT: "587"
PENPOT_SMTP_SSL: "false"
PENPOT_SMTP_TLS: "true"
PENPOT_SMTP_USERNAME: user@example.com
PENPOT_STORAGE_ASSETS_FS_DIRECTORY: /opt/data/assets
PENPOT_TELEMETRY_ENABLED: "false"
PENPOT_TENANT: pro
volumes:
- penpot-assets-data:/opt/data
depends_on:
- penpot-postgres
- penpot-redis
penpot-exporter:
image: penpotapp/exporter:1.18.4
environment:
PENPOT_PUBLIC_URI: ""
PENPOT_REDIS_URI: redis://penpot-redis:6379/0
penpot-postgres:
image: postgres:15
environment:
POSTGRES_DB: penpot
POSTGRES_INITDB_ARGS: --data-checksums
POSTGRES_PASSWORD: 37eeb2355d382b3d
POSTGRES_USER: penpot
volumes:
- penpot-postgres-data:/var/lib/postgresql/data
penpot-redis:
image: redis:7
volumes:
penpot-assets-data: {}
penpot-postgres-data: {}
Then run:
docker compose up -d
Access
Once started, access your app at http://localhost:80
Why Self-Host Penpot?
Full Data Ownership
Your data stays on your servers. No third-party access.
No Monthly Fees
Pay only for your server. No per-seat or usage charges.
Complete Control
Customize, backup, and scale on your own terms.
Privacy & Compliance
Meet GDPR, HIPAA, or internal security requirements.
Technical Details
Docker Image
penpotapp/frontend:${penpot_version}Want to go faster?
Try Senate! Senate handles Docker, HTTPS, updates, and monitoring for you. Deploy any of our 300+ apps with a single command.
Install on any Linux server:
sh -c "$(curl -sSL https://get.senate.sh)"