PenPot Installation
Penpot: An Open-Source Design and Prototyping Tool
Penpot is the first open-source platform for design and prototyping, tailored for cross-functional teams. It stands out as an excellent alternative to proprietary tools like Figma, offering flexibility, self-hosting capabilities, and a focus on collaboration.
Key Features
Open Source
Penpot is open source and free, making it accessible for individuals and teams who value transparency and control over their design workflows. Its source code is available on GitHub.
Collaboration-First
Penpot promotes teamwork by enabling real-time collaboration between designers and developers. It supports simultaneous editing, ensuring seamless communication and faster iteration cycles.
Cross-Platform
As a web-based application, Penpot runs on any modern browser, making it platform-agnostic. Teams can use it on Windows, macOS, Linux, or even mobile devices.
Self-Hosting
For teams or organizations prioritizing privacy and data control, Penpot offers a self-hosting option. You can deploy it on your infrastructure using Docker or other supported platforms.
Design System Support
Penpot supports design systems, enabling teams to manage components, styles, and assets efficiently. It simplifies design consistency across projects.
SVG-Native
Unlike other tools that rely on proprietary formats, Penpot uses SVG as its native format. This ensures maximum compatibility and flexibility for design assets.
Why Choose Penpot?
- Cost-Effective: Free and open source with no hidden subscription fees.
- Privacy: Self-hosting ensures data sovereignty.
- Community-Driven: A vibrant and growing community contributes to its features and improvements.
- Interoperability: SVG-native design format ensures assets work seamlessly across tools and platforms.
Useful Links
- Official Website: https://penpot.app/
- GitHub Repository: https://github.com/penpot/penpot
- Documentation: https://help.penpot.app/
- Community Forum: https://community.penpot.app/
- Twitter (X): @penpotapp
- WP Tuts Video: YouTube
Installation
Prerequisites
- VPS server - at least 4GB RAM
You can get 20€ in cloud credits using this link for Hetzner Cloud. Webnestify recommends Hetzner for all of your projects.
- Access to the domain for HTTPS.
- Secured server.
Before you continue with the installation, you need to make sure that your server is secured. Visit security guides section. Do not deploy any applications on an unsecured server. Otherwise, you can risk a potential data breach.
Webnestify can help you to secure your server to your specific needs and compliance. Just get in touch.
Video Walkthrough
Docker Engine
First, we will need to install docker engine on our brand new server.
Quick Installation script:
curl -sSL https://get.docker.com/ | CHANNEL=stable sh
# After the installation process is finished, you may need to enable the service and make sure it is started (e.g. CentOS 7)
systemctl enable --now docker
Visit official installation guide.
Never install docker from other sources or custom repositories.
Docker Compose file
networks:
penpot:
volumes:
penpot_assets:
services:
penpot-frontend:
image: "penpotapp/frontend:latest"
restart: always
ports:
- 9001:80
volumes:
- penpot_assets:/opt/data/assets
depends_on:
- penpot-backend
- penpot-exporter
networks:
- penpot
environment:
- PENPOT_FLAGS=enable-login-with-password
penpot-backend:
image: "penpotapp/backend:latest"
restart: always
volumes:
- penpot_assets:/opt/data/assets
depends_on:
- penpot-postgres
- penpot-redis
networks:
- penpot
environment:
- PENPOT_FLAGS=enable-registration enable-login-with-password enable-email-verification enable-smtp enable-prepl-server enable-email-whitelist
- PENPOT_REGISTRATION_DOMAIN_WHITELIST= [YOUR-DOMAINS] # Add domain whitelists for accounts and invites. Examples: webnestify.cloud,webnestify.com
- PENPOT_SECRET_KEY=[YOUR-SECURE-KEY] # Generate with command: python3 -c "import secrets; print(secrets.token_urlsafe(64))"
- PENPOT_PREPL_HOST=0.0.0.0
- PENPOT_PUBLIC_URI=[YOUR-DOMAIN] # https://example.com or https://something.example.com
- PENPOT_DATABASE_URI=postgresql://penpot-postgres/penpot
- PENPOT_DATABASE_USERNAME=penpot
- PENPOT_DATABASE_PASSWORD=[YOUR-SECURE-PASSWORD] # Same generated value as in PG Env variable
- PENPOT_REDIS_URI=redis://penpot-redis/0
- PENPOT_ASSETS_STORAGE_BACKEND=assets-fs
- PENPOT_STORAGE_ASSETS_FS_DIRECTORY=/opt/data/assets
- PENPOT_TELEMETRY_ENABLED=true # Set to false if you don't want to sent basic diagnostic data to PenPot
- PENPOT_SMTP_DEFAULT_FROM=[YOUR-SMTP]
- PENPOT_SMTP_DEFAULT_REPLY_TO=[YOUR-SMTP]
- PENPOT_SMTP_HOST=[YOUR-SMTP]
- PENPOT_SMTP_PORT=587
- PENPOT_SMTP_USERNAME=[YOUR-SMTP]
- PENPOT_SMTP_PASSWORD=[YOUR-SMTP]
- PENPOT_SMTP_TLS=true
penpot-exporter:
image: "penpotapp/exporter:latest"
restart: always
networks:
- penpot
environment:
- PENPOT_PUBLIC_URI=http://penpot-frontend
- PENPOT_REDIS_URI=redis://penpot-redis/0
penpot-postgres:
image: "postgres:15"
restart: always
stop_signal: SIGINT
volumes:
- /home/[YOUR-USER]/penpot/db:/var/lib/postgresql/data #change your path to your user
networks:
- penpot
environment:
- POSTGRES_INITDB_ARGS=--data-checksums
- POSTGRES_DB=penpot
- POSTGRES_USER=penpot
- POSTGRES_PASSWORD=[YOUR-SECURE-PASSWORD] # Generate with command: python3 -c "import secrets; print(secrets.token_urlsafe(64))"
penpot-redis:
image: redis:7
restart: always
networks:
- penpot
Change to your own values in square brackets [] !
Generate secure keys with this shell command:
python3 -c "import secrets; print(secrets.token_urlsafe(64))"
Reverse Proxy: Caddy
- Install Caddy repos and software
sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https curl && curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | sudo gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg && curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' | sudo tee /etc/apt/sources.list.d/caddy-stable.list && sudo apt update && sudo apt install caddy
- Edit the Caddyfile
sudo nano /etc/caddy/Caddyfile
- Paste config
yourdomain.com {
reverse_proxy http://localhost:9001
}
Make sure to replace yourdomain.com and default port 9001 to your own value you installed on.
- Restart Caddy
sudo systemctl reload caddy
About Webnestify
Imagine a world where you can focus on your business and less time maintaining your cloud infrastructure. With Webnestify cloud based solutions, we provide customized solutions for all types of companies to meet their needs; no matter how big or small they may be!
Read our reviews on Trustpilot!
Subscribe to our YouTube channel!
If you need to setup your own Docker instances or need help with security, visit our Docker deployment service.