尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

Penpot Docker 部署:从一条命令到生产可用的 5 处配置

Penpot Docker 部署:从一条命令到生产可用的 5 处配置 Penpot Docker 部署从一条命令到生产可用的 5 处配置【免费下载链接】penpotPenpot: The open-source design platform for Product teams that need scalable collaboration.项目地址: https://gitcode.com/GitHub_Trending/pe/penpotPenpot 是开源的设计协作平台设计稿可直接产出代码。本文带你从一台空服务器走到一个对外提供服务的 Penpot 实例覆盖 Docker 拉起、生产配置、反代、备份与升级。熟练后 20 分钟一轮首次操作留 30 分钟余量。 花 2 分钟判断它值不值得你部署Penpot 主体代码采用 MPL 2.0 协议自托管、二开、商用都免费。它和 Figma 类工具的最大差异在代码出口同一窗口里能拿到设计对应的 CSS 和 SVG设计稿不用再翻译一遍。自托管意味着设计资产全部落在你自己的 PostgreSQL 和对象存储里而不是别人的机房。团队、评论、设计库是内建能力插件 API 和 Webhooks 可以接你自己的自动化流程。技术栈是纯 Web现代浏览器直接打开团队成员零客户端安装。 动手前 30 秒自检依赖组件最低版本最低内存磁盘空间支持的 OSDocker ComposeDocker 20.10 / Compose 2.04 GB生产建议 8 GB10 GBLinux / macOS / Windowsdocker --version # 应输出 20.10 或更高 docker compose version # 应输出 v2.x free -h df -h / # 内存 ≥4GB根分区 ≥10GB 空闲三条命令都达标再往下走不达标先解决环境否则后面对象存储和数据卷都会出问题。 一条命令跑起来最快的启动路径只有四步compose 文件仓库里已经备好了生产模板git clone https://gitcode.com/GitHub_Trending/pe/penpot # 拉取部署文件 cd penpot cp docker/images/docker-compose.yaml docker-compose.yaml # 复制生产 compose 模板 PENPOT_VERSION2.16 docker compose -p penpot up -d # 启动全部服务启动后用两种方式验证docker compose ps # 6 个服务全部 Up curl -s -o /dev/null -w %{http_code} localhost:9001 # 应返回 200浏览器打开 http://localhost:9001应看到 Penpot 登录页。如果你的目标是 Kubernetes 或源码开发docker/devenv目录里有对应路径本文不展开。⚙ 上线前必须改的 5 处配置改完每一项都重启一次docker compose up -d会重建变更过的容器。1. 安全密钥PENPOT_SECRET_KEY模板里是明文的change-this-insecure-key会话和邀请令牌都由它派生泄露即可伪造登录态。x-secret-key: penpot-secret-key PENPOT_SECRET_KEY: secrets.token_urlsafe(64) 的输出生成python3 -c import secrets; print(secrets.token_urlsafe(64))。重启后重新登录一次属正常现象。2. 数据库口令默认penpot/penpot全网公开端口一旦暴露就是裸奔。PENPOT_DATABASE_PASSWORD: 自定义强口令 # penpot-postgres 段的 POSTGRES_PASSWORD 同步修改两边必须一致不一致 backend 会循环重启。3. 对象存储后端默认 fs 后端把文件放在单机的penpot_assets卷换机器就是迁移S3 后端可水平扩展且天然有冗余生产建议 B。# 方案 A本地磁盘 PENPOT_OBJECTS_STORAGE_BACKEND: fs PENPOT_OBJECTS_STORAGE_FS_DIRECTORY: /opt/data/assets # 方案 BS3 兼容存储 PENPOT_OBJECTS_STORAGE_BACKEND: s3 PENPOT_OBJECTS_STORAGE_S3_ENDPOINT: https://s3.example.com4. 邮件服务注册确认和团队邀请全靠邮件默认指向内置的 mailcatch收不到真邮件。PENPOT_SMTP_DEFAULT_FROM: no-replyyour-domain.com PENPOT_SMTP_HOST: smtp.example.com PENPOT_SMTP_PORT: 587 PENPOT_SMTP_USERNAME: xxx PENPOT_SMTP_PASSWORD: xxx PENPOT_SMTP_TLS: true发一封注册邮件到http://localhost:1080mailcatch 面板之外真邮箱能收到说明配置生效。5. 请求体大小上限默认 350MB多数场景够用如果你反代层限制了 body上传会 413三层反代、frontend、backend要设成同一个值。PENPOT_HTTP_SERVER_MAX_BODY_SIZE: 367001600 PENPOT_HTTP_SERVER_MAX_MULTIPART_BODY_SIZE: 367001600 三个可选开关按需打开第三方登录。团队有统一身份源时比密码省事。往PENPOT_FLAGS追加login-with-google仓库 compose 文件头部列了全部可用 flagGitHub、GitLab、LDAP、OIDC 都有再配对应的 client id/secret 即可。重启后登录页应出现对应 OAuth 按钮。Webhooks。往PENPOT_FLAGS追加webhooks然后在团队设置里配置回调地址文件变更、成员变动等事件会 POST 到你的系统适合接 CI 或通知渠道。API 令牌。在我的账户 → 访问令牌生成令牌后脚本就能走 RPC 接口自动化导出、建文件等操作curl -X POST https://penpot.example.com/api/rpc/command/create-access-token \ -H Content-Type: application/json -d {name:ci}三个开关都是加法操作不动也可以随时后补。 生产环境配置HTTPS、资源上限、健康检查HTTPS 不是可选项剪贴板等浏览器 API 在非安全上下文直接失效Penpot 会缺一块能力。反代只贴核心段证书配置按你的域名填server { listen 443 ssl; client_max_body_size 350M; location / { proxy_pass http://localhost:9001; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection upgrade; proxy_set_header Host $host; proxy_set_header X-Forwarded-Proto https; } }WebSocket 的 Upgrade 两行必须保留否则多人协作的实时通知会断。资源上限防止单个容器吃光宿主机backend 是大头JVMservices: penpot-backend: deploy: resources: { limits: { cpus: 2, memory: 4G } }健康检查直接沿用 compose 模板里已有的两条配合depends_on保证 backend 在依赖就绪后才启动penpot-postgres: healthcheck: test: [CMD-SHELL, pg_isready -U penpot] interval: 10s penpot-valkey: healthcheck: test: [CMD-SHELL, valkey-cli ping | grep PONG] interval: 10sdocker compose ps里状态列显示healthy即通过。出问题时别只翻日志前端账户 → 系统信息能导出完整报告包含版本、配置和资源快照 踩坑速查4 个高频问题Q1backend 反复重启日志报连不上数据库。诊断docker compose ps penpot-postgres docker compose logs penpot-postgres --tail20解法等 postgres 变 healthy 即可卡住就docker compose restart penpot-postgres多半是口令两边不一致。Q2前端白屏控制台 404。诊断docker compose ps; docker compose logs penpot-frontend --tail30解法九成是反代只放了/没放行静态资源子路径或浏览器缓存了旧版本硬刷新一次。Q3大文件上传被 413 拒绝。诊断检查反代client_max_body_size是否小于 350M。 解法反代与PENPOT_HTTP_SERVER_MAX_BODY_SIZE设成同一个值后重启。Q4邮件发不出。诊断docker compose logs penpot-backend | grep -i smtp解法确认 SMTP 凭据与 TLS 开关一致且服务器能出网到 587 端口防火墙常是元凶。 备份与升级顺序不能错备份只需两样数据库 dump 和资产卷打包。mkdir -p /backup/penpot docker compose exec penpot-postgres pg_dump -U penpot penpot /backup/penpot/db_$(date %F).sql docker run --rm -v penpot_penpot_assets:/a -v /backup/penpot:/b alpine tar czf /b/assets_$(date %F).tar.gz -C /a .升级五步顺序不能错执行上面的备份两份文件都生成后再动服务。PENPOT_VERSION2.17.1 docker compose pulldocker compose downPENPOT_VERSION2.17.1 docker compose up -ddocker compose logs --tail100 penpot-backend确认无异常堆栈、ps全绿。跳过备份直接升级等于拿数据赌运气。你刚把 Penpot 从空机器一路做到生产可用拉起、改配置、上反代、留了备份。下一步对照 docs/technical-guide/configuration.md 把每处环境变量读一遍。密钥换掉、备份留存这套实例就是你的了。【免费下载链接】penpotPenpot: The open-source design platform for Product teams that need scalable collaboration.项目地址: https://gitcode.com/GitHub_Trending/pe/penpot创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表