当前位置: 首页 > news >正文

Penpot:开源 Figma 替代,自建设计协作工具

Penpot:开源 Figma 替代,自建设计协作工具

Figma 的订阅费用对独立开发者和小型团队来说是一笔不小的开支,而且所有设计资产都存储在第三方服务器上。Penpot 是一款完全开源的设计与原型制作工具,支持实时多人协作,基于 SVG 标准渲染,可完全自托管。它提供了媲美 Figma 的核心功能:矢量编辑、组件库、原型链接、开发者标注面板,是团队自建设计工具栈的理想选择。

本文将详细介绍如何在自己的服务器上部署 Penpot,完成初始配置,并带你体验核心设计工作流。


服务器配置

Penpot 的后端采用 Clojure 编写,同时包含 Node.js 导出服务,整体内存占用较大。推荐以下配置:

  • 机型:4 核 8GB(Clojure 后端 + Node.js 导出服务 + PostgreSQL,内存需求较高)
  • 系统:Ubuntu 22.04 LTS
  • 磁盘:40GB 以上(设计文件和导出资源会持续增长)

推荐使用 雨云服务器 部署,注册填优惠码2026off领 5 折优惠券,4 核 8GB 机型性价比出色,完全满足 Penpot 的运行需求。

安装 Docker 和 Docker Compose:

curl-fsSLhttps://get.docker.com|shsudousermod-aGdocker$USERnewgrpdockerdocker--version&&dockercompose version

获取官方 Docker Compose 配置

Penpot 官方在 GitHub 提供了完整的 Docker Compose 配置,直接使用官方配置是最稳妥的部署方式:

mkdir-p/opt/penpotcd/opt/penpot# 下载官方 docker-compose.yamlcurl-odocker-compose.yaml\https://raw.githubusercontent.com/penpot/penpot/main/docker/images/docker-compose.yaml# 下载配置文件curl-oconfig.env\https://raw.githubusercontent.com/penpot/penpot/main/docker/images/config.env

Docker Compose 服务说明

官方 Compose 包含以下服务:

  • penpot-frontend:基于 Nginx 的前端服务,用户通过浏览器访问此服务
  • penpot-backend:Clojure 编写的核心后端,处理设计文件存储、用户认证、团队协作
  • penpot-exporter:Node.js 编写的导出服务,负责将设计导出为 PNG/SVG/PDF
  • penpot-redis:用于实时协作的消息队列和缓存
  • penpot-postgres:存储用户数据、设计文件元数据

完整的docker-compose.yaml关键部分如下:

version:"3.5"networks:penpot:volumes:penpot_postgres_v15:penpot_assets:services:penpot-frontend:image:penpotapp/frontend:latestrestart:alwaysports:-9001:80volumes:-penpot_assets:/opt/data/assetsdepends_on:-penpot-backend-penpot-exporternetworks:-penpotenvironment:-PENPOT_FLAGS=enable-login-with-passwordpenpot-backend:image:penpotapp/backend:latestrestart:alwaysvolumes:-penpot_assets:/opt/data/assetsdepends_on:-penpot-postgres-penpot-redisnetworks:-penpotenvironment:-PENPOT_FLAGS=enable-registration enable-login-with-password disable-email-verification-PENPOT_SECRET_KEY=your-very-long-secret-key-here-PENPOT_PUBLIC_URI=https://penpot.yourdomain.com-PENPOT_DATABASE_URI=postgresql://penpot-postgres/penpot-PENPOT_DATABASE_USERNAME=penpot-PENPOT_DATABASE_PASSWORD=penpot_password-PENPOT_REDIS_URI=redis://penpot-redis/0-PENPOT_ASSETS_STORAGE_BACKEND=assets-fs-PENPOT_STORAGE_ASSETS_FS_DIRECTORY=/opt/data/assets-PENPOT_TELEMETRY_ENABLED=falsepenpot-exporter:image:penpotapp/exporter:latestrestart:alwaysnetworks:-penpotenvironment:-PENPOT_PUBLIC_URI=http://penpot-frontend-PENPOT_REDIS_URI=redis://penpot-redis/0penpot-redis:image:redis:7restart:alwaysnetworks:-penpotpenpot-postgres:image:postgres:15restart:alwaysvolumes:-penpot_postgres_v15:/var/lib/postgresql/datanetworks:-penpotenvironment:-POSTGRES_INITDB_ARGS=--data-checksums-POSTGRES_DB=penpot-POSTGRES_USER=penpot-POSTGRES_PASSWORD=penpot_password

