ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

Plane 自托管部署与本地开发实战:从 Docker Compose 编排到 Monorepo 开发环境

Plane 自托管部署与本地开发实战:从 Docker Compose 编排到 Monorepo 开发环境 Plane 自托管部署与本地开发实战从 Docker Compose 编排到 Monorepo 开发环境【免费下载链接】plane Open-source Jira, Linear, Monday, and ClickUp alternative. Plane is a modern project management platform to manage tasks, sprints, docs, and triage.项目地址: https://gitcode.com/GitHub_Trending/pl/plane本文以 Plane 仓库根目录的 README.md 为核心系统讲解这款开源项目管理平台可替代 Jira、Linear、Monday、ClickUp的能力边界、自托管部署拓扑、环境变量配置以及完整的本地开发工作流。读完本文你将能够根据 docker-compose.yml 复现 Plane 的全部容器化部署链路理解 web / api / worker / live 等各服务的职责分工并按照 CONTRIBUTING.md 的规范在本地跑起完整的开发环境并参与贡献。一、Plane 是什么定位与核心功能Plane 的自我定位是为所有团队提供现代化的项目管理Modern project management for all teams一个用于跟踪 issues、运行 cycles、管理产品路线图roadmaps的开源工具。README 将产品功能归纳为六大模块Work Items基于功能完备的富文本编辑器创建和管理任务支持文件上传、子属性sub-properties以及关联 issue 引用Cycles以迭代周期维持团队节奏配合 burn-down 等图表追踪进度Modules把复杂项目拆分为更小、更易管理的模块Views通过自定义过滤器只显示最相关的 issue并可保存、共享视图Pages带 AI 能力的富文本知识库支持格式化、插图、超链接以及把笔记转换为可执行事项Analytics跨所有 Plane 数据的实时洞察可视化趋势、定位并移除阻塞项。这些功能在代码层面分别对应仓库中的前端组件与后端模型。例如前端工作项视图组件位于 apps/web/core/components编辑器作为独立包 packages/editor 存在后端模型层180 个 Python 文件集中在 apps/api/plane/db。二、两条使用路径Cloud 与自托管README 将安装方式分为两条路径Plane Cloud直接在官方云服务注册免去基础设施运维是最快的上手方式Self-host Plane在自有服务器上安装运行获得对数据和基础设施的完全控制权。官方自托管支持两种主流方式README 中以徽章链接到开发者文档安装方式说明Docker通过 docker-compose 编排部署对应仓库根目录的 docker-compose.ymlKubernetes提供 deployments/kubernetes/community 目录及说明文档除根目录的 compose 文件外仓库还提供了多套部署变体覆盖不同场景docker-compose-local.yml本地开发环境将apps/api源码以 volume 挂载进容器实现热重载docker-compose-test.yml测试环境deployments/aio/community/Dockerfile 与 supervisor.confAll-in-One 单容器社区版部署deployments/cli/community/docker-compose.yml 与 install.shCLI 一键安装方式。此外 README 指出实例管理员Instance admins可以通过God mode配置实例设置。这与仓库中独立的apps/admin前端应用一致——在本地开发中你需要先访问http://localhost:3001/god-mode/注册为实例管理员该路径对应apps/api/.env.example中的ADMIN_BASE_PATH/god-mode。三、Monorepo 架构前端、后端与共享包Plane 是一个 monorepoREADME 的 Built with 部分标注了核心技术栈React Router前端路由框架、Django后端、Node.js运行时。从仓库结构看apps/目录下的五个应用分别承载不同职责应用目录职责主 Web 前端apps/web面向最终用户的产品界面issue、cycle、module、view 等151 个页面级 tsx 文件Admin 控制台apps/adminGod mode 实例管理台实例初始化、认证提供方GitHub/GitLab/Google/Gitea配置Space 应用apps/space独立空间视图含 issue 详情、编辑器组件API 后端apps/apiDjango 项目含authentication、space、app等模块与 Celery 后台任务Live 协同服务apps/live基于 Yjs/Hocuspocus 的实时协同服务WebSocket使用 Redispackages/目录沉淀了跨应用共享的包packages/constants全局常量、packages/editorTiptap 富文本编辑器、packages/i18n国际化18 种语言、packages/servicesAPI 服务层、packages/types类型定义、packages/ui 与 packages/propelUI 组件库等。工程配置上仓库使用 pnpm workspacepnpm-workspace.yaml加 Turborepoturbo.json组织多包构建。四、生产部署拓扑docker-compose.yml 逐项解析docker-compose.yml 定义了完整的生产级部署共 11 个服务。逐个说明应用层服务web构建自 apps/web/Dockerfile.web主前端依赖apiadmin构建自 apps/admin/Dockerfile.admin管理台依赖api和webspace构建自 apps/space/Dockerfile.space依赖api和webapi构建自 apps/api/Dockerfile.api入口脚本为./bin/docker-entrypoint-api.sh环境变量来自 apps/api/.env依赖数据库与 Redisworker与api同镜像入口docker-entrypoint-worker.sh运行 Celery worker 处理后台任务issue 自动化、导出、webhook、邮件通知等任务定义见 apps/api/plane/bgtasksbeat-workerCelery Beat 定时任务调度器入口docker-entrypoint-beat.shmigrator一次性迁移容器restart: no执行docker-entrypoint-migrator.sh完成数据库迁移live构建自 apps/live/Dockerfile.live实时协同服务proxy构建自 apps/proxy/Dockerfile.ce唯一的端口暴露服务${LISTEN_HTTP_PORT}:80、${LISTEN_HTTPS_PORT}:443承担反向代理与 SSL 终结。compose 文件明确注释如果你已经运行着一个反向代理可以注释掉该服务。代理层还消费FILE_SIZE_LIMIT默认 5242880 字节约 5 MB与BUCKET_NAMEuploads两个变量。基础设施服务服务镜像关键点plane-dbpostgres:15.7-alpinemax_connections1000数据卷pgdata凭据来自.env的POSTGRES_USER/DB/PASSWORDplane-redisvalkey/valkey:7.2.11-alpine以 ValkeyRedis 兼容实现承载缓存与队列数据卷redisdataplane-mqrabbitmq:3.13.6-management-alpine消息队列使用RABBITMQ_USER/PASSWORD/VHOST挂载管理界面plane-miniominio/minioS3 兼容对象存储server /export --console-address :9090根账号映射自AWS_ACCESS_KEY_ID/SECRET_ACCESS_KEY四个命名卷pgdata、redisdata、uploads、rabbitmq_data分别承载持久化数据。值得注意的是虽然 CONTRIBUTING.md 将 Postgres v14、Redis v6.2.7 列为最低版本要求但当前仓库 compose 文件实际固定为 Postgres 15.7 与 Valkey 7.2.11自托管时以 compose 文件为准。五、环境变量配置.env.example 全解setup.sh会把所有.env.example复制为.env根目录及apps/{web,api,space,admin,live}六处因此理解各 example 文件是正确配置的关键。根目录 .env基础设施与存储.env.example 的关键项数据库POSTGRES_USERplane、POSTGRES_PASSWORDplane、POSTGRES_DBplane、PGDATARedisREDIS_HOSTplane-redis、REDIS_PORT6379RabbitMQRABBITMQ_HOST/PORT/USER/PASSWORD/VHOST默认用户与密码均为planevhost 为plane监听端口LISTEN_HTTP_PORT80、LISTEN_HTTPS_PORT443映射到 proxy 服务S3/MinIOAWS_ACCESS_KEY_ID、AWS_SECRET_ACCESS_KEY、AWS_S3_ENDPOINT_URLhttp://plane-minio:9000、AWS_S3_BUCKET_NAMEuploads注释提示修改桶名后若使用 minio 需同步修改代理配置、FILE_SIZE_LIMIT5242880最大上传体积USE_MINIO1使用预配置的 MinIO 时置 1SSLCERT_ACME_CALets Encrypt 端点、CERT_EMAIL设置后自动生成证书、CERT_ACME_DNSDNS 挑战方式、TRUSTED_PROXIES、MINIO_ENDPOINT_SSL0强制 HTTPS 开关API_KEY_RATE_LIMIT60/minuteAPI 密钥速率限制。API 配置apps/api/.envapps/api/.env.example 面向 Django 后端DEBUG0注释明确生产环境使用 0、CORS_ALLOWED_ORIGINS默认放行 localhost 的 3000/3001/3002/3100 四个前端端口DATABASE_URLpostgresql://${POSTGRES_USER}:${POSTGRES_PASSWORD}${POSTGRES_HOST}:${POSTGRES_PORT}/${POSTGRES_DB}由上面变量拼装POSTGRES_HOSTplane-db即 compose 服务名GUNICORN_WORKERS2API 工作进程数SIGNED_URL_EXPIRATION3600文件签名 URL 有效期秒注释给出 30 / 300 的示例取值HARD_DELETE_AFTER_DAYS60文件硬删除周期各前端基础地址APP_BASE_URLhttp://localhost:3000、ADMIN_BASE_URLhttp://localhost:3001ADMIN_BASE_PATH/god-mode、SPACE_BASE_URLhttp://localhost:3002SPACE_BASE_PATH/spaces、LIVE_BASE_URLhttp://localhost:3100LIVE_BASE_PATH/liveLIVE_SERVER_SECRET_KEY与 live 服务共享的密钥两侧必须一致。Django 侧的设置加载机制见 apps/api/plane/settingslocal.py用于本地/开发compose-local 中 migrator 显式使用--settingsplane.settings.localproduction.py、test.py分别对应生产与测试redis.py、storage.py等拆分了 Redis 与对象存储配置。前端配置VITE 变量apps/web/.env.examplespace、admin 的 example 与之相同统一通过 VITE 前缀注入构建期变量VITE_API_BASE_URLAPI 地址、VITE_WEB_BASE_URL、VITE_ADMIN_BASE_URLVITE_ADMIN_BASE_PATH、VITE_SPACE_BASE_URLVITE_SPACE_BASE_PATH、VITE_LIVE_BASE_URLVITE_LIVE_BASE_PATH。apps/live/.env.example 则包含PORT3100、API_BASE_URL、LIVE_SERVER_SECRET_KEY及 Redis 连接REDIS_HOST/PORT/URL注释说明若不提供完整 Redis URL 可用 HOSTPORT 替代。六、本地开发全流程setup.sh 到 god-modeREADME 的 Local development 一节直接指向 CONTRIBUTING.md其开发环境要求如下Docker Engine 已安装并运行Node.js 20LTSPython 3.8Postgres v14当前 compose 实际使用 15.7Redis v6.2.7当前 compose 实际使用 Valkey 7.2.11内存建议至少 12 GB RAM——CONTRIBUTING 明确警告8 GB 内存的机器在容器构建、启动或依赖安装阶段可能导致 setup 失败或内存崩溃建议使用云开发环境或升级内存。完整步骤来自 CONTRIBUTING Projects setup and Architecture 章节克隆仓库monorepo 中后端 Django 项目在apps/apigit clone https://gitcode.com/GitHub_Trending/pl/plane [folder-name] cd [folder-name] chmod x setup.sh运行 setup.sh。脚本做的事比表面多它将根目录与apps/{web,api,space,admin,live}六份.env.example复制为.env随后用tr -dc a-z0-9 /dev/urandom | head -c50随机生成 50 位 DjangoSECRET_KEY并追加到apps/api/.env再执行corepack enable pnpm激活 pnpm 并安装 Node 依赖。脚本结尾提示下一步docker compose -f docker-compose-local.yml up -d。启动容器docker compose -f docker-compose-local.yml updocker-compose-local.yml 与生产版的差异基础设施镜像版本一致Postgres 15.7 / Valkey 7.2.11 / RabbitMQ 3.13.6 / MinIO但api、worker、beat-worker、migrator使用 apps/api/Dockerfile.dev 构建并通过 volume 把./apps/api挂载到容器内/code实现热重载plane-db、plane-redis、plane-minio额外暴露了 5432 / 6379 / 9000 / 9090 端口便于本地调试MinIO 的 entrypoint 还内嵌了mc客户端自动创建uploads桶所有服务加入共享的dev_envbridge 网络。启动 Web 应用pnpm dev由根目录 package.json 经 Turborepo 并行驱动各前端应用的 dev server分别监听 3000web、3001admin、3002space、3100live。注册实例管理员打开http://localhost:3001/god-mode/注册自己为 instance admin。登录主应用打开http://localhost:3000用第 5 步的相同凭据登录。CONTRIBUTING 还附带了调试提示若改动没有自动刷新请手动刷新浏览器。编码规范方面CONTRIBUTING 要求所有功能或修复必须附带至少一个单元测试spec并使用 OxLint共享.oxlintrc.json做 lint、oxfmt.oxfmtrc.json做格式化。API 后端测试运行方式见 apps/api/RUNNING_TESTS.md。七、贡献、安全与社区README 的贡献与治理章节给出了明确的参与路径提 Issue 规范来自 CONTRIBUTING.md提 bug 前先在 issues 中搜索须提供最小可复现场景说明所用第三方库版本及失败用例标题采用固定格式—— Bug: [描述]、 Feature: [描述]、️ Improvement: [描述]、 Docs: [描述]贡献方式试用 Plane Cloud 与自托管平台并反馈、添加新集成、补充或更新翻译、处理 open issues、撰写教程与博文、提交 feature 提案、报告 bug、完善文档国际化贡献CONTRIBUTING 单独详述了翻译结构——语言文件位于 packages/i18n/src/locales嵌套 JSON 键结构使用 IntlMessageFormat 处理变量与复数ICU 格式新增语言需同步更新TLanguage类型packages/i18n/src/types/language.ts、SUPPORTED_LANGUAGES常量与语言文件导入逻辑安全发现漏洞应负责任地私下披露而非公开 issue邮件 securityplane.so详见 SECURITY.md社区官方通过 GitHub Discussions 与论坛运营社区遵循 CODE_OF_CONDUCT.md许可项目采用 GNU Affero General Public License v3.0LICENSE.txt。八、小结Plane 的仓库组织为一个 monorepo、五个应用、十一个容器服务的清晰分层apps/web、apps/admin、apps/space、apps/live四个 Node 前端/协同应用围绕 Django 后端apps/api构建再由proxy统一对外。自托管的核心是理解 docker-compose.yml 中api → worker / beat-worker / migrator的 Celery 分工、Postgres/Valkey/RabbitMQ/MinIO 四个基础组件以及根目录.env与apps/api/.env中数据库、存储、SSO 相关变量的联动关系本地开发则只需./setup.sh→docker compose -f docker-compose-local.yml up→pnpm dev三步再从:3001/god-mode注册实例管理员即可进入贡献流程。【免费下载链接】plane Open-source Jira, Linear, Monday, and ClickUp alternative. Plane is a modern project management platform to manage tasks, sprints, docs, and triage.项目地址: https://gitcode.com/GitHub_Trending/pl/plane创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表