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:

bash 复制代码
curl -fsSL https://get.docker.com | sh
sudo usermod -aG docker $USER
newgrp docker
docker --version && docker compose version

获取官方 Docker Compose 配置

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

bash 复制代码
mkdir -p /opt/penpot
cd /opt/penpot

# 下载官方 docker-compose.yaml
curl -o docker-compose.yaml \
  https://raw.githubusercontent.com/penpot/penpot/main/docker/images/docker-compose.yaml

# 下载配置文件
curl -o config.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 关键部分如下:

yaml 复制代码
version: "3.5"

networks:
  penpot:

volumes:
  penpot_postgres_v15:
  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 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=false

  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-redis:
    image: redis:7
    restart: always
    networks:
      - penpot

  penpot-postgres:
    image: postgres:15
    restart: always
    volumes:
      - penpot_postgres_v15:/var/lib/postgresql/data
    networks:
      - penpot
    environment:
      - POSTGRES_INITDB_ARGS=--data-checksums
      - POSTGRES_DB=penpot
      - POSTGRES_USER=penpot
      - POSTGRES_PASSWORD=penpot_password

关键环境变量说明

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

Caddy 反向代理配置

bash 复制代码
mkdir -p /opt/penpot/caddy

创建 /opt/penpot/caddy/Caddyfile

caddyfile 复制代码
penpot.yourdomain.com {
    reverse_proxy penpot-frontend:80
}

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

yaml 复制代码
  caddy:
    image: caddy:2-alpine
    restart: unless-stopped
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./caddy/Caddyfile:/etc/caddy/Caddyfile
      - caddy_data:/data
      - caddy_config:/config
    networks:
      - penpot
    depends_on:
      - penpot-frontend

同时在 volumes 块添加:

yaml 复制代码
volumes:
  caddy_data:
  caddy_config:

启动服务

bash 复制代码
cd /opt/penpot
docker compose up -d

# 监控启动过程(后端启动较慢,约 60-90 秒)
docker compose logs -f penpot-backend

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


初始设置

注册管理员账号

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

配置 SMTP(团队邀请必需)

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

yaml 复制代码
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」下载

常用运维命令

bash 复制代码
# 查看所有服务状态
docker compose ps

# 备份 PostgreSQL 数据
docker exec penpot-postgres pg_dump -U penpot penpot > penpot-backup-$(date +%Y%m%d).sql

# 恢复备份
docker exec -i penpot-postgres psql -U penpot penpot < penpot-backup-20260517.sql

# 更新到最新版本
docker compose pull && docker compose up -d

# 查看后端日志
docker compose logs -f penpot-backend

总结

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

相关推荐
黑巧克力可减脂14 小时前
开源AI大模型统一网关CrossLink部署实战:LiteLLM轻量化替代方案
人工智能·开源
ftpeak15 小时前
TorchEasyRec:阿里巴巴开源的推荐系统深度学习框架详解
人工智能·深度学习·ai·开源·ai编程·ai开发
Niliuershangba16 小时前
ChestnutCMS 栗子内容管理系统:从入门到模板开发实战
java·git·开源·gitlab·github·开源软件·gitcode
alphageek817 小时前
FFmpeg:开源多媒体处理工具集合
其他·ffmpeg·开源
darkb1rd17 小时前
9arm-skills: 打造模块化 AI 技能实战指南
开源·github·好物分享
跨境数据猎手18 小时前
跨境电商系统开源PHP多语言架构拆解(上)
架构·开源·php
该昵称用户已存在18 小时前
开源能源数字底座:MyEMS 在能碳数据治理与建模中的架构设计
开源·能源
sbjdhjd18 小时前
03(中)| K8s控制器:DaemonSet+Job+CronJob 逐行解析与生产落地
运维·笔记·docker·云原生·容器·kubernetes·开源
阿里云云原生18 小时前
数据孤岛引发“语义割裂”?阿里云开源 UModel 破解企业 AI 落地底层障碍
人工智能·阿里云·开源·可观测·umodel