fix(plane): update to v1.2.3 and replace MinIO with RustFS (#760)

* fix(plane): update template to Plane v1.x (stable)
The existing template targeted v0.27.1 which is heavily outdated.
This updates it to match Plane's current official deployment config.
Changes:
- Images: v0.27.1 → stable (currently v1.2.3) from Docker Hub
- Remove explicit commands from frontend services (built into images)
- Postgres: 17-alpine → 15.7-alpine (matches Plane's supported version)
- Valkey: 7.2.5 → 7.2.11
- Proxy: add admin + live dependencies, proxy_config/proxy_data volumes
- Add LIVE_SERVER_SECRET_KEY, APP_DOMAIN, SITE_ADDRESS env vars
- Add RABBITMQ_USER/PASSWORD/VHOST (new v1.x env var names)
- Fix RABBITMQ_DEFAULT_USER bug (was hardcoded string, not variable)
- Fix DATABASE_URL to use template variables directly
- Fix AWS_ACCESS_KEY_ID to match MINIO_ROOT_USER literal
- Remove deprecated: version key, SENTRY_*, NGINX_PORT
- Remove unused env_file from plane-redis
- Add restart policies to all services

* fix(plane): replace MinIO with RustFS (Apache 2.0)
MinIO's open-source edition is effectively dead:
- Admin UI stripped (March 2025)
- Docker images discontinued (October 2025)
- GitHub repo in maintenance mode (December 2025)
- Marked as "NO LONGER MAINTAINED" (February 2026)
RustFS is an S3-compatible drop-in replacement:
- Apache 2.0 license (no AGPL restrictions)
- Same S3 API on port 9000
- Written in Rust, 2.3x faster than MinIO for small objects
- Active development with built-in web console

* fix(plane): address CI and convention issues

- Add back version: "3.8" (required by Dokploy conventions)
- Update meta.json: version v0.27.1 → v1.2.3
- Run process-meta to fix pre-existing strapi duplicate
- Migrator restart: "no" → on-failure

* fix(plane): address review feedback

- Pin RustFS to 1.0.0-alpha.90 (no latest tag)
- WEB_URL and CORS_ALLOWED_ORIGINS use http (Dokploy handles TLS)
This commit is contained in:
Rayane
2026-07-08 01:36:19 +02:00
committed by GitHub
parent e933413655
commit 16693e6f74
3 changed files with 62 additions and 42 deletions

View File

@@ -2,8 +2,8 @@ version: "3.8"
services:
web:
image: makeplane/plane-frontend:${APP_RELEASE:-v0.27.1}
command: node web/server.js web
image: makeplane/plane-frontend:${APP_RELEASE:-v1.2.3}
restart: always
depends_on:
- api
- worker
@@ -11,8 +11,8 @@ services:
- .env
space:
image: makeplane/plane-space:${APP_RELEASE:-v0.27.1}
command: node space/server.js space
image: makeplane/plane-space:${APP_RELEASE:-v1.2.3}
restart: always
depends_on:
- api
- worker
@@ -21,8 +21,8 @@ services:
- .env
admin:
image: makeplane/plane-admin:${APP_RELEASE:-v0.27.1}
command: node admin/server.js admin
image: makeplane/plane-admin:${APP_RELEASE:-v1.2.3}
restart: always
depends_on:
- api
- web
@@ -30,8 +30,8 @@ services:
- .env
live:
image: makeplane/plane-live:${APP_RELEASE:-v0.27.1}
command: node live/dist/server.js live
image: makeplane/plane-live:${APP_RELEASE:-v1.2.3}
restart: always
depends_on:
- api
- web
@@ -39,7 +39,8 @@ services:
- .env
api:
image: makeplane/plane-backend:${APP_RELEASE:-v0.27.1}
image: makeplane/plane-backend:${APP_RELEASE:-v1.2.3}
restart: always
command: ./bin/docker-entrypoint-api.sh
volumes:
- logs_api:/code/plane/logs
@@ -51,7 +52,8 @@ services:
- .env
worker:
image: makeplane/plane-backend:${APP_RELEASE:-v0.27.1}
image: makeplane/plane-backend:${APP_RELEASE:-v1.2.3}
restart: always
command: ./bin/docker-entrypoint-worker.sh
volumes:
- logs_worker:/code/plane/logs
@@ -64,7 +66,8 @@ services:
- .env
beat-worker:
image: makeplane/plane-backend:${APP_RELEASE:-v0.27.1}
image: makeplane/plane-backend:${APP_RELEASE:-v1.2.3}
restart: always
command: ./bin/docker-entrypoint-beat.sh
volumes:
- logs_beat-worker:/code/plane/logs
@@ -77,7 +80,8 @@ services:
- .env
migrator:
image: makeplane/plane-backend:${APP_RELEASE:-v0.27.1}
image: makeplane/plane-backend:${APP_RELEASE:-v1.2.3}
restart: on-failure
command: ./bin/docker-entrypoint-migrator.sh
volumes:
- logs_migrator:/code/plane/logs
@@ -88,7 +92,8 @@ services:
- .env
plane-db:
image: postgres:17-alpine
image: postgres:15.7-alpine
restart: always
command: postgres -c 'max_connections=1000'
volumes:
- pgdata:/var/lib/postgresql/data
@@ -96,33 +101,39 @@ services:
- .env
plane-redis:
image: valkey/valkey:7.2.5-alpine
image: valkey/valkey:7.2.11-alpine
restart: always
volumes:
- redisdata:/data
env_file:
- .env
plane-mq:
image: rabbitmq:3.13.6-management-alpine
restart: always
volumes:
- rabbitmq_data:/var/lib/rabbitmq
env_file:
- .env
plane-minio:
image: minio/minio:latest
command: server /export --console-address ":9090"
plane-storage:
image: rustfs/rustfs:1.0.0-alpha.90
restart: always
volumes:
- uploads:/export
- uploads:/data
env_file:
- .env
proxy:
image: makeplane/plane-proxy:${APP_RELEASE:-v0.27.1}
image: makeplane/plane-proxy:${APP_RELEASE:-v1.2.3}
restart: always
depends_on:
- web
- api
- space
- admin
- live
volumes:
- proxy_config:/config
- proxy_data:/data
env_file:
- .env
@@ -135,3 +146,5 @@ volumes:
logs_beat-worker:
logs_migrator:
rabbitmq_data:
proxy_config:
proxy_data:

View File

@@ -1,53 +1,59 @@
[variables]
main_domain = "${domain}"
postgres_user = "${username}"
db_password = "${password:32}"
minio_password = "${password:32}"
storage_password = "${password:32}"
rabbitmq_user = "${username}"
rabbitmq_pass = "${password:32}"
secret_key = "${base64:48}"
live_secret_key = "${base64:32}"
[config]
env = [
"Domain=${domain}",
"WEB_URL=${Domain}",
"APP_DOMAIN=${main_domain}",
"WEB_URL=http://${main_domain}",
"PGHOST=plane-db",
"PGDATABASE=plane",
"POSTGRES_USER=${username}",
"POSTGRES_USER=${postgres_user}",
"POSTGRES_PASSWORD=${db_password}",
"POSTGRES_DB=plane",
"POSTGRES_PORT=5432",
"PGDATA=/var/lib/postgresql/data",
"DATABASE_URL=postgresql://${postgres_user}:${db_password}@plane-db/plane",
"REDIS_HOST=plane-redis",
"REDIS_PORT=6379",
"REDIS_URL=redis://plane-redis:6379/",
"MINIO_ROOT_USER=access-key",
"MINIO_ROOT_PASSWORD=${minio_password}",
"RUSTFS_ACCESS_KEY=access-key",
"RUSTFS_SECRET_KEY=${storage_password}",
"RUSTFS_VOLUMES=/data",
"RUSTFS_ADDRESS=0.0.0.0:9000",
"RUSTFS_CONSOLE_ENABLE=false",
"AWS_REGION=",
"AWS_ACCESS_KEY_ID=${MINIO_ROOT_USER}",
"AWS_SECRET_ACCESS_KEY=${minio_password}",
"AWS_S3_ENDPOINT_URL=http://plane-minio:9000",
"AWS_ACCESS_KEY_ID=access-key",
"AWS_SECRET_ACCESS_KEY=${storage_password}",
"AWS_S3_ENDPOINT_URL=http://plane-storage:9000",
"AWS_S3_BUCKET_NAME=uploads",
"NGINX_PORT=80",
"BUCKET_NAME=uploads",
"FILE_SIZE_LIMIT=5242880",
"RABBITMQ_HOST=plane-mq",
"RABBITMQ_PORT=5672",
"RABBITMQ_DEFAULT_USER=rabbitmq_user",
"RABBITMQ_USER=${rabbitmq_user}",
"RABBITMQ_PASSWORD=${rabbitmq_pass}",
"RABBITMQ_VHOST=plane",
"RABBITMQ_DEFAULT_USER=${rabbitmq_user}",
"RABBITMQ_DEFAULT_PASS=${rabbitmq_pass}",
"RABBITMQ_DEFAULT_VHOST=plane",
"RABBITMQ_VHOST=plane",
"AMQP_URL=amqp://${rabbitmq_user}:${rabbitmq_pass}@plane-mq:5672/plane",
"API_BASE_URL=http://api:8000",
"DEBUG=0",
"SENTRY_DSN=",
"SENTRY_ENVIRONMENT=production",
"CORS_ALLOWED_ORIGINS=https://${Domain}",
"CORS_ALLOWED_ORIGINS=http://${main_domain}",
"GUNICORN_WORKERS=1",
"USE_MINIO=1",
"DATABASE_URL=postgresql://${POSTGRES_USER}:${POSTGRES_PASSWORD}@plane-db/plane",
"SECRET_KEY=${secret_key}",
"AMQP_URL=amqp://${RABBITMQ_DEFAULT_USER}:${RABBITMQ_DEFAULT_PASS}@plane-mq:5672/plane",
"API_KEY_RATE_LIMIT=60/minute",
"MINIO_ENDPOINT_SSL=0"
"MINIO_ENDPOINT_SSL=0",
"SITE_ADDRESS=:80",
"LIVE_SERVER_SECRET_KEY=${live_secret_key}"
]
mounts = []

View File

@@ -5671,8 +5671,8 @@
{
"id": "plane",
"name": "Plane",
"version": "v0.27.1",
"description": "Easy, flexible, open source project management software",
"version": "v1.2.3",
"description": "Open source project management — alternative to Jira, Linear, Asana",
"logo": "plane.png",
"links": {
"github": "https://github.com/makeplane/plane",
@@ -5680,7 +5680,8 @@
"docs": "https://docs.plane.so/"
},
"tags": [
"kanban"
"kanban",
"project-management"
]
},
{