diff --git a/public/svgs/plane.svg b/public/svgs/plane.svg new file mode 100644 index 000000000..899e1a866 --- /dev/null +++ b/public/svgs/plane.svg @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/templates/compose/plane.yaml b/templates/compose/plane.yaml new file mode 100644 index 000000000..25aa3883a --- /dev/null +++ b/templates/compose/plane.yaml @@ -0,0 +1,214 @@ +# documentation: https://docs.plane.so/self-hosting/methods/docker-compose +# slogan: The open source project management tool +# tags: plane,project-management,tool,open,source,api,nextjs,redis,postgresql,django,pm +# logo: svgs/plane.svg + +x-app-env: &app-env + environment: + - WEB_URL=http://localhost + - DEBUG=${DEBUG:-0} + - SENTRY_DSN=${SENTRY_DSN} + - SENTRY_ENVIRONMENT=${SENTRY_ENVIRONMENT:-"production"} + - CORS_ALLOWED_ORIGINS=http://localhost + # Gunicorn Workers + - GUNICORN_WORKERS=${GUNICORN_WORKERS:-1} + #DB SETTINGS + - PGHOST=${PGHOST:-plane-db} + - PGDATABASE=${PGDATABASE:-plane} + - POSTGRES_USER=$SERVICE_USER_POSTGRES + - POSTGRES_PASSWORD=$SERVICE_PASSWORD_POSTGRES + - POSTGRES_DB=${POSTGRES_DB:-plane} + - POSTGRES_PORT=${POSTGRES_PORT:-5432} + - PGDATA=${PGDATA:-/var/lib/postgresql/data} + - DATABASE_URL=postgresql://$SERVICE_USER_POSTGRES:$SERVICE_PASSWORD_POSTGRES@plane-db/plane + # REDIS SETTINGS + - REDIS_HOST=${REDIS_HOST:-plane-redis} + - REDIS_PORT=${REDIS_PORT:-6379} + - REDIS_URL=${REDIS_URL:-redis://plane-redis:6379/} + # Application secret + - SECRET_KEY=$SERVICE_PASSWORD_64_SECRETKEY + # DATA STORE SETTINGS + - USE_MINIO=${USE_MINIO:-1} + - AWS_REGION=${AWS_REGION} + - AWS_ACCESS_KEY_ID=${AWS_ACCESS_KEY_ID} + - AWS_SECRET_ACCESS_KEY=${AWS_SECRET_ACCESS_KEY} + - AWS_S3_ENDPOINT_URL=${AWS_S3_ENDPOINT_URL:-http://plane-minio:9000} + - AWS_S3_BUCKET_NAME=${AWS_S3_BUCKET_NAME:-uploads} + - MINIO_ROOT_USER=$SERVICE_USER_MINIO + - MINIO_ROOT_PASSWORD=$SERVICE_PASSWORD_MINIO + - BUCKET_NAME=${BUCKET_NAME:-uploads} + - FILE_SIZE_LIMIT=${FILE_SIZE_LIMIT:-5242880} + # Admin and Space URLs + - ADMIN_BASE_URL=${ADMIN_BASE_URL} + - SPACE_BASE_URL=${SPACE_BASE_URL} + - APP_BASE_URL=${APP_BASE_URL} + + + +services: + proxy: + environment: + - SERVICE_FQDN_PLANE + - NGINX_PORT=${NGINX_PORT:-9743} + - FILE_SIZE_LIMIT=${FILE_SIZE_LIMIT:-5242880} + image: ${DOCKERHUB_USER:-makeplane}/plane-proxy:${APP_RELEASE:-stable} + platform: ${DOCKER_PLATFORM:-} + pull_policy: ${PULL_POLICY:-always} + ports: + - ${NGINX_PORT}:80 + depends_on: + - web + - api + - space + healthcheck: + test: ["CMD", "curl", "-f", "http://127.0.0.1:80"] + interval: 2s + timeout: 10s + retries: 15 + + web: + <<: *app-env + image: ${DOCKERHUB_USER:-makeplane}/plane-frontend:${APP_RELEASE:-stable} + platform: ${DOCKER_PLATFORM:-} + pull_policy: ${PULL_POLICY:-always} + restart: unless-stopped + command: node web/server.js web + deploy: + replicas: ${WEB_REPLICAS:-1} + depends_on: + - api + - worker + space: + <<: *app-env + image: ${DOCKERHUB_USER:-makeplane}/plane-space:${APP_RELEASE:-stable} + platform: ${DOCKER_PLATFORM:-} + pull_policy: ${PULL_POLICY:-always} + restart: unless-stopped + command: node space/server.js space + deploy: + replicas: ${SPACE_REPLICAS:-1} + depends_on: + - api + - worker + - web + + admin: + <<: *app-env + image: ${DOCKERHUB_USER:-makeplane}/plane-admin:${APP_RELEASE:-stable} + platform: ${DOCKER_PLATFORM:-} + pull_policy: ${PULL_POLICY:-always} + restart: unless-stopped + command: node admin/server.js admin + deploy: + replicas: ${ADMIN_REPLICAS:-1} + depends_on: + - api + - web + + api: + <<: *app-env + image: ${DOCKERHUB_USER:-makeplane}/plane-backend:${APP_RELEASE:-stable} + platform: ${DOCKER_PLATFORM:-} + pull_policy: ${PULL_POLICY:-always} + restart: unless-stopped + command: ./bin/docker-entrypoint-api.sh + deploy: + replicas: ${API_REPLICAS:-1} + volumes: + - logs_api:/code/plane/logs + depends_on: + - plane-db + - plane-redis + + worker: + <<: *app-env + image: ${DOCKERHUB_USER:-makeplane}/plane-backend:${APP_RELEASE:-stable} + platform: ${DOCKER_PLATFORM:-} + pull_policy: ${PULL_POLICY:-always} + restart: unless-stopped + command: ./bin/docker-entrypoint-worker.sh + volumes: + - logs_worker:/code/plane/logs + depends_on: + - api + - plane-db + - plane-redis + + beat-worker: + <<: *app-env + image: ${DOCKERHUB_USER:-makeplane}/plane-backend:${APP_RELEASE:-stable} + platform: ${DOCKER_PLATFORM:-} + pull_policy: ${PULL_POLICY:-always} + restart: unless-stopped + command: ./bin/docker-entrypoint-beat.sh + volumes: + - logs_beat-worker:/code/plane/logs + depends_on: + - api + - plane-db + - plane-redis + + migrator: + <<: *app-env + image: ${DOCKERHUB_USER:-makeplane}/plane-backend:${APP_RELEASE:-stable} + platform: ${DOCKER_PLATFORM:-} + pull_policy: ${PULL_POLICY:-always} + restart: "no" + command: ./bin/docker-entrypoint-migrator.sh + volumes: + - logs_migrator:/code/plane/logs + depends_on: + - plane-db + - plane-redis + + plane-db: + <<: *app-env + image: postgres:15.5-alpine + pull_policy: if_not_present + restart: unless-stopped + command: postgres -c 'max_connections=1000' + volumes: + - pgdata:/var/lib/postgresql/data + healthcheck: + test: ["CMD-SHELL", "pg_isready -U $${POSTGRES_USER} -d $${POSTGRES_DB}"] + interval: 5s + timeout: 20s + retries: 10 + + plane-redis: + <<: *app-env + image: valkey/valkey:7.2.5-alpine + pull_policy: if_not_present + restart: unless-stopped + volumes: + - redisdata:/data + healthcheck: + test: ["CMD", "redis-cli", "ping"] + interval: 5s + timeout: 20s + retries: 10 + + + plane-minio: + <<: *app-env + image: minio/minio:latest + pull_policy: if_not_present + restart: unless-stopped + command: server /export --console-address ":9090" + volumes: + - uploads:/export + healthcheck: + test: ["CMD", "curl", "-f", "http://127.0.0.1:9000/minio/health/live"] + interval: 5s + timeout: 20s + retries: 10 + + +volumes: + pgdata: + redisdata: + uploads: + logs_api: + logs_worker: + logs_beat-worker: + logs_migrator: