
Penpot 自托管部署指南:几步命令把开源设计平台跑起来【免费下载链接】penpotPenpot: The open-source design platform for Product teams that need scalable collaboration.项目地址: https://gitcode.com/GitHub_Trending/pe/penpotPenpot 是一款面向产品团队的开源设计协作平台,支持 Docker 部署自托管。这篇指南带你从零把 Penpot 跑起来:先用一条 docker compose 命令完成首次启动,再覆盖日常启停、版本升级、创建用户,最后给出生产环境 HTTPS、反向代理和数据备份的完整做法。动手前先确认三样东西Penpot 的 Docker 部署本身不难,但它默认你手里已经有三块基础:Docker 与 Docker Compose:整套平台由 frontend、backend、postgres、valkey、exporter 等多个容器组成,全靠 compose 一起编排DNS 管理:自托管上线意味着你要自己控制域名解析反向代理经验:生产环境的 HTTPS 和 WebSocket 转发都要靠它先花十秒钟确认一下工具是否就位:docker --version docker compose version两条命令都能正常输出版本号就可以开工。如果这三样里有任何一项你不熟,建议直接用 Penpot 官方 SaaS,或者找一键部署方案,别硬扛。第一次启动:拉一份 compose 文件,一条命令起服务Penpot 官方提供一份标准的 docker-compose.yaml,从官方文档页下载到当前目录即可;如果你本地已经有 Penpot 仓库,docker/images/docker-compose.yaml 就是同一份,拷出来直接用。拿到文件后,一条命令启动全部服务:docker compose -p penpot -f docker-compose.yaml up -d等容器全部就绪,浏览器打开 http://localhost:9001,看到 Penpot 的界面就说明 Docker 部署成功了。顺手把版本钉死上面那条命令默认拉取最新镜像,试水没问题;正式环境一定要固定版本,不然哪天上游一更新,行为就跟着漂移了:PENPOT_VERSION2.4.3 docker compose -p penpot -f docker-compose.yaml up -d 记住这个习惯:生产环境的启动命令里永远显式带上PENPOT_VERSION,不依赖 latest。日常管理:启停、升级和建用户停掉整套服务docker compose -p penpot -f docker-compose.yaml down想再跑起来就重新执行up -d。数据都存在 Docker 卷里,停掉容器不会丢任何东西。升级版本升级就两步:先拉新镜像,再重启容器。docker compose -f docker-compose.yaml pull docker compose -p penpot -f docker-compose.yaml up -d⚠️ 一句提醒:尽量按版本顺序逐个升级,别一口气跳好几个大版本;尤其从 1.x 升到 2.0 时,数据迁移要特别留意,跳版本有丢数据的风险。不进浏览器,直接在命令行建用户部署完第一件事通常是给自己建个账号。Penpot 后端自带 manage.py 管理脚本,一条命令进容器执行:docker exec -ti penpot-penpot-backend-1 python3 manage.py create-profile容器名不一定叫penpot-penpot-backend-1,compose 项目不同名字会变。拿不准就先docker ps看一眼,把真实容器名填进去。上生产前先做这三件事HTTPS 必须开,不是可选项生产环境不启用 HTTPS,剪贴板等浏览器 API 会直接罢工,部分功能不可用。流程很简单:申请有效证书 → 用反向代理终结 TLS → 确认 WebSocket 能正常建立连接。反向代理怎么配两个常用方案,按你环境里已有的选:NGINX:server { listen 443 ssl; server_name penpot.example.com; # 与 docker-compose 中的请求体上限保持一致 client_max_body_size 30M; location /ws/ { proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection upgrade; proxy_pass http://localhost:9001; } location / { proxy_set_header X-Forwarded-Proto $scheme; proxy_pass http://localhost:9001; } }Caddy:penpot.example.com { reverse_proxy :9001 tls /path/to/cert.pem /path/to/key.pem }注意client_max_body_size要和 compose 文件里PENPOT_HTTP_SERVER_MAX_BODY_SIZE的取值对齐,不然传大图时代理会先于应用把请求拒掉。备份两个数据卷Penpot 的数据分两块,备份策略两块都要覆盖:penpot_postgres_data:用户、团队、项目等全部核心数据penpot_assets_data:用户上传的图片、文件等资源用 alpine 容器打 tar 包,简单可靠:# 数据库 docker run --rm -v penpot_postgres_data:/volume -v $(pwd):/backup alpine tar cvf /backup/db-backup.tar /volume # 资源 docker run --rm -v penpot_assets_data:/volume -v $(pwd):/backup alpine tar cvf /backup/assets-backup.tar /volume卷名以你机器上docker volume ls实际显示为准。卡住了看这里:排错清单按顺序过一遍,大部分问题能自己定位:看日志:docker compose logs,重点盯 backend 和 postgres 的输出看状态:docker compose ps,哪个容器没进入 running 状态就是头号嫌疑数据库连不上:单独查 Postgres 容器日志,常见原因是初始化没跑完页面白屏或接口报错:打开浏览器控制台,看是静态资源、API 还是 WebSocket 哪类请求挂了容器名对不上:compose 项目名不同,容器名会跟着变,先docker ps确认再进容器还有一个高频坑:compose 文件默认带了disable-email-verification、disable-secure-session-cookies这类开发向 flag,文件头部注释写得很清楚——一旦要把 Penpot 暴露到公网,先把这两个 flag 去掉,并配好真实的 SMTP 服务。【免费下载链接】penpotPenpot: The open-source design platform for Product teams that need scalable collaboration.项目地址: https://gitcode.com/GitHub_Trending/pe/penpot创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考