惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

T
Tor Project blog
B
Blog RSS Feed
M
MIT News - Artificial intelligence
WordPress大学
WordPress大学
H
Hackread – Cybersecurity News, Data Breaches, AI and More
罗磊的独立博客
GbyAI
GbyAI
N
Netflix TechBlog - Medium
博客园 - 司徒正美
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
宝玉的分享
宝玉的分享
W
WeLiveSecurity
Stack Overflow Blog
Stack Overflow Blog
Y
Y Combinator Blog
SecWiki News
SecWiki News
V
Vulnerabilities – Threatpost
Google DeepMind News
Google DeepMind News
C
CERT Recently Published Vulnerability Notes
T
Tailwind CSS Blog
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
The Register - Security
The Register - Security
Cisco Talos Blog
Cisco Talos Blog
Martin Fowler
Martin Fowler
A
About on SuperTechFans
S
Security @ Cisco Blogs
T
Tenable Blog
C
Check Point Blog
N
News and Events Feed by Topic
S
SegmentFault 最新的问题
The GitHub Blog
The GitHub Blog
C
Cyber Attacks, Cyber Crime and Cyber Security
Attack and Defense Labs
Attack and Defense Labs
美团技术团队
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
C
Cisco Blogs
P
Palo Alto Networks Blog
V
V2EX
博客园 - 聂微东
Project Zero
Project Zero
酷 壳 – CoolShell
酷 壳 – CoolShell
D
Docker
N
News | PayPal Newsroom
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
小众软件
小众软件
Application and Cybersecurity Blog
Application and Cybersecurity Blog
人人都是产品经理
人人都是产品经理
V2EX - 技术
V2EX - 技术
I
Intezer
L
LINUX DO - 最新话题

Solitudes

如果你受够了 Jira,可以认真看看这个开源项目管理工具 没有小技巧,帮你快速上手Codex 龙虾哥浏览器操控教程:QClaw让直接用你的浏览器 让AI先出原型再写代码,这是我用过最舒服的前端开发方式 安利两个Claude Code技能 简单记录一下杜甫折腾ipv6踩坑版 用 Tailscale 安全访问龙虾哥 OpenClaw 控制台 丙午马年 · 祝大家身体健康,马到成功,万事如意 出一台hk物理服务器 告别屎山代码!我如何用code-simplifier + code-review将代码审查效率提升200% 2025年终不总结 使用Let's Encrypt 签发的 IP 地址 SSL 证书 MinIO迁移RustFS实战指南一 Tailscale Peer Relay 最新变更解读 Umami 升级提醒:尽快更新以修复 Next.js CVE-2025-66478 漏洞 出一台闲置的物理服务器 k8s免密拉取镜像实践 Z-Image-Turbo,快就完事了 Debian/Ubuntu 默认禁用 SSH RSA 密钥?一篇文章教你彻底解决
开源项目管理工具Plane部署篇
ysicing · 2026-05-07 · via Solitudes

昨天主要说了安利 Plane,今天主要讲讲如何部署。

言简意赅,直接 compose 部署,方便演示

services:
  plane-aio:
    container_name: plane-aio
    image: ysicing/plane:v1.3.0-33cb22cb6-2026050720
    ports:
      - "${LISTEN_HTTP_PORT:-8080}:8080"
    environment:
      # Django
      SECRET_KEY: ${SECRET_KEY:-sk-plane-gaea-local-test-secret-key-change-me}
      DJANGO_SETTINGS_MODULE: plane.settings.production
      GUNICORN_WORKERS: ${GUNICORN_WORKERS:-1}

      # Database
      DATABASE_URL: postgresql://${POSTGRES_USER:-plane}:${POSTGRES_PASSWORD:-plane}@plane-db:5432/${POSTGRES_DB:-plane}

      # Redis
      REDIS_URL: redis://plane-redis:6379/

      # Celery Broker — 支持 RabbitMQ 或 Redis,二选一:
      # 方案 A(推荐):复用 Redis,无需 plane-mq 服务
      #   AMQP_URL: redis://plane-redis:6379/1
      # 方案 B:独立 RabbitMQ
      #   AMQP_URL: amqp://plane:plane@plane-mq:5672/plane
      AMQP_URL: ${AMQP_URL:-redis://plane-redis:6379/1}

      # S3 / MinIO
      USE_MINIO: ${USE_MINIO:-0}
      AWS_ACCESS_KEY_ID: ${AWS_ACCESS_KEY_ID:-minio}
      AWS_SECRET_ACCESS_KEY: ${AWS_SECRET_ACCESS_KEY:-pass4You}
      AWS_S3_BUCKET_NAME: ${AWS_S3_BUCKET_NAME:-uploads}
      AWS_S3_ENDPOINT_URL: ${AWS_S3_ENDPOINT_URL:-http://mytest:9000}
      AWS_REGION: ${AWS_REGION:-}
      MINIO_ENDPOINT_SSL: ${MINIO_ENDPOINT_SSL:-0}

      # Live 服务
      LIVE_SERVER_SECRET_KEY: ${LIVE_SERVER_SECRET_KEY:-live-server-secret-key}

      # 文件大小限制
      FILE_SIZE_LIMIT: ${FILE_SIZE_LIMIT:-5242880}

      # API 限流
      API_KEY_RATE_LIMIT: ${API_KEY_RATE_LIMIT:-60/minute}

      # 应用访问地址 — 必须与浏览器地址栏的协议+域名+端口完全一致,用于登录后重定向
      WEB_URL: ${WEB_URL:-http://mytest:8080}

      # CSRF / CORS 可信来源 — 必须与浏览器地址栏的协议+域名+端口完全一致
      # 多个来源用逗号分隔,例如: http://localhost:8080,https://plane.example.com
      CORS_ALLOWED_ORIGINS: ${CORS_ALLOWED_ORIGINS:-http://localhost:8080,http://mytest:8080}

      # 禁用 OpenTelemetry SDK,停止向 telemetry.plane.so 发送遥测数据
      OTEL_SDK_DISABLED: "true"
    depends_on:
      plane-db:
        condition: service_healthy
      plane-redis:
        condition: service_healthy
      plane-minio:
        condition: service_started
    restart: unless-stopped

  # ============================================================
  # 有状态外部服务
  # ============================================================
  plane-db:
    container_name: plane-db
    image: postgres:15.7-alpine
    restart: always
    command: postgres -c 'max_connections=1000'
    volumes:
      - pgdata:/var/lib/postgresql/data
    environment:
      POSTGRES_USER: ${POSTGRES_USER:-plane}
      POSTGRES_DB: ${POSTGRES_DB:-plane}
      POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-plane}
      PGDATA: /var/lib/postgresql/data
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER:-plane} -d ${POSTGRES_DB:-plane}"]
      interval: 5s
      timeout: 3s
      retries: 5

  plane-redis:
    container_name: plane-redis
    image: valkey/valkey:7.2.11-alpine
    restart: always
    volumes:
      - redisdata:/data
    healthcheck:
      test: ["CMD", "valkey-cli", "ping"]
      interval: 5s
      timeout: 3s
      retries: 5

  plane-minio:
    container_name: plane-minio
    image: minio/minio
    restart: always
    command: server /export --console-address ":9090"
    ports:
      - "9000:9000"
      - "9090:9090"
    volumes:
      - uploads:/export
    environment:
      # 默认值必须与 plane-aio 的 AWS_ACCESS_KEY_ID / AWS_SECRET_ACCESS_KEY 一致,
      # 否则 Django 用 minio/OoMoovoug5inge9K 签名、MinIO 识别不到 AccessKey → 403 InvalidAccessKeyId
      MINIO_ROOT_USER: ${AWS_ACCESS_KEY_ID:-minio}
      MINIO_ROOT_PASSWORD: ${AWS_SECRET_ACCESS_KEY:-pass4You}

volumes:
  pgdata:
  redisdata:
  uploads:

自定义配置文件,大部分场景下只需要修改如下即可

cat .env
WEB_URL=http://100.90.80.34:8080
CORS_ALLOWED_ORIGINS=http://localhost:8080,http://100.90.80.34:8080
AWS_S3_ENDPOINT_URL=http://100.90.80.34:9000

我已经提供了预构建的镜像,我们进行了一些容器化改造,容器进行了精简方便部署。

直接启动,稍等一段时间,启动有一点慢。整体容器资源使用不超过 3G 内存

docker compose up -d

启动完成后进入管理员页面 上帝模式 god-mode

在上帝模式里可以配置(仅列出我们在上游基础上做的调整的)

  • 支持管理员管理
  • 支持钉钉消息推送(根据我们其他系统适配钉钉登录,使用率没有 LDAP 高,暂时不会支持)
  • 登录支持 LDAP
  • AI 支持自定义 LLM 地址

使用侧功能昨天说了差不多了。

想尝试的可以体验看看,很简单。