设计工具涨价、席位收紧、文件格式锁死,团队想换工具时最怕的不是学不会,而是历史文件搬不走。Penpot 给出的解法有点反常识:它把设计文件直接存成 SVG 这类开放网页标准,让设计和代码保持同步。
更关键的是,它完全跑在浏览器里,可以自己部署。下面这套流程,用 Docker Compose 把 Penpot 装到 Linux 服务器上,配 PostgreSQL 存数据、Valkey 做 websocket 通知、Traefik 负责 TLS 终止,最后跑通从建账号到出原型的完整链路。
![]()
先把目录和密钥准备好
Penpot 的运行时被拆成几块:前端、后端、导出器、PostgreSQL 数据库,以及 Valkey 缓存。其中 PostgreSQL 和上传的素材需要持久化存储,Valkey 只放临时数据,不需要挂卷。
第一步建目录,顺便给 TLS 证书留个位置:
mkdir -p ~/penpot/letsencryptcd ~/penpot
接着生成一个随机密钥,后面要写进环境文件:
python3 -c "import secrets; print(secrets.token_urlsafe(64))"
把输出结果记下来。然后创建.env文件,里面要替换三样东西:penpot.example.com换成你的域名,admin@example.com换成你的邮箱,GENERATED_SECRET_KEY换成刚才生成的密钥,数据库密码也要设一个足够强的。
环境文件里几个配置值得单独说。版本号写PENPOT_VERSION=2.17.0;PENPOT_PUBLIC_URI必须和域名一致,且走 HTTPS;请求体大小限制设成 350 MiB,对应367001600这个数值。
功能开关由PENPOT_FLAGS控制。这套配置开了自助注册和密码登录,同时关掉了邮箱验证——这样你不需要外部邮件服务器就能建出第一个账号,另外还启用了用于命令行管理的 PREPL 服务。
关掉邮箱验证的代价
这里有个必须提醒的点:disable-email-verification意味着任何访客都能不确认邮箱就注册。如果这是面向公网的生产实例,正确做法是配置真实的 SMTP 服务商,去掉这个开关,并在PENPOT_FLAGS里加上enable-smtp,让新账号和邀请都必须经过邮件验证。
环境文件里还预留了 SMTP 相关配置,默认是注释状态,包括发件地址、回复地址、主机、端口、用户名、密码以及 TLS/SSL 开关。
用 Docker Compose 把整套栈拉起来
这套栈会同时运行 Penpot 的前端、后端、导出器容器,加上 PostgreSQL、Valkey,以及作为反向代理的 Traefik。Traefik 负责终止 TLS,并把配置好的域名路由到前端。整体配置基于 Penpot 官方的 Docker Compose 方案。
创建docker-compose.yaml后,几个关键点如下:
- Traefik 用
traefik:v3.7.9,暴露 80 和 443 端口,把 80 的流量重定向到 443,并通过 HTTP 挑战申请 Let's Encrypt 证书,证书存在/letsencrypt/acme.json - 前端镜像为
penpotapp/frontend,挂载penpot_assets卷到/opt/data/assets,依赖后端和导出器,通过标签声明路由规则和 8080 端口。 - 后端镜像为
penpotapp/backend,同样挂载素材卷,依赖 PostgreSQL 和 Valkey 达到健康状态后才启动。 - 导出器镜像为
penpotapp/exporter,依赖 Valkey 健康。 - PostgreSQL 用
postgres:15,停止信号设为 SIGINT,健康检查用pg_isready,间隔 2 秒。
所有服务都接在同一个penpot网络上,前端、后端、导出器统一通过env_file读取.env。素材存储后端设为文件系统,目录指向/opt/data/assets;Valkey 的连接串是redis://penpot-valkey/0;导出器的内部连接指向http://penpot-frontend:8080。
把文件保存好,用 Docker Compose 启动,等容器就绪后,通过配置的域名访问,就能用 HTTPS 打开自托管的 Penpot。接下来建团队、建项目,走一遍从设计到原型的完整流程,一个跑在自己服务器上的协作设计环境就算落地了。
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.