From 709cd9dd6cba11065d3b92aa0be8cd3c705a4bdc Mon Sep 17 00:00:00 2001 From: Prateek Shourya Date: Tue, 21 May 2024 17:14:41 +0530 Subject: [PATCH 1/3] [WEB-1177] fix: sub-issues count mutation. (#4516) * [WEB-1177] fix: sub-issues count mutation. * chore: refactor sub_issues_count mutation logic. * fix: build errors. --- .../issues/issue-layouts/list/block.tsx | 7 +++-- .../properties/all-properties.tsx | 26 +++++++++---------- .../spreadsheet/columns/sub-issue-column.tsx | 8 +++--- .../issue-layouts/spreadsheet/issue-row.tsx | 4 +-- .../issues/sub-issues/issue-list-item.tsx | 5 ++-- .../issue/issue-details/sub_issues.store.ts | 19 ++++++++++++++ 6 files changed, 44 insertions(+), 25 deletions(-) diff --git a/web/components/issues/issue-layouts/list/block.tsx b/web/components/issues/issue-layouts/list/block.tsx index d38eb11997..df09a0762b 100644 --- a/web/components/issues/issue-layouts/list/block.tsx +++ b/web/components/issues/issue-layouts/list/block.tsx @@ -67,8 +67,9 @@ export const IssueBlock = observer((props: IssueBlockProps) => { !getIsIssuePeeked(issue.id) && setPeekIssue({ workspaceSlug, projectId: issue.project_id, issueId: issue.id, nestingLevel: nestingLevel }); - const issue = issuesMap[issueId]; - const subIssues = subIssuesStore.subIssuesByIssueId(issueId); + const issue = issuesMap[issueId]; + const subIssuesCount = issue.sub_issues_count; + const { isMobile } = usePlatformOS(); useEffect(() => { @@ -97,8 +98,6 @@ export const IssueBlock = observer((props: IssueBlockProps) => { const canEditIssueProperties = canEditProperties(issue.project_id); const projectIdentifier = getProjectIdentifierById(issue.project_id); - // if sub issues have been fetched for the issue, use that for count or use issue's sub_issues_count - const subIssuesCount = subIssues ? subIssues.length : issue.sub_issues_count; const paddingLeft = `${spacingLeft}px`; diff --git a/web/components/issues/issue-layouts/properties/all-properties.tsx b/web/components/issues/issue-layouts/properties/all-properties.tsx index 98c696b6ea..79f2fca70b 100644 --- a/web/components/issues/issue-layouts/properties/all-properties.tsx +++ b/web/components/issues/issue-layouts/properties/all-properties.tsx @@ -2,10 +2,13 @@ import { useCallback, useMemo } from "react"; import xor from "lodash/xor"; import { observer } from "mobx-react"; import { useRouter } from "next/router"; +// icons import { CalendarCheck2, CalendarClock, Layers, Link, Paperclip } from "lucide-react"; +// types import { TIssue, IIssueDisplayProperties, TIssuePriorities } from "@plane/types"; -// hooks +// ui import { Tooltip } from "@plane/ui"; +// components import { DateDropdown, EstimateDropdown, @@ -15,23 +18,19 @@ import { CycleDropdown, StateDropdown, } from "@/components/dropdowns"; -// helpers - -// types // constants import { ISSUE_UPDATED } from "@/constants/event-tracker"; import { EIssuesStoreType } from "@/constants/issue"; +// helpers import { cn } from "@/helpers/common.helper"; import { getDate, renderFormattedPayloadDate } from "@/helpers/date-time.helper"; import { shouldHighlightIssueDueDate } from "@/helpers/issue.helper"; +// hooks import { useEventTracker, useEstimate, useLabel, useIssues, useProjectState, useProject } from "@/hooks/store"; import { usePlatformOS } from "@/hooks/use-platform-os"; -// components +// local components import { IssuePropertyLabels } from "../properties/labels"; import { WithDisplayPropertiesHOC } from "../properties/with-display-properties-HOC"; -// helpers -// types -// constants export interface IIssueProperties { issue: TIssue; @@ -64,6 +63,7 @@ export const IssueProperties: React.FC = observer((props) => { const currentLayout = `${activeLayout} layout`; // derived values const stateDetails = getStateById(issue.state_id); + const subIssueCount = issue.sub_issues_count; const issueOperations = useMemo( () => ({ @@ -414,24 +414,24 @@ export const IssueProperties: React.FC = observer((props) => { !!properties.sub_issue_count && !!issue.sub_issues_count} + shouldRenderProperty={(properties) => !!properties.sub_issue_count && !!subIssueCount} > - +
{ e.stopPropagation(); e.preventDefault(); - if (issue.sub_issues_count) redirectToIssueDetail(); + if (subIssueCount) redirectToIssueDetail(); }} className={cn( "flex h-5 flex-shrink-0 items-center justify-center gap-2 overflow-hidden rounded border-[0.5px] border-custom-border-300 px-2.5 py-1", { - "hover:bg-custom-background-80 cursor-pointer": issue.sub_issues_count, + "hover:bg-custom-background-80 cursor-pointer": subIssueCount, } )} > -
{issue.sub_issues_count}
+
{subIssueCount}
diff --git a/web/components/issues/issue-layouts/spreadsheet/columns/sub-issue-column.tsx b/web/components/issues/issue-layouts/spreadsheet/columns/sub-issue-column.tsx index b36ace8264..c597bc698a 100644 --- a/web/components/issues/issue-layouts/spreadsheet/columns/sub-issue-column.tsx +++ b/web/components/issues/issue-layouts/spreadsheet/columns/sub-issue-column.tsx @@ -18,6 +18,8 @@ export const SpreadsheetSubIssueColumn: React.FC = observer((props: Props const router = useRouter(); // hooks const { workspaceSlug } = useAppRouter(); + // derived values + const subIssueCount = issue.sub_issues_count; const redirectToIssueDetail = () => { router.push({ @@ -30,15 +32,15 @@ export const SpreadsheetSubIssueColumn: React.FC = observer((props: Props return (
{}} + onClick={subIssueCount ? redirectToIssueDetail : () => {}} className={cn( "flex h-11 w-full items-center border-b-[0.5px] border-custom-border-200 px-2.5 py-1 text-xs hover:bg-custom-background-80", { - "cursor-pointer": issue?.sub_issues_count, + "cursor-pointer": subIssueCount, } )} > - {issue?.sub_issues_count} {issue?.sub_issues_count === 1 ? "sub-issue" : "sub-issues"} + {subIssueCount} {subIssueCount === 1 ? "sub-issue" : "sub-issues"}
); }); diff --git a/web/components/issues/issue-layouts/spreadsheet/issue-row.tsx b/web/components/issues/issue-layouts/spreadsheet/issue-row.tsx index 180cb9036c..03854fcad5 100644 --- a/web/components/issues/issue-layouts/spreadsheet/issue-row.tsx +++ b/web/components/issues/issue-layouts/spreadsheet/issue-row.tsx @@ -170,7 +170,6 @@ const IssueRowDetails = observer((props: IssueRowDetailsProps) => { const { subIssues: subIssuesStore, issue } = useIssueDetail(); const issueDetail = issue.getIssueById(issueId); - const subIssues = subIssuesStore.subIssuesByIssueId(issueId); const paddingLeft = `${spacingLeft}px`; @@ -204,8 +203,7 @@ const IssueRowDetails = observer((props: IssueRowDetailsProps) => { }; const disableUserActions = !canEditProperties(issueDetail.project_id); - // if sub issues have been fetched for the issue, use that for count or use issue's sub_issues_count - const subIssuesCount = subIssues ? subIssues.length : issueDetail.sub_issues_count; + const subIssuesCount = issueDetail.sub_issues_count; return ( <> diff --git a/web/components/issues/sub-issues/issue-list-item.tsx b/web/components/issues/sub-issues/issue-list-item.tsx index 23ba330a98..111d5d6c63 100644 --- a/web/components/issues/sub-issues/issue-list-item.tsx +++ b/web/components/issues/sub-issues/issue-list-item.tsx @@ -59,6 +59,7 @@ export const IssueListItem: React.FC = observer((props) => { undefined; const subIssueHelpers = subIssueHelpersByIssueId(parentIssueId); + const subIssueCount = issue?.sub_issues_count || 0; const handleIssuePeekOverview = (issue: TIssue) => workspaceSlug && @@ -77,7 +78,7 @@ export const IssueListItem: React.FC = observer((props) => { style={{ paddingLeft: `${spacingLeft}px` }} >
- {issue?.sub_issues_count > 0 && ( + {subIssueCount > 0 && ( <> {subIssueHelpers.preview_loader.includes(issue.id) ? (
@@ -205,7 +206,7 @@ export const IssueListItem: React.FC = observer((props) => {
)} - {subIssueHelpers.issue_visibility.includes(issueId) && issue.sub_issues_count && issue.sub_issues_count > 0 && ( + {subIssueHelpers.issue_visibility.includes(issueId) && subIssueCount > 0 && ( { pull(this.subIssues[parentIssueId], issueId); + // update sub-issues_count of the parent issue + set( + this.rootIssueDetailStore.rootIssueStore.issues.issuesMap, + [parentIssueId, "sub_issues_count"], + this.subIssues[parentIssueId].length + ); }); return; @@ -301,6 +314,12 @@ export class IssueSubIssuesStore implements IIssueSubIssuesStore { runInAction(() => { pull(this.subIssues[parentIssueId], issueId); + // update sub-issues_count of the parent issue + set( + this.rootIssueDetailStore.rootIssueStore.issues.issuesMap, + [parentIssueId, "sub_issues_count"], + this.subIssues[parentIssueId].length + ); }); return; From e6d626fbc5b545448a6a76a71376b9561c215802 Mon Sep 17 00:00:00 2001 From: rahulramesha <71900764+rahulramesha@users.noreply.github.com> Date: Wed, 22 May 2024 11:34:15 +0530 Subject: [PATCH 2/3] fix list view visual alignments (#4543) --- packages/ui/src/drag-handle.tsx | 2 +- web/components/issues/issue-layouts/list/block-root.tsx | 2 +- web/components/issues/issue-layouts/list/block.tsx | 4 ++-- .../issues/issue-layouts/list/headers/group-by-card.tsx | 2 +- .../issues/issue-layouts/list/quick-add-issue-form.tsx | 2 +- 5 files changed, 6 insertions(+), 6 deletions(-) diff --git a/packages/ui/src/drag-handle.tsx b/packages/ui/src/drag-handle.tsx index d04f7929f2..0496f86dee 100644 --- a/packages/ui/src/drag-handle.tsx +++ b/packages/ui/src/drag-handle.tsx @@ -17,7 +17,7 @@ export const DragHandle = forwardRef((pro return (
{displayProperties && displayProperties?.key && ( -
+
{projectIdentifier}-{issue.sequence_id}
)} diff --git a/web/components/issues/issue-layouts/list/headers/group-by-card.tsx b/web/components/issues/issue-layouts/list/headers/group-by-card.tsx index e6883a1003..d479bbeaa1 100644 --- a/web/components/issues/issue-layouts/list/headers/group-by-card.tsx +++ b/web/components/issues/issue-layouts/list/headers/group-by-card.tsx @@ -65,7 +65,7 @@ export const HeaderGroupByCard = observer( return ( <> -
+
{icon ? icon : }
diff --git a/web/components/issues/issue-layouts/list/quick-add-issue-form.tsx b/web/components/issues/issue-layouts/list/quick-add-issue-form.tsx index 419c3bc0e1..8123b4ee61 100644 --- a/web/components/issues/issue-layouts/list/quick-add-issue-form.tsx +++ b/web/components/issues/issue-layouts/list/quick-add-issue-form.tsx @@ -152,7 +152,7 @@ export const ListQuickAddIssueForm: FC = observer((props
) : (
setIsOpen(true)} > From 1c377163d2b184fae5806ee33ef0325d79e51ade Mon Sep 17 00:00:00 2001 From: sriram veeraghanta Date: Wed, 22 May 2024 12:25:27 +0530 Subject: [PATCH 3/3] fix: converting takeoff scripts to docker entry points --- ...akeoff.local => docker-entry-api-local.sh} | 0 .../bin/{takeoff => docker-entry-api.sh} | 0 apiserver/bin/{beat => docker-entry-beat.sh} | 0 apiserver/bin/docker-entry-migrator.sh | 6 + .../bin/{worker => docker-entry-worker.sh} | 0 deploy/coolify/README.md | 8 - deploy/coolify/coolify-docker-compose.yml | 230 ------------------ deploy/selfhost/docker-compose.yml | 10 +- docker-compose-local.yml | 17 +- docker-compose.yml | 10 +- 10 files changed, 21 insertions(+), 260 deletions(-) rename apiserver/bin/{takeoff.local => docker-entry-api-local.sh} (100%) rename apiserver/bin/{takeoff => docker-entry-api.sh} (100%) rename apiserver/bin/{beat => docker-entry-beat.sh} (100%) mode change 100755 => 100644 create mode 100644 apiserver/bin/docker-entry-migrator.sh rename apiserver/bin/{worker => docker-entry-worker.sh} (100%) delete mode 100644 deploy/coolify/README.md delete mode 100644 deploy/coolify/coolify-docker-compose.yml diff --git a/apiserver/bin/takeoff.local b/apiserver/bin/docker-entry-api-local.sh similarity index 100% rename from apiserver/bin/takeoff.local rename to apiserver/bin/docker-entry-api-local.sh diff --git a/apiserver/bin/takeoff b/apiserver/bin/docker-entry-api.sh similarity index 100% rename from apiserver/bin/takeoff rename to apiserver/bin/docker-entry-api.sh diff --git a/apiserver/bin/beat b/apiserver/bin/docker-entry-beat.sh old mode 100755 new mode 100644 similarity index 100% rename from apiserver/bin/beat rename to apiserver/bin/docker-entry-beat.sh diff --git a/apiserver/bin/docker-entry-migrator.sh b/apiserver/bin/docker-entry-migrator.sh new file mode 100644 index 0000000000..104b39024b --- /dev/null +++ b/apiserver/bin/docker-entry-migrator.sh @@ -0,0 +1,6 @@ +#!/bin/bash +set -e + +python manage.py wait_for_db $1 + +python manage.py migrate $1 \ No newline at end of file diff --git a/apiserver/bin/worker b/apiserver/bin/docker-entry-worker.sh similarity index 100% rename from apiserver/bin/worker rename to apiserver/bin/docker-entry-worker.sh diff --git a/deploy/coolify/README.md b/deploy/coolify/README.md deleted file mode 100644 index 0bf6b4d63d..0000000000 --- a/deploy/coolify/README.md +++ /dev/null @@ -1,8 +0,0 @@ -## Coolify Setup - -Access the `coolify-docker-compose` file [here](https://raw.githubusercontent.com/makeplane/plane/master/deploy/coolify/coolify-docker-compose.yml) or download using using below command - -``` -curl -fsSL https://raw.githubusercontent.com/makeplane/plane/master/deploy/coolify/coolify-docker-compose.yml - -``` diff --git a/deploy/coolify/coolify-docker-compose.yml b/deploy/coolify/coolify-docker-compose.yml deleted file mode 100644 index 8ac5f44f08..0000000000 --- a/deploy/coolify/coolify-docker-compose.yml +++ /dev/null @@ -1,230 +0,0 @@ - -services: - web: - container_name: web - platform: linux/amd64 - image: makeplane/plane-frontend:latest - restart: always - command: /usr/local/bin/start.sh web/server.js web - environment: - - NEXT_PUBLIC_DEPLOY_URL=$SERVICE_FQDN_SPACE_8082 - depends_on: - - api - - worker - - space: - container_name: space - platform: linux/amd64 - image: makeplane/plane-space:latest - restart: always - command: /usr/local/bin/start.sh space/server.js space - environment: - - SERVICE_FQDN_SPACE_8082=/api - depends_on: - - api - - worker - - web - - api: - container_name: api - platform: linux/amd64 - image: makeplane/plane-backend:latest - restart: always - command: ./bin/takeoff - environment: - - DEBUG=${DEBUG:-0} - - SENTRY_DSN=${SENTRY_DSN:-""} - - PGUSER=${PGUSER:-plane} - - PGPASSWORD=${PGPASSWORD:-plane} - - PGHOST=${PGHOST:-plane-db} - - PGDATABASE=${PGDATABASE:-plane} - - DATABASE_URL=postgresql://${PGUSER}:${PGPASSWORD}@${PGHOST}/${PGDATABASE} - - REDIS_HOST=${REDIS_HOST:-plane-redis} - - REDIS_PORT=${REDIS_PORT:-6379} - - REDIS_URL=redis://${REDIS_HOST}:6379/ - - EMAIL_HOST=${EMAIL_HOST:-""} - - EMAIL_HOST_USER=${EMAIL_HOST_USER:-""} - - EMAIL_HOST_PASSWORD=${EMAIL_HOST_PASSWORD:-""} - - EMAIL_PORT=${EMAIL_PORT:-587} - - EMAIL_FROM=${EMAIL_FROM:-Team Plane } - - EMAIL_USE_TLS=${EMAIL_USE_TLS:-1} - - EMAIL_USE_SSL=${EMAIL_USE_SSL:-0} - - AWS_REGION=${AWS_REGION:-""} - - AWS_ACCESS_KEY_ID=${AWS_ACCESS_KEY_ID:-access-key} - - AWS_SECRET_ACCESS_KEY=${AWS_SECRET_ACCESS_KEY:-secret-key} - - AWS_S3_ENDPOINT_URL=${AWS_S3_ENDPOINT_URL:-http://plane-minio:9000} - - AWS_S3_BUCKET_NAME=${AWS_S3_BUCKET_NAME:-uploads} - - FILE_SIZE_LIMIT=${FILE_SIZE_LIMIT:-5242880} - - OPENAI_API_BASE=${OPENAI_API_BASE:-https://api.openai.com/v1} - - OPENAI_API_KEY=${OPENAI_API_KEY:-sk-} - - GPT_ENGINE=${GPT_ENGINE:-gpt-3.5-turbo} - - GITHUB_CLIENT_SECRET=${GITHUB_CLIENT_SECRET:-""} - - DOCKERIZED=${DOCKERIZED:-1} - - USE_MINIO=${USE_MINIO:-1} - - NGINX_PORT=${NGINX_PORT:-8082} - - DEFAULT_EMAIL=${DEFAULT_EMAIL:-captain@plane.so} - - DEFAULT_PASSWORD=${DEFAULT_PASSWORD:-password123} - - ENABLE_SIGNUP=${ENABLE_SIGNUP:-1} - - ENABLE_EMAIL_PASSWORD=${ENABLE_EMAIL_PASSWORD:-1} - - ENABLE_MAGIC_LINK_LOGIN=${ENABLE_MAGIC_LINK_LOGIN:-0} - - SECRET_KEY=${SECRET_KEY:-60gp0byfz2dvffa45cxl20p1scy9xbpf6d8c5y0geejgkyp1b5} - - WEB_URL=$SERVICE_FQDN_PLANE_8082 - depends_on: - - plane-db - - plane-redis - - worker: - container_name: bgworker - platform: linux/amd64 - image: makeplane/plane-backend:latest - restart: always - command: ./bin/worker - environment: - - DEBUG=${DEBUG:-0} - - SENTRY_DSN=${SENTRY_DSN:-""} - - PGUSER=${PGUSER:-plane} - - PGPASSWORD=${PGPASSWORD:-plane} - - PGHOST=${PGHOST:-plane-db} - - PGDATABASE=${PGDATABASE:-plane} - - DATABASE_URL=postgresql://${PGUSER}:${PGPASSWORD}@${PGHOST}/${PGDATABASE} - - REDIS_HOST=${REDIS_HOST:-plane-redis} - - REDIS_PORT=${REDIS_PORT:-6379} - - REDIS_URL=redis://${REDIS_HOST}:6379/ - - EMAIL_HOST=${EMAIL_HOST:-""} - - EMAIL_HOST_USER=${EMAIL_HOST_USER:-""} - - EMAIL_HOST_PASSWORD=${EMAIL_HOST_PASSWORD:-""} - - EMAIL_PORT=${EMAIL_PORT:-587} - - EMAIL_FROM=${EMAIL_FROM:-Team Plane } - - EMAIL_USE_TLS=${EMAIL_USE_TLS:-1} - - EMAIL_USE_SSL=${EMAIL_USE_SSL:-0} - - AWS_REGION=${AWS_REGION:-""} - - AWS_ACCESS_KEY_ID=${AWS_ACCESS_KEY_ID:-access-key} - - AWS_SECRET_ACCESS_KEY=${AWS_SECRET_ACCESS_KEY:-secret-key} - - AWS_S3_ENDPOINT_URL=${AWS_S3_ENDPOINT_URL:-http://plane-minio:9000} - - AWS_S3_BUCKET_NAME=${AWS_S3_BUCKET_NAME:-uploads} - - FILE_SIZE_LIMIT=${FILE_SIZE_LIMIT:-5242880} - - OPENAI_API_BASE=${OPENAI_API_BASE:-https://api.openai.com/v1} - - OPENAI_API_KEY=${OPENAI_API_KEY:-sk-} - - GPT_ENGINE=${GPT_ENGINE:-gpt-3.5-turbo} - - GITHUB_CLIENT_SECRET=${GITHUB_CLIENT_SECRET:-""} - - DOCKERIZED=${DOCKERIZED:-1} - - USE_MINIO=${USE_MINIO:-1} - - NGINX_PORT=${NGINX_PORT:-8082} - - DEFAULT_EMAIL=${DEFAULT_EMAIL:-captain@plane.so} - - DEFAULT_PASSWORD=${DEFAULT_PASSWORD:-password123} - - ENABLE_SIGNUP=${ENABLE_SIGNUP:-1} - - SECRET_KEY=${SECRET_KEY:-60gp0byfz2dvffa45cxl20p1scy9xbpf6d8c5y0geejgkyp1b5} - depends_on: - - api - - plane-db - - plane-redis - - beat-worker: - container_name: beatworker - platform: linux/amd64 - image: makeplane/plane-backend:latest - restart: always - command: ./bin/beat - environment: - - DEBUG=${DEBUG:-0} - - SENTRY_DSN=${SENTRY_DSN:-""} - - PGUSER=${PGUSER:-plane} - - PGPASSWORD=${PGPASSWORD:-plane} - - PGHOST=${PGHOST:-plane-db} - - PGDATABASE=${PGDATABASE:-plane} - - DATABASE_URL=postgresql://${PGUSER}:${PGPASSWORD}@${PGHOST}/${PGDATABASE} - - REDIS_HOST=${REDIS_HOST:-plane-redis} - - REDIS_PORT=${REDIS_PORT:-6379} - - REDIS_URL=redis://${REDIS_HOST}:6379/ - - EMAIL_HOST=${EMAIL_HOST:-""} - - EMAIL_HOST_USER=${EMAIL_HOST_USER:-""} - - EMAIL_HOST_PASSWORD=${EMAIL_HOST_PASSWORD:-""} - - EMAIL_PORT=${EMAIL_PORT:-587} - - EMAIL_FROM=${EMAIL_FROM:-Team Plane } - - EMAIL_USE_TLS=${EMAIL_USE_TLS:-1} - - EMAIL_USE_SSL=${EMAIL_USE_SSL:-0} - - AWS_REGION=${AWS_REGION:-""} - - AWS_ACCESS_KEY_ID=${AWS_ACCESS_KEY_ID:-access-key} - - AWS_SECRET_ACCESS_KEY=${AWS_SECRET_ACCESS_KEY:-secret-key} - - AWS_S3_ENDPOINT_URL=${AWS_S3_ENDPOINT_URL:-http://plane-minio:9000} - - AWS_S3_BUCKET_NAME=${AWS_S3_BUCKET_NAME:-uploads} - - FILE_SIZE_LIMIT=${FILE_SIZE_LIMIT:-5242880} - - OPENAI_API_BASE=${OPENAI_API_BASE:-https://api.openai.com/v1} - - OPENAI_API_KEY=${OPENAI_API_KEY:-sk-} - - GPT_ENGINE=${GPT_ENGINE:-gpt-3.5-turbo} - - GITHUB_CLIENT_SECRET=${GITHUB_CLIENT_SECRET:-""} - - DOCKERIZED=${DOCKERIZED:-1} - - USE_MINIO=${USE_MINIO:-1} - - NGINX_PORT=${NGINX_PORT:-8082} - - DEFAULT_EMAIL=${DEFAULT_EMAIL:-captain@plane.so} - - DEFAULT_PASSWORD=${DEFAULT_PASSWORD:-password123} - - ENABLE_SIGNUP=${ENABLE_SIGNUP:-1} - - SECRET_KEY=${SECRET_KEY:-60gp0byfz2dvffa45cxl20p1scy9xbpf6d8c5y0geejgkyp1b5} - depends_on: - - api - - plane-db - - plane-redis - - plane-db: - container_name: plane-db - image: postgres:15.2-alpine - restart: always - command: postgres -c 'max_connections=1000' - volumes: - - pgdata:/var/lib/postgresql/data - environment: - - POSTGRES_USER=${POSTGRES_USER:-plane} - - POSTGRES_PASSWORD=${POSTGRES_PASSWORD:-plane} - - POSTGRES_DB=${POSTGRES_DB:-plane} - - PGDATA=${PGDATA:-/var/lib/postgresql/data} - - plane-redis: - container_name: plane-redis - image: redis:7.2.4-alpine - restart: always - volumes: - - redisdata:/data - - plane-minio: - container_name: plane-minio - image: minio/minio - restart: always - command: server /export --console-address ":9090" - volumes: - - uploads:/export - environment: - - MINIO_ROOT_USER=${MINIO_ROOT_USER:-access-key} - - MINIO_ROOT_PASSWORD=${MINIO_ROOT_PASSWORD:-secret-key} - - createbuckets: - image: minio/mc - entrypoint: > - /bin/sh -c " /usr/bin/mc config host add plane-minio http://plane-minio:9000 \$AWS_ACCESS_KEY_ID \$AWS_SECRET_ACCESS_KEY; /usr/bin/mc mb plane-minio/\$AWS_S3_BUCKET_NAME; /usr/bin/mc anonymous set download plane-minio/\$AWS_S3_BUCKET_NAME; exit 0; " - environment: - - AWS_ACCESS_KEY_ID=${AWS_ACCESS_KEY_ID:-access-key} - - AWS_SECRET_ACCESS_KEY=${AWS_SECRET_ACCESS_KEY:-secret-key} - - AWS_S3_BUCKET_NAME=${AWS_S3_BUCKET_NAME:-uploads} - depends_on: - - plane-minio - - # Comment this if you already have a reverse proxy running - proxy: - container_name: proxy - platform: linux/amd64 - image: makeplane/plane-proxy:latest - ports: - - 8082:80 - environment: - - SERVICE_FQDN_PLANE_8082 - - NGINX_PORT=${NGINX_PORT:-8082} - - FILE_SIZE_LIMIT=${FILE_SIZE_LIMIT:-5242880} - - BUCKET_NAME=${AWS_S3_BUCKET_NAME:-uploads} - depends_on: - - web - - api - - space - -volumes: - pgdata: - redisdata: - uploads: diff --git a/deploy/selfhost/docker-compose.yml b/deploy/selfhost/docker-compose.yml index 4d98ec7c91..1b6d99ba92 100644 --- a/deploy/selfhost/docker-compose.yml +++ b/deploy/selfhost/docker-compose.yml @@ -86,7 +86,7 @@ services: platform: ${DOCKER_PLATFORM:-} pull_policy: ${PULL_POLICY:-always} restart: unless-stopped - command: ./bin/takeoff + command: ./bin/docker-entry-api.sh deploy: replicas: ${API_REPLICAS:-1} volumes: @@ -101,7 +101,7 @@ services: platform: ${DOCKER_PLATFORM:-} pull_policy: ${PULL_POLICY:-always} restart: unless-stopped - command: ./bin/worker + command: ./bin/docker-entry-worker.sh volumes: - logs_worker:/code/plane/logs depends_on: @@ -115,7 +115,7 @@ services: platform: ${DOCKER_PLATFORM:-} pull_policy: ${PULL_POLICY:-always} restart: unless-stopped - command: ./bin/beat + command: ./bin/docker-entry-beat.sh volumes: - logs_beat-worker:/code/plane/logs depends_on: @@ -129,9 +129,7 @@ services: platform: ${DOCKER_PLATFORM:-} pull_policy: ${PULL_POLICY:-always} restart: no - command: > - sh -c "python manage.py wait_for_db && - python manage.py migrate" + command: ./bin/docker-entry-migrator.sh volumes: - logs_migrator:/code/plane/logs depends_on: diff --git a/docker-compose-local.yml b/docker-compose-local.yml index 3dce85f3aa..689f08019f 100644 --- a/docker-compose-local.yml +++ b/docker-compose-local.yml @@ -6,7 +6,6 @@ volumes: redisdata: uploads: pgdata: - services: plane-redis: @@ -16,7 +15,7 @@ services: - dev_env volumes: - redisdata:/data - + plane-minio: image: minio/minio restart: unless-stopped @@ -30,7 +29,7 @@ services: environment: MINIO_ROOT_USER: ${AWS_ACCESS_KEY_ID} MINIO_ROOT_PASSWORD: ${AWS_SECRET_ACCESS_KEY} - + plane-db: image: postgres:15.2-alpine restart: unless-stopped @@ -98,13 +97,13 @@ services: - dev_env volumes: - ./apiserver:/code - command: ./bin/takeoff.local + command: ./bin/docker-entry-api.sh env_file: - ./apiserver/.env depends_on: - plane-db - plane-redis - + worker: build: context: ./apiserver @@ -116,7 +115,7 @@ services: - dev_env volumes: - ./apiserver:/code - command: ./bin/worker + command: ./bin/docker-entry-worker.sh env_file: - ./apiserver/.env depends_on: @@ -135,7 +134,7 @@ services: - dev_env volumes: - ./apiserver:/code - command: ./bin/beat + command: ./bin/docker-entry-beat.sh env_file: - ./apiserver/.env depends_on: @@ -154,9 +153,7 @@ services: - dev_env volumes: - ./apiserver:/code - command: > - sh -c "python manage.py wait_for_db --settings=plane.settings.local && - python manage.py migrate --settings=plane.settings.local" + command: ./bin/docker-entry-migrator.sh --settings=plane.settings.local env_file: - ./apiserver/.env depends_on: diff --git a/docker-compose.yml b/docker-compose.yml index be10081938..dfdbddfbef 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -45,7 +45,7 @@ services: args: DOCKER_BUILDKIT: 1 restart: always - command: ./bin/takeoff + command: ./bin/docker-entry-api.sh env_file: - ./apiserver/.env depends_on: @@ -60,7 +60,7 @@ services: args: DOCKER_BUILDKIT: 1 restart: always - command: ./bin/worker + command: ./bin/docker-entry-worker.sh env_file: - ./apiserver/.env depends_on: @@ -76,7 +76,7 @@ services: args: DOCKER_BUILDKIT: 1 restart: always - command: ./bin/beat + command: ./bin/docker-entry-beat.sh env_file: - ./apiserver/.env depends_on: @@ -92,9 +92,7 @@ services: args: DOCKER_BUILDKIT: 1 restart: no - command: > - sh -c "python manage.py wait_for_db && - python manage.py migrate" + command: ./bin/docker-entry-migrator.sh env_file: - ./apiserver/.env depends_on: