零基础掌握Earthworm容器化开发环境:从环境搭建到性能优化全指南
开发环境的三大痛点,你中招了吗?
作为开发者,你是否也曾经历过这些场景:
📌 "我在自己电脑上跑得好好的,怎么到你那里就报错了?" —— 环境配置不一致导致的"我这能跑"困境
⚙️ "光是安装PostgreSQL和Redis就花了一下午,还没开始写代码" —— 依赖服务部署繁琐,占用大量开发时间
⚠️ "Logto认证服务又连不上了,到底是哪个配置出了问题?" —— 第三方服务集成复杂,调试成本高
如果你遇到过以上任何一个问题,那么Earthworm的Docker容器化方案正是为你准备的解决方案。通过容器化技术(类似快递箱的独立运行环境),我们可以将开发环境搭建时间从几小时压缩到10分钟,让你专注于代码本身而非环境配置。
为什么选择Docker:传统开发环境VS容器化方案
| 环境类型 | 配置复杂度 | 一致性保障 | 部署效率 | 资源占用 |
|---|---|---|---|---|
| 传统开发环境 | 手动安装所有依赖,步骤繁琐 | 不同机器配置差异大,"在我这能跑" | 依赖文档手动操作,耗时1-2小时 | 直接占用本地系统资源,易冲突 |
| Docker容器环境 | 一条命令启动所有服务 | 完全一致的环境,消除"环境差异"问题 | 自动化部署,10分钟完成 | 容器隔离,资源可控,随时启停 |
Docker就像一个标准化的集装箱,把应用程序及其所有依赖打包成一个独立的"箱子",无论放到哪台机器上,都能以完全相同的方式运行。这就是为什么越来越多的开发团队选择容器化方案的核心原因。
Earthworm容器架构:服务关系与组件解析
Earthworm采用多容器协同架构,通过docker-compose.yml文件定义了一个完整的开发环境生态系统。
服务关系流程图
graph TD
A[前端应用] --> B[API服务]
B --> C[PostgreSQL数据库]
B --> D[Redis缓存]
B --> E[Logto认证服务]
E --> F[Logto专用数据库]
这个架构就像一家餐厅的运作系统:前端应用是顾客用餐区,API服务是厨房,数据库是食材仓库,Redis是厨师的工作台,而Logto认证则是餐厅的门禁系统。每个组件各司其职,通过标准化接口协同工作。
核心服务组件说明
| 服务名称 | 容器镜像 | 主要功能 | 端口映射 | 资源需求 |
|---|---|---|---|---|
| db | postgres:14-alpine | 主数据库,存储课程和用户数据 | 5433:5432 | 建议2GB内存 |
| redis | redis:5-alpine | 缓存服务,提升数据访问速度 | 6379:6379 | 建议512MB内存 |
| logto | svhd/logto:1.18.0 | 认证系统,处理用户登录和权限 | 3010:3010 | 建议1GB内存 |
| logtoPostgres | postgres:14-alpine | Logto专用数据库,存储认证相关数据 | 内部服务 | 建议1GB内存 |
环境搭建全流程:准备→执行→验证
阶段一:环境准备(检查清单)
在开始前,请确保你的系统满足以下要求:
| 依赖项 | 版本要求 | 验证命令 | 预期结果 |
|---|---|---|---|
| Docker | 24.0.0+ | docker --version |
显示Docker版本信息,如Docker version 24.0.5 |
| Node.js | v20+ | node --version |
显示Node.js版本,如v20.10.0 |
| pnpm | 8+ | pnpm -v |
显示pnpm版本,如8.15.0 |
| Git | 2.30+ | git --version |
显示Git版本,如git version 2.40.1 |
硬件配置建议:
- 内存:至少8GB(Docker容器同时运行时需占用约4GB内存)
- 磁盘空间:预留10GB以上(含镜像、数据库文件及项目依赖)
阶段二:执行部署(分步操作指南)
1. 获取项目代码
git clone https://gitcode.com/GitHub_Trending/ea/earthworm # 克隆代码仓库
cd earthworm # 进入项目目录
执行成功后,你会看到项目的文件结构,包括apps、packages等目录。
2. 安装项目依赖
corepack enable # 启用corepack,确保pnpm可用
pnpm install # 安装所有工作区依赖
成功标志:命令执行完成后,项目根目录会出现node_modules文件夹,且无错误提示。
3. 配置环境变量
# 配置后端环境变量
cp ./apps/api/.env.example ./apps/api/.env
# 配置前端环境变量
cp ./apps/client/.env.example ./apps/client/.env
需要重点关注的配置项(apps/api/.env):
DATABASE_URL=postgresql://postgres:password@localhost:5433/earthworm # 数据库连接地址
REDIS_URL=redis://localhost:6379 # Redis缓存连接地址
LOGTO_ENDPOINT=http://localhost:3010 # Logto认证服务地址
⚠️ 注意:这些配置必须与docker-compose.yml中定义的服务保持一致,否则会导致连接失败。
4. 初始化Logto认证数据
unzip logto_db_init_data.zip -d .volumes/ # 解压预置的Logto数据库初始化数据
成功标志:在项目根目录会生成.volumes/logto-postgres目录,包含初始化的数据库文件。
5. 启动Docker服务集群
pnpm docker:start # 启动所有依赖服务
这个命令会根据docker-compose.yml文件启动所有必要的服务。首次运行时,Docker会自动下载所需的镜像,可能需要几分钟时间。
验证服务状态:
docker compose ps # 查看容器运行状态
成功标志:所有服务的STATUS列都显示"Up"状态,如下所示:
NAME IMAGE COMMAND STATUS PORTS
earthworm_db_1 postgres:14-alpine "docker-entrypoint.s…" Up 5 minutes 0.0.0.0:5433->5432/tcp
earthworm_redis_1 redis:5-alpine "docker-entrypoint.s…" Up 5 minutes 0.0.0.0:6379->6379/tcp
earthworm_logto_1 svhd/logto:1.18.0 "sh -c 'npm run cli …" Up 5 minutes 0.0.0.0:3010->3010/tcp, 0.0.0.0:3011->3011/tcp
earthworm_logtoPostgres_1 postgres:14-alpine "docker-entrypoint.s…" Up 5 minutes 5432/tcp
6. 初始化应用数据库
pnpm db:init # 创建数据表结构
pnpm db:upload # 导入初始课程数据
成功标志:命令执行完成后无错误提示,显示数据导入成功信息。
7. 启动开发服务器
# 启动后端API服务(http://localhost:3000)
pnpm dev:serve &
# 启动前端Nuxt服务(http://localhost:3001)
pnpm dev:client
成功标志:
- 后端服务启动后显示"Application is running on: http://localhost:3000"
- 前端服务启动后显示"Listening on: http://localhost:3001"
阶段三:环境验证(功能确认)
应用访问验证
打开浏览器访问前端应用:http://localhost:3001,你应该能看到Earthworm的主界面:
界面中显示了英语学习的练习界面,包含中文提示和英文填空区域,顶部有进度条和导航按钮。
注册功能验证
点击页面右上角的"Log in"按钮,进入登录页面,然后点击"Create account"创建新账户:
成功标志:能够正常显示注册表单,输入信息后可以完成注册流程。
数据库连接验证
# 使用psql连接主数据库
psql -h localhost -p 5433 -U postgres earthworm
# 在数据库命令行中执行查询
SELECT COUNT(*) FROM courses; # 查询课程数量
成功标志:查询返回一个大于0的数字,表示初始课程数据已成功导入。
环境验证清单
| 验证项目 | 验证方法 | 预期结果 |
|---|---|---|
| 前端服务 | 访问http://localhost:3001 | 显示Earthworm主界面 |
| 后端服务 | 访问http://localhost:3000/health | 返回{"status":"ok"} |
| 数据库连接 | psql连接并查询课程表 | 返回课程数量 > 0 |
| Redis连接 | redis-cli ping | 返回PONG |
| Logto服务 | 访问http://localhost:3010 | 显示Logto登录界面 |
常见问题与解决方案
Docker权限问题
问题表现:执行docker命令时出现"permission denied"错误
原因分析:当前用户没有Docker操作权限
解决方案:
sudo usermod -aG docker $USER # 将当前用户添加到docker用户组
newgrp docker # 无需重启,立即应用组权限
数据库连接失败
问题表现:应用启动时报错"could not connect to database"
原因分析:环境变量配置与Docker服务不匹配
解决方案:
- 检查.env文件中的DATABASE_URL配置:
DATABASE_URL=postgresql://postgres:password@localhost:5433/earthworm - 确认docker-compose.yml中的数据库服务配置:
services: db: environment: POSTGRES_USER: postgres POSTGRES_PASSWORD: password POSTGRES_DB: earthworm ports: - "5433:5432" - 确保密码和端口号完全匹配
Logto认证服务无法访问
问题表现:访问http://localhost:3010无响应
原因分析:Logto服务未正确启动或端口冲突
解决方案:
# 查看Logto服务日志
docker logs earthworm_logto_1
# 检查端口占用情况
netstat -tulpn | grep 3010
# 如端口冲突,修改docker-compose.yml中的端口映射
环境调优建议
根据你的硬件配置,可以通过以下参数优化开发环境性能:
1. 内存资源分配
如果你的电脑内存大于16GB,可以调整docker-compose.yml增加资源限制:
services:
db:
deploy:
resources:
limits:
cpus: '2'
memory: 4G
logto:
deploy:
resources:
limits:
cpus: '1'
memory: 2G
2. Redis性能优化
编辑redis服务配置,开启持久化并调整内存策略:
services:
redis:
command: redis-server --appendonly yes --maxmemory-policy allkeys-lru
3. 数据库性能调优
为PostgreSQL添加性能配置:
services:
db:
environment:
POSTGRES_USER: postgres
POSTGRES_PASSWORD: password
POSTGRES_DB: earthworm
command: postgres -c shared_buffers=512MB -c work_mem=32MB
4. 构建缓存优化
在项目根目录创建.dockerignore文件,排除不需要的文件:
node_modules
.git
.volumes
*.log
5. 开发模式优化
修改package.json中的开发脚本,添加热重载支持:
"scripts": {
"dev:serve": "nest start --watch",
"dev:client": "nuxt dev --port 3001"
}
扩展学习路径
掌握了基础环境搭建后,你可以通过以下资源深入学习:
-
数据库模型设计:了解Earthworm的数据结构设计,可查看packages/schema/src/schema/目录下的模型定义文件。
-
API开发指南:学习如何开发新的API端点,参考apps/api/src/app/目录中的模块结构和控制器实现。
-
前端组件开发:了解Nuxt组件开发规范,可查看apps/client/components/目录下的组件实现。
-
测试策略:学习项目的测试方法,包括单元测试和端到端测试,参考各目录下的tests文件夹。
通过容器化方案,Earthworm解决了开发环境一致性的核心痛点,让开发者能够快速上手并专注于功能开发。无论你是Docker新手还是有经验的开发者,这个环境配置方案都能显著提升你的开发效率。现在,你已经拥有了一个功能完整的Earthworm开发环境,开始你的英语学习应用开发之旅吧!
GLM-5智谱 AI 正式发布 GLM-5,旨在应对复杂系统工程和长时域智能体任务。Jinja00
LongCat-AudioDiT-1BLongCat-AudioDiT 是一款基于扩散模型的文本转语音(TTS)模型,代表了当前该领域的最高水平(SOTA),它直接在波形潜空间中进行操作。00
jiuwenclawJiuwenClaw 是一款基于openJiuwen开发的智能AI Agent,它能够将大语言模型的强大能力,通过你日常使用的各类通讯应用,直接延伸至你的指尖。Python0245- QQwen3.5-397B-A17BQwen3.5 实现了重大飞跃,整合了多模态学习、架构效率、强化学习规模以及全球可访问性等方面的突破性进展,旨在为开发者和企业赋予前所未有的能力与效率。Jinja00
AtomGit城市坐标计划AtomGit 城市坐标计划开启!让开源有坐标,让城市有星火。致力于与城市合伙人共同构建并长期运营一个健康、活跃的本地开发者生态。01
HivisionIDPhotos⚡️HivisionIDPhotos: a lightweight and efficient AI ID photos tools. 一个轻量级的AI证件照制作算法。Python05