关键环境变量说明

变量说明
PENPOT_FLAGSenable-registration允许用户注册;disable-email-verification跳过邮件验证(测试用);enable-login-with-password启用密码登录
PENPOT_PUBLIC_URI外部可访问的域名,必须与实际访问地址一致
PENPOT_SECRET_KEY用于 JWT 签名,必须设置强随机值:openssl rand -hex 64

Caddy 反向代理配置

mkdir-p/opt/penpot/caddy

创建/opt/penpot/caddy/Caddyfile

penpot.yourdomain.com { reverse_proxy penpot-frontend:80 }

docker-compose.yaml中追加 Caddy 服务:

caddy:image:caddy:2-alpinerestart:unless-stoppedports:-"80:80"-"443:443"volumes:-./caddy/Caddyfile:/etc/caddy/Caddyfile-caddy_data:/data-caddy_config:/confignetworks:-penpotdepends_on:-penpot-frontend

同时在 volumes 块添加:

volumes:caddy_data:caddy_config:

启动服务

cd/opt/penpotdockercompose up-d# 监控启动过程(后端启动较慢,约 60-90 秒)dockercompose logs-fpenpot-backend

出现Server started日志后,访问https://penpot.yourdomain.com即可看到登录界面。


初始设置

注册管理员账号

首次访问时,点击「Create new account」注册账号。由于我们设置了disable-email-verification,注册后无需邮件验证即可直接登录(生产环境建议配置 SMTP 并移除此 flag)。

配置 SMTP(团队邀请必需)

若需要通过邮件邀请团队成员,需在penpot-backend中配置 SMTP:

environment:-PENPOT_SMTP_ENABLED=true-PENPOT_SMTP_HOST=smtp.youremail.com-PENPOT_SMTP_PORT=587-PENPOT_SMTP_USERNAME=noreply@yourdomain.com-PENPOT_SMTP_PASSWORD=your_smtp_password-PENPOT_SMTP_TLS=true-PENPOT_SMTP_FROM=noreply@yourdomain.com

创建团队与项目

登录后进入主界面:

  1. 创建团队:点击左侧「+」图标,选择「New team」,输入团队名称(如「设计团队」),点击「Create new team」
  2. 创建项目:在团队主页点击「New project」,输入项目名称(如「移动端 App 设计」)
  3. 创建文件:在项目中点击「New file」,双击文件名可重命名

基础设计工作流

画布基本操作

进入设计文件后,熟悉以下基本操作:

快捷键功能
F创建 Frame(画板,类似 Figma 的 Frame)
R矩形工具
O椭圆工具
T文字工具
P钢笔工具(矢量路径)
Ctrl+G编组选中元素
Ctrl+Z撤销

创建基础界面元素

1. 按 F 选择 Frame 工具,在画布拖拽创建 375×812 的 Frame(iPhone 尺寸) 2. 在右侧面板选择 Frame 预设(iPhone 14、Android 等) 3. 按 R 在 Frame 内创建矩形作为导航栏背景 4. 在右侧「Fill」面板设置颜色(#1A73E8) 5. 按 T 添加文字,设置字体为 PingFang SC、字号 18、颜色白色 6. 使用「Constraints」面板设置元素的响应式约束

组件系统

Penpot 的组件系统类似 Figma 的 Components:

  1. 选中一个已设计好的按钮元素
  2. 右键 → 「Create main component」
  3. 组件出现在左侧「Assets」面板的「Components」分类下
  4. 将组件从 Assets 面板拖入画布即可创建实例
  5. 双击组件实例可进入编辑模式,修改会同步到所有实例

原型链接

切换到顶部工具栏的「Prototype」标签:

  1. 选中一个按钮元素
  2. 点击右侧「Prototype」面板中的「+」
  3. 将连线拖到目标 Frame
  4. 设置交互类型(Click、Hover 等)和动画效果
  5. 点击右上角「Play」按钮进入预览模式,即可测试交互流程

开发者标注面板

Penpot 内置「Inspect」面板,无需导出即可给开发者提供标注信息:

  1. 打开设计文件分享链接(右上角「Share」)
  2. 查看者可在右侧切换到「Inspect」标签
  3. 点击任意元素即可查看:
    • 精确的宽高、位置坐标
    • 颜色(HEX/RGB/HSL)
    • 字体属性(字号、行高、字重)
    • 自动生成的 CSS 样式代码

邀请团队成员

  1. 进入团队设置页(团队名旁的「…」菜单)
  2. 点击「Members」→「Invite people」
  3. 输入成员邮箱,选择角色(Admin / Editor / Viewer)
  4. 点击「Send invitation」,对方收到邮件后点击链接即可加入

注意:邀请功能必须配置 SMTP 才能正常使用。


版本历史

Penpot 支持类似 Git 的版本历史功能:

  • 右键文件名 → 「Show history」可查看所有自动保存的版本
  • 点击任意历史版本可预览该版本的设计状态
  • 支持从历史版本恢复

导出设计资产

选中任意元素或 Frame,在右侧「Design」面板底部:

  1. 点击「Export」区域的「+」按钮
  2. 选择格式:PNG、SVG、PDF
  3. 设置倍率(1x、2x、3x)
  4. 点击「Export」下载

常用运维命令

# 查看所有服务状态dockercomposeps# 备份 PostgreSQL 数据dockerexecpenpot-postgres pg_dump-Upenpot penpot>penpot-backup-$(date+%Y%m%d).sql# 恢复备份dockerexec-ipenpot-postgres psql-Upenpot penpot<penpot-backup-20260517.sql# 更新到最新版本dockercompose pull&&dockercompose up-d# 查看后端日志dockercompose logs-fpenpot-backend

总结

Penpot 为团队提供了一个完全可控的设计协作环境,无需支付 Figma 的高额订阅费,且所有设计资产存储在自己的服务器上。4 核 8GB 的配置能够支撑 10-20 人的设计团队同时协作。无论是个人项目还是企业内网部署,Penpot 都是 Figma 的有力替代方案。

http://www.jsqmd.com/news/883964/

相关文章:

  • 如何快速上手SoundMind:10分钟完成音频逻辑推理模型训练
  • ClojureDocs性能优化技巧:5个关键策略提升文档网站响应速度 [特殊字符]
  • 工程师实测:AU-48 语音模组,降噪消回音直接 “开挂”
  • DeepSeek EDA落地难题全解析:3类高频故障诊断流程与7步标准化修复法
  • 抖音下载器深度解析:零基础轻松批量下载无水印视频
  • 从《原神》到独立游戏:拆解Cinemachine如何帮你实现电影级运镜效果
  • fiddle的手机抓包
  • 开源Mini SiPM驱动板设计:从高压偏置到脉冲处理的核探测前端方案
  • 收藏!2026最新大模型应用开发秋招面经,小白程序员上岸必备干货
  • 网盘直链解析技术:LinkSwift如何重塑文件传输效率边界
  • Photoshop-CC2022-Linux疑难解答:GPU加速与Vulkan兼容性问题终极指南
  • Windows Subsystem for Android 深度解析:在Windows 10上的完整技术实现
  • 5大核心功能掌握HandheldCompanion:Windows掌机终极控制伴侣
  • 开源合规生死线,DeepSeek协议识别错误率高达63%?2024企业级扫描避坑清单全公开
  • KCN-GenshinServer终极指南:5分钟搭建专业级原神私服的完整解决方案
  • DIY电池供电电容表:从原理到实践,打造现场诊断利器
  • BlenderKit插件终极指南:在Blender中高效获取3D资源的完整教程
  • 3步解锁:H5-Dooring可视化编辑器打造专业级H5页面
  • 免费获取百度网盘真实下载链接:告别限速的终极解决方案
  • Linux命令:perf
  • 计算机科学论文降AI工具免费推荐:2026年计算机毕业论文知网AIGC超标4.8元一次过完整方案
  • 广州白云企业搬家选哪家?广州家盛搬家,老兵铁军铸就专业搬迁标杆 - 广州搬家老班长
  • 暗黑破坏神2存档编辑器:d2s-editor免费可视化编辑终极指南
  • AndroidStudio中文语言包在企业开发中的应用:团队协作、统一环境与最佳实践
  • eqMac技术架构解析:如何实现macOS系统级音频处理
  • 沈阳大润发购物卡回收专业指南 - 购物卡回收找京尔回收
  • PID调参太头疼?试试单神经元自适应PID,让控制器自己学习(附Python/Matlab对比)
  • 如何用BiliBiliCCSubtitle一键搞定B站字幕下载与转换:5步实现自动化字幕处理
  • PagerLayoutManager常见问题解决方案:RecyclerView高度设置与数据刷新终极指南 [特殊字符]
  • QKeyMapper完整教程:Windows免费按键映射工具的终极指南