使用 Lima 在 macOS 上搭建 Ente 本地开发环境:Museum 服务端与 Paste Web 应用

发布时间:2026/9/12 17:00:54

使用 Lima 在 macOS 上搭建 Ente 本地开发环境:Museum 服务端与 Paste Web 应用 使用 Lima 在 macOS 上搭建 Ente 本地开发环境Museum 服务端与 Paste Web 应用【免费下载链接】ente End-to-end encrypted cloud for everything.项目地址: https://gitcode.com/GitHub_Trending/en/ente导读本篇技术指南介绍如何在 macOS 上使用 Lima 虚拟机搭建 Ente 的本地开发环境通过在 Lima 的 Docker 模板虚拟机中运行 Docker Compose 拉起 MuseumEnte 自托管服务端与 PostgreSQL 数据库再以 Node.js 容器启动 Ente Paste Web 应用最终实现localhost下的端到端开发联调。读完本文你将掌握 Lima 虚拟机管理、Museum 最小化配置、Docker Compose 启动服务端、容器内运行 Next.js 开发服务器以及 SSH 端口转发等一整套可复现的本地开发工作流。为什么用 LimamacOS 上的轻量 Linux 虚拟机LimaLinux Machines是 macOS 上的虚拟机管理工具它借助 QEMU/Apple Virtualization framework 提供接近原生的 Linux 环境并与 Docker CLI 无缝衔接——limactl start template://docker一条命令即可得到一个内置 Docker 的 Linux VM开发者可以像操作普通 Docker 主机一样在虚拟机内执行docker compose up。在 Ente 项目中Museum 服务端依赖 Linux 容器生态Go 构建镜像、Postgres、MinIO 对象存储而开发者的宿主机往往是 macOS因此把整套后端栈放进 Lima VM 是最直接、最接近生产环境的本地开发方式。官方开发文档 lima.md 给出的工作流可以概括为启动 Lima 的 docker 模板虚拟机在 VM 内克隆 Ente 仓库避免宿主机与 VM 之间挂载权限差异在 VM 内用 Docker Compose 启动 Museum Postgres在 VM 内用 Node 容器启动 Ente Paste Web 应用通过浏览器和 SSH 隧道访问联调。1. 启动 Lima 虚拟机首先通过 Docker 模板创建并启动 Lima 虚拟机limactl start template://dockertemplate://docker是 Lima 内置的 Docker 模板它会在 VM 中预装 Docker Engine 并配置好对应的 CLI 上下文。启动完成后验证是否能够进入 VM 并正常执行 shell 命令limactl shell docker /bin/bash -lc id uname -alimactl shell 实例名 命令是进入 Lima 实例执行命令的入口这里以docker作为实例名。成功后会输出当前用户身份id与内核信息uname -a确认 VM 可用。提示后续所有命令均通过limactl shell docker /bin/bash -lc ...在 VM 内执行-l表示登录 shell-c表示执行单条命令。2. 在 VM 内克隆仓库官方文档明确建议使用 VM 本地克隆而不是挂载宿主目录原因是避免宿主与虚拟机之间的文件系统挂载权限差异例如 Linux 与 macOS 的 UID/GID、文件权限语义、符号链接处理等差异limactl shell docker /bin/bash -lc cd ~ git clone https://github.com/ente/ente.git cd ente 克隆完成后仓库根目录包含server/Go 编写的 Museum 服务端与 Docker Compose 配置、web/Next.js 前端工作区、mobile/、desktop/、cli/、rust/等多个子项目本文工作流只涉及server/与web/apps/paste/。3. 启动 Museum Postgres3.1 创建最小化 museum.yaml进入server/目录创建一个最小化的museum.yaml配置文件并创建数据目录limactl shell docker /bin/bash -lc cd ~/ente/server touch museum.yaml mkdir -p data cat museum.yaml EOF apps: public-paste: http://localhost:3008 EOF sudo docker compose up -d --build 这段命令完成了三件事touch museum.yaml与mkdir -p data创建配置文件与数据目录。Museum 启动时会把当前工作目录下的museum.yaml作为配置来源之一data目录则用于存放本地运行时数据。写入apps.public-paste将公网 Paste 链接的基准端点指向http://localhost:3008即后面将要启动的 Paste Web 应用地址。关于apps配置的作用见 server/config/example.yaml 中apps一节的注释默认值是各服务的官方域名如 Paste 默认https://paste.ente.com自托管时需要显式指定本地地址。sudo docker compose up -d --build以后台模式构建并启动 Compose 服务。之所以使用sudo是因为 Lima docker 模板默认的 docker 命令需要通过 root 执行VM 内$USER通常不在 docker 组。3.2 Compose 栈里的服务组成在 server/config/compose.yaml 中定义了这套 Compose 栈的完整组成服务镜像/构建端口职责museum本地构建server/Dockerfile8080:8080Museum 主服务 / APIpostgrespostgres:15-trixie内部元数据数据库miniominio/minio3200:3200API3201Console默认不对外本地 S3 对象存储socatalpine/socat复用 museum 网络把容器内localhost:3200转发到 minioente-web本地构建web/Dockerfile3000–3010各 Web 应用开发模式几个值得注意的细节museum 依赖 postgres 健康检查depends_on中通过condition: service_healthy保证在 Postgres 就绪后才启动 museumPostgres 侧用pg_isready作为健康检查探针start_period: 30s、start_interval: 1s。MinIO 自动建桶minio 服务的post_start钩子会用mc客户端创建b2-eu-cen、wasabi-eu-central-2-v3、scw-eu-fr-v3三个桶这与 museum 配置中s3的三个 key 一一对应。socat 端口转发minio 容器与 museum 不在同一网络命名空间socat 以network_mode: service:museum挂进 museum 网络将localhost:3200转发到minio:3200从而让 museum 配置里的endpoint: localhost:3200可以直接访问 MinIO。ente-web 仅作为演示Compose 栈里自带了ente-web服务并暴露了3000–3010端口但 Lima 工作流更推荐用第 4 节的独立容器来跑 Paste以获得开发模式下的热重载与自定义环境变量。3.3 检查服务健康状态Museum 启动后通过内置的 ping 接口验证服务是否就绪limactl shell docker /bin/bash -lc curl -fsS http://localhost:8080/ping/ping是 Museum 暴露的轻量健康检查端点-f让 curl 在 HTTP 错误时失败退出、-sS静默但保留错误输出。返回内容即表示服务端已正常响应。该端点与server/中对外公开的 HTTP 层绑定在默认端口8080见 server/configurations/local.yaml 中http.port的注释默认 8080启用 TLS 时默认 443。3.4 关于 museum.yaml 与 .env 的完整说明进阶Lima 文档中的museum.yaml只写了apps.public-paste一项这是为了最小化演示。实际完整的自托管/开发配置可以参照两份仓库文件server/config/example.yaml完整的 museum 配置模板需要复制为museum.yaml放在config/compose.yaml旁边。核心区块包括db数据库连接host、port、name、user、password需与.env中的POSTGRES_*一致s3三个 MinIO/S3 桶的 key、secret、endpoint、region、bucketare_local_buckets: true表示本地 MinIOuse_path_style_urls: true表示使用路径风格 URL如http://localhost:3200/b2-eu-cen而不是子域名风格apps各 Web 应用的基准端点public-albums、embed-albums、public-locker、public-paste、cast、accounts、space、public-memories、legacy 等key/jwt预置的开发用固定密钥正式使用前应通过go run tools/gen-random-keys/main.go重新生成。server/config/example.env复制为.env包含POSTGRES_USER、POSTGRES_PASSWORD、POSTGRES_DB必须与 museum.yaml 的 db 段匹配、MINIO_ROOT_USER、MINIO_ROOT_PASSWORD必须与 museum.yaml 中每个 s3 桶的 key/secret 匹配以及ENTE_API_ORIGINWeb 应用访问的 Museum 端点本地为http://localhost:8080。配置加载顺序见 server/configurations/local.yaml 头部注释configurations/$ENVIRONMENT.yaml→credentials-file→ 当前目录museum.yaml→ENTE_*环境变量后加载的源覆盖先加载的源环境变量将嵌套与连字符替换为下划线如db.user→ENTE_DB_USER。4. 运行 Ente Paste Web 应用在另一个终端中启动 Paste Web 应用。它使用一个独立的 Node.js 容器将仓库的web/目录挂载为工作区limactl shell docker /bin/bash -lc sudo docker run --rm --name paste-dev \ -p 3008:3008 \ -v $HOME/ente/web:/workspace \ -w /workspace \ -e NEXT_PUBLIC_ENTE_ENDPOINThttp://localhost:8080 \ node:24-bookworm \ bash -lc npm ci npm exec --workspace paste -- next dev --webpack -p 3008 逐项拆解这条命令参数含义--rm容器退出后自动删除--name paste-dev容器名便于后续停止/删除-p 3008:3008将容器 3008 端口映射到 VM 的 3008 端口-v $HOME/ente/web:/workspace挂载 VM 内的仓库web/目录到容器/workspace-w /workspace工作目录设为/workspace-e NEXT_PUBLIC_ENTE_ENDPOINThttp://localhost:8080告诉前端后端 Museum API 的地址node:24-bookwormNode.js 24Debian bookworm 基础镜像npm ci按 lockfile 安装依赖npm exec --workspace paste -- next dev --webpack -p 3008以 webpack 模式启动 paste 工作区的 Next.js 开发服务器与 Web 仓库本身的开发脚本对照在 web/package.json 中定义了dev:paste脚本npm run build:paste-wasm npm exec --workspace paste -- next dev --webpack -p 3008Lima 容器里执行的是其核心等价命令省略了 wasm 预构建因为这里是源码挂载的开发场景。web/是一个 npm workspaces 单仓apps/*各 Next.js 应用与packages/*共享库与 wasm 包均在其中因此--workspace paste能精确定位到 web/apps/paste 应用。注意由于 Web 仓库中的构建脚本如build:paste还依赖 wasm 工作区ente-paste-wasm的预构建首次开发启动前若遇到 wasm 相关错误可在容器内先执行npm run build:paste-wasm再启动 dev server。5. 在浏览器中访问服务就绪后宿主浏览器即可访问两个端点Paste Web 应用http://localhost:3008Museum API 健康检查http://localhost:8080/ping端口不通时创建 SSH 隧道Lima 默认通过 SSH 与宿主通信若 VM 内服务监听的端口无法直接从宿主localhost访问取决于 Lima 的端口转发/网络配置可以创建 SSH 隧道手动转发ssh -F ~/.lima/docker/ssh.config \ -N \ -L 8080:127.0.0.1:8080 \ -L 3008:127.0.0.1:3008 \ lima-docker-F ~/.lima/docker/ssh.config使用 Lima 为docker实例生成的 SSH 配置含私钥路径、主机别名lima-docker等-N不执行远程命令仅建立转发-L 8080:127.0.0.1:8080/-L 3008:127.0.0.1:3008把宿主的 8080、3008 端口分别转发到 VM 内的对应端口。隧道建立后宿主的http://localhost:3008Paste与http://localhost:8080/pingMuseum即可访问。这也解释了为什么museum.yaml中apps.public-paste要配置为http://localhost:3008——Paste 应用会把分享链接指向该地址。6. 停止服务开发结束后按以下顺序清理limactl shell docker /bin/bash -lc cd ~/ente/server sudo docker compose down sudo docker rm -f paste-dev /dev/null 21 || true docker compose down停止并移除 Museum、Postgres、MinIO 等 Compose 服务命名卷postgres-data、minio-data默认保留数据不丢失docker rm -f paste-dev强制删除第 4 节的 Paste 开发容器|| true保证容器不存在时命令也不会报错中断。如果需要彻底释放 VM 资源还可以执行limactl stop docker关闭实例或limactl delete docker删除实例。附本工作流的关键文件索引以下仓库路径可供继续深入阅读官方 Lima 开发指南docs/docs/self-hosting/development/lima.mdCompose 服务编排server/config/compose.yamlMuseum 完整配置模板server/config/example.yaml环境变量模板server/config/example.envMuseum 配置加载顺序与全部参数说明server/configurations/local.yamlMuseum 多阶段构建镜像server/DockerfileWeb 工作区与 dev 脚本含各应用端口分配web/package.jsonPaste 应用源码与依赖web/apps/paste自托管总索引docs/docs/self-hosting/index.md这套工作流的核心价值在于以最少的配置一个museum.yaml片段 一条 Compose 命令 一个 Node 容器在 macOS 上还原出与生产一致的 Linux 容器化环境并让 Museum 与 Web 前端在本地localhost完成联调是 Ente 服务端与 Web 应用日常开发的推荐起点。【免费下载链接】ente End-to-end encrypted cloud for everything.项目地址: https://gitcode.com/GitHub_Trending/en/ente创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
延伸阅读

更多相关文章

2026/9/12 18:50:58

13-摄像头采集实战-预览编码录制与转码

摄像头采集实战:预览、编码、录制与转码 专栏:GStreamer C++ 从零到工程实战 第 14 篇 / 共 17 篇 识别摄像头能力并用 Caps 选择格式,通过 tee 与 queue 同时预览和录像,掌握发送 EOS、等待完成与安全收尾的正确顺序。 第 17 课:摄像头采集、编码、录制与转码 这一课把…

2026/9/12 18:50:58

8款实用AI写作辅助网站横向实测,本硕博论文避坑全攻略

前言:AI 写论文乱象频发,实测 8 款工具理清适配边界 每到毕业季,本科生、硕博生都会集中寻找 AI 论文辅助工具,市面各类写作软件层出不穷,但普遍存在几类硬伤:虚假参考文献、无法匹配本校格式、不支持公式代…

2026/9/12 18:50:58

别踩雷!不是所有 AI 都能写论文,2026 导师推荐工具盘点

每年毕业季,无数同学深陷论文难题:开题毫无思路、搭建框架耗费数日、初稿逻辑松散、查重标红泛滥、AI检测超标、格式反复被导师驳回。面对时间紧、任务重的现实压力,不少学生选择借助AI工具提升效率。然而,市面上通用型AI工具虽种…

2026/9/12 18:50:58

导师推荐!2026最新AI论文平台测评:这几款知网都认可

2026年真正好用的AI论文平台,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 一、…

2026/9/12 18:50:58

现在专业的AI论文写作软件有哪些品牌?深度用户实话实说

每到期末、毕业答辩、课题申报阶段,很多学子都会深陷论文难题:选题毫无头绪、大纲搭建逻辑混乱、正文撰写耗时长、参考文献格式出错、查重重复率偏高、AIGC检测告警、本校论文排版标准复杂。依靠纯人工从零开始撰写、一遍遍修改格式和降重,常…

2026/9/12 18:45:58

微信小程序云开发实战:情侣任务与积分商城从0到1

简介:面向微信小程序开发者和云开发初学者,这份源码实现了一款情侣互动小程序:双方通过发布任务、确认完成、赚取积分、商城兑换商品的闭环进行互动,并对积分增减做了防单方作弊限制,保证公平性。压缩包内共2008个文件…

2026/9/12 2:05:33

超人会飞不算本事:系统稳定依赖清晰规则与边界设计

开头先不绕弯子。“#斯坦李吐槽dc 所以超人是无缘无故会飞的嘛哈哈哈哈哈哈哈锤哥真是技术人才啊!#雷神 #复联”这类调侃式短标题,第一波冲击力在于它把两个宇宙的角色塞进同一个吐槽箱里,但细想一下就能发现,它真正碰到的根本不是…

2026/9/12 3:55:12

超人VS蜘蛛侠:拆解超级IP的影响力与传播方法论

把“蜘蛛侠 vs 超人”放在 CSDN 上聊,可能很多人第一反应是走错片场了。但如果把这两个角色看成“两个持续运营了 80 多年的文化产品”,你会发现,这场比较本质上是两个不同 IP 策略的长期结果对比:超人赢在定义了整个超级英雄题材…

2026/9/12 10:09:03

基于CNN的调制信号识别:MATLAB实现时频图分类实战

简介:本资源是一套面向通信工程与信号处理方向学习者、研究者的深度学习实践方案,聚焦调制信号自动检测与识别这一典型无线通信任务,解决传统方法依赖人工特征、低信噪比下性能下降等痛点。压缩包共12个文件(10.73MB)&…

2026/9/12 0:04:17

MATLAB仿生优化框架:长鼻浣熊算法多策略融合实现

简介:本资源是一份面向智能优化算法研究者与MATLAB初学者的仿生智能算法实践代码包,聚焦于长鼻浣熊优化算法(COA)的多策略改进与性能验证。针对传统COA易陷局部最优、收敛精度不足等问题,作者融合Circle映射初始化提升…

2026/9/12 0:04:17

【JAVA毕设源码分享】基于 JavaWeb 的校园一卡通管理系统的设计与实现 基于 JavaWeb 的校园卡业务管理系统(程序+文档+代码讲解+一条龙定制)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

2026/9/12 0:04:17

【JAVA毕设源码分享】基于 Java 的图书馆借阅管理平台的搭建与实现 基于 Java 的图书馆综合管理系统(程序+文档+代码讲解+一条龙定制)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

2026/9/12 6:29:36

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/12 14:32:17

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/12 6:37:43

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
咨询二维码