From c681bfca74319b45adde43ad8afdbdf51bf78c46 Mon Sep 17 00:00:00 2001 From: naterfute Date: Mon, 31 Mar 2025 16:28:43 -0700 Subject: [PATCH 01/65] feat: add forgejo --- blueprints/forgejo/docker-compose.yml | 35 +++++++++++++++++++++++ blueprints/forgejo/forgejo.svg | 40 +++++++++++++++++++++++++++ blueprints/forgejo/template.toml | 11 ++++++++ meta.json | 16 +++++++++++ 4 files changed, 102 insertions(+) create mode 100644 blueprints/forgejo/docker-compose.yml create mode 100644 blueprints/forgejo/forgejo.svg create mode 100644 blueprints/forgejo/template.toml diff --git a/blueprints/forgejo/docker-compose.yml b/blueprints/forgejo/docker-compose.yml new file mode 100644 index 0000000..c1ad3eb --- /dev/null +++ b/blueprints/forgejo/docker-compose.yml @@ -0,0 +1,35 @@ +version: "3.8" +services: + gitea: + image: codeberg.org/forgejo/forgejo:10 + environment: + - USER_UID=${USER_UID} + - USER_GID=${USER_GID} + - FORGEJO__database__DB_TYPE=postgres + - FORGEJO__database__HOST=db:5432 + - FORGEJO__database__NAME=forgejo + - FORGEJO__database__USER=forgejo + - FORGEJO__database__PASSWD=forgejo + restart: always + + volumes: + - gitea_server:/data + - /etc/timezone:/etc/timezone:ro + - /etc/localtime:/etc/localtime:ro + depends_on: + - db + + db: + image: postgres:17 + restart: always + environment: + - POSTGRES_USER=forgejo + - POSTGRES_PASSWORD=forgejo + - POSTGRES_DB=forgejo + + volumes: + - forgejo_db:/var/lib/postgresql/data + +volumes: + forgejo_db: + forgejo_server: \ No newline at end of file diff --git a/blueprints/forgejo/forgejo.svg b/blueprints/forgejo/forgejo.svg new file mode 100644 index 0000000..9c46d82 --- /dev/null +++ b/blueprints/forgejo/forgejo.svg @@ -0,0 +1,40 @@ + + + + + Forgejo logo + Caesar Schinas + + + + + + + + + + + + + diff --git a/blueprints/forgejo/template.toml b/blueprints/forgejo/template.toml new file mode 100644 index 0000000..56f45c1 --- /dev/null +++ b/blueprints/forgejo/template.toml @@ -0,0 +1,11 @@ +[variables] +main_domain = "${domain}" + +[config] +env = ["USER_UID=1000", "USER_GID=1000"] +mounts = [] + +[[config.domains]] +serviceName = "forgejo" +port = 3_000 +host = "${main_domain}" diff --git a/meta.json b/meta.json index e335c15..ac9da65 100644 --- a/meta.json +++ b/meta.json @@ -179,6 +179,22 @@ "applications" ] }, + { + "id": "forgejo", + "name": "Forgejo", + "version": "10", + "description": "Forgejo is a self-hosted lightweight software forge. Easy to install and low maintenance, it just does the job", + "logo": "forgejo.svg", + "links": { + "github": "https://codeberg.org/forgejo/forgejo", + "website": "https://forgejo.org/", + "docs": "https://forgejo.org/docs/latest/" + }, + "tags": [ + "self-hosted", + "storage" + ] + }, { "id": "ghost", "name": "Ghost", From bac5e1d3ac9c77e9cf2bd4811e18d7974f9563a1 Mon Sep 17 00:00:00 2001 From: naterfute Date: Mon, 31 Mar 2025 16:30:55 -0700 Subject: [PATCH 02/65] feat: workflow dispatch build-previews --- .github/workflows/build-preview.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/build-preview.yml b/.github/workflows/build-preview.yml index 3c56b3f..7d8a277 100644 --- a/.github/workflows/build-preview.yml +++ b/.github/workflows/build-preview.yml @@ -7,6 +7,7 @@ concurrency: on: pull_request: types: [opened, synchronize] + workflow_dispatch: jobs: build-preview: @@ -32,4 +33,4 @@ jobs: uses: actions/upload-artifact@v4 with: name: preview-build - path: app/dist \ No newline at end of file + path: app/dist From f311009a2628f6d38dd42c17b7f9051e275d1d82 Mon Sep 17 00:00:00 2001 From: scanash00 Date: Mon, 31 Mar 2025 18:36:06 -0800 Subject: [PATCH 03/65] feat: add Lodestone --- blueprints/lodestone/docker-compose.yml | 21 +++++++++++++++++++++ blueprints/lodestone/lodestone.png | Bin 0 -> 11143 bytes blueprints/lodestone/template.toml | 11 +++++++++++ meta.json | 15 +++++++++++++++ 4 files changed, 47 insertions(+) create mode 100644 blueprints/lodestone/docker-compose.yml create mode 100644 blueprints/lodestone/lodestone.png create mode 100644 blueprints/lodestone/template.toml diff --git a/blueprints/lodestone/docker-compose.yml b/blueprints/lodestone/docker-compose.yml new file mode 100644 index 0000000..de02420 --- /dev/null +++ b/blueprints/lodestone/docker-compose.yml @@ -0,0 +1,21 @@ +version: '3.8' + +services: + lodestone: + image: ghcr.io/lodestone-team/lodestone_core + container_name: lodestone + ports: + - "16662:16662" + - "25565-25590:25565-25590" + volumes: + - lodestone:/home/user/.lodestone + restart: unless-stopped + + lodestone_dashboard: + image: ghcr.io/lodestone-team/lodestone_dashboard:v0.5.1 + container_name: lodestone_dashboard + restart: always + +volumes: + lodestone: + driver: local \ No newline at end of file diff --git a/blueprints/lodestone/lodestone.png b/blueprints/lodestone/lodestone.png new file mode 100644 index 0000000000000000000000000000000000000000..cc23e60a57e738c664358705d454f28d1de16e84 GIT binary patch literal 11143 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 Date: Mon, 31 Mar 2025 18:41:53 -0800 Subject: [PATCH 04/65] feat: add aditional tags to Lodestone --- meta.json | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/meta.json b/meta.json index 833c4dc..0308741 100644 --- a/meta.json +++ b/meta.json @@ -222,7 +222,9 @@ "docs": "https://github.com/Lodestone-Team/lodestone/wiki" }, "tags": [ - "minecraft" + "minecraft", + "hosting", + "server" ] }, { From b7e9b7fc394a4411b0f1c95eea84a7158f89ef43 Mon Sep 17 00:00:00 2001 From: naterfute Date: Mon, 31 Mar 2025 20:42:55 -0700 Subject: [PATCH 05/65] mattermost --- blueprints/mattermost/docker-compose.yml | 50 ++++++++++++++++++++++++ blueprints/mattermost/template.toml | 19 +++++++++ 2 files changed, 69 insertions(+) create mode 100644 blueprints/mattermost/docker-compose.yml create mode 100644 blueprints/mattermost/template.toml diff --git a/blueprints/mattermost/docker-compose.yml b/blueprints/mattermost/docker-compose.yml new file mode 100644 index 0000000..5b29df2 --- /dev/null +++ b/blueprints/mattermost/docker-compose.yml @@ -0,0 +1,50 @@ +# https://docs.docker.com/compose/environment-variables/ +services: + postgres: + image: postgres:17 + restart: unless-stopped + security_opt: + - no-new-privileges:true + pids_limit: 100 + read_only: true + tmpfs: + - /tmp + - /var/run/postgresql + volumes: + - ${POSTGRES_DATA_PATH}:/var/lib/postgresql/data + environment: + - TZ + - POSTGRES_USER + - POSTGRES_PASSWORD + - POSTGRES_DB + + mattermost: + depends_on: + - postgres + image: mattermost/mattermost-team-edition:9.11.6 + restart: unless-stopped + security_opt: + - no-new-privileges:true + pids_limit: 200 + read_only: ${MATTERMOST_CONTAINER_READONLY} + tmpfs: + - /tmp + volumes: + - mattermostconf:/mattermost/config:rw + - mattermostdata:/mattermost/data:rw + - mattermostlogs:/mattermost/logs:rw + - mattermostplugsin:/mattermost/plugins:rw + - mattermostclientplugins:/mattermost/client/plugins:rw + - mattermostBleveIndexes:/mattermost/bleve-indexes:rw + + environment: + - DOMAIN=mm.example.com + - TZ + - POSTGRES_USER + - POSTGRES_PASSWORD + - POSTGRES_DB + - MM_SQLSETTINGS_DRIVERNAME + - MM_SQLSETTINGS_DATASOURCE + - MM_BLEVESETTINGS_INDEXDIR + - MM_SERVICESETTINGS_SITEURL + - APP_PORT diff --git a/blueprints/mattermost/template.toml b/blueprints/mattermost/template.toml new file mode 100644 index 0000000..b6461c6 --- /dev/null +++ b/blueprints/mattermost/template.toml @@ -0,0 +1,19 @@ +[variables] +main_domain = "${domain}" + +[config] +env = [ +"POSTGRES_USER=mmuser", +"POSTGRES_PASSWORD=mmuser_password", +"POSTGRES_DB=mattermost", +"MM_SQLSETTINGS_DRIVERNAME=postgres", +"MM_SQLSETTINGS_DATASOURCE=postgres://${POSTGRES_USER}:${POSTGRES_PASSWORD}@postgres:5432/${POSTGRES_DB}?sslmode=disable&connect_timeout=10", +"APP_PORT=8065", +"TZ=UTC", +] +mounts = [] + +[[config.domains]] +serviceName = "mattermost" +port = 8065 +host = "${main_domain}" From ac498a20c2fc76c42475ef16681fcadc00b0d199 Mon Sep 17 00:00:00 2001 From: naterfute Date: Mon, 31 Mar 2025 20:47:30 -0700 Subject: [PATCH 06/65] fix: add mattermost to meta.json --- meta.json | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/meta.json b/meta.json index 0308741..6e33d25 100644 --- a/meta.json +++ b/meta.json @@ -365,6 +365,22 @@ "search" ] }, + { + "id": "mattermost", + "name": "Mattermost", + "version": "9.11.6", + "description": "A single point of collaboration. Designed specifically for digital operations.", + "logo": "meilisearch.png", + "links": { + "github": "https://github.com/mattermost/mattermost", + "website": "https://mattermost.com/", + "docs": "https://docs.mattermost.com/" + }, + "tags": [ + "chat", + "self-hosted" + ] + }, { "id": "phpmyadmin", "name": "Phpmyadmin", From cc1d60f92572a84ea79ba15d649069741730d596 Mon Sep 17 00:00:00 2001 From: naterfute Date: Mon, 31 Mar 2025 20:50:46 -0700 Subject: [PATCH 07/65] fix: add mattermost image --- blueprints/mattermost/mattermost.png | Bin 0 -> 96213 bytes meta.json | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) create mode 100644 blueprints/mattermost/mattermost.png diff --git a/blueprints/mattermost/mattermost.png b/blueprints/mattermost/mattermost.png new file mode 100644 index 0000000000000000000000000000000000000000..90113e9eb08cea6a179615927973dddfe74af9f0 GIT binary patch literal 96213 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 SYh(?;{xno{l&cjj!~YM)BGqyL literal 0 HcmV?d00001 diff --git a/meta.json b/meta.json index 6e33d25..3fdc5f6 100644 --- a/meta.json +++ b/meta.json @@ -370,7 +370,7 @@ "name": "Mattermost", "version": "9.11.6", "description": "A single point of collaboration. Designed specifically for digital operations.", - "logo": "meilisearch.png", + "logo": "mattermost.png", "links": { "github": "https://github.com/mattermost/mattermost", "website": "https://mattermost.com/", From da1904fd2028f78ab271f854e1b96ffe153126aa Mon Sep 17 00:00:00 2001 From: naterfute Date: Mon, 31 Mar 2025 21:30:09 -0700 Subject: [PATCH 08/65] fix: forgejo --- blueprints/forgejo/docker-compose.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/blueprints/forgejo/docker-compose.yml b/blueprints/forgejo/docker-compose.yml index c1ad3eb..2054d1b 100644 --- a/blueprints/forgejo/docker-compose.yml +++ b/blueprints/forgejo/docker-compose.yml @@ -1,6 +1,6 @@ version: "3.8" services: - gitea: + forgejo: image: codeberg.org/forgejo/forgejo:10 environment: - USER_UID=${USER_UID} From fcf8c695caa89de97b1070e3762212c7d3c6f9ea Mon Sep 17 00:00:00 2001 From: naterfute Date: Mon, 31 Mar 2025 21:39:24 -0700 Subject: [PATCH 09/65] fix: forgejo --- blueprints/forgejo/docker-compose.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/blueprints/forgejo/docker-compose.yml b/blueprints/forgejo/docker-compose.yml index 2054d1b..9e0a0e7 100644 --- a/blueprints/forgejo/docker-compose.yml +++ b/blueprints/forgejo/docker-compose.yml @@ -13,7 +13,7 @@ services: restart: always volumes: - - gitea_server:/data + - forgejo_server:/data - /etc/timezone:/etc/timezone:ro - /etc/localtime:/etc/localtime:ro depends_on: From 035222c91a73c881deeccb935c2ae1aab13868f6 Mon Sep 17 00:00:00 2001 From: naterfute Date: Mon, 31 Mar 2025 21:46:38 -0700 Subject: [PATCH 10/65] Revert "feat: workflow dispatch build-previews" This reverts commit bac5e1d3ac9c77e9cf2bd4811e18d7974f9563a1. --- .github/workflows/build-preview.yml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.github/workflows/build-preview.yml b/.github/workflows/build-preview.yml index 7d8a277..3c56b3f 100644 --- a/.github/workflows/build-preview.yml +++ b/.github/workflows/build-preview.yml @@ -7,7 +7,6 @@ concurrency: on: pull_request: types: [opened, synchronize] - workflow_dispatch: jobs: build-preview: @@ -33,4 +32,4 @@ jobs: uses: actions/upload-artifact@v4 with: name: preview-build - path: app/dist + path: app/dist \ No newline at end of file From cee3521a7fb5463c98eca1975bd6c84521d74633 Mon Sep 17 00:00:00 2001 From: naterfute Date: Mon, 31 Mar 2025 21:46:53 -0700 Subject: [PATCH 11/65] fix: random comment --- blueprints/mattermost/docker-compose.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/blueprints/mattermost/docker-compose.yml b/blueprints/mattermost/docker-compose.yml index 5b29df2..052d0ba 100644 --- a/blueprints/mattermost/docker-compose.yml +++ b/blueprints/mattermost/docker-compose.yml @@ -1,4 +1,3 @@ -# https://docs.docker.com/compose/environment-variables/ services: postgres: image: postgres:17 From c226a679f63ccc2ae5353c2e33457743c707633b Mon Sep 17 00:00:00 2001 From: scanash00 Date: Mon, 31 Mar 2025 20:53:52 -0800 Subject: [PATCH 12/65] feat: add dragonfly --- blueprints/dragonfly-db/docker-compose.yml | 12 +++++++++ blueprints/dragonfly-db/dragonfly-db.png | Bin 0 -> 3603 bytes blueprints/dragonfly-db/template.toml | 27 +++++++++++++++++++++ meta.json | 16 ++++++++++++ 4 files changed, 55 insertions(+) create mode 100644 blueprints/dragonfly-db/docker-compose.yml create mode 100644 blueprints/dragonfly-db/dragonfly-db.png create mode 100644 blueprints/dragonfly-db/template.toml diff --git a/blueprints/dragonfly-db/docker-compose.yml b/blueprints/dragonfly-db/docker-compose.yml new file mode 100644 index 0000000..0eba3ec --- /dev/null +++ b/blueprints/dragonfly-db/docker-compose.yml @@ -0,0 +1,12 @@ +version: '3.8' +services: + dragonfly: + image: 'docker.dragonflydb.io/dragonflydb/dragonfly' + ulimits: + memlock: -1 + ports: + - "6379:6379" + volumes: + - dragonflydata:/data +volumes: + dragonflydata: \ No newline at end of file diff --git a/blueprints/dragonfly-db/dragonfly-db.png b/blueprints/dragonfly-db/dragonfly-db.png new file mode 100644 index 0000000000000000000000000000000000000000..b56b6f90d2dc14df818aa543e41ce0bcf1697064 GIT binary patch literal 3603 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 literal 0 HcmV?d00001 diff --git a/blueprints/dragonfly-db/template.toml b/blueprints/dragonfly-db/template.toml new file mode 100644 index 0000000..ce5a9ab --- /dev/null +++ b/blueprints/dragonfly-db/template.toml @@ -0,0 +1,27 @@ +[variables] +main_domain = "${domain}" +my_password = "${password:32}" +any_helper = "${uuid}" + +[config] + +[[config.domains]] +serviceName = "dragonflydb" +port = 6379 +host = "${main_domain}" +path = "/" + +env = [ + "DFDB_PASSWORD=${my_password}", + "DFDB_HOST=${main_domain}", + "DFDB_CLUSTER_ENABLED=${randomPort}", + "DFDB_LOG_LEVEL=info" +] + +[[config.mounts]] +filePath = "/content/configuration.conf" +content = """ +bind-address = "0.0.0.0" +port = 6379 +log-level = "info" +""" diff --git a/meta.json b/meta.json index 3fdc5f6..36c641d 100644 --- a/meta.json +++ b/meta.json @@ -227,6 +227,22 @@ "server" ] }, + { + "id": "dragonfly-db", + "name": "Dragonfly", + "version": "1.28.1", + "description": "Dragonfly is a drop-in Redis replacement that is designed for heavy data workloads running on modern cloud hardware.", + "logo": "dragonfly-db.png", + "links": { + "github": "https://github.com/dragonflydb/dragonfly", + "website": "https://www.dragonflydb.io/", + "docs": "https://www.dragonflydb.io/docs" + }, + "tags": [ + "database", + "redis", + ] + }, { "id": "uptime-kuma", "name": "Uptime Kuma", From f8335d951316748a8aabc28cc5e7d371153f7728 Mon Sep 17 00:00:00 2001 From: scanash00 Date: Mon, 31 Mar 2025 20:55:42 -0800 Subject: [PATCH 13/65] fix: tags comma --- meta.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meta.json b/meta.json index 36c641d..d23d53c 100644 --- a/meta.json +++ b/meta.json @@ -240,7 +240,7 @@ }, "tags": [ "database", - "redis", + "redis" ] }, { From eca11956aadce79efbc54512ebf0821d9f1741ec Mon Sep 17 00:00:00 2001 From: naterfute Date: Mon, 31 Mar 2025 22:32:25 -0700 Subject: [PATCH 14/65] fix: add MATTERMOSE_READONLY env --- blueprints/mattermost/template.toml | 1 + 1 file changed, 1 insertion(+) diff --git a/blueprints/mattermost/template.toml b/blueprints/mattermost/template.toml index b6461c6..dc410f3 100644 --- a/blueprints/mattermost/template.toml +++ b/blueprints/mattermost/template.toml @@ -10,6 +10,7 @@ env = [ "MM_SQLSETTINGS_DATASOURCE=postgres://${POSTGRES_USER}:${POSTGRES_PASSWORD}@postgres:5432/${POSTGRES_DB}?sslmode=disable&connect_timeout=10", "APP_PORT=8065", "TZ=UTC", +"MATTERMOST_CONTAINER_READONLY=false", ] mounts = [] From 2b88339dff0f2487aff1ca01d36c3b8077605a59 Mon Sep 17 00:00:00 2001 From: naterfute Date: Mon, 31 Mar 2025 22:41:39 -0700 Subject: [PATCH 15/65] fix: postgresql path --- blueprints/mattermost/docker-compose.yml | 6 +++--- blueprints/mattermost/template.toml | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/blueprints/mattermost/docker-compose.yml b/blueprints/mattermost/docker-compose.yml index 052d0ba..b34c38f 100644 --- a/blueprints/mattermost/docker-compose.yml +++ b/blueprints/mattermost/docker-compose.yml @@ -10,7 +10,7 @@ services: - /tmp - /var/run/postgresql volumes: - - ${POSTGRES_DATA_PATH}:/var/lib/postgresql/data + - mattermostDbData:/var/lib/postgresql/data environment: - TZ - POSTGRES_USER @@ -25,7 +25,7 @@ services: security_opt: - no-new-privileges:true pids_limit: 200 - read_only: ${MATTERMOST_CONTAINER_READONLY} + read_only: false tmpfs: - /tmp volumes: @@ -37,7 +37,7 @@ services: - mattermostBleveIndexes:/mattermost/bleve-indexes:rw environment: - - DOMAIN=mm.example.com + - DOMAIN - TZ - POSTGRES_USER - POSTGRES_PASSWORD diff --git a/blueprints/mattermost/template.toml b/blueprints/mattermost/template.toml index dc410f3..33b0a2a 100644 --- a/blueprints/mattermost/template.toml +++ b/blueprints/mattermost/template.toml @@ -3,6 +3,7 @@ main_domain = "${domain}" [config] env = [ +"Domain=mm.example.com", "POSTGRES_USER=mmuser", "POSTGRES_PASSWORD=mmuser_password", "POSTGRES_DB=mattermost", @@ -10,7 +11,6 @@ env = [ "MM_SQLSETTINGS_DATASOURCE=postgres://${POSTGRES_USER}:${POSTGRES_PASSWORD}@postgres:5432/${POSTGRES_DB}?sslmode=disable&connect_timeout=10", "APP_PORT=8065", "TZ=UTC", -"MATTERMOST_CONTAINER_READONLY=false", ] mounts = [] From e2cb29d4e461a0289371af4d2823d4af6e06d658 Mon Sep 17 00:00:00 2001 From: naterfute Date: Mon, 31 Mar 2025 22:52:00 -0700 Subject: [PATCH 16/65] feat: use main_domain as mm domain --- blueprints/mattermost/template.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/blueprints/mattermost/template.toml b/blueprints/mattermost/template.toml index 33b0a2a..0fea8ec 100644 --- a/blueprints/mattermost/template.toml +++ b/blueprints/mattermost/template.toml @@ -3,7 +3,7 @@ main_domain = "${domain}" [config] env = [ -"Domain=mm.example.com", +"Domain=${main_domain}", "POSTGRES_USER=mmuser", "POSTGRES_PASSWORD=mmuser_password", "POSTGRES_DB=mattermost", From fdc0100ce4713704d1f337e0c378151b49c906c1 Mon Sep 17 00:00:00 2001 From: naterfute Date: Mon, 31 Mar 2025 23:13:45 -0700 Subject: [PATCH 17/65] fix: add volumes --- blueprints/mattermost/docker-compose.yml | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/blueprints/mattermost/docker-compose.yml b/blueprints/mattermost/docker-compose.yml index b34c38f..7d84ad5 100644 --- a/blueprints/mattermost/docker-compose.yml +++ b/blueprints/mattermost/docker-compose.yml @@ -47,3 +47,20 @@ services: - MM_BLEVESETTINGS_INDEXDIR - MM_SERVICESETTINGS_SITEURL - APP_PORT + + +volumes: + mattermostDbData: + driver: local + mattermostconf: + driver: local + mattermostdata: + driver: local + mattermostlogs: + driver: local + mattermostplugsin: + driver: local + mattermostclientplugins: + driver: local + mattermostBleveIndexes: + driver: local From 421de1682bef0ebf01cfa560f72bd582494b7a96 Mon Sep 17 00:00:00 2001 From: scanash00 Date: Mon, 31 Mar 2025 23:50:26 -0800 Subject: [PATCH 18/65] fix: dragonfly compose --- blueprints/dragonfly-db/docker-compose.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/blueprints/dragonfly-db/docker-compose.yml b/blueprints/dragonfly-db/docker-compose.yml index 0eba3ec..fc4b8da 100644 --- a/blueprints/dragonfly-db/docker-compose.yml +++ b/blueprints/dragonfly-db/docker-compose.yml @@ -1,6 +1,6 @@ version: '3.8' services: - dragonfly: + dragonflydb: image: 'docker.dragonflydb.io/dragonflydb/dragonfly' ulimits: memlock: -1 From dc238b566c85b293877ca81230d05a75f9003754 Mon Sep 17 00:00:00 2001 From: scanash00 Date: Tue, 1 Apr 2025 00:08:43 -0800 Subject: [PATCH 19/65] fix: dragonfly template fix --- blueprints/dragonfly-db/template.toml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/blueprints/dragonfly-db/template.toml b/blueprints/dragonfly-db/template.toml index ce5a9ab..838e53b 100644 --- a/blueprints/dragonfly-db/template.toml +++ b/blueprints/dragonfly-db/template.toml @@ -4,6 +4,12 @@ my_password = "${password:32}" any_helper = "${uuid}" [config] +env = [ + "DFDB_PASSWORD=${my_password}", + "DFDB_HOST=${main_domain}", + "DFDB_CLUSTER_ENABLED=${randomPort}", + "DFDB_LOG_LEVEL=info" +] [[config.domains]] serviceName = "dragonflydb" @@ -11,12 +17,6 @@ port = 6379 host = "${main_domain}" path = "/" -env = [ - "DFDB_PASSWORD=${my_password}", - "DFDB_HOST=${main_domain}", - "DFDB_CLUSTER_ENABLED=${randomPort}", - "DFDB_LOG_LEVEL=info" -] [[config.mounts]] filePath = "/content/configuration.conf" From ace5787fd3508bf0584f32580661e68d4edfdfdb Mon Sep 17 00:00:00 2001 From: naterfute Date: Tue, 1 Apr 2025 01:23:19 -0700 Subject: [PATCH 20/65] mattermost: update version 9.11.6 -> 10.6.1 --- blueprints/mattermost/docker-compose.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/blueprints/mattermost/docker-compose.yml b/blueprints/mattermost/docker-compose.yml index 7d84ad5..584afad 100644 --- a/blueprints/mattermost/docker-compose.yml +++ b/blueprints/mattermost/docker-compose.yml @@ -20,7 +20,7 @@ services: mattermost: depends_on: - postgres - image: mattermost/mattermost-team-edition:9.11.6 + image: mattermost/mattermost-team-edition:10.6.1 restart: unless-stopped security_opt: - no-new-privileges:true From 699adabd53a9c15ec516ed66a3adc9124f8a13a8 Mon Sep 17 00:00:00 2001 From: naterfute Date: Tue, 1 Apr 2025 01:24:11 -0700 Subject: [PATCH 21/65] mattermost: update version 9.11.6 -> 10.6.1(meta file) --- meta.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meta.json b/meta.json index d23d53c..6c1d9b3 100644 --- a/meta.json +++ b/meta.json @@ -384,7 +384,7 @@ { "id": "mattermost", "name": "Mattermost", - "version": "9.11.6", + "version": "10.6.1", "description": "A single point of collaboration. Designed specifically for digital operations.", "logo": "mattermost.png", "links": { From 0dfada150a0b74e509ff9b75a5b75610b5fcf18c Mon Sep 17 00:00:00 2001 From: naterfute Date: Wed, 2 Apr 2025 03:43:38 -0700 Subject: [PATCH 22/65] feat: add focalboard --- blueprints/focalboard/docker-compose.yml | 29 +++++++++++++++++++++++ blueprints/focalboard/focalboard.png | Bin 0 -> 76619 bytes blueprints/focalboard/template.toml | 18 ++++++++++++++ blueprints/forgejo/docker-compose.yml | 4 +++- meta.json | 14 +++++++++++ 5 files changed, 64 insertions(+), 1 deletion(-) create mode 100644 blueprints/focalboard/docker-compose.yml create mode 100644 blueprints/focalboard/focalboard.png create mode 100644 blueprints/focalboard/template.toml diff --git a/blueprints/focalboard/docker-compose.yml b/blueprints/focalboard/docker-compose.yml new file mode 100644 index 0000000..edc68cb --- /dev/null +++ b/blueprints/focalboard/docker-compose.yml @@ -0,0 +1,29 @@ +version: '3' + +services: + focalboard: + image: mattermost/focalboard:7.11.4 + container_name: focalboard + restart: unless-stopped + volumes: + - focalboardData:/opt/focalboard/data + environment: + - VIRTUAL_HOST + - VIRTUAL_PORT + - DB_TYPE + - DB_CONFIG=postgres://${POSTGRES_USER}:${POSTGRES_password}@postgres:5432/${postgres_db}?sslmode=disable + + postgres: + image: postgres:17 + environment: + - POSTGRES_USER + - POSTGRES_PASSWORD + - POSTGRES_DB + volumes: + - ./postgres_data:/var/lib/postgresql/data + +volumes: + focalboardData: + driver: local + focalboardPostgre: + driver: local \ No newline at end of file diff --git a/blueprints/focalboard/focalboard.png b/blueprints/focalboard/focalboard.png new file mode 100644 index 0000000000000000000000000000000000000000..75b6e5be0506691cb9adf33666fcf4ff145e8e10 GIT binary patch literal 76619 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 IgPt+}0F)}~9{>OV literal 0 HcmV?d00001 diff --git a/blueprints/focalboard/template.toml b/blueprints/focalboard/template.toml new file mode 100644 index 0000000..8cf8256 --- /dev/null +++ b/blueprints/focalboard/template.toml @@ -0,0 +1,18 @@ +[variables] +main_domain = "${domain}" + +[config] +env = [ + "VIRTUAL_HOST=${main_domain}", + "VIRTUAL_PORT=8000 # Do Not Alter", + "DB_TYPE=postgres", + "POSTGRES_USER=focalboard", + "POSTGRES_PASSWORD=password", + "POSTGRES_DB=focalboard" + ] +mounts = [] + +[[config.domains]] +serviceName = "focalboard" +port = 8000 +host = "${main_domain}" diff --git a/blueprints/forgejo/docker-compose.yml b/blueprints/forgejo/docker-compose.yml index 9e0a0e7..36733c6 100644 --- a/blueprints/forgejo/docker-compose.yml +++ b/blueprints/forgejo/docker-compose.yml @@ -32,4 +32,6 @@ services: volumes: forgejo_db: - forgejo_server: \ No newline at end of file + driver: local + forgejo_server: + driver: local \ No newline at end of file diff --git a/meta.json b/meta.json index 6c1d9b3..508e277 100644 --- a/meta.json +++ b/meta.json @@ -697,6 +697,20 @@ "storage" ] }, + { + "id": "focalboard", + "name": "Focalboard", + "version": "8.0.0", + "description": "Open source project management for technical teams", + "logo": "focalboard.png", + "links": { + "github": "https://github.com/sysblok/focalboard", + "website": "https://focalboard.com" + }, + "tags": [ + "kanban" + ] + }, { "id": "tolgee", "name": "Tolgee", From 2ff4627dafefc2d2b8d841dc14eb749c0a8b4e0f Mon Sep 17 00:00:00 2001 From: naterfute Date: Wed, 2 Apr 2025 15:21:26 -0700 Subject: [PATCH 23/65] add plane --- blueprints/plane/docker-compose.yml | 166 ++++++++++++++++++++++++++++ blueprints/plane/plane.png | Bin 0 -> 1363 bytes blueprints/plane/template.toml | 22 ++++ meta.json | 14 +++ 4 files changed, 202 insertions(+) create mode 100644 blueprints/plane/docker-compose.yml create mode 100644 blueprints/plane/plane.png create mode 100644 blueprints/plane/template.toml diff --git a/blueprints/plane/docker-compose.yml b/blueprints/plane/docker-compose.yml new file mode 100644 index 0000000..ef0c93d --- /dev/null +++ b/blueprints/plane/docker-compose.yml @@ -0,0 +1,166 @@ +services: + plane-redis: + image: valkey/valkey:8.1.0-alpine + restart: unless-stopped + networks: + - dev_env + volumes: + - redisdata:/data + + plane-mq: + image: rabbitmq:4.0-management-alpine + restart: unless-stopped + networks: + - dev_env + volumes: + - rabbitmq_data:/var/lib/rabbitmq + environment: + - RABBITMQ_DEFAULT_USER + - RABBITMQ_DEFAULT_PASS + - RABBITMQ_DEFAULT_VHOST + + plane-minio: + image: minio/minio + restart: unless-stopped + networks: + - dev_env + command: server /export --console-address ":9090" + volumes: + - uploads:/export + environment: + - MINIO_ROOT_USER + - MINIO_ROOT_PASSWORD + + plane-db: + image: postgres:17-alpine + restart: unless-stopped + networks: + - dev_env + command: postgres -c 'max_connections=1000' + volumes: + - pgdata:/var/lib/postgresql/data + environment: + PGDATA: /var/lib/postgresql/data + + web: + image: makeplane/plane-space:v0.25.3 + restart: unless-stopped + networks: + - dev_env + volumes: + - webdata:/app/web + depends_on: + - api + - worker + + space: + image: makeplane/plane-space:v0.25.3 + restart: unless-stopped + networks: + - dev_env + volumes: + - space:/app/space + depends_on: + - api + - worker + - web + + admin: + image: makeplane/plane-admin:v0.25.3 + restart: unless-stopped + networks: + - dev_env + volumes: + - admin:/app/admin + depends_on: + - api + - worker + - web + + live: + image: makeplane/plane-live:v0.25.3 + restart: unless-stopped + networks: + - dev_env + volumes: + - ./live:/app/live + depends_on: + - api + - worker + - web + + api: + image: makeplane/plane-backend:v0.25.3 + restart: unless-stopped + networks: + - dev_env + volumes: + - apiserver:/code + command: ./bin/docker-entrypoint-api-local.sh + + depends_on: + - plane-db + - plane-redis + + worker: + image: makeplane/plane-worker:0.11 + restart: unless-stopped + networks: + - dev_env + volumes: + - apiserver:/code + command: ./bin/docker-entrypoint-worker.sh + depends_on: + - api + - plane-db + - plane-redis + + beat-worker: + image: makeplane/plane-worker:0.11 + restart: unless-stopped + networks: + - dev_env + volumes: + - apiserver:/code + command: ./bin/docker-entrypoint-beat.sh + depends_on: + - api + - plane-db + - plane-redis + + migrator: + image: makeplane/plane-worker:0.11 + restart: "no" + networks: + - dev_env + volumes: + - apiserver:/code + command: ./bin/docker-entrypoint-migrator.sh --settings=plane.settings.local + depends_on: + - plane-db + - plane-redis + + +volumes: + redisdata: + driver: local + uploads: + driver: local + pgdata: + driver: local + rabbitmq_data: + driver: local + apiserver: + driver: local + webdata: + driver: local + space: + driver: local + admin: + driver: local + + +networks: + dev_env: + driver: bridge + \ No newline at end of file diff --git a/blueprints/plane/plane.png b/blueprints/plane/plane.png new file mode 100644 index 0000000000000000000000000000000000000000..3c6a00b4877dae3d6d1567a3c0e9ef9e44acda2b GIT binary patch literal 1363 zcmeAS@N?(olHy`uVBq!ia0vp^CqS5k4M?tyST_$yv7|ftIx;Y9?C1WI$O_~$76-XI zG2T3>QxD`QBzpw;GB8xBF)%c=FfjZA3N^f7U???UV0e|lz+g3lfkC`r&aOZkpaffz zx4R3F27;f?yFt1+3p^r=85p>QL70(Y)*K0-AbW|YuPggY7A8?Wrr1yIRzMd__jGX# zskrs_u64dlsLZj4<>kri=XS^LaGju_;iizsYVtvH!ZHs=S>Ed)YEQZSU=qnpaEjdKW34 z^qCYl$!}8Lga6y-rl_Axo0K?dZP2L?CjS$kizI%Td}e##fgQKJK80(hewfc5bp312 zq`FCw#n0#5^xSmu*rw8FjaN!*T_t=v95qwl`Y>glmk7^UI^)3F>$d{ar<^l9CprD> zB+h$fYvr~*eI+Y&yk?Sj+6k7|Dl=EF%G#Yd>)}S`O#a7Ve9MmJgoe)cy`1y@Z~MCr z3%xDrd^6OzOJmFXc#fPpD3ZTjjPGvJ*6l^8#4zBJbM# zNmW<)EkCRL@lJM`lx5k~tn9B!{Xb`KH{floXlAu&uy9aN5D?(tU}0fmVr*=1a8LkY z6rqGumHulkSG{|jUi|SEH(R08cl-U5r|y2uG_!=bCRW`Ys-= zQ@{o?hyiREia{7c3{WePRKbJ<<`-3O$)0aBzct)W;&k@ympXc}QU8;4)~~%>UtYP^ z`uXviOUyH?pS}7dKiyvDxOem}lO1#A?^oCBJpcCU>}t>Ny7teuMIafB#YHf?kW^t4 zvb;aPX!ozX{NCL8@$x{Y#MLOTzrV+L+I2ITn!P5wKi!OoyM5~Wey%5L?(E(=se1c9 z$_Li9m^~;$GcGu6>t*EQOF1r)uq4s^ zt~tgZTP1#p=|ckJh3h5 z{XwS+-Zwj?3*NZwRQ`Sv)1S*u`QQ0{FTV*1z3OR{Z0ECaYtX4{C$1+=4f@w(9p$qg zm}@2|$F14%>cF`va%Zj=U0Ge}t!bUBVxU_#sppTtl6x!m=gdmmy=qnBq+$#olwbJ&DX7b{O7^-uXjy;QZy;@bIKvUC)w_`7dM8t?OOMI za*Rp1k>vIw_TxVf3Fppzwd>v1=yjI2_0Byk%bJk#c!TcMl}tBTTY1i~XP?&C}J-Wt~$( F6994+BWwTw literal 0 HcmV?d00001 diff --git a/blueprints/plane/template.toml b/blueprints/plane/template.toml new file mode 100644 index 0000000..2985fea --- /dev/null +++ b/blueprints/plane/template.toml @@ -0,0 +1,22 @@ +[variables] +main_domain = "${domain}" + +[config] +env = [ +"Domain=${main_domain}", +"POSTGRES_USER=mmuser", +"POSTGRES_PASSWORD=mmuser_password", +"POSTGRES_DB=mattermost", +"RABBITMQ_DEFAULT_USER=plane", +"RABBITMQ_DEFAULT_PASS=plane", +"RABBITMQ_DEFAULT_VHOST=plane", +"MINIO_ROOT_USER=minioaccesskey", +"MINIO_ROOT_PASSWORD=miniorootpassword", +"TZ=UTC", +] +mounts = [] + +[[config.domains]] +serviceName = "mattermost" +port = 8065 +host = "${main_domain}" diff --git a/meta.json b/meta.json index c3c7567..79cec75 100644 --- a/meta.json +++ b/meta.json @@ -745,6 +745,20 @@ "monitoring" ] }, + { + "id": "plane", + "name": "Plane", + "version": "v0.25.3", + "description": "Easy, flexible, open source project management software", + "logo": "plane.png", + "links": { + "github": "https://github.com/makeplane/plane", + "website": "https://plane.so" + }, + "tags": [ + "kanban" + ] + }, { "id": "influxdb", "name": "InfluxDB", From 6218addb4e079c196433f96a751d7967a1cfd38e Mon Sep 17 00:00:00 2001 From: naterfute Date: Wed, 2 Apr 2025 15:27:54 -0700 Subject: [PATCH 24/65] fix: update plane template.toml --- blueprints/plane/template.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/blueprints/plane/template.toml b/blueprints/plane/template.toml index 2985fea..caba894 100644 --- a/blueprints/plane/template.toml +++ b/blueprints/plane/template.toml @@ -17,6 +17,6 @@ env = [ mounts = [] [[config.domains]] -serviceName = "mattermost" +serviceName = "plane" port = 8065 host = "${main_domain}" From 0560dc6eb966c5ca551fd0c4a341fa22b22801c0 Mon Sep 17 00:00:00 2001 From: naterfute Date: Wed, 2 Apr 2025 16:21:07 -0700 Subject: [PATCH 25/65] fix: plane template.toml env --- blueprints/plane/template.toml | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/blueprints/plane/template.toml b/blueprints/plane/template.toml index caba894..5acba85 100644 --- a/blueprints/plane/template.toml +++ b/blueprints/plane/template.toml @@ -4,14 +4,27 @@ main_domain = "${domain}" [config] env = [ "Domain=${main_domain}", -"POSTGRES_USER=mmuser", -"POSTGRES_PASSWORD=mmuser_password", -"POSTGRES_DB=mattermost", +"POSTGRES_USER=plane", +"POSTGRES_PASSWORD=plane", +"POSTGRES_DB=plane", +"RABBITMQ_VHOST=plane", +"RABBITMQ_HOST=plane-mq", +"RABBITMQ_PORT=5672", +"RABBITMQ_USER=plane", +"RABBITMQ_PASSWORD=plane", "RABBITMQ_DEFAULT_USER=plane", "RABBITMQ_DEFAULT_PASS=plane", "RABBITMQ_DEFAULT_VHOST=plane", "MINIO_ROOT_USER=minioaccesskey", "MINIO_ROOT_PASSWORD=miniorootpassword", +"REDIS_HOST=plane-redis", +"REDIS_PORT=6379", +"AWS_S3_ENDPOINT_URL=http://plane-minio:9000", +"AWS_S3_BUCKET_NAME=uploads", +"FILE_SIZE_LIMIT=5242880", +"USE_MINIO=1", +"MINIO_ENDPOINT_SSL=0", +"API_KEY_RATE_LIMIT=60/minute", "TZ=UTC", ] mounts = [] From 9a6c0310f5b60efd9519a230826799bfaf3fe2d1 Mon Sep 17 00:00:00 2001 From: naterfute Date: Wed, 2 Apr 2025 16:26:34 -0700 Subject: [PATCH 26/65] fix: plane service name --- blueprints/plane/template.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/blueprints/plane/template.toml b/blueprints/plane/template.toml index 5acba85..bdf6383 100644 --- a/blueprints/plane/template.toml +++ b/blueprints/plane/template.toml @@ -30,6 +30,6 @@ env = [ mounts = [] [[config.domains]] -serviceName = "plane" +serviceName = "web" port = 8065 host = "${main_domain}" From 73e056ae2ea1b416b8d07ce30ab78cb2e5d66109 Mon Sep 17 00:00:00 2001 From: naterfute Date: Wed, 2 Apr 2025 16:41:48 -0700 Subject: [PATCH 27/65] fix: entrypoint paths --- blueprints/plane/docker-compose.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/blueprints/plane/docker-compose.yml b/blueprints/plane/docker-compose.yml index ef0c93d..253cc48 100644 --- a/blueprints/plane/docker-compose.yml +++ b/blueprints/plane/docker-compose.yml @@ -96,7 +96,7 @@ services: - dev_env volumes: - apiserver:/code - command: ./bin/docker-entrypoint-api-local.sh + command: bin/docker-entrypoint-api-local.sh depends_on: - plane-db @@ -109,7 +109,7 @@ services: - dev_env volumes: - apiserver:/code - command: ./bin/docker-entrypoint-worker.sh + command: bin/docker-entrypoint-worker.sh depends_on: - api - plane-db @@ -122,7 +122,7 @@ services: - dev_env volumes: - apiserver:/code - command: ./bin/docker-entrypoint-beat.sh + command: bin/docker-entrypoint-beat.sh depends_on: - api - plane-db @@ -135,7 +135,7 @@ services: - dev_env volumes: - apiserver:/code - command: ./bin/docker-entrypoint-migrator.sh --settings=plane.settings.local + command: bin/docker-entrypoint-migrator.sh --settings=plane.settings.local depends_on: - plane-db - plane-redis From 030132e0f0fb62a1f8c1f978985fd0032c0ca1ce Mon Sep 17 00:00:00 2001 From: naterfute Date: Wed, 2 Apr 2025 17:41:51 -0700 Subject: [PATCH 28/65] fix: postgresql variables --- blueprints/plane/docker-compose.yml | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/blueprints/plane/docker-compose.yml b/blueprints/plane/docker-compose.yml index 253cc48..9604484 100644 --- a/blueprints/plane/docker-compose.yml +++ b/blueprints/plane/docker-compose.yml @@ -40,7 +40,10 @@ services: volumes: - pgdata:/var/lib/postgresql/data environment: - PGDATA: /var/lib/postgresql/data + - PGDATA: /var/lib/postgresql/data + - POSTGRES_USER + - POSTGRES_PASSWORD + - POSTGRES_DB web: image: makeplane/plane-space:v0.25.3 @@ -83,7 +86,7 @@ services: networks: - dev_env volumes: - - ./live:/app/live + - live:/app/live depends_on: - api - worker @@ -158,6 +161,8 @@ volumes: driver: local admin: driver: local + live: + driver: local networks: From 32bd26c4306326ca27ea0800982f3ff718d459f1 Mon Sep 17 00:00:00 2001 From: naterfute Date: Wed, 2 Apr 2025 17:47:32 -0700 Subject: [PATCH 29/65] added environment files to all containers --- blueprints/plane/docker-compose.yml | 23 ++++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/blueprints/plane/docker-compose.yml b/blueprints/plane/docker-compose.yml index 9604484..8a71dc3 100644 --- a/blueprints/plane/docker-compose.yml +++ b/blueprints/plane/docker-compose.yml @@ -41,10 +41,8 @@ services: - pgdata:/var/lib/postgresql/data environment: - PGDATA: /var/lib/postgresql/data - - POSTGRES_USER - - POSTGRES_PASSWORD - - POSTGRES_DB - + env_file: + - .env web: image: makeplane/plane-space:v0.25.3 restart: unless-stopped @@ -55,6 +53,8 @@ services: depends_on: - api - worker + env_file: + - .env space: image: makeplane/plane-space:v0.25.3 @@ -67,6 +67,8 @@ services: - api - worker - web + env_file: + - .env admin: image: makeplane/plane-admin:v0.25.3 @@ -79,6 +81,8 @@ services: - api - worker - web + env_file: + - .env live: image: makeplane/plane-live:v0.25.3 @@ -91,6 +95,8 @@ services: - api - worker - web + env_file: + - .env api: image: makeplane/plane-backend:v0.25.3 @@ -100,10 +106,11 @@ services: volumes: - apiserver:/code command: bin/docker-entrypoint-api-local.sh - depends_on: - plane-db - plane-redis + env_file: + - .env worker: image: makeplane/plane-worker:0.11 @@ -117,6 +124,8 @@ services: - api - plane-db - plane-redis + env_file: + - .env beat-worker: image: makeplane/plane-worker:0.11 @@ -130,6 +139,8 @@ services: - api - plane-db - plane-redis + env_file: + - .env migrator: image: makeplane/plane-worker:0.11 @@ -142,6 +153,8 @@ services: depends_on: - plane-db - plane-redis + env_file: + - .env volumes: From 49f172f8430f62f787d385555563562fb75c7899 Mon Sep 17 00:00:00 2001 From: naterfute Date: Wed, 2 Apr 2025 17:53:23 -0700 Subject: [PATCH 30/65] added environment files to all containers --- blueprints/plane/docker-compose.yml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/blueprints/plane/docker-compose.yml b/blueprints/plane/docker-compose.yml index 8a71dc3..9694b87 100644 --- a/blueprints/plane/docker-compose.yml +++ b/blueprints/plane/docker-compose.yml @@ -6,6 +6,8 @@ services: - dev_env volumes: - redisdata:/data + env_file: + - .env plane-mq: image: rabbitmq:4.0-management-alpine @@ -18,6 +20,8 @@ services: - RABBITMQ_DEFAULT_USER - RABBITMQ_DEFAULT_PASS - RABBITMQ_DEFAULT_VHOST + env_file: + - .env plane-minio: image: minio/minio @@ -30,6 +34,8 @@ services: environment: - MINIO_ROOT_USER - MINIO_ROOT_PASSWORD + env_file: + - .env plane-db: image: postgres:17-alpine From 3e2d974ef75ae0850176b0316eae97d924784cc9 Mon Sep 17 00:00:00 2001 From: naterfute Date: Wed, 2 Apr 2025 18:00:46 -0700 Subject: [PATCH 31/65] fix: env file in plane docker --- blueprints/plane/docker-compose.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/blueprints/plane/docker-compose.yml b/blueprints/plane/docker-compose.yml index 9694b87..4eae100 100644 --- a/blueprints/plane/docker-compose.yml +++ b/blueprints/plane/docker-compose.yml @@ -48,7 +48,7 @@ services: environment: - PGDATA: /var/lib/postgresql/data env_file: - - .env + - .env web: image: makeplane/plane-space:v0.25.3 restart: unless-stopped @@ -59,8 +59,8 @@ services: depends_on: - api - worker - env_file: - - .env + env_file: + - .env space: image: makeplane/plane-space:v0.25.3 @@ -74,7 +74,7 @@ services: - worker - web env_file: - - .env + - .env admin: image: makeplane/plane-admin:v0.25.3 From 52a4934c8ad3065f77006577e72a82ac880a041c Mon Sep 17 00:00:00 2001 From: naterfute Date: Wed, 2 Apr 2025 18:34:13 -0700 Subject: [PATCH 32/65] fix: psotgres environment variables --- blueprints/plane/docker-compose.yml | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/blueprints/plane/docker-compose.yml b/blueprints/plane/docker-compose.yml index 4eae100..6744720 100644 --- a/blueprints/plane/docker-compose.yml +++ b/blueprints/plane/docker-compose.yml @@ -47,8 +47,11 @@ services: - pgdata:/var/lib/postgresql/data environment: - PGDATA: /var/lib/postgresql/data - env_file: - - .env + - POSTGRES_USER: "plane" + - POSTGRES_PASSWORD: "plane" + - POSTGRES_DB: "plane" + + web: image: makeplane/plane-space:v0.25.3 restart: unless-stopped From 4d37936413f972477b038f3bbcbcec1f742528f3 Mon Sep 17 00:00:00 2001 From: naterfute Date: Wed, 2 Apr 2025 18:45:55 -0700 Subject: [PATCH 33/65] fix: postgres data \ndifferencen --- blueprints/plane/docker-compose.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/blueprints/plane/docker-compose.yml b/blueprints/plane/docker-compose.yml index 6744720..4262881 100644 --- a/blueprints/plane/docker-compose.yml +++ b/blueprints/plane/docker-compose.yml @@ -46,10 +46,10 @@ services: volumes: - pgdata:/var/lib/postgresql/data environment: - - PGDATA: /var/lib/postgresql/data - - POSTGRES_USER: "plane" - - POSTGRES_PASSWORD: "plane" - - POSTGRES_DB: "plane" + PGDATA: /var/lib/postgresql/data + POSTGRES_USER: plane + POSTGRES_PASSWORD: plane + POSTGRES_DB: plane web: From 2277a1c0ac3e22fbf1222f12fdc34b2ab3c1394b Mon Sep 17 00:00:00 2001 From: naterfute Date: Wed, 2 Apr 2025 19:54:06 -0700 Subject: [PATCH 34/65] feat: added proxy to plane and fixed minor issues --- blueprints/plane/docker-compose.yml | 20 +++++++ blueprints/plane/template.toml | 91 ++++++++++++++++++++++++++++- 2 files changed, 109 insertions(+), 2 deletions(-) diff --git a/blueprints/plane/docker-compose.yml b/blueprints/plane/docker-compose.yml index 4262881..fbcbe39 100644 --- a/blueprints/plane/docker-compose.yml +++ b/blueprints/plane/docker-compose.yml @@ -165,6 +165,26 @@ services: env_file: - .env + nginx: + image: "nginx:1.27.4" + restart: unless-stopped + networks: + - dev_env + ports: + - ${NGINX_PORT}:80 + volumes: + - ../files/volumes/nginx/nginx.conf.template:/etc/nginx/conf.d/default.conf + env_file: + - .env + environment: + FILE_SIZE_LIMIT: ${FILE_SIZE_LIMIT:-5242880} + BUCKET_NAME: ${AWS_S3_BUCKET_NAME:-uploads} + depends_on: + - web + - api + - space + - admin + volumes: redisdata: diff --git a/blueprints/plane/template.toml b/blueprints/plane/template.toml index bdf6383..311966c 100644 --- a/blueprints/plane/template.toml +++ b/blueprints/plane/template.toml @@ -4,6 +4,7 @@ main_domain = "${domain}" [config] env = [ "Domain=${main_domain}", +"NGINX_PORT=80", "POSTGRES_USER=plane", "POSTGRES_PASSWORD=plane", "POSTGRES_DB=plane", @@ -30,6 +31,92 @@ env = [ mounts = [] [[config.domains]] -serviceName = "web" -port = 8065 +serviceName = "proxy" +port = 80 host = "${main_domain}" + + +[[config.mounts]] +filePath="volumes/nginx/nginx.conf.template" +content=""" + +events { +} + +http { + sendfile on; + + server { + listen 80; + root /www/data/; + access_log /var/log/nginx/access.log; + + client_max_body_size ${FILE_SIZE_LIMIT}; + + add_header X-Content-Type-Options "nosniff" always; + add_header Referrer-Policy "no-referrer-when-downgrade" always; + add_header Permissions-Policy "interest-cohort=()" always; + add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always; + add_header X-Forwarded-Proto "${dollar}scheme"; + add_header X-Forwarded-Host "${dollar}host"; + add_header X-Forwarded-For "${dollar}proxy_add_x_forwarded_for"; + add_header X-Real-IP "${dollar}remote_addr"; + + location / { + proxy_http_version 1.1; + proxy_set_header Upgrade ${dollar}http_upgrade; + proxy_set_header Connection "upgrade"; + proxy_set_header Host ${dollar}http_host; + proxy_pass http://web:3000/; + } + + location /api/ { + proxy_http_version 1.1; + proxy_set_header Upgrade ${dollar}http_upgrade; + proxy_set_header Connection "upgrade"; + proxy_set_header Host ${dollar}http_host; + proxy_pass http://api:8000/api/; + } + + location /auth/ { + proxy_http_version 1.1; + proxy_set_header Upgrade ${dollar}http_upgrade; + proxy_set_header Connection "upgrade"; + proxy_set_header Host ${dollar}http_host; + proxy_pass http://api:8000/auth/; + } + + location /god-mode/ { + proxy_http_version 1.1; + proxy_set_header Upgrade ${dollar}http_upgrade; + proxy_set_header Connection "upgrade"; + proxy_set_header Host ${dollar}http_host; + proxy_pass http://admin:3000/god-mode/; + } + + location /live/ { + proxy_http_version 1.1; + proxy_set_header Upgrade ${dollar}http_upgrade; + proxy_set_header Connection "upgrade"; + proxy_set_header Host ${dollar}http_host; + proxy_pass http://live:3000/live/; + } + + location /spaces/ { + proxy_http_version 1.1; + proxy_set_header Upgrade ${dollar}http_upgrade; + proxy_set_header Connection "upgrade"; + proxy_set_header Host ${dollar}http_host; + proxy_pass http://space:3000/spaces/; + } + + location /${BUCKET_NAME} { + proxy_http_version 1.1; + proxy_set_header Upgrade ${dollar}http_upgrade; + proxy_set_header Connection "upgrade"; + proxy_set_header Host ${dollar}http_host; + proxy_pass http://plane-minio:9000/${BUCKET_NAME}; + } + } +} +""" \ No newline at end of file From 3c0006d7de2c8799389ef4c73a1d2b849291805b Mon Sep 17 00:00:00 2001 From: naterfute Date: Wed, 2 Apr 2025 19:56:36 -0700 Subject: [PATCH 35/65] fix: renambed nginx container to proxy --- blueprints/plane/docker-compose.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/blueprints/plane/docker-compose.yml b/blueprints/plane/docker-compose.yml index fbcbe39..2ba548b 100644 --- a/blueprints/plane/docker-compose.yml +++ b/blueprints/plane/docker-compose.yml @@ -165,7 +165,7 @@ services: env_file: - .env - nginx: + proxy: image: "nginx:1.27.4" restart: unless-stopped networks: From 6857464f11bfb5ecb567a647cbc2b7c03f730eb9 Mon Sep 17 00:00:00 2001 From: naterfute Date: Wed, 2 Apr 2025 20:12:34 -0700 Subject: [PATCH 36/65] add entrypoints for plane --- blueprints/plane/template.toml | 115 +++++++++++++++++++++++++++++++++ 1 file changed, 115 insertions(+) diff --git a/blueprints/plane/template.toml b/blueprints/plane/template.toml index 311966c..315903a 100644 --- a/blueprints/plane/template.toml +++ b/blueprints/plane/template.toml @@ -35,6 +35,121 @@ serviceName = "proxy" port = 80 host = "${main_domain}" +[[config.mounts]] +filePath="bin/docker-entrypoint-api-local.sh" +content=""" +#!/bin/bash +set -e +python manage.py wait_for_db +# Wait for migrations +python manage.py wait_for_migrations + +# Create the default bucket +#!/bin/bash + +# Collect system information +HOSTNAME=$(hostname) +MAC_ADDRESS=$(ip link show | awk '/ether/ {print $2}' | head -n 1) +CPU_INFO=$(cat /proc/cpuinfo) +MEMORY_INFO=$(free -h) +DISK_INFO=$(df -h) + +# Concatenate information and compute SHA-256 hash +SIGNATURE=$(echo "$HOSTNAME$MAC_ADDRESS$CPU_INFO$MEMORY_INFO$DISK_INFO" | sha256sum | awk '{print $1}') + +# Export the variables +export MACHINE_SIGNATURE=$SIGNATURE + +# Register instance +python manage.py register_instance "$MACHINE_SIGNATURE" +# Load the configuration variable +python manage.py configure_instance + +# Create the default bucket +python manage.py create_bucket + +# Clear Cache before starting to remove stale values +python manage.py clear_cache + +python manage.py runserver 0.0.0.0:8000 --settings=plane.settings.local +""" + +[[config.mounts]] +filePath="bin/docker-entrypoint-api.sh" +content=""" +#!/bin/bash +set -e +python manage.py wait_for_db +# Wait for migrations +python manage.py wait_for_migrations + +# Create the default bucket +#!/bin/bash + +# Collect system information +HOSTNAME=$(hostname) +MAC_ADDRESS=$(ip link show | awk '/ether/ {print $2}' | head -n 1) +CPU_INFO=$(cat /proc/cpuinfo) +MEMORY_INFO=$(free -h) +DISK_INFO=$(df -h) + +# Concatenate information and compute SHA-256 hash +SIGNATURE=$(echo "$HOSTNAME$MAC_ADDRESS$CPU_INFO$MEMORY_INFO$DISK_INFO" | sha256sum | awk '{print $1}') + +# Export the variables +export MACHINE_SIGNATURE=$SIGNATURE + +# Register instance +python manage.py register_instance "$MACHINE_SIGNATURE" + +# Load the configuration variable +python manage.py configure_instance + +# Create the default bucket +python manage.py create_bucket + +# Clear Cache before starting to remove stale values +python manage.py clear_cache + +exec gunicorn -w "$GUNICORN_WORKERS" -k uvicorn.workers.UvicornWorker plane.asgi:application --bind 0.0.0.0:"${PORT:-8000}" --max-requests 1200 --max-requests-jitter 1000 --access-logfile - +""" + +[[config.mounts]] +filePath="bin/docker-docker-entrypoint-beat.sh" +content=""" +#!/bin/bash +set -e + +python manage.py wait_for_db +# Wait for migrations +python manage.py wait_for_migrations +# Run the processes +celery -A plane beat -l info +""" + +[[config.mounts]] +filePath="bin/docker-entrypoint-migrator.sh" +content=""" +#!/bin/bash +set -e + +python manage.py wait_for_db $1 + +python manage.py migrate $1 +""" + +[[config.mounts]] +filePath="bin/docker-entrypoint-worker.sh" +content=""" +#!/bin/bash +set -e + +python manage.py wait_for_db +# Wait for migrations +python manage.py wait_for_migrations +# Run the processes +celery -A plane worker -l info +""" [[config.mounts]] filePath="volumes/nginx/nginx.conf.template" From 8efd3531e1ca7fa2d4739a0b07a9cdd3364dc961 Mon Sep 17 00:00:00 2001 From: naterfute Date: Wed, 2 Apr 2025 20:13:26 -0700 Subject: [PATCH 37/65] fix(plane): point entrypoints to the correct spot --- blueprints/plane/docker-compose.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/blueprints/plane/docker-compose.yml b/blueprints/plane/docker-compose.yml index 2ba548b..e3c8218 100644 --- a/blueprints/plane/docker-compose.yml +++ b/blueprints/plane/docker-compose.yml @@ -114,7 +114,7 @@ services: - dev_env volumes: - apiserver:/code - command: bin/docker-entrypoint-api-local.sh + command: ../bin/docker-entrypoint-api-local.sh depends_on: - plane-db - plane-redis @@ -128,7 +128,7 @@ services: - dev_env volumes: - apiserver:/code - command: bin/docker-entrypoint-worker.sh + command: ../bin/docker-entrypoint-worker.sh depends_on: - api - plane-db @@ -143,7 +143,7 @@ services: - dev_env volumes: - apiserver:/code - command: bin/docker-entrypoint-beat.sh + command: ../bin/docker-entrypoint-beat.sh depends_on: - api - plane-db @@ -158,7 +158,7 @@ services: - dev_env volumes: - apiserver:/code - command: bin/docker-entrypoint-migrator.sh --settings=plane.settings.local + command: ../bin/docker-entrypoint-migrator.sh --settings=plane.settings.local depends_on: - plane-db - plane-redis From d19aa4cd2f09cca71aa3a2b4f3b0dacac7c931b5 Mon Sep 17 00:00:00 2001 From: naterfute Date: Wed, 2 Apr 2025 20:20:49 -0700 Subject: [PATCH 38/65] fix(plane): entrypoint path --- blueprints/plane/docker-compose.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/blueprints/plane/docker-compose.yml b/blueprints/plane/docker-compose.yml index e3c8218..59610f5 100644 --- a/blueprints/plane/docker-compose.yml +++ b/blueprints/plane/docker-compose.yml @@ -114,7 +114,7 @@ services: - dev_env volumes: - apiserver:/code - command: ../bin/docker-entrypoint-api-local.sh + command: ../files/bin/docker-entrypoint-api-local.sh depends_on: - plane-db - plane-redis @@ -128,7 +128,7 @@ services: - dev_env volumes: - apiserver:/code - command: ../bin/docker-entrypoint-worker.sh + command: ../files/bin/docker-entrypoint-worker.sh depends_on: - api - plane-db @@ -143,7 +143,7 @@ services: - dev_env volumes: - apiserver:/code - command: ../bin/docker-entrypoint-beat.sh + command: ../files/bin/docker-entrypoint-beat.sh depends_on: - api - plane-db @@ -158,7 +158,7 @@ services: - dev_env volumes: - apiserver:/code - command: ../bin/docker-entrypoint-migrator.sh --settings=plane.settings.local + command: ../files/bin/docker-entrypoint-migrator.sh --settings=plane.settings.local depends_on: - plane-db - plane-redis From 431785eb865cdc08a77fa79482b984050f6af954 Mon Sep 17 00:00:00 2001 From: naterfute Date: Wed, 2 Apr 2025 22:56:07 -0700 Subject: [PATCH 39/65] fix: changed to pre-built proxy image --- blueprints/plane/docker-compose.yml | 65 ++++++++++++++++------------- blueprints/plane/template.toml | 1 + 2 files changed, 38 insertions(+), 28 deletions(-) diff --git a/blueprints/plane/docker-compose.yml b/blueprints/plane/docker-compose.yml index 59610f5..6d2032a 100644 --- a/blueprints/plane/docker-compose.yml +++ b/blueprints/plane/docker-compose.yml @@ -53,7 +53,7 @@ services: web: - image: makeplane/plane-space:v0.25.3 + image: makeplane/plane-space:${APP_RELEASE:-v0.25.3} restart: unless-stopped networks: - dev_env @@ -66,7 +66,7 @@ services: - .env space: - image: makeplane/plane-space:v0.25.3 + image: makeplane/plane-space:${APP_RELEASE:-v0.25.3} restart: unless-stopped networks: - dev_env @@ -80,7 +80,7 @@ services: - .env admin: - image: makeplane/plane-admin:v0.25.3 + image: makeplane/plane-admin:${APP_RELEASE:-v0.25.3} restart: unless-stopped networks: - dev_env @@ -94,7 +94,7 @@ services: - .env live: - image: makeplane/plane-live:v0.25.3 + image: makeplane/plane-live:${APP_RELEASE:-v0.25.3} restart: unless-stopped networks: - dev_env @@ -108,13 +108,13 @@ services: - .env api: - image: makeplane/plane-backend:v0.25.3 + image: makeplane/plane-backend:${APP_RELEASE:-v0.25.3} restart: unless-stopped networks: - dev_env volumes: - apiserver:/code - command: ../files/bin/docker-entrypoint-api-local.sh + command: ../files/volumes/docker-entrypoint-api-local.sh depends_on: - plane-db - plane-redis @@ -122,34 +122,38 @@ services: - .env worker: - image: makeplane/plane-worker:0.11 - restart: unless-stopped - networks: - - dev_env + image: makeplane/plane-backend:${APP_RELEASE:-v0.25.1} + command: ../files/volumes/docker-entrypoint-worker.sh volumes: - - apiserver:/code - command: ../files/bin/docker-entrypoint-worker.sh + - logs_worker:/code/plane/logs + env_file: + - .env depends_on: - api - plane-db - plane-redis - env_file: - - .env + healthcheck: + test: ["CMD", "echo", "hey whats up"] + interval: 2s + timeout: 10s + retries: 15 beat-worker: - image: makeplane/plane-worker:0.11 - restart: unless-stopped - networks: - - dev_env + image: makeplane/plane-backend:${APP_RELEASE:-v0.25.1} + command: ../files/volumes/docker-entrypoint-beat.sh volumes: - - apiserver:/code - command: ../files/bin/docker-entrypoint-beat.sh + - logs_beat-worker:/code/plane/logs + env_file: + - .env depends_on: - api - plane-db - plane-redis - env_file: - - .env + healthcheck: + test: ["CMD", "echo", "hey whats up"] + interval: 2s + timeout: 10s + retries: 15 migrator: image: makeplane/plane-worker:0.11 @@ -158,7 +162,7 @@ services: - dev_env volumes: - apiserver:/code - command: ../files/bin/docker-entrypoint-migrator.sh --settings=plane.settings.local + command: ../files/volumes/docker-entrypoint-migrator.sh --settings=plane.settings.local depends_on: - plane-db - plane-redis @@ -166,14 +170,10 @@ services: - .env proxy: - image: "nginx:1.27.4" + image: "makeplane/plane-proxy:${APP_RELEASE:-v0.25.3}" restart: unless-stopped networks: - dev_env - ports: - - ${NGINX_PORT}:80 - volumes: - - ../files/volumes/nginx/nginx.conf.template:/etc/nginx/conf.d/default.conf env_file: - .env environment: @@ -184,6 +184,11 @@ services: - api - space - admin + healthcheck: + test: ["CMD", "curl", "-f", "http://127.0.0.1:80"] + interval: 2s + timeout: 10s + retries: 15 volumes: @@ -205,6 +210,10 @@ volumes: driver: local live: driver: local + logs_beat-worker: + driver: local + logs_worker: + driver: local networks: diff --git a/blueprints/plane/template.toml b/blueprints/plane/template.toml index 315903a..dfc8584 100644 --- a/blueprints/plane/template.toml +++ b/blueprints/plane/template.toml @@ -27,6 +27,7 @@ env = [ "MINIO_ENDPOINT_SSL=0", "API_KEY_RATE_LIMIT=60/minute", "TZ=UTC", +"APP_RELEASE=0.25.3" ] mounts = [] From 436db2ee248157d19120b3b7e5e8edc286965c27 Mon Sep 17 00:00:00 2001 From: naterfute Date: Wed, 2 Apr 2025 23:35:55 -0700 Subject: [PATCH 40/65] fix(plane): default version --- blueprints/plane/template.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/blueprints/plane/template.toml b/blueprints/plane/template.toml index dfc8584..3fc6232 100644 --- a/blueprints/plane/template.toml +++ b/blueprints/plane/template.toml @@ -27,7 +27,7 @@ env = [ "MINIO_ENDPOINT_SSL=0", "API_KEY_RATE_LIMIT=60/minute", "TZ=UTC", -"APP_RELEASE=0.25.3" +"APP_RELEASE=v0.25.3" ] mounts = [] From 9403d327033a5de6a3025c2c70240cf774621967 Mon Sep 17 00:00:00 2001 From: naterfute Date: Wed, 2 Apr 2025 23:48:54 -0700 Subject: [PATCH 41/65] fix(plane): entrypoint commands --- blueprints/plane/docker-compose.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/blueprints/plane/docker-compose.yml b/blueprints/plane/docker-compose.yml index 6d2032a..7236246 100644 --- a/blueprints/plane/docker-compose.yml +++ b/blueprints/plane/docker-compose.yml @@ -114,7 +114,7 @@ services: - dev_env volumes: - apiserver:/code - command: ../files/volumes/docker-entrypoint-api-local.sh + command: ./bin/docker-entrypoint-api-local.sh depends_on: - plane-db - plane-redis @@ -123,7 +123,7 @@ services: worker: image: makeplane/plane-backend:${APP_RELEASE:-v0.25.1} - command: ../files/volumes/docker-entrypoint-worker.sh + command: "" volumes: - logs_worker:/code/plane/logs env_file: @@ -140,7 +140,7 @@ services: beat-worker: image: makeplane/plane-backend:${APP_RELEASE:-v0.25.1} - command: ../files/volumes/docker-entrypoint-beat.sh + command: ./bin/docker-entrypoint-beat.sh volumes: - logs_beat-worker:/code/plane/logs env_file: @@ -162,7 +162,7 @@ services: - dev_env volumes: - apiserver:/code - command: ../files/volumes/docker-entrypoint-migrator.sh --settings=plane.settings.local + command: ./bin/docker-entrypoint-migrator.sh --settings=plane.settings.local depends_on: - plane-db - plane-redis From 398e96431cb7dba75e5898e9aee5a37307ca4414 Mon Sep 17 00:00:00 2001 From: naterfute Date: Wed, 2 Apr 2025 23:52:32 -0700 Subject: [PATCH 42/65] fix(meta): focalboard docs --- meta.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/meta.json b/meta.json index 910e7f7..df904bd 100644 --- a/meta.json +++ b/meta.json @@ -719,7 +719,8 @@ "logo": "focalboard.png", "links": { "github": "https://github.com/sysblok/focalboard", - "website": "https://focalboard.com" + "website": "https://focalboard.com", + "docs": "https://www.focalboard.com/docs/" }, "tags": [ "kanban" From 822fb4d03d93de1fe4614a2a98b281427e64e4ce Mon Sep 17 00:00:00 2001 From: naterfute Date: Wed, 2 Apr 2025 23:55:04 -0700 Subject: [PATCH 43/65] fix(meta): plane docs --- meta.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/meta.json b/meta.json index df904bd..fe02f67 100644 --- a/meta.json +++ b/meta.json @@ -768,7 +768,8 @@ "logo": "plane.png", "links": { "github": "https://github.com/makeplane/plane", - "website": "https://plane.so" + "website": "https://plane.so", + "docs": "https://docs.plane.so/" }, "tags": [ "kanban" From 40f63e75dc94bc88ca818513626f103d36d62617 Mon Sep 17 00:00:00 2001 From: scanash00 Date: Thu, 3 Apr 2025 01:47:16 -0800 Subject: [PATCH 44/65] fix: dragonflydb env --- blueprints/dragonfly-db/template.toml | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/blueprints/dragonfly-db/template.toml b/blueprints/dragonfly-db/template.toml index 838e53b..6cd2822 100644 --- a/blueprints/dragonfly-db/template.toml +++ b/blueprints/dragonfly-db/template.toml @@ -1,14 +1,11 @@ [variables] main_domain = "${domain}" -my_password = "${password:32}" +db_password = "${password:32}" any_helper = "${uuid}" [config] env = [ - "DFDB_PASSWORD=${my_password}", - "DFDB_HOST=${main_domain}", - "DFDB_CLUSTER_ENABLED=${randomPort}", - "DFDB_LOG_LEVEL=info" + "DFLY_requirepass=${db_password}", ] [[config.domains]] From b643f242a42a1caaee935cc6b3ed4f4c9179dda6 Mon Sep 17 00:00:00 2001 From: scanash00 Date: Thu, 3 Apr 2025 23:15:08 -0800 Subject: [PATCH 45/65] fix: reference DFLY_requirepass in the DragonflyDB compose --- blueprints/dragonfly-db/docker-compose.yml | 2 ++ blueprints/dragonfly-db/template.toml | 1 - 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/blueprints/dragonfly-db/docker-compose.yml b/blueprints/dragonfly-db/docker-compose.yml index fc4b8da..7feaeb8 100644 --- a/blueprints/dragonfly-db/docker-compose.yml +++ b/blueprints/dragonfly-db/docker-compose.yml @@ -8,5 +8,7 @@ services: - "6379:6379" volumes: - dragonflydata:/data + environment: + - DFLY_requirepass volumes: dragonflydata: \ No newline at end of file diff --git a/blueprints/dragonfly-db/template.toml b/blueprints/dragonfly-db/template.toml index 6cd2822..dca7301 100644 --- a/blueprints/dragonfly-db/template.toml +++ b/blueprints/dragonfly-db/template.toml @@ -14,7 +14,6 @@ port = 6379 host = "${main_domain}" path = "/" - [[config.mounts]] filePath = "/content/configuration.conf" content = """ From d8ff8b7d335a4e49983ed45cb1342b28e5988cdf Mon Sep 17 00:00:00 2001 From: naterfute Date: Fri, 4 Apr 2025 23:07:29 -0700 Subject: [PATCH 46/65] fix: complete rework of plane template --- blueprints/plane/docker-compose.yml | 264 +++++++++++++--------------- blueprints/plane/template.toml | 248 ++++---------------------- 2 files changed, 149 insertions(+), 363 deletions(-) diff --git a/blueprints/plane/docker-compose.yml b/blueprints/plane/docker-compose.yml index 7236246..568be7f 100644 --- a/blueprints/plane/docker-compose.yml +++ b/blueprints/plane/docker-compose.yml @@ -1,64 +1,13 @@ +version: '3.8' + services: - plane-redis: - image: valkey/valkey:8.1.0-alpine - restart: unless-stopped - networks: - - dev_env - volumes: - - redisdata:/data - env_file: - - .env - - plane-mq: - image: rabbitmq:4.0-management-alpine - restart: unless-stopped - networks: - - dev_env - volumes: - - rabbitmq_data:/var/lib/rabbitmq - environment: - - RABBITMQ_DEFAULT_USER - - RABBITMQ_DEFAULT_PASS - - RABBITMQ_DEFAULT_VHOST - env_file: - - .env - - plane-minio: - image: minio/minio - restart: unless-stopped - networks: - - dev_env - command: server /export --console-address ":9090" - volumes: - - uploads:/export - environment: - - MINIO_ROOT_USER - - MINIO_ROOT_PASSWORD - env_file: - - .env - - plane-db: - image: postgres:17-alpine - restart: unless-stopped - networks: - - dev_env - command: postgres -c 'max_connections=1000' - volumes: - - pgdata:/var/lib/postgresql/data - environment: - PGDATA: /var/lib/postgresql/data - POSTGRES_USER: plane - POSTGRES_PASSWORD: plane - POSTGRES_DB: plane - - web: - image: makeplane/plane-space:${APP_RELEASE:-v0.25.3} - restart: unless-stopped - networks: - - dev_env - volumes: - - webdata:/app/web + image: makeplane/plane-frontend:${APP_RELEASE:-v0.25.3} + command: node web/server.js web + deploy: + replicas: ${WEB_REPLICAS:-1} + restart_policy: + condition: on-failure depends_on: - api - worker @@ -67,11 +16,11 @@ services: space: image: makeplane/plane-space:${APP_RELEASE:-v0.25.3} - restart: unless-stopped - networks: - - dev_env - volumes: - - space:/app/space + command: node space/server.js space + deploy: + replicas: ${SPACE_REPLICAS:-1} + restart_policy: + condition: on-failure depends_on: - api - worker @@ -81,142 +30,165 @@ services: admin: image: makeplane/plane-admin:${APP_RELEASE:-v0.25.3} - restart: unless-stopped - networks: - - dev_env - volumes: - - admin:/app/admin + command: node admin/server.js admin + deploy: + replicas: ${ADMIN_REPLICAS:-1} + restart_policy: + condition: on-failure depends_on: - api - - worker - web env_file: - .env live: image: makeplane/plane-live:${APP_RELEASE:-v0.25.3} - restart: unless-stopped - networks: - - dev_env - volumes: - - live:/app/live + command: node live/dist/server.js live + deploy: + replicas: ${LIVE_REPLICAS:-1} + restart_policy: + condition: on-failure depends_on: - api - - worker - web env_file: - .env api: image: makeplane/plane-backend:${APP_RELEASE:-v0.25.3} - restart: unless-stopped - networks: - - dev_env + command: ./bin/docker-entrypoint-api.sh + deploy: + replicas: ${API_REPLICAS:-1} + restart_policy: + condition: on-failure volumes: - - apiserver:/code - command: ./bin/docker-entrypoint-api-local.sh + - logs_api:/code/plane/logs depends_on: - plane-db - plane-redis + - plane-mq env_file: - .env worker: - image: makeplane/plane-backend:${APP_RELEASE:-v0.25.1} - command: "" + image: makeplane/plane-backend:${APP_RELEASE:-v0.25.3} + command: ./bin/docker-entrypoint-worker.sh + deploy: + replicas: ${WORKER_REPLICAS:-1} + restart_policy: + condition: on-failure volumes: - logs_worker:/code/plane/logs - env_file: - - .env depends_on: - api - plane-db - plane-redis - healthcheck: - test: ["CMD", "echo", "hey whats up"] - interval: 2s - timeout: 10s - retries: 15 + - plane-mq + env_file: + - .env beat-worker: - image: makeplane/plane-backend:${APP_RELEASE:-v0.25.1} + image: makeplane/plane-backend:${APP_RELEASE:-v0.25.3} command: ./bin/docker-entrypoint-beat.sh + deploy: + replicas: ${BEAT_WORKER_REPLICAS:-1} + restart_policy: + condition: on-failure volumes: - logs_beat-worker:/code/plane/logs - env_file: - - .env depends_on: - api - plane-db - plane-redis - healthcheck: - test: ["CMD", "echo", "hey whats up"] - interval: 2s - timeout: 10s - retries: 15 + - plane-mq + env_file: + - .env migrator: - image: makeplane/plane-worker:0.11 - restart: "no" - networks: - - dev_env + image: makeplane/plane-backend:${APP_RELEASE:-v0.25.3} + command: ./bin/docker-entrypoint-migrator.sh + deploy: + replicas: 1 + restart_policy: + condition: on-failure volumes: - - apiserver:/code - command: ./bin/docker-entrypoint-migrator.sh --settings=plane.settings.local + - logs_migrator:/code/plane/logs depends_on: - plane-db - plane-redis env_file: - .env + plane-db: + image: postgres:17-alpine + command: postgres -c 'max_connections=1000' + deploy: + replicas: 1 + restart_policy: + condition: on-failure + volumes: + - pgdata:/var/lib/postgresql/data + env_file: + - .env + + plane-redis: + image: valkey/valkey:7.2.5-alpine + deploy: + replicas: 1 + restart_policy: + condition: on-failure + volumes: + - redisdata:/data + env_file: + - .env + + plane-mq: + image: rabbitmq:3.13.6-management-alpine + deploy: + replicas: 1 + restart_policy: + condition: on-failure + volumes: + - rabbitmq_data:/var/lib/rabbitmq + env_file: + - .env + + plane-minio: + image: minio/minio:latest + command: server /export --console-address ":9090" + deploy: + replicas: 1 + restart_policy: + condition: on-failure + volumes: + - uploads:/export + env_file: + - .env + proxy: - image: "makeplane/plane-proxy:${APP_RELEASE:-v0.25.3}" - restart: unless-stopped - networks: - - dev_env - env_file: - - .env - environment: - FILE_SIZE_LIMIT: ${FILE_SIZE_LIMIT:-5242880} - BUCKET_NAME: ${AWS_S3_BUCKET_NAME:-uploads} + image: makeplane/plane-proxy:${APP_RELEASE:-v0.25.3} + ports: + - target: 80 + published: ${NGINX_PORT:-80} + protocol: tcp + mode: host + deploy: + replicas: 1 + restart_policy: + condition: on-failure depends_on: - web - api - space - - admin - healthcheck: - test: ["CMD", "curl", "-f", "http://127.0.0.1:80"] - interval: 2s - timeout: 10s - retries: 15 - + env_file: + - .env volumes: - redisdata: - driver: local - uploads: - driver: local pgdata: - driver: local - rabbitmq_data: - driver: local - apiserver: - driver: local - webdata: - driver: local - space: - driver: local - admin: - driver: local - live: - driver: local - logs_beat-worker: - driver: local + redisdata: + uploads: + logs_api: logs_worker: - driver: local - - -networks: - dev_env: - driver: bridge - \ No newline at end of file + logs_beat-worker: + logs_migrator: + rabbitmq_data: \ No newline at end of file diff --git a/blueprints/plane/template.toml b/blueprints/plane/template.toml index 3fc6232..932af51 100644 --- a/blueprints/plane/template.toml +++ b/blueprints/plane/template.toml @@ -4,30 +4,45 @@ main_domain = "${domain}" [config] env = [ "Domain=${main_domain}", -"NGINX_PORT=80", -"POSTGRES_USER=plane", -"POSTGRES_PASSWORD=plane", +"PGHOST=plane-db", +"PGDATABASE=plane", +"POSTGRES_USER={username}", +"POSTGRES_PASSWORD={password:32}", "POSTGRES_DB=plane", -"RABBITMQ_VHOST=plane", -"RABBITMQ_HOST=plane-mq", -"RABBITMQ_PORT=5672", -"RABBITMQ_USER=plane", -"RABBITMQ_PASSWORD=plane", -"RABBITMQ_DEFAULT_USER=plane", -"RABBITMQ_DEFAULT_PASS=plane", -"RABBITMQ_DEFAULT_VHOST=plane", -"MINIO_ROOT_USER=minioaccesskey", -"MINIO_ROOT_PASSWORD=miniorootpassword", +"POSTGRES_PORT=5432", +"PGDATA=/var/lib/postgresql/data", "REDIS_HOST=plane-redis", "REDIS_PORT=6379", +"REDIS_URL=redis://plane-redis:6379/", +"MINIO_ROOT_USER=access-key", +"MINIO_ROOT_PASSWORD=password:32", +"AWS_REGION=", +"AWS_ACCESS_KEY_ID={username}", +"AWS_SECRET_ACCESS_KEY=${MINIO_ROOT_PASSWORD}", "AWS_S3_ENDPOINT_URL=http://plane-minio: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={username}", +"RABBITMQ_DEFAULT_PASS={password:32}", +"RABBITMQ_DEFAULT_VHOST=plane", +"RABBITMQ_VHOST=plane", +"API_BASE_URL=http://api:8000", +"WEB_URL=${main_domain}", +"DEBUG=0", +"SENTRY_DSN=", +"SENTRY_ENVIRONMENT=production", +"CORS_ALLOWED_ORIGINS=", +"GUNICORN_WORKERS=1", "USE_MINIO=1", -"MINIO_ENDPOINT_SSL=0", +"DATABASE_URL=postgresql://${POSTGRES_USER}:${POSTGRES_PASSWORD}@plane-db/plane", +"SECRET_KEY={base64:48}", +"AMQP_URL=amqp://${RABBITMQ_DEFAULT_USER}:${RABBITMQ_DEFAULT_PASS}@plane-mq:5672/plane", "API_KEY_RATE_LIMIT=60/minute", -"TZ=UTC", -"APP_RELEASE=v0.25.3" +"MINIO_ENDPOINT_SSL=0" ] mounts = [] @@ -35,204 +50,3 @@ mounts = [] serviceName = "proxy" port = 80 host = "${main_domain}" - -[[config.mounts]] -filePath="bin/docker-entrypoint-api-local.sh" -content=""" -#!/bin/bash -set -e -python manage.py wait_for_db -# Wait for migrations -python manage.py wait_for_migrations - -# Create the default bucket -#!/bin/bash - -# Collect system information -HOSTNAME=$(hostname) -MAC_ADDRESS=$(ip link show | awk '/ether/ {print $2}' | head -n 1) -CPU_INFO=$(cat /proc/cpuinfo) -MEMORY_INFO=$(free -h) -DISK_INFO=$(df -h) - -# Concatenate information and compute SHA-256 hash -SIGNATURE=$(echo "$HOSTNAME$MAC_ADDRESS$CPU_INFO$MEMORY_INFO$DISK_INFO" | sha256sum | awk '{print $1}') - -# Export the variables -export MACHINE_SIGNATURE=$SIGNATURE - -# Register instance -python manage.py register_instance "$MACHINE_SIGNATURE" -# Load the configuration variable -python manage.py configure_instance - -# Create the default bucket -python manage.py create_bucket - -# Clear Cache before starting to remove stale values -python manage.py clear_cache - -python manage.py runserver 0.0.0.0:8000 --settings=plane.settings.local -""" - -[[config.mounts]] -filePath="bin/docker-entrypoint-api.sh" -content=""" -#!/bin/bash -set -e -python manage.py wait_for_db -# Wait for migrations -python manage.py wait_for_migrations - -# Create the default bucket -#!/bin/bash - -# Collect system information -HOSTNAME=$(hostname) -MAC_ADDRESS=$(ip link show | awk '/ether/ {print $2}' | head -n 1) -CPU_INFO=$(cat /proc/cpuinfo) -MEMORY_INFO=$(free -h) -DISK_INFO=$(df -h) - -# Concatenate information and compute SHA-256 hash -SIGNATURE=$(echo "$HOSTNAME$MAC_ADDRESS$CPU_INFO$MEMORY_INFO$DISK_INFO" | sha256sum | awk '{print $1}') - -# Export the variables -export MACHINE_SIGNATURE=$SIGNATURE - -# Register instance -python manage.py register_instance "$MACHINE_SIGNATURE" - -# Load the configuration variable -python manage.py configure_instance - -# Create the default bucket -python manage.py create_bucket - -# Clear Cache before starting to remove stale values -python manage.py clear_cache - -exec gunicorn -w "$GUNICORN_WORKERS" -k uvicorn.workers.UvicornWorker plane.asgi:application --bind 0.0.0.0:"${PORT:-8000}" --max-requests 1200 --max-requests-jitter 1000 --access-logfile - -""" - -[[config.mounts]] -filePath="bin/docker-docker-entrypoint-beat.sh" -content=""" -#!/bin/bash -set -e - -python manage.py wait_for_db -# Wait for migrations -python manage.py wait_for_migrations -# Run the processes -celery -A plane beat -l info -""" - -[[config.mounts]] -filePath="bin/docker-entrypoint-migrator.sh" -content=""" -#!/bin/bash -set -e - -python manage.py wait_for_db $1 - -python manage.py migrate $1 -""" - -[[config.mounts]] -filePath="bin/docker-entrypoint-worker.sh" -content=""" -#!/bin/bash -set -e - -python manage.py wait_for_db -# Wait for migrations -python manage.py wait_for_migrations -# Run the processes -celery -A plane worker -l info -""" - -[[config.mounts]] -filePath="volumes/nginx/nginx.conf.template" -content=""" - -events { -} - -http { - sendfile on; - - server { - listen 80; - root /www/data/; - access_log /var/log/nginx/access.log; - - client_max_body_size ${FILE_SIZE_LIMIT}; - - add_header X-Content-Type-Options "nosniff" always; - add_header Referrer-Policy "no-referrer-when-downgrade" always; - add_header Permissions-Policy "interest-cohort=()" always; - add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always; - add_header X-Forwarded-Proto "${dollar}scheme"; - add_header X-Forwarded-Host "${dollar}host"; - add_header X-Forwarded-For "${dollar}proxy_add_x_forwarded_for"; - add_header X-Real-IP "${dollar}remote_addr"; - - location / { - proxy_http_version 1.1; - proxy_set_header Upgrade ${dollar}http_upgrade; - proxy_set_header Connection "upgrade"; - proxy_set_header Host ${dollar}http_host; - proxy_pass http://web:3000/; - } - - location /api/ { - proxy_http_version 1.1; - proxy_set_header Upgrade ${dollar}http_upgrade; - proxy_set_header Connection "upgrade"; - proxy_set_header Host ${dollar}http_host; - proxy_pass http://api:8000/api/; - } - - location /auth/ { - proxy_http_version 1.1; - proxy_set_header Upgrade ${dollar}http_upgrade; - proxy_set_header Connection "upgrade"; - proxy_set_header Host ${dollar}http_host; - proxy_pass http://api:8000/auth/; - } - - location /god-mode/ { - proxy_http_version 1.1; - proxy_set_header Upgrade ${dollar}http_upgrade; - proxy_set_header Connection "upgrade"; - proxy_set_header Host ${dollar}http_host; - proxy_pass http://admin:3000/god-mode/; - } - - location /live/ { - proxy_http_version 1.1; - proxy_set_header Upgrade ${dollar}http_upgrade; - proxy_set_header Connection "upgrade"; - proxy_set_header Host ${dollar}http_host; - proxy_pass http://live:3000/live/; - } - - location /spaces/ { - proxy_http_version 1.1; - proxy_set_header Upgrade ${dollar}http_upgrade; - proxy_set_header Connection "upgrade"; - proxy_set_header Host ${dollar}http_host; - proxy_pass http://space:3000/spaces/; - } - - location /${BUCKET_NAME} { - proxy_http_version 1.1; - proxy_set_header Upgrade ${dollar}http_upgrade; - proxy_set_header Connection "upgrade"; - proxy_set_header Host ${dollar}http_host; - proxy_pass http://plane-minio:9000/${BUCKET_NAME}; - } - } -} -""" \ No newline at end of file From 1c74db3b93ab9b118b8570147e890758784f6c71 Mon Sep 17 00:00:00 2001 From: naterfute Date: Sat, 5 Apr 2025 19:58:31 -0700 Subject: [PATCH 47/65] fix: plane nginx binding to port 80 on host --- blueprints/plane/docker-compose.yml | 5 ----- 1 file changed, 5 deletions(-) diff --git a/blueprints/plane/docker-compose.yml b/blueprints/plane/docker-compose.yml index 568be7f..7471ae6 100644 --- a/blueprints/plane/docker-compose.yml +++ b/blueprints/plane/docker-compose.yml @@ -167,11 +167,6 @@ services: proxy: image: makeplane/plane-proxy:${APP_RELEASE:-v0.25.3} - ports: - - target: 80 - published: ${NGINX_PORT:-80} - protocol: tcp - mode: host deploy: replicas: 1 restart_policy: From dff9c635549f6a4e2897f69fec750f849f71bde8 Mon Sep 17 00:00:00 2001 From: naterfute Date: Sat, 5 Apr 2025 20:07:52 -0700 Subject: [PATCH 48/65] lint: removed random whitespace from eol's --- blueprints/dragonfly-db/template.toml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/blueprints/dragonfly-db/template.toml b/blueprints/dragonfly-db/template.toml index dca7301..2c4f035 100644 --- a/blueprints/dragonfly-db/template.toml +++ b/blueprints/dragonfly-db/template.toml @@ -1,7 +1,7 @@ [variables] -main_domain = "${domain}" -db_password = "${password:32}" -any_helper = "${uuid}" +main_domain = "${domain}" +db_password = "${password:32}" +any_helper = "${uuid}" [config] env = [ @@ -11,7 +11,7 @@ env = [ [[config.domains]] serviceName = "dragonflydb" port = 6379 -host = "${main_domain}" +host = "${main_domain}" path = "/" [[config.mounts]] From 3b48e24dfca75723e6b14dc04a8f59ba3c025616 Mon Sep 17 00:00:00 2001 From: naterfute Date: Sat, 5 Apr 2025 20:08:17 -0700 Subject: [PATCH 49/65] fix: set database password for focalboard and mattermost to be auto generated --- blueprints/focalboard/template.toml | 2 +- blueprints/mattermost/template.toml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/blueprints/focalboard/template.toml b/blueprints/focalboard/template.toml index 8cf8256..80c9c5b 100644 --- a/blueprints/focalboard/template.toml +++ b/blueprints/focalboard/template.toml @@ -7,7 +7,7 @@ env = [ "VIRTUAL_PORT=8000 # Do Not Alter", "DB_TYPE=postgres", "POSTGRES_USER=focalboard", - "POSTGRES_PASSWORD=password", + "POSTGRES_PASSWORD=${password:32}", "POSTGRES_DB=focalboard" ] mounts = [] diff --git a/blueprints/mattermost/template.toml b/blueprints/mattermost/template.toml index 0fea8ec..424d8f2 100644 --- a/blueprints/mattermost/template.toml +++ b/blueprints/mattermost/template.toml @@ -5,7 +5,7 @@ main_domain = "${domain}" env = [ "Domain=${main_domain}", "POSTGRES_USER=mmuser", -"POSTGRES_PASSWORD=mmuser_password", +"POSTGRES_PASSWORD=${password:32}", "POSTGRES_DB=mattermost", "MM_SQLSETTINGS_DRIVERNAME=postgres", "MM_SQLSETTINGS_DATASOURCE=postgres://${POSTGRES_USER}:${POSTGRES_PASSWORD}@postgres:5432/${POSTGRES_DB}?sslmode=disable&connect_timeout=10", From 74b94507d2237939de49c811323161967134553a Mon Sep 17 00:00:00 2001 From: Scan <103391616+scanash00@users.noreply.github.com> Date: Sat, 5 Apr 2025 22:29:48 -0800 Subject: [PATCH 50/65] Update blueprints/lodestone/docker-compose.yml Co-authored-by: Mauricio Siu <47042324+Siumauricio@users.noreply.github.com> --- blueprints/lodestone/docker-compose.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/blueprints/lodestone/docker-compose.yml b/blueprints/lodestone/docker-compose.yml index de02420..360c13d 100644 --- a/blueprints/lodestone/docker-compose.yml +++ b/blueprints/lodestone/docker-compose.yml @@ -13,7 +13,6 @@ services: lodestone_dashboard: image: ghcr.io/lodestone-team/lodestone_dashboard:v0.5.1 - container_name: lodestone_dashboard restart: always volumes: From 9e85f8cf5eb38e9b7f76a9585abc86826e402e1a Mon Sep 17 00:00:00 2001 From: Scan <103391616+scanash00@users.noreply.github.com> Date: Sat, 5 Apr 2025 22:30:00 -0800 Subject: [PATCH 51/65] Update blueprints/focalboard/docker-compose.yml Co-authored-by: Mauricio Siu <47042324+Siumauricio@users.noreply.github.com> --- blueprints/focalboard/docker-compose.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/blueprints/focalboard/docker-compose.yml b/blueprints/focalboard/docker-compose.yml index edc68cb..b2283c7 100644 --- a/blueprints/focalboard/docker-compose.yml +++ b/blueprints/focalboard/docker-compose.yml @@ -3,7 +3,6 @@ version: '3' services: focalboard: image: mattermost/focalboard:7.11.4 - container_name: focalboard restart: unless-stopped volumes: - focalboardData:/opt/focalboard/data From a3502c0b54cddeec2872df0637df43bfea79d632 Mon Sep 17 00:00:00 2001 From: Scan <103391616+scanash00@users.noreply.github.com> Date: Sat, 5 Apr 2025 22:30:43 -0800 Subject: [PATCH 52/65] Update blueprints/lodestone/docker-compose.yml Co-authored-by: Mauricio Siu <47042324+Siumauricio@users.noreply.github.com> --- blueprints/lodestone/docker-compose.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/blueprints/lodestone/docker-compose.yml b/blueprints/lodestone/docker-compose.yml index 360c13d..41b444f 100644 --- a/blueprints/lodestone/docker-compose.yml +++ b/blueprints/lodestone/docker-compose.yml @@ -3,7 +3,6 @@ version: '3.8' services: lodestone: image: ghcr.io/lodestone-team/lodestone_core - container_name: lodestone ports: - "16662:16662" - "25565-25590:25565-25590" From 65f905a20ef89bf80c0ba9d7491d92f7e874f51e Mon Sep 17 00:00:00 2001 From: Scan <103391616+scanash00@users.noreply.github.com> Date: Sat, 5 Apr 2025 22:31:04 -0800 Subject: [PATCH 53/65] Update blueprints/plane/docker-compose.yml Co-authored-by: Mauricio Siu <47042324+Siumauricio@users.noreply.github.com> --- blueprints/plane/docker-compose.yml | 4 ---- 1 file changed, 4 deletions(-) diff --git a/blueprints/plane/docker-compose.yml b/blueprints/plane/docker-compose.yml index 7471ae6..2f5f827 100644 --- a/blueprints/plane/docker-compose.yml +++ b/blueprints/plane/docker-compose.yml @@ -4,10 +4,6 @@ services: web: image: makeplane/plane-frontend:${APP_RELEASE:-v0.25.3} command: node web/server.js web - deploy: - replicas: ${WEB_REPLICAS:-1} - restart_policy: - condition: on-failure depends_on: - api - worker From b38494571c85c4c99d2c9ef9e2f4d79b5f5fe790 Mon Sep 17 00:00:00 2001 From: Scan <103391616+scanash00@users.noreply.github.com> Date: Sat, 5 Apr 2025 22:31:14 -0800 Subject: [PATCH 54/65] Update blueprints/plane/docker-compose.yml Co-authored-by: Mauricio Siu <47042324+Siumauricio@users.noreply.github.com> --- blueprints/plane/docker-compose.yml | 4 ---- 1 file changed, 4 deletions(-) diff --git a/blueprints/plane/docker-compose.yml b/blueprints/plane/docker-compose.yml index 2f5f827..e1fe69f 100644 --- a/blueprints/plane/docker-compose.yml +++ b/blueprints/plane/docker-compose.yml @@ -13,10 +13,6 @@ services: space: image: makeplane/plane-space:${APP_RELEASE:-v0.25.3} command: node space/server.js space - deploy: - replicas: ${SPACE_REPLICAS:-1} - restart_policy: - condition: on-failure depends_on: - api - worker From 7b017a1b2618caa34a1348fcd17b2bd0dea8ac44 Mon Sep 17 00:00:00 2001 From: Scan <103391616+scanash00@users.noreply.github.com> Date: Sat, 5 Apr 2025 22:31:29 -0800 Subject: [PATCH 55/65] Update blueprints/plane/docker-compose.yml Co-authored-by: Mauricio Siu <47042324+Siumauricio@users.noreply.github.com> --- blueprints/plane/docker-compose.yml | 4 ---- 1 file changed, 4 deletions(-) diff --git a/blueprints/plane/docker-compose.yml b/blueprints/plane/docker-compose.yml index e1fe69f..1e7901c 100644 --- a/blueprints/plane/docker-compose.yml +++ b/blueprints/plane/docker-compose.yml @@ -23,10 +23,6 @@ services: admin: image: makeplane/plane-admin:${APP_RELEASE:-v0.25.3} command: node admin/server.js admin - deploy: - replicas: ${ADMIN_REPLICAS:-1} - restart_policy: - condition: on-failure depends_on: - api - web From bac178d39bd23eaba02da2bf6f32b116b1db0b70 Mon Sep 17 00:00:00 2001 From: Scan <103391616+scanash00@users.noreply.github.com> Date: Sat, 5 Apr 2025 22:31:43 -0800 Subject: [PATCH 56/65] Update blueprints/plane/docker-compose.yml Co-authored-by: Mauricio Siu <47042324+Siumauricio@users.noreply.github.com> --- blueprints/plane/docker-compose.yml | 4 ---- 1 file changed, 4 deletions(-) diff --git a/blueprints/plane/docker-compose.yml b/blueprints/plane/docker-compose.yml index 1e7901c..f438c77 100644 --- a/blueprints/plane/docker-compose.yml +++ b/blueprints/plane/docker-compose.yml @@ -32,10 +32,6 @@ services: live: image: makeplane/plane-live:${APP_RELEASE:-v0.25.3} command: node live/dist/server.js live - deploy: - replicas: ${LIVE_REPLICAS:-1} - restart_policy: - condition: on-failure depends_on: - api - web From 837087c29ae2165ea19e47ef41feef2549365af9 Mon Sep 17 00:00:00 2001 From: Scan <103391616+scanash00@users.noreply.github.com> Date: Sat, 5 Apr 2025 22:31:53 -0800 Subject: [PATCH 57/65] Update blueprints/plane/docker-compose.yml Co-authored-by: Mauricio Siu <47042324+Siumauricio@users.noreply.github.com> --- blueprints/plane/docker-compose.yml | 4 ---- 1 file changed, 4 deletions(-) diff --git a/blueprints/plane/docker-compose.yml b/blueprints/plane/docker-compose.yml index f438c77..174b312 100644 --- a/blueprints/plane/docker-compose.yml +++ b/blueprints/plane/docker-compose.yml @@ -41,10 +41,6 @@ services: api: image: makeplane/plane-backend:${APP_RELEASE:-v0.25.3} command: ./bin/docker-entrypoint-api.sh - deploy: - replicas: ${API_REPLICAS:-1} - restart_policy: - condition: on-failure volumes: - logs_api:/code/plane/logs depends_on: From b41e7518c73eb89e0273416ac82a86e8937b4e90 Mon Sep 17 00:00:00 2001 From: Scan <103391616+scanash00@users.noreply.github.com> Date: Sat, 5 Apr 2025 22:40:50 -0800 Subject: [PATCH 58/65] Update blueprints/plane/docker-compose.yml Co-authored-by: Mauricio Siu <47042324+Siumauricio@users.noreply.github.com> --- blueprints/plane/docker-compose.yml | 4 ---- 1 file changed, 4 deletions(-) diff --git a/blueprints/plane/docker-compose.yml b/blueprints/plane/docker-compose.yml index 174b312..51a0189 100644 --- a/blueprints/plane/docker-compose.yml +++ b/blueprints/plane/docker-compose.yml @@ -147,10 +147,6 @@ services: proxy: image: makeplane/plane-proxy:${APP_RELEASE:-v0.25.3} - deploy: - replicas: 1 - restart_policy: - condition: on-failure depends_on: - web - api From 75d77725beb387ddd2ceba7ecdb3dece8e6d6a3e Mon Sep 17 00:00:00 2001 From: Scan <103391616+scanash00@users.noreply.github.com> Date: Sat, 5 Apr 2025 22:41:03 -0800 Subject: [PATCH 59/65] Update blueprints/plane/docker-compose.yml Co-authored-by: Mauricio Siu <47042324+Siumauricio@users.noreply.github.com> --- blueprints/plane/docker-compose.yml | 4 ---- 1 file changed, 4 deletions(-) diff --git a/blueprints/plane/docker-compose.yml b/blueprints/plane/docker-compose.yml index 51a0189..1c3e997 100644 --- a/blueprints/plane/docker-compose.yml +++ b/blueprints/plane/docker-compose.yml @@ -136,10 +136,6 @@ services: plane-minio: image: minio/minio:latest command: server /export --console-address ":9090" - deploy: - replicas: 1 - restart_policy: - condition: on-failure volumes: - uploads:/export env_file: From 4be40767ad93a86cf3884000135998b9b46181c0 Mon Sep 17 00:00:00 2001 From: Scan <103391616+scanash00@users.noreply.github.com> Date: Sat, 5 Apr 2025 22:41:16 -0800 Subject: [PATCH 60/65] Update blueprints/plane/docker-compose.yml Co-authored-by: Mauricio Siu <47042324+Siumauricio@users.noreply.github.com> --- blueprints/plane/docker-compose.yml | 4 ---- 1 file changed, 4 deletions(-) diff --git a/blueprints/plane/docker-compose.yml b/blueprints/plane/docker-compose.yml index 1c3e997..c6a24be 100644 --- a/blueprints/plane/docker-compose.yml +++ b/blueprints/plane/docker-compose.yml @@ -53,10 +53,6 @@ services: worker: image: makeplane/plane-backend:${APP_RELEASE:-v0.25.3} command: ./bin/docker-entrypoint-worker.sh - deploy: - replicas: ${WORKER_REPLICAS:-1} - restart_policy: - condition: on-failure volumes: - logs_worker:/code/plane/logs depends_on: From 03248f37a10eb4cb7434e522900b3710831fdaba Mon Sep 17 00:00:00 2001 From: Scan <103391616+scanash00@users.noreply.github.com> Date: Sat, 5 Apr 2025 22:41:42 -0800 Subject: [PATCH 61/65] Update blueprints/plane/docker-compose.yml Co-authored-by: Mauricio Siu <47042324+Siumauricio@users.noreply.github.com> --- blueprints/plane/docker-compose.yml | 4 ---- 1 file changed, 4 deletions(-) diff --git a/blueprints/plane/docker-compose.yml b/blueprints/plane/docker-compose.yml index c6a24be..6d39855 100644 --- a/blueprints/plane/docker-compose.yml +++ b/blueprints/plane/docker-compose.yml @@ -66,10 +66,6 @@ services: beat-worker: image: makeplane/plane-backend:${APP_RELEASE:-v0.25.3} command: ./bin/docker-entrypoint-beat.sh - deploy: - replicas: ${BEAT_WORKER_REPLICAS:-1} - restart_policy: - condition: on-failure volumes: - logs_beat-worker:/code/plane/logs depends_on: From dd2041ee66903050b8ca3fd45bc664d8e0bf5c61 Mon Sep 17 00:00:00 2001 From: Scan <103391616+scanash00@users.noreply.github.com> Date: Sat, 5 Apr 2025 22:44:01 -0800 Subject: [PATCH 62/65] Update blueprints/plane/docker-compose.yml Co-authored-by: Mauricio Siu <47042324+Siumauricio@users.noreply.github.com> --- blueprints/plane/docker-compose.yml | 4 ---- 1 file changed, 4 deletions(-) diff --git a/blueprints/plane/docker-compose.yml b/blueprints/plane/docker-compose.yml index 6d39855..e875911 100644 --- a/blueprints/plane/docker-compose.yml +++ b/blueprints/plane/docker-compose.yml @@ -116,10 +116,6 @@ services: plane-mq: image: rabbitmq:3.13.6-management-alpine - deploy: - replicas: 1 - restart_policy: - condition: on-failure volumes: - rabbitmq_data:/var/lib/rabbitmq env_file: From 467d0b81b88bd899bac0390beff610ac7dc016bb Mon Sep 17 00:00:00 2001 From: Scan <103391616+scanash00@users.noreply.github.com> Date: Sat, 5 Apr 2025 22:44:10 -0800 Subject: [PATCH 63/65] Update blueprints/plane/docker-compose.yml Co-authored-by: Mauricio Siu <47042324+Siumauricio@users.noreply.github.com> --- blueprints/plane/docker-compose.yml | 4 ---- 1 file changed, 4 deletions(-) diff --git a/blueprints/plane/docker-compose.yml b/blueprints/plane/docker-compose.yml index e875911..f0164c7 100644 --- a/blueprints/plane/docker-compose.yml +++ b/blueprints/plane/docker-compose.yml @@ -79,10 +79,6 @@ services: migrator: image: makeplane/plane-backend:${APP_RELEASE:-v0.25.3} command: ./bin/docker-entrypoint-migrator.sh - deploy: - replicas: 1 - restart_policy: - condition: on-failure volumes: - logs_migrator:/code/plane/logs depends_on: From 5abff0c8f6dae81b93e32718a2014a82777927f5 Mon Sep 17 00:00:00 2001 From: Scan <103391616+scanash00@users.noreply.github.com> Date: Sat, 5 Apr 2025 22:44:34 -0800 Subject: [PATCH 64/65] Update blueprints/plane/docker-compose.yml Co-authored-by: Mauricio Siu <47042324+Siumauricio@users.noreply.github.com> --- blueprints/plane/docker-compose.yml | 4 ---- 1 file changed, 4 deletions(-) diff --git a/blueprints/plane/docker-compose.yml b/blueprints/plane/docker-compose.yml index f0164c7..9e1021b 100644 --- a/blueprints/plane/docker-compose.yml +++ b/blueprints/plane/docker-compose.yml @@ -101,10 +101,6 @@ services: plane-redis: image: valkey/valkey:7.2.5-alpine - deploy: - replicas: 1 - restart_policy: - condition: on-failure volumes: - redisdata:/data env_file: From 55cc6ca8d72b34e8485d22707e358c0ef51ed2f8 Mon Sep 17 00:00:00 2001 From: Scan <103391616+scanash00@users.noreply.github.com> Date: Sat, 5 Apr 2025 22:44:47 -0800 Subject: [PATCH 65/65] Update blueprints/plane/docker-compose.yml Co-authored-by: Mauricio Siu <47042324+Siumauricio@users.noreply.github.com> --- blueprints/plane/docker-compose.yml | 4 ---- 1 file changed, 4 deletions(-) diff --git a/blueprints/plane/docker-compose.yml b/blueprints/plane/docker-compose.yml index 9e1021b..3c19c49 100644 --- a/blueprints/plane/docker-compose.yml +++ b/blueprints/plane/docker-compose.yml @@ -90,10 +90,6 @@ services: plane-db: image: postgres:17-alpine command: postgres -c 'max_connections=1000' - deploy: - replicas: 1 - restart_policy: - condition: on-failure volumes: - pgdata:/var/lib/postgresql/data env_file: