diff --git a/config/sentry.php b/config/sentry.php
index 2fed52ef02..25cf7e423d 100644
--- a/config/sentry.php
+++ b/config/sentry.php
@@ -7,7 +7,7 @@
// The release version of your application
// Example with dynamic git hash: trim(exec('git --git-dir ' . base_path('.git') . ' log --pretty="%h" -n1 HEAD'))
- 'release' => '4.0.0-beta.358',
+ 'release' => '4.0.0-beta.357',
// When left empty or `null` the Laravel environment will be used
'environment' => config('app.env'),
diff --git a/config/version.php b/config/version.php
index 1c030534b3..58b619ebd6 100644
--- a/config/version.php
+++ b/config/version.php
@@ -1,3 +1,3 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/public/svgs/cloudbeaver.svg b/public/svgs/cloudbeaver.svg
new file mode 100644
index 0000000000..4a76347669
--- /dev/null
+++ b/public/svgs/cloudbeaver.svg
@@ -0,0 +1,7 @@
+
diff --git a/public/svgs/cryptgeon.png b/public/svgs/cryptgeon.png
new file mode 100644
index 0000000000..be121cfd08
Binary files /dev/null and b/public/svgs/cryptgeon.png differ
diff --git a/public/svgs/flowise.png b/public/svgs/flowise.png
new file mode 100644
index 0000000000..6b0be0d2a7
Binary files /dev/null and b/public/svgs/flowise.png differ
diff --git a/public/svgs/freshrss.png b/public/svgs/freshrss.png
new file mode 100644
index 0000000000..d1a75118f9
Binary files /dev/null and b/public/svgs/freshrss.png differ
diff --git a/public/svgs/homebox.svg b/public/svgs/homebox.svg
new file mode 100644
index 0000000000..08670bbb92
--- /dev/null
+++ b/public/svgs/homebox.svg
@@ -0,0 +1,11 @@
+
diff --git a/public/svgs/immich.svg b/public/svgs/immich.svg
new file mode 100644
index 0000000000..9d844a772b
--- /dev/null
+++ b/public/svgs/immich.svg
@@ -0,0 +1,66 @@
+
+
+
diff --git a/public/svgs/kimai.svg b/public/svgs/kimai.svg
new file mode 100644
index 0000000000..35b1469726
--- /dev/null
+++ b/public/svgs/kimai.svg
@@ -0,0 +1,67 @@
+
\ No newline at end of file
diff --git a/public/svgs/libretranslate.svg b/public/svgs/libretranslate.svg
new file mode 100644
index 0000000000..103d47d609
--- /dev/null
+++ b/public/svgs/libretranslate.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/public/svgs/ntfy.svg b/public/svgs/ntfy.svg
new file mode 100644
index 0000000000..9e5b5136fd
--- /dev/null
+++ b/public/svgs/ntfy.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/public/svgs/owncloud.svg b/public/svgs/owncloud.svg
new file mode 100644
index 0000000000..83631e3f5d
--- /dev/null
+++ b/public/svgs/owncloud.svg
@@ -0,0 +1,84 @@
+
+
+
diff --git a/public/svgs/qbittorrent.svg b/public/svgs/qbittorrent.svg
new file mode 100644
index 0000000000..69d8cf62ae
--- /dev/null
+++ b/public/svgs/qbittorrent.svg
@@ -0,0 +1,16 @@
+
\ No newline at end of file
diff --git a/public/svgs/traccar.png b/public/svgs/traccar.png
new file mode 100644
index 0000000000..c747aea054
Binary files /dev/null and b/public/svgs/traccar.png differ
diff --git a/public/svgs/unsend.svg b/public/svgs/unsend.svg
new file mode 100644
index 0000000000..f5ff6fabc6
--- /dev/null
+++ b/public/svgs/unsend.svg
@@ -0,0 +1,13 @@
+
diff --git a/public/svgs/vvveb.svg b/public/svgs/vvveb.svg
new file mode 100644
index 0000000000..2b66b3087b
--- /dev/null
+++ b/public/svgs/vvveb.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/templates/compose/affine.yaml b/templates/compose/affine.yaml
new file mode 100644
index 0000000000..97be09cdb5
--- /dev/null
+++ b/templates/compose/affine.yaml
@@ -0,0 +1,75 @@
+# documentation: https://docs.affine.pro/docs/self-host-affine
+# slogan: Affine is an open-source, all-in-one workspace and OS for knowledge management, a Notion/Miro alternative.
+# tags: knowledge-management,notion,miro,workspace
+# logo: svgs/affine.svg
+# port: 3010
+
+services:
+ affine:
+ image: ghcr.io/toeverything/affine-graphql:stable
+ command:
+ - sh
+ - '-c'
+ - 'node ./scripts/self-host-predeploy && node ./dist/index.js'
+ depends_on:
+ redis:
+ condition: service_healthy
+ postgres:
+ condition: service_healthy
+ volumes:
+ - affine-config:/root/.affine/config
+ - affine-storage:/root/.affine/storage
+ logging:
+ driver: json-file
+ options:
+ max-size: 1000m
+ environment:
+ - SERVICE_FQDN_AFFINE_3010
+ - NODE_OPTIONS=--import=./scripts/register.js
+ - AFFINE_CONFIG_PATH=/root/.affine/config
+ - REDIS_SERVER_HOST=redis
+ - DATABASE_URL=postgres://${SERVICE_USER_POSTGRES}:${SERVICE_PASSWORD_POSTGRES}@postgres:5432/${POSTGRES_DB:-affine}
+ - NODE_ENV=production
+ - AFFINE_SERVER_HOST=$SERVICE_FQDN_AFFINE
+ - AFFINE_SERVER_EXTERNAL_URL=$SERVICE_FQDN_AFFINE
+ - MAILER_HOST=${MAILER_HOST}
+ - MAILER_PORT=${MAILER_PORT}
+ - MAILER_USER=${MAILER_USER}
+ - MAILER_PASSWORD=${MAILER_PASSWORD}
+ - MAILER_SENDER=${MAILER_SENDER}
+ healthcheck:
+ test: ["CMD-SHELL", "bash -c ':> /dev/tcp/127.0.0.1/3010' || exit 1"]
+ interval: 5s
+ timeout: 20s
+ retries: 3
+
+ redis:
+ image: redis
+ volumes:
+ - affine-redis-data:/data
+ healthcheck:
+ test:
+ - CMD
+ - redis-cli
+ - '--raw'
+ - incr
+ - ping
+ interval: 10s
+ timeout: 5s
+ retries: 5
+ postgres:
+ image: postgres:16
+ volumes:
+ - affine-postgres-data:/var/lib/postgresql/data
+ healthcheck:
+ test:
+ - CMD-SHELL
+ - 'pg_isready -U affine'
+ interval: 10s
+ timeout: 5s
+ retries: 5
+ environment:
+ - POSTGRES_USER=${SERVICE_USER_POSTGRES}
+ - POSTGRES_PASSWORD=${SERVICE_PASSWORD_POSTGRES}
+ - POSTGRES_DB=${POSTGRES_DB:-affine}
+ - PGDATA=/var/lib/postgresql/data/pgdata
diff --git a/templates/compose/cloudbeaver.yaml b/templates/compose/cloudbeaver.yaml
new file mode 100644
index 0000000000..a21b004530
--- /dev/null
+++ b/templates/compose/cloudbeaver.yaml
@@ -0,0 +1,18 @@
+# documentation: https://dbeaver.com/docs/cloudbeaver/
+# slogan: CloudBeaver is a lightweight web application designed for comprehensive data management.
+# tags: dbeaver, data management, data, database, mysql, postgres, sqlite, sql, mongodb
+# logo: svgs/cloudbeaver.svg
+# port: 8978
+
+services:
+ cloudbeaver:
+ image: dbeaver/cloudbeaver:24
+ volumes:
+ - cloudbeaver-data:/opt/cloudbeaver/workspace
+ environment:
+ - SERVICE_FQDN_CLOUDBEAVER_8978
+ healthcheck:
+ test: ["CMD", "wget", "-q", "--spider", "http://127.0.0.1:8978/"]
+ interval: 5s
+ timeout: 20s
+ retries: 10
diff --git a/templates/compose/cryptgeon.yaml b/templates/compose/cryptgeon.yaml
new file mode 100644
index 0000000000..942b1601c6
--- /dev/null
+++ b/templates/compose/cryptgeon.yaml
@@ -0,0 +1,41 @@
+# documentation: https://github.com/cupcakearmy/cryptgeon
+# slogan: Secure note / file sharing service inspired by PrivNote.
+# tags: cryptgeon, secure, note, sharing, privnote, file, sharing
+# logo: svgs/cryptgeon.png
+# port: 8000
+
+services:
+ app:
+ image: cupcakearmy/cryptgeon:latest
+ environment:
+ - SERVICE_FQDN_CRYPTGEON_8000
+ - SIZE_LIMIT=${SIZE_LIMIT:-4 MiB}
+ - MAX_VIEWS=${MAX_VIEWS:-100}
+ - MAX_EXPIRATION=${MAX_EXPIRATION:-360}
+ - ALLOW_ADVANCED=${ALLOW_ADVANCED:-true}
+ - ALLOW_FILES=${ALLOW_FILES:-true}
+ depends_on:
+ redis:
+ condition: service_healthy
+ healthcheck:
+ test:
+ - CMD
+ - curl
+ - "--fail"
+ - "http://127.0.0.1:8000/api/live/"
+ interval: 1m
+ timeout: 3s
+ retries: 2
+ start_period: 5s
+
+ redis:
+ image: redis:7-alpine
+ command: "redis-server --maxmemory 200mb --maxmemory-policy allkeys-lru"
+ healthcheck:
+ test:
+ - CMD
+ - redis-cli
+ - PING
+ interval: 5s
+ timeout: 10s
+ retries: 2
diff --git a/templates/compose/flowise-with-databases.yaml b/templates/compose/flowise-with-databases.yaml
new file mode 100644
index 0000000000..d78079b621
--- /dev/null
+++ b/templates/compose/flowise-with-databases.yaml
@@ -0,0 +1,91 @@
+# documentation: https://docs.flowiseai.com/
+# slogan: Flowise is an open source low-code tool for developers to build customized LLM orchestration flows & AI agents. Also deploys Redis, Postgres and other services.
+# tags: lowcode, nocode, ai, llm, openai, anthropic, machine-learning, rag, agents, chatbot, api, team, bot, flows
+# logo: svgs/flowise.png
+# port: 3001
+
+volumes:
+ flowise_data:
+ pg_record_manager_data:
+ redis_cache_data:
+ qdrant_data:
+
+services:
+ flowise:
+ image: flowiseai/flowise
+ restart: always
+ depends_on:
+ pg_record_manager:
+ condition: service_healthy
+ redis_cache:
+ condition: service_healthy
+ qdrant:
+ condition: service_healthy
+ environment:
+ - SERVICE_FQDN_FLOWISE_3001
+ - DEBUG=false
+ - DISABLE_FLOWISE_TELEMETRY=true
+ - PORT=3001
+ - DATABASE_PATH=/root/.flowise
+ - APIKEY_PATH=/root/.flowise
+ - SECRETKEY_PATH=/root/.flowise
+ - LOG_PATH=/root/.flowise/logs
+ - BLOB_STORAGE_PATH=/root/.flowise/storage
+ - FLOWISE_USERNAME=${SERVICE_USER_FLOWISE}
+ - FLOWISE_PASSWORD=${SERVICE_PASSWORD_FLOWISE}
+ volumes:
+ - flowise_data:/root/.flowise
+ healthcheck:
+ test:
+ - CMD-SHELL
+ - wget
+ - --no-verbose
+ - --tries=1
+ - --spider
+ - http://localhost:3001
+ interval: 5s
+ timeout: 5s
+ retries: 3
+ pg_record_manager:
+ image: "postgres:16"
+ restart: always
+ environment:
+ - POSTGRES_USER=${SERVICE_USER_POSTGRES}
+ - POSTGRES_PASSWORD=${SERVICE_PASSWORD_POSTGRES}
+ - POSTGRES_DB=${POSTGRES_DB:-record_manager}
+ volumes:
+ - pg_record_manager_data:/var/lib/postgresql/data
+ healthcheck:
+ test:
+ - CMD-SHELL
+ - "pg_isready -h localhost -U $${POSTGRES_USER} -d $${POSTGRES_DB}"
+ interval: 5s
+ timeout: 5s
+ retries: 3
+ redis_cache:
+ image: "redis:7"
+ restart: always
+ volumes:
+ - redis_cache_data:/data
+ healthcheck:
+ test:
+ - CMD-SHELL
+ - "redis-cli -h localhost -p 6379 ping"
+ interval: 5s
+ timeout: 5s
+ retries: 3
+ qdrant:
+ image: "qdrant/qdrant:latest"
+ restart: always
+ environment:
+ - SERVICE_FQDN_QDRANT_6333
+ - QDRANT__SERVICE__API_KEY=${SERVICE_PASSWORD_QDRANTAPIKEY}
+ volumes:
+ - "qdrant_data:/qdrant/storage"
+ healthcheck:
+ test:
+ - CMD-SHELL
+ - bash -c ':> /dev/tcp/127.0.0.1/6333' || exit 1
+ interval: 5s
+ timeout: 5s
+ retries: 3
diff --git a/templates/compose/flowise.yaml b/templates/compose/flowise.yaml
new file mode 100644
index 0000000000..dc5095e1e9
--- /dev/null
+++ b/templates/compose/flowise.yaml
@@ -0,0 +1,35 @@
+# documentation: https://docs.flowiseai.com/
+# slogan: Flowise is an open source low-code tool for developers to build customized LLM orchestration flows & AI agents.
+# tags: lowcode, nocode, ai, llm, openai, anthropic, machine-learning, rag, agents, chatbot, api, team, bot, flows
+# logo: svgs/flowise.png
+# port: 3001
+
+services:
+ flowise:
+ image: flowiseai/flowise
+ restart: always
+ environment:
+ - SERVICE_FQDN_FLOWISE_3001
+ - DEBUG=false
+ - DISABLE_FLOWISE_TELEMETRY=true
+ - PORT=3001
+ - DATABASE_PATH=/root/.flowise
+ - APIKEY_PATH=/root/.flowise
+ - SECRETKEY_PATH=/root/.flowise
+ - LOG_PATH=/root/.flowise/logs
+ - BLOB_STORAGE_PATH=/root/.flowise/storage
+ - FLOWISE_USERNAME=${SERVICE_USER_FLOWISE}
+ - FLOWISE_PASSWORD=${SERVICE_PASSWORD_FLOWISE}
+ volumes:
+ - flowise_data:/root/.flowise
+ healthcheck:
+ test:
+ - CMD-SHELL
+ - wget
+ - --no-verbose
+ - --tries=1
+ - --spide
+ - http://localhost:3001
+ interval: 5s
+ timeout: 5s
+ retries: 3
diff --git a/templates/compose/freshrss-with-mariadb.yaml b/templates/compose/freshrss-with-mariadb.yaml
new file mode 100644
index 0000000000..fe066ffb60
--- /dev/null
+++ b/templates/compose/freshrss-with-mariadb.yaml
@@ -0,0 +1,41 @@
+# documentation: https://freshrss.org/index.html
+# slogan: A free, self-hostable feed aggregator.
+# tags: rss, feed
+# logo: svgs/freshrss.png
+# port: 80
+
+services:
+ freshrss:
+ image: freshrss/freshrss:latest
+ environment:
+ - SERVICE_FQDN_FRESHRSS_80
+ - CRON_MIN=${CRON_MIN:-1,31}
+ - MARIADB_DB=${MARIADB_DATABASE:-freshrss}
+ - MARIADB_USER=${SERVICE_USER_MARIADB}
+ - MARIADB_PASSWORD=${SERVICE_PASSWORD_MARIADB}
+ volumes:
+ - freshrss-data:/var/www/FreshRSS/data
+ - freshrss-extensions:/var/www/FreshRSS/extensions
+ depends_on:
+ freshrss-db:
+ condition: service_healthy
+ healthcheck:
+ test: ["CMD-SHELL", "bash -c ':> /dev/tcp/127.0.0.1/80' || exit 1"]
+ interval: 5s
+ timeout: 20s
+ retries: 3
+
+ freshrss-db:
+ image: mariadb:11
+ volumes:
+ - mariadb-data:/var/lib/mysql
+ environment:
+ - MYSQL_ROOT_PASSWORD=$SERVICE_PASSWORD_ROOT
+ - MYSQL_DATABASE=${MARIADB_DATABASE:-freshrss}
+ - MYSQL_USER=${SERVICE_USER_MARIADB}
+ - MYSQL_PASSWORD=${SERVICE_PASSWORD_MARIADB}
+ healthcheck:
+ test: ["CMD", "healthcheck.sh", "--connect", "--innodb_initialized"]
+ interval: 5s
+ timeout: 20s
+ retries: 10
diff --git a/templates/compose/freshrss-with-mysql.yaml b/templates/compose/freshrss-with-mysql.yaml
new file mode 100644
index 0000000000..ca3726a124
--- /dev/null
+++ b/templates/compose/freshrss-with-mysql.yaml
@@ -0,0 +1,41 @@
+# documentation: https://freshrss.org/index.html
+# slogan: A free, self-hostable feed aggregator.
+# tags: rss, feed
+# logo: svgs/freshrss.png
+# port: 80
+
+services:
+ freshrss:
+ image: freshrss/freshrss:latest
+ environment:
+ - SERVICE_FQDN_FRESHRSS_80
+ - CRON_MIN=${CRON_MIN:-1,31}
+ - MYSQL_DB=${MYSQL_DATABASE:-freshrss}
+ - MYSQL_USER=${SERVICE_USER_MYSQL}
+ - MYSQL_PASSWORD=${SERVICE_PASSWORD_MYSQL}
+ volumes:
+ - freshrss-data:/var/www/FreshRSS/data
+ - freshrss-extensions:/var/www/FreshRSS/extensions
+ depends_on:
+ freshrss-db:
+ condition: service_healthy
+ healthcheck:
+ test: ["CMD-SHELL", "bash -c ':> /dev/tcp/127.0.0.1/80' || exit 1"]
+ interval: 5s
+ timeout: 20s
+ retries: 3
+
+ freshrss-db:
+ image: mysql:8
+ volumes:
+ - mysql-data:/var/lib/mysql
+ environment:
+ - MYSQL_ROOT_PASSWORD=$SERVICE_PASSWORD_ROOT
+ - MYSQL_DATABASE=${MYSQL_DATABASE:-freshrss}
+ - MYSQL_USER=$SERVICE_USER_MYSQL
+ - MYSQL_PASSWORD=$SERVICE_PASSWORD_MYSQL
+ healthcheck:
+ test: ["CMD", "mysqladmin", "ping", "-h", "127.0.0.1"]
+ interval: 5s
+ timeout: 20s
+ retries: 10
diff --git a/templates/compose/freshrss-with-postgresql.yaml b/templates/compose/freshrss-with-postgresql.yaml
new file mode 100644
index 0000000000..8928dfd562
--- /dev/null
+++ b/templates/compose/freshrss-with-postgresql.yaml
@@ -0,0 +1,41 @@
+# documentation: https://freshrss.org/index.html
+# slogan: A free, self-hostable feed aggregator.
+# tags: rss, feed
+# logo: svgs/freshrss.png
+# port: 80
+
+services:
+ freshrss:
+ image: freshrss/freshrss:latest
+ environment:
+ - SERVICE_FQDN_FRESHRSS_80
+ - CRON_MIN=${CRON_MIN:-1,31}
+ - POSTGRES_DB=${POSTGRESQL_DATABASE:-freshrss}
+ - POSTGRES_USER=${SERVICE_USER_POSTGRESQL}
+ - POSTGRES_PASSWORD=${SERVICE_PASSWORD_POSTGRESQL}
+ - POSTGRES_HOST=postgresql
+ volumes:
+ - freshrss-data:/var/www/FreshRSS/data
+ - freshrss-extensions:/var/www/FreshRSS/extensions
+ depends_on:
+ freshrss-db:
+ condition: service_healthy
+ healthcheck:
+ test: ["CMD-SHELL", "bash -c ':> /dev/tcp/127.0.0.1/80' || exit 1"]
+ interval: 5s
+ timeout: 20s
+ retries: 3
+
+ freshrss-db:
+ image: postgres:16
+ volumes:
+ - freshrss-postgresql-data:/var/lib/postgresql/data
+ environment:
+ - POSTGRES_USER=${SERVICE_USER_POSTGRESQL}
+ - POSTGRES_PASSWORD=${SERVICE_PASSWORD_POSTGRESQL}
+ - POSTGRES_DB=${POSTGRESQL_DATABASE:-freshrss}
+ healthcheck:
+ test: ["CMD-SHELL", "pg_isready -U $${POSTGRES_USER} -d $${POSTGRES_DB}"]
+ interval: 5s
+ timeout: 20s
+ retries: 10
diff --git a/templates/compose/freshrss.yaml b/templates/compose/freshrss.yaml
new file mode 100644
index 0000000000..c481b96d4c
--- /dev/null
+++ b/templates/compose/freshrss.yaml
@@ -0,0 +1,20 @@
+# documentation: https://freshrss.org/index.html
+# slogan: A free, self-hostable feed aggregator.
+# tags: rss, feed
+# logo: svgs/freshrss.png
+# port: 80
+
+services:
+ freshrss:
+ image: freshrss/freshrss:latest
+ environment:
+ - SERVICE_FQDN_FRESHRSS_80
+ - CRON_MIN=${CRON_MIN:-1,31}
+ volumes:
+ - freshrss-data:/var/www/FreshRSS/data
+ - freshrss-extensions:/var/www/FreshRSS/extensions
+ healthcheck:
+ test: ["CMD-SHELL", "bash -c ':> /dev/tcp/127.0.0.1/80' || exit 1"]
+ interval: 5s
+ timeout: 20s
+ retries: 3
diff --git a/templates/compose/glitchtip.yaml b/templates/compose/glitchtip.yaml
index a8e4848b09..2f0b0100c3 100644
--- a/templates/compose/glitchtip.yaml
+++ b/templates/compose/glitchtip.yaml
@@ -12,12 +12,13 @@ services:
- POSTGRES_PASSWORD=${SERVICE_PASSWORD_POSTGRESQL}
- POSTGRES_DB=${POSTGRESQL_DATABASE:-glitchtip}
volumes:
- - pg-data:/var/lib/postgresql/data
+ - glitchtip-postgres-data:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U $${POSTGRES_USER} -d $${POSTGRES_DB}"]
interval: 5s
timeout: 20s
retries: 10
+
redis:
image: redis
healthcheck:
@@ -25,11 +26,14 @@ services:
interval: 5s
timeout: 20s
retries: 10
+
web:
image: glitchtip/glitchtip
depends_on:
- - postgres
- - redis
+ postgres:
+ condition: service_healthy
+ redis:
+ condition: service_healthy
environment:
- SERVICE_FQDN_GLITCHTIP_8080
- DATABASE_URL=postgres://$SERVICE_USER_POSTGRESQL:$SERVICE_PASSWORD_POSTGRESQL@postgres:5432/${POSTGRESQL_DATABASE:-glitchtip}
@@ -46,14 +50,16 @@ services:
interval: 5s
timeout: 20s
retries: 10
+
worker:
image: glitchtip/glitchtip
command: ./bin/run-celery-with-beat.sh
depends_on:
- - postgres
- - redis
+ postgres:
+ condition: service_healthy
+ redis:
+ condition: service_healthy
environment:
- - SERVICE_FQDN_GLITCHTIP
- DATABASE_URL=postgres://$SERVICE_USER_POSTGRESQL:$SERVICE_PASSWORD_POSTGRESQL@postgres:5432/${POSTGRESQL_DATABASE:-glitchtip}
- SECRET_KEY=$SERVICE_BASE64_64_ENCRYPTION
- EMAIL_URL=${EMAIL_URL:-consolemail://}
@@ -68,12 +74,15 @@ services:
interval: 5s
timeout: 20s
retries: 10
+
migrate:
image: glitchtip/glitchtip
restart: "no"
depends_on:
- - postgres
- - redis
+ postgres:
+ condition: service_healthy
+ redis:
+ condition: service_healthy
command: "./manage.py migrate"
environment:
- DATABASE_URL=postgres://$SERVICE_USER_POSTGRESQL:$SERVICE_PASSWORD_POSTGRESQL@postgres:5432/${POSTGRESQL_DATABASE:-glitchtip}
diff --git a/templates/compose/homebox.yaml b/templates/compose/homebox.yaml
new file mode 100644
index 0000000000..f7c09ed310
--- /dev/null
+++ b/templates/compose/homebox.yaml
@@ -0,0 +1,21 @@
+# documentation: https://github.com/hay-kot/homebox
+# slogan: Homebox is a self-hosted file management solution.
+# tags: homebox,file-management,self-hosted
+# logo: svgs/homebox.svg
+# port: 7745
+
+services:
+ homebox:
+ image: ghcr.io/hay-kot/homebox:latest
+ environment:
+ - SERVICE_FQDN_HOMEBOX_7745
+ - HBOX_LOG_LEVEL=${HBOX_LOG_LEVEL:-info}
+ - HBOX_LOG_FORMAT=${HBOX_LOG_FORMAT:-text}
+ - HBOX_WEB_MAX_UPLOAD_SIZE=${HBOX_WEB_MAX_UPLOAD_SIZE:-10}
+ volumes:
+ - homebox-data:/data/
+ healthcheck:
+ test: ["CMD", "wget", "-q", "--spider", "http://127.0.0.1:7745"]
+ interval: 5s
+ timeout: 20s
+ retries: 10
diff --git a/templates/compose/immich.yaml b/templates/compose/immich.yaml
new file mode 100644
index 0000000000..b3525cc585
--- /dev/null
+++ b/templates/compose/immich.yaml
@@ -0,0 +1,76 @@
+# documentation: https://immich.app/docs/overview/introduction
+# slogan: Self-hosted photo and video management solution.
+# tags: photo,video,management,server,cloud,storage,sharing,metadata,face,recognition
+# logo: svgs/immich.svg
+# port: 2283
+
+services:
+ immich:
+ image: ghcr.io/immich-app/immich-server:release
+ # extends:
+ # file: hwaccel.transcoding.yml
+ # service: cpu # set to one of [nvenc, quicksync, rkmpp, vaapi, vaapi-wsl] for accelerated transcoding
+ volumes:
+ - immich-uploads:/usr/src/app/upload
+ - /etc/localtime:/etc/localtime:ro
+ environment:
+ - SERVICE_FQDN_IMMICH_3001
+ - UPLOAD_LOCATION=./library
+ - DB_DATA_LOCATION=./postgres
+ - DB_PASSWORD=$SERVICE_PASSWORD_POSTGRES
+ - DB_USERNAME=$SERVICE_USER_POSTGRES
+ - DB_DATABASE_NAME=${DB_DATABASE_NAME:-immich}
+ - TZ=${TZ:-Etc/UTC}
+ depends_on:
+ redis:
+ condition: service_healthy
+ database:
+ condition: service_healthy
+ healthcheck:
+ disable: false
+
+ immich-machine-learning:
+ container_name: immich_machine_learning
+ # For hardware acceleration, add one of -[armnn, cuda, openvino] to the image tag.
+ # Example tag: ${IMMICH_VERSION:-release}-cuda
+ image: ghcr.io/immich-app/immich-machine-learning:release
+ # extends: # uncomment this section for hardware acceleration - see https://immich.app/docs/features/ml-hardware-acceleration
+ # file: hwaccel.ml.yml
+ # service: cpu # set to one of [armnn, cuda, openvino, openvino-wsl] for accelerated inference - use the `-wsl` version for WSL2 where applicable
+ volumes:
+ - immich-model-cache:/cache
+ environment:
+ - UPLOAD_LOCATION=./library
+ - DB_DATA_LOCATION=./postgres
+ - DB_PASSWORD=$SERVICE_PASSWORD_POSTGRES
+ - DB_USERNAME=$SERVICE_USER_POSTGRES
+ - DB_DATABASE_NAME=${DB_DATABASE_NAME:-immich}
+ - TZ=${TZ:-Etc/UTC}
+ healthcheck:
+ disable: false
+
+ redis:
+ image: redis:7.4-alpine
+ healthcheck:
+ test:
+ - CMD
+ - redis-cli
+ - PING
+ interval: 5s
+ timeout: 10s
+ retries: 20
+
+ database:
+ image: docker.io/tensorchord/pgvecto-rs:pg14-v0.2.0@sha256:90724186f0a3517cf6914295b5ab410db9ce23190a2d9d0b9dd6463e3fa298f0
+ environment:
+ POSTGRES_PASSWORD: ${SERVICE_PASSWORD_POSTGRES}
+ POSTGRES_USER: ${SERVICE_USER_POSTGRES}
+ POSTGRES_DB: ${DB_DATABASE_NAME:-immich}
+ POSTGRES_INITDB_ARGS: '--data-checksums'
+ volumes:
+ - immich-postgres-data:/var/lib/postgresql/data
+ healthcheck:
+ test: ["CMD-SHELL", "pg_isready -U $${POSTGRES_USER} -d $${POSTGRES_DB}"]
+ interval: 5s
+ timeout: 20s
+ retries: 10
diff --git a/templates/compose/kimai.yaml b/templates/compose/kimai.yaml
new file mode 100644
index 0000000000..ba73ba9805
--- /dev/null
+++ b/templates/compose/kimai.yaml
@@ -0,0 +1,44 @@
+# documentation: https://www.kimai.org/
+# slogan: Open source time-tracking app.
+# tags: time-tracking, open-source
+# logo: svgs/kimai.svg
+# port: 8001
+
+services:
+ mysql:
+ image: mysql:8
+ volumes:
+ - kimai-mysql-data:/var/lib/mysql
+ environment:
+ - MYSQL_DATABASE=${MYSQL_DATABASE:-kimai}
+ - MYSQL_USER=${SERVICE_USER_MYSQL}
+ - MYSQL_PASSWORD=${SERVICE_PASSWORD_MYSQL}
+ - MYSQL_ROOT_PASSWORD=${SERVICE_PASSWORD_ROOT}
+ command: --default-storage-engine innodb
+ healthcheck:
+ test: ["CMD", "mysqladmin", "ping", "-h", "127.0.0.1"]
+ interval: 5s
+ timeout: 20s
+ retries: 10
+ kimai:
+ image: kimai/kimai2:apache-latest
+ container_name: kimai
+ depends_on:
+ mysql:
+ condition: service_healthy
+ volumes:
+ - kimai-data:/opt/kimai/var/data
+ environment:
+ - SERVICE_FQDN_KIMAI_8001
+ - APP_SECRET=${SERVICE_PASSWORD_APPSECRET}
+ - MAILER_FROM=${MAILER_FROM:-kimai@example.com}
+ - MAILER_URL=${MAILER_URL:-null://null}
+ - ADMINMAIL=${ADMINMAIL:-admin@kimai.local}
+ - ADMINPASS=${SERVICE_PASSWORD_ADMINPASS}
+ - DATABASE_URL=mysql://${SERVICE_USER_MYSQL}:${SERVICE_PASSWORD_MYSQL}@mysql/${MYSQL_DATABASE}?charset=utf8mb4&serverVersion=8.3.0
+ - TRUSTED_HOSTS=localhost
+ healthcheck:
+ test: ["CMD", "curl", "-f", "http://127.0.0.1:8001"]
+ interval: 2s
+ timeout: 10s
+ retries: 15
diff --git a/templates/compose/libretranslate.yaml b/templates/compose/libretranslate.yaml
new file mode 100644
index 0000000000..69b9e44667
--- /dev/null
+++ b/templates/compose/libretranslate.yaml
@@ -0,0 +1,19 @@
+# documentation: https://libretranslate.com/docs/
+# slogan: Free and open-source machine translation API, entirely self-hosted.
+# tags: translate, api
+# logo: svgs/libretranslate.svg
+# port: 5000
+
+services:
+ libretranslate:
+ image: "libretranslate/libretranslate:latest"
+ environment:
+ - SERVICE_FQDN_LIBRETRANSLATE_5000
+ - LT_SSL=true
+ - LT_UPDATE_MODELS=true
+ - LT_LOAD_ONLY=en,es,fr,de,ja
+ volumes:
+ - api-keys:/app/db
+ - models:/home/libretranslate/.local
+ healthcheck:
+ test: ["CMD-SHELL", "./venv/bin/python scripts/healthcheck.py"]
diff --git a/templates/compose/nextcloud-with-mariadb.yaml b/templates/compose/nextcloud-with-mariadb.yaml
new file mode 100644
index 0000000000..5cab4f0bbc
--- /dev/null
+++ b/templates/compose/nextcloud-with-mariadb.yaml
@@ -0,0 +1,61 @@
+# documentation: https://docs.nextcloud.com
+# slogan: NextCloud is a self-hosted, open-source platform that provides file storage, collaboration, and communication tools for seamless data management.
+# tags: cloud, collaboration, communication, filestorage, data
+# logo: svgs/nextcloud.svg
+# port: 80
+
+services:
+ nextcloud:
+ image: lscr.io/linuxserver/nextcloud:latest
+ environment:
+ - SERVICE_FQDN_NEXTCLOUD_80
+ - PUID=1000
+ - PGID=1000
+ - TZ=${TZ:-Europe/Paris}
+ - MYSQL_DATABASE=${MARIADB_DATABASE:-nextcloud}
+ - MYSQL_USER=${SERVICE_USER_MARIADB}
+ - MYSQL_PASSWORD=${SERVICE_PASSWORD_MARIADB}
+ - MYSQL_HOST=nextcloud-db
+ - REDIS_HOST=redis
+ - REDIS_PORT=6379
+ volumes:
+ - nextcloud-config:/config
+ - nextcloud-data:/data
+ depends_on:
+ nextcloud-db:
+ condition: service_healthy
+ redis:
+ condition: service_healthy
+ healthcheck:
+ test: ["CMD", "curl", "-f", "http://127.0.0.1:80"]
+ interval: 2s
+ timeout: 10s
+ retries: 15
+
+ nextcloud-db:
+ image: mariadb:11
+ volumes:
+ - nextcloud-mariadb-data:/var/lib/mysql
+ environment:
+ - MYSQL_ROOT_PASSWORD=${SERVICE_PASSWORD_ROOT}
+ - MYSQL_DATABASE=${MARIADB_DATABASE:-nextcloud}
+ - MYSQL_USER=${SERVICE_USER_MARIADB}
+ - MYSQL_PASSWORD=${SERVICE_PASSWORD_MARIADB}
+ healthcheck:
+ test: ["CMD", "healthcheck.sh", "--connect", "--innodb_initialized"]
+ interval: 5s
+ timeout: 20s
+ retries: 10
+
+ redis:
+ image: "redis:7.4-alpine"
+ volumes:
+ - "nextcloud-redis-data:/data"
+ healthcheck:
+ test:
+ - CMD
+ - redis-cli
+ - PING
+ interval: 5s
+ timeout: 10s
+ retries: 20
diff --git a/templates/compose/nextcloud-with-mysql.yaml b/templates/compose/nextcloud-with-mysql.yaml
new file mode 100644
index 0000000000..f8f6b972fa
--- /dev/null
+++ b/templates/compose/nextcloud-with-mysql.yaml
@@ -0,0 +1,61 @@
+# documentation: https://docs.nextcloud.com
+# slogan: NextCloud is a self-hosted, open-source platform that provides file storage, collaboration, and communication tools for seamless data management.
+# tags: cloud, collaboration, communication, filestorage, data
+# logo: svgs/nextcloud.svg
+# port: 80
+
+services:
+ nextcloud:
+ image: lscr.io/linuxserver/nextcloud:latest
+ environment:
+ - SERVICE_FQDN_NEXTCLOUD_80
+ - PUID=1000
+ - PGID=1000
+ - TZ=${TZ:-Europe/Paris}
+ - MYSQL_DATABASE=${MYSQL_DATABASE:-nextcloud}
+ - MYSQL_USER=${SERVICE_USER_MYSQL}
+ - MYSQL_PASSWORD=${SERVICE_PASSWORD_MYSQL}
+ - MYSQL_HOST=nextcloud-db
+ - REDIS_HOST=redis
+ - REDIS_PORT=6379
+ volumes:
+ - nextcloud-config:/config
+ - nextcloud-data:/data
+ depends_on:
+ nextcloud-db:
+ condition: service_healthy
+ redis:
+ condition: service_healthy
+ healthcheck:
+ test: ["CMD", "curl", "-f", "http://127.0.0.1:80"]
+ interval: 2s
+ timeout: 10s
+ retries: 15
+
+ nextcloud-db:
+ image: mysql:8.4.2
+ volumes:
+ - nextcloud-mysql-data:/var/lib/mysql
+ environment:
+ - MYSQL_ROOT_PASSWORD=${SERVICE_PASSWORD_ROOT}
+ - MYSQL_DATABASE=${MYSQL_DATABASE:-nextcloud}
+ - MYSQL_USER=${SERVICE_USER_MYSQL}
+ - MYSQL_PASSWORD=${SERVICE_PASSWORD_MYSQL}
+ healthcheck:
+ test: ["CMD", "mysqladmin", "ping", "-h", "127.0.0.1"]
+ interval: 5s
+ timeout: 20s
+ retries: 10
+
+ redis:
+ image: "redis:7.4-alpine"
+ volumes:
+ - "nextcloud-redis-data:/data"
+ healthcheck:
+ test:
+ - CMD
+ - redis-cli
+ - PING
+ interval: 5s
+ timeout: 10s
+ retries: 20
diff --git a/templates/compose/nextcloud-with-postgres.yaml b/templates/compose/nextcloud-with-postgres.yaml
new file mode 100644
index 0000000000..503fb4b826
--- /dev/null
+++ b/templates/compose/nextcloud-with-postgres.yaml
@@ -0,0 +1,60 @@
+# documentation: https://docs.nextcloud.com
+# slogan: NextCloud is a self-hosted, open-source platform that provides file storage, collaboration, and communication tools for seamless data management.
+# tags: cloud, collaboration, communication, filestorage, data
+# logo: svgs/nextcloud.svg
+# port: 80
+
+services:
+ nextcloud:
+ image: lscr.io/linuxserver/nextcloud:latest
+ environment:
+ - SERVICE_FQDN_NEXTCLOUD_80
+ - PUID=1000
+ - PGID=1000
+ - TZ=${TZ:-Europe/Paris}
+ - POSTGRES_DB=${POSTGRES_DB:-nextcloud}
+ - POSTGRES_USER=${SERVICE_USER_POSTGRES}
+ - POSTGRES_PASSWORD=${SERVICE_PASSWORD_POSTGRES}
+ - POSTGRES_HOST=nextcloud-db
+ - REDIS_HOST=redis
+ - REDIS_PORT=6379
+ volumes:
+ - nextcloud-config:/config
+ - nextcloud-data:/data
+ depends_on:
+ nextcloud-db:
+ condition: service_healthy
+ redis:
+ condition: service_healthy
+ healthcheck:
+ test: ["CMD", "curl", "-f", "http://127.0.0.1:80"]
+ interval: 2s
+ timeout: 10s
+ retries: 15
+
+ nextcloud-db:
+ image: postgres:16-alpine
+ volumes:
+ - nextcloud-postgresql-data:/var/lib/postgresql/data
+ environment:
+ - POSTGRES_USER=${SERVICE_USER_POSTGRES}
+ - POSTGRES_PASSWORD=${SERVICE_PASSWORD_POSTGRES}
+ - POSTGRES_DB=${POSTGRES_DB:-nextcloud}
+ healthcheck:
+ test: ["CMD-SHELL", "pg_isready -U $${POSTGRES_USER} -d $${POSTGRES_DB}"]
+ interval: 5s
+ timeout: 20s
+ retries: 10
+
+ redis:
+ image: "redis:7.4-alpine"
+ volumes:
+ - "nextcloud-redis-data:/data"
+ healthcheck:
+ test:
+ - CMD
+ - redis-cli
+ - PING
+ interval: 5s
+ timeout: 10s
+ retries: 20
diff --git a/templates/compose/nextcloud.yaml b/templates/compose/nextcloud.yaml
index 33858ee15a..d0b2c2a593 100644
--- a/templates/compose/nextcloud.yaml
+++ b/templates/compose/nextcloud.yaml
@@ -2,15 +2,16 @@
# slogan: NextCloud is a self-hosted, open-source platform that provides file storage, collaboration, and communication tools for seamless data management.
# tags: cloud, collaboration, communication, filestorage, data
# logo: svgs/nextcloud.svg
+# port: 80
services:
nextcloud:
image: lscr.io/linuxserver/nextcloud:latest
environment:
- - SERVICE_FQDN_NEXTCLOUD
+ - SERVICE_FQDN_NEXTCLOUD_80
- PUID=1000
- PGID=1000
- - TZ=Europe/Madrid
+ - TZ=${TZ:-Europe/Madrid}
volumes:
- nextcloud-config:/config
- nextcloud-data:/data
diff --git a/templates/compose/ntfy.yaml b/templates/compose/ntfy.yaml
new file mode 100644
index 0000000000..47b66a1247
--- /dev/null
+++ b/templates/compose/ntfy.yaml
@@ -0,0 +1,46 @@
+# documentation: https://docs.ntfy.sh/
+# slogan: ntfy is a simple HTTP-based pub-sub notification service. It allows you to send notifications to your phone or desktop via scripts from any computer, and/or using a REST API.
+# tags: ntfy, notification, push notification, pub-sub, notify
+# logo: svgs/ntfy.svg
+# port: 80
+
+services:
+ ntfy:
+ image: binwiederhier/ntfy
+ command:
+ - serve
+ environment:
+ - SERVICE_FQDN_NTFY_80
+ - NTFY_BASE_URL=${SERVICE_FQDN_NTFY}
+ - TZ=${TZ:-UTC}
+ - NTFY_CACHE_FILE=/var/cache/ntfy/cache.db
+ - NTFY_AUTH_FILE=/var/lib/ntfy/auth.db
+ - NTFY_UPSTREAM_BASE_URL=${UPSTREAM_BASE_URL:-https://ntfy.sh}
+ - NTFY_ENABLE_SIGNUP=${NTFY_ENABLE_SIGNUP:-true}
+ - NTFY_ENABLE_LOGIN=${NTFY_ENABLE_LOGIN:-true}
+ - NTFY_CACHE_DURATION=${NTFY_CACHE_DURATION:-24h}
+ - NTFY_ATTACHMENT_TOTAL_SIZE_LIMIT=${NTFY_ATTACHMENT_TOTAL_SIZE_LIMIT:-1G}
+ - NTFY_ATTACHMENT_FILE_SIZE_LIMIT=${NTFY_ATTACHMENT_FILE_SIZE_LIMIT:-10M}
+ - NTFY_ATTACHMENT_EXPIRY_DURATION=${NTFY_ATTACHMENT_EXPIRY_DURATION:-24h}
+ - NTFY_SMTP_SENDER_ADDR=${NTFY_SMTP_SENDER_ADDR:-smtp.your-domain.de}
+ - NTFY_SMTP_SENDER_USER=${NTFY_SMTP_SENDER_USER:-no-reply@de}
+ - NTFY_SMTP_SENDER_PASS=${NTFY_SMTP_SENDER_PASS:-password}
+ - NTFY_SMTP_SENDER_FROM=${NTFY_SMTP_SENDER_FROM:-no-reply@de}
+ - NTFY_KEEPALIVE_INTERVAL=${NTFY_KEEPALIVE_INTERVAL:-5m}
+ - NTFY_MANAGER_INTERVAL=${NTFY_MANAGER_INTERVAL:-5m}
+ - NTFY_VISITOR_MESSAGE_DAILY_LIMIT=${NTFY_VISITOR_MESSAGE_DAILY_LIMIT:-100}
+ - NTFY_VISITOR_ATTACHMENT_DAILY_BANDWIDTH_LIMIT=${NTFY_VISITOR_ATTACHMENT_DAILY_BANDWIDTH_LIMIT:-1G}
+ - NTFY_UPSTREAM_ACCESS_TOKEN=${UPSTREAM_ACCESS_TOKEN}
+ - NTFY_AUTH_DEFAULT_ACCESS=${NTFY_AUTH_DEFAULT_ACCESS:-read-write}
+ - NTFY_WEB_PUSH_PUBLIC_KEY=${NTFY_WEB_PUSH_PUBLIC_KEY}
+ - NTFY_WEB_PUSH_PRIVATE_KEY=${NTFY_WEB_PUSH_PRIVATE_KEY}
+ - NTFY_WEB_PUSH_EMAIL_ADDRESS=${NTFY_WEB_PUSH_EMAIL_ADDRESS}
+ volumes:
+ - ntfy-cache:/var/cache/ntfy
+ - ntfy-db:/var/lib/ntfy/
+ healthcheck:
+ test: ["CMD-SHELL", "wget -q --tries=1 http://localhost:80/v1/health -O - | grep -Eo '\"healthy\"\\s*:\\s*true' || exit 1"]
+ interval: 60s
+ timeout: 10s
+ retries: 3
+ start_period: 40s
diff --git a/templates/compose/owncloud.yaml b/templates/compose/owncloud.yaml
new file mode 100644
index 0000000000..6c29ddbe77
--- /dev/null
+++ b/templates/compose/owncloud.yaml
@@ -0,0 +1,73 @@
+# ignore: true
+# documentation: https://owncloud.com/docs
+# slogan: OwnCloud with Open Web UI integrates file management with a powerful, user-friendly interface.
+# tags: owncloud,file-management,open-web-ui,integration,cloud
+# logo: svgs/owncloud.svg
+# port: 8080
+
+services:
+ owncloud:
+ image: owncloud/server:latest
+ depends_on:
+ mariadb:
+ condition: service_healthy
+ redis:
+ condition: service_healthy
+ environment:
+ - SERVICE_FQDN_OWNCLOUD_8080
+ - OWNCLOUD_DOMAIN=${SERVICE_FQDN_OWNCLOUD}
+ - OWNCLOUD_TRUSTED_DOMAINS=${SERVICE_FQDN_OWNCLOUD} # This is a comma separated list of domains that are trusted by the server (No Protocol)
+ - OWNCLOUD_DB_TYPE=mysql
+ - OWNCLOUD_DB_HOST=mariadb
+ - OWNCLOUD_DB_NAME=${DB_NAME:-owncloud}
+ - OWNCLOUD_DB_USERNAME=${SERVICE_USER_MARIADB}
+ - OWNCLOUD_DB_PASSWORD=${SERVICE_PASSWORD_MARIADB}
+ - OWNCLOUD_ADMIN_USERNAME=${SERVICE_USER_OWNCLOUD}
+ - OWNCLOUD_ADMIN_PASSWORD=${SERVICE_PASSWORD_OWNCLOUD}
+ - OWNCLOUD_MYSQL_UTF8MB4=${MYSQL_UTF8MB4:-true}
+ - OWNCLOUD_REDIS_ENABLED=${REDIS_ENABLED:-true}
+ - OWNCLOUD_REDIS_HOST=redis
+ healthcheck:
+ test:
+ - CMD
+ - /usr/bin/healthcheck
+ interval: 30s
+ timeout: 10s
+ retries: 5
+ volumes:
+ - owncloud-data:/mnt/data
+
+ mariadb:
+ image: mariadb:latest
+ environment:
+ - MYSQL_ROOT_PASSWORD=${SERVICE_PASSWORD_MARIADBROOT}
+ - MYSQL_USER=${SERVICE_USER_MARIADB}
+ - MYSQL_PASSWORD=${SERVICE_PASSWORD_MARIADB}
+ - MYSQL_DATABASE=${DB_NAME:-owncloud}
+ - TZ=auto
+ command:
+ - "--character-set-server=utf8mb4"
+ - "--collation-server=utf8mb4_bin"
+ - "--max-allowed-packet=128M"
+ - "--innodb-log-file-size=64M"
+ healthcheck:
+ test: ["CMD", "healthcheck.sh", "--connect", "--innodb_initialized"]
+ interval: 5s
+ timeout: 20s
+ retries: 10
+ volumes:
+ - owncloud-mysql-data:/var/lib/mysql
+
+ redis:
+ image: redis:6
+ command:
+ - "--databases"
+ - "1"
+ healthcheck:
+ test:
+ - CMD
+ - redis-cli
+ - ping
+ interval: 10s
+ timeout: 5s
+ retries: 5
diff --git a/templates/compose/plausible.yaml b/templates/compose/plausible.yaml
index 7db12cb005..e02e92d389 100644
--- a/templates/compose/plausible.yaml
+++ b/templates/compose/plausible.yaml
@@ -6,7 +6,7 @@
services:
plausible:
- image: "ghcr.io/plausible/community-edition:v2.1"
+ image: "ghcr.io/plausible/community-edition:v2.1.4"
command: 'sh -c "sleep 10 && /entrypoint.sh db createdb && /entrypoint.sh db migrate && /entrypoint.sh run"'
environment:
- SERVICE_FQDN_PLAUSIBLE
@@ -22,7 +22,7 @@ services:
image: bytemark/smtp
plausible_db:
- image: "postgres:14-alpine"
+ image: "postgres:16-alpine"
volumes:
- "db-data:/var/lib/postgresql/data"
environment:
diff --git a/templates/compose/qbittorrent.yaml b/templates/compose/qbittorrent.yaml
new file mode 100644
index 0000000000..f7a4ad878f
--- /dev/null
+++ b/templates/compose/qbittorrent.yaml
@@ -0,0 +1,48 @@
+# documentation: https://docs.linuxserver.io/images/docker-qbittorrent/
+# slogan: The qBittorrent project aims to provide an open-source software alternative to μTorrent.
+# tags: torrent, streaming, webui
+# logo: svgs/qbittorrent.svg
+# port: 8080
+
+services:
+ qbit:
+ image: "lscr.io/linuxserver/qbittorrent:latest"
+ environment:
+ - WEBUI_PORT=${WEBUI_PORT:-8080}
+ - PUID=1000
+ - PGID=1000
+ volumes:
+ - qbittorrent-config:/config
+ - qbittorrent-downloads:/downloads
+ - qbittorrent-torrents:/torrents
+ healthcheck:
+ test:
+ - CMD
+ - wget
+ - "-q"
+ - "--spider"
+ - "http://127.0.0.1:8080/"
+ interval: 5s
+ timeout: 20s
+ retries: 10
+
+ vuetorrent-backend:
+ image: "ghcr.io/vuetorrent/vuetorrent-backend:latest"
+ environment:
+ - SERVICE_FQDN_QBITORRENT_8080
+ - PORT=${WEBUI_PORT:-8080}
+ - QBIT_BASE=${SERVICE_FQDN_QBITORRENT}
+ - RELEASE_TYPE=${RELEASE_TYPE:-stable}
+ - UPDATE_VT_CRON=${UPDATE_VT_CRON:-"0 * * * *"}
+ volumes:
+ - vuetorrent-config:/config
+ healthcheck:
+ test:
+ - CMD
+ - wget
+ - "-q"
+ - "--spider"
+ - "http://127.0.0.1:8080/"
+ interval: 5s
+ timeout: 20s
+ retries: 10
diff --git a/templates/compose/traccar.yaml b/templates/compose/traccar.yaml
new file mode 100644
index 0000000000..5aa0887fe9
--- /dev/null
+++ b/templates/compose/traccar.yaml
@@ -0,0 +1,50 @@
+# documentation: https://www.traccar.org/documentation/
+# slogan: Traccar is a free and open source modern GPS tracking system.
+# tags: traccar,gps,tracking,open,source
+# logo: svgs/traccar.png
+# port: 8082
+
+services:
+ traccar:
+ image: traccar/traccar:latest
+ environment:
+ - SERVICE_FQDN_TRACCAR_8082
+ - SERVICE_FQDN_TRACCARAPI_5159
+ - CONFIG_USE_ENVIRONMENT_VARIABLES=${CONFIG_USE_ENVIRONMENT_VARIABLES:-true}
+ - DATABASE_USER=${SERVICE_USER_POSTGRES}
+ - DATABASE_PASSWORD=${SERVICE_PASSWORD_POSTGRES}
+ volumes:
+ - type: bind
+ source: ./srv/traccar/conf/traccar.xml
+ target: /opt/traccar/conf/traccar.xml
+ content: |
+
+
+
+ ./conf/default.xml
+ org.postgresql.Driver
+ jdbc:postgresql://postgres:5432/traccar
+
+ depends_on:
+ postgres:
+ condition: service_healthy
+ healthcheck:
+ test: ["CMD", "wget", "--no-verbose", "--tries=1", "--spider", "http://127.0.0.1:8082/ping"]
+ interval: 30s
+ timeout: 10s
+ retries: 3
+ start_period: 15s
+
+ postgres:
+ image: postgres:16-alpine
+ environment:
+ - POSTGRES_USER=$SERVICE_USER_POSTGRES
+ - POSTGRES_PASSWORD=${SERVICE_PASSWORD_POSTGRES}
+ - POSTGRES_DB=${POSTGRESQL_DATABASE:-traccar}
+ volumes:
+ - traccar-postgresql-data:/var/lib/postgresql/data/
+ healthcheck:
+ test: ["CMD-SHELL", "pg_isready -U $${POSTGRES_USER} -d $${POSTGRES_DB}"]
+ interval: 5s
+ timeout: 20s
+ retries: 10
diff --git a/templates/compose/unsend.yaml b/templates/compose/unsend.yaml
new file mode 100644
index 0000000000..6929e5dc12
--- /dev/null
+++ b/templates/compose/unsend.yaml
@@ -0,0 +1,60 @@
+# documentation: https://docs.unsend.dev/get-started/self-hosting
+# slogan: Unsend is an open-source alternative to Resend, Sendgrid, Mailgun and Postmark etc.
+# tags: resend, mailer, marketing emails, transaction emails, self-hosting, postmark
+# logo: svgs/unsend.svg
+# port: 3000
+
+services:
+ postgres:
+ image: postgres:16
+ environment:
+ - POSTGRES_USER=${SERVICE_USER_POSTGRES}
+ - POSTGRES_PASSWORD=${SERVICE_PASSWORD_POSTGRES}
+ - POSTGRES_DB=${SERVICE_DB_POSTGRES:-unsend}
+ healthcheck:
+ test: ["CMD", "pg_isready", "-U", "${SERVICE_USER_POSTGRES}"]
+ interval: 10s
+ timeout: 5s
+ retries: 5
+ volumes:
+ - unsend-postgres-data:/var/lib/postgresql/data
+
+ redis:
+ image: redis:7
+ volumes:
+ - unsend-redis-data:/data
+ command: ["redis-server", "--maxmemory-policy", "noeviction"]
+ healthcheck:
+ test:
+ - CMD
+ - redis-cli
+ - PING
+ interval: 5s
+ timeout: 10s
+ retries: 20
+
+ unsend:
+ image: unsend/unsend:latest
+ environment:
+ - SERVICE_FQDN_UNSEND_3000
+ - DATABASE_URL=postgresql://${SERVICE_USER_POSTGRES}:${SERVICE_PASSWORD_POSTGRES}@postgres:5432/${SERVICE_DB_POSTGRES:-unsend}
+ - NEXTAUTH_URL=${SERVICE_FQDN_UNSEND}
+ - NEXTAUTH_SECRET=${SERVICE_BASE64_64_NEXTAUTHSECRET}
+ - AWS_ACCESS_KEY=${SERVICE_AWS_ACCESS_KEY}
+ - AWS_SECRET_KEY=${SERVICE_AWS_SECRET_KEY}
+ - AWS_DEFAULT_REGION=${SERVICE_AWS_DEFAULT_REGION}
+ - GITHUB_ID=${SERVICE_GITHUB_ID:-1234567890}
+ - GITHUB_SECRET=${SERVICE_GITHUB_SECRET:-abcde1234567890}
+ - REDIS_URL=redis://redis:6379
+ - NEXT_PUBLIC_IS_CLOUD=${NEXT_PUBLIC_IS_CLOUD:-false}
+ - API_RATE_LIMIT=${SERVICE_API_RATE_LIMIT:-1}
+ depends_on:
+ postgres:
+ condition: service_healthy
+ redis:
+ condition: service_healthy
+ healthcheck:
+ test: ["CMD", "curl", "-f", "http://127.0.0.1:3000"]
+ interval: 2s
+ timeout: 10s
+ retries: 15
diff --git a/templates/compose/vvveb-with-mariadb.yaml b/templates/compose/vvveb-with-mariadb.yaml
new file mode 100644
index 0000000000..a20c70a46f
--- /dev/null
+++ b/templates/compose/vvveb-with-mariadb.yaml
@@ -0,0 +1,41 @@
+# documentation: https://docs.vvveb.com
+# slogan: Powerful and easy to use cms to build websites, blogs or ecommerce stores.
+# tags: cms, blog, content, management, ecommerce, page-builder, nocode, mysql, sqlite, pgsql
+# logo: svgs/vvveb.svg
+# port: 80
+
+services:
+ vvveb:
+ image: vvveb/vvvebcms:latest
+ volumes:
+ - vvveb-data:/var/www/html
+ environment:
+ - SERVICE_FQDN_VVVEB_80
+ - DB_ENGINE=mysqli
+ - DB_HOST=mariadb
+ - DB_USER=${SERVICE_USER_VVVEB}
+ - DB_PASSWORD=${SERVICE_PASSWORD_VVVEB}
+ - DB_NAME=${MARIADB_DATABASE:-vvveb}
+ depends_on:
+ mariadb:
+ condition: service_healthy
+ healthcheck:
+ test: ["CMD", "curl", "-f", "http://127.0.0.1"]
+ interval: 2s
+ timeout: 10s
+ retries: 10
+
+ mariadb:
+ image: mariadb:11
+ volumes:
+ - vvveb-mariadb-data:/var/lib/mysql
+ environment:
+ - MYSQL_ROOT_PASSWORD=${SERVICE_PASSWORD_ROOT}
+ - MYSQL_DATABASE=${MARIADB_DATABASE:-vvveb}
+ - MYSQL_USER=${SERVICE_USER_VVVEB}
+ - MYSQL_PASSWORD=${SERVICE_PASSWORD_VVVEB}
+ healthcheck:
+ test: ["CMD", "healthcheck.sh", "--connect", "--innodb_initialized"]
+ interval: 5s
+ timeout: 20s
+ retries: 10
diff --git a/templates/compose/vvveb-with-mysql.yaml b/templates/compose/vvveb-with-mysql.yaml
new file mode 100644
index 0000000000..64b4b264ad
--- /dev/null
+++ b/templates/compose/vvveb-with-mysql.yaml
@@ -0,0 +1,41 @@
+# documentation: https://docs.vvveb.com
+# slogan: Powerful and easy to use cms to build websites, blogs or ecommerce stores.
+# tags: cms, blog, content, management, ecommerce, page-builder, nocode, mysql, sqlite, pgsql
+# logo: svgs/vvveb.svg
+# port: 80
+
+services:
+ vvveb:
+ image: vvveb/vvvebcms:latest
+ volumes:
+ - vvveb-data:/var/www/html
+ environment:
+ - SERVICE_FQDN_VVVEB_80
+ - DB_ENGINE=mysqli
+ - DB_HOST=mysql
+ - DB_USER=${SERVICE_USER_VVVEB}
+ - DB_PASSWORD=${SERVICE_PASSWORD_VVVEB}
+ - DB_NAME=${MYSQL_DATABASE:-vvveb}
+ depends_on:
+ mysql:
+ condition: service_healthy
+ healthcheck:
+ test: ["CMD", "curl", "-f", "http://127.0.0.1"]
+ interval: 2s
+ timeout: 10s
+ retries: 10
+
+ mysql:
+ image: mysql:8.4.2
+ volumes:
+ - vvveb-mysql-data:/var/lib/mysql
+ environment:
+ - MYSQL_ROOT_PASSWORD=${SERVICE_PASSWORD_ROOT}
+ - MYSQL_DATABASE=${MYSQL_DATABASE:-vvveb}
+ - MYSQL_USER=${SERVICE_USER_VVVEB}
+ - MYSQL_PASSWORD=${SERVICE_PASSWORD_VVVEB}
+ healthcheck:
+ test: ["CMD", "mysqladmin", "ping", "-h", "127.0.0.1"]
+ interval: 5s
+ timeout: 20s
+ retries: 10
diff --git a/templates/compose/vvveb.yaml b/templates/compose/vvveb.yaml
new file mode 100644
index 0000000000..11b71a7e9a
--- /dev/null
+++ b/templates/compose/vvveb.yaml
@@ -0,0 +1,18 @@
+# documentation: https://docs.vvveb.com
+# slogan: Powerful and easy to use cms to build websites, blogs or ecommerce stores.
+# tags: cms, blog, content, management, ecommerce, page-builder, nocode, mysql, sqlite, pgsql
+# logo: svgs/vvveb.svg
+# port: 80
+
+services:
+ vvveb:
+ image: vvveb/vvvebcms:latest
+ volumes:
+ - vvveb-data:/var/www/html
+ environment:
+ - SERVICE_FQDN_VVVEB_80
+ healthcheck:
+ test: ["CMD", "curl", "-f", "http://127.0.0.1"]
+ interval: 2s
+ timeout: 10s
+ retries: 10
diff --git a/versions.json b/versions.json
index 4dbe7eb70b..8efe02c0a0 100644
--- a/versions.json
+++ b/versions.json
@@ -1,10 +1,11 @@
{
"coolify": {
"v4": {
- "version": "4.0.0-beta.358"
+ "version": "4.0.0-beta.357"
},
"nightly": {
- "version": "4.0.0-beta.359"
+ "version": "4.0.0-beta.358"
+
},
"helper": {
"version": "1.0.2"