Back to Apps
Penpot

Deploy Penpot on Your Own Server

The open-source solution for design and prototyping.

πŸ“¦ Other

Want to deploy Penpot on your server faster? Try Senate with one-command setup, automatic HTTPS and monitoring.

Get Started

What is Penpot?

The open-source solution for design and prototyping.

Self-Host Penpot

Follow these steps to deploy on your own server.

1

Install Docker

Skip this step if Docker is already installed on your server.

curl -fsSL https://get.docker.com | sh
2

Configure

Customize the settings below. Defaults work for most cases.

General
3

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
4

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)"