Merge remote-tracking branch 'origin/canary' into add-jitsi-meet-template

# Conflicts:
#	meta.json
This commit is contained in:
Rohit Mulani
2026-07-07 23:20:16 +04:00
47 changed files with 1014 additions and 29 deletions

2
.gitignore vendored
View File

@@ -1,3 +1,3 @@
node_modules
package-lock.json
meta.json.backup.*
meta.json.backup.*

Binary file not shown.

After

Width:  |  Height:  |  Size: 55 KiB

View File

@@ -0,0 +1,30 @@
services:
alarik:
image: ghcr.io/achtungsoftware/alarik:latest
restart: unless-stopped
volumes:
- alarik-storage:/app/Storage
environment:
- API_BASE_URL=${API_BASE_URL}
- CONSOLE_BASE_URL=${CONSOLE_BASE_URL}
- ADMIN_USERNAME=${ADMIN_USERNAME}
- ADMIN_PASSWORD=${ADMIN_PASSWORD}
- JWT=${JWT}
- ALLOW_ACCOUNT_CREATION=${ALLOW_ACCOUNT_CREATION}
expose:
- 8080
console:
image: ghcr.io/achtungsoftware/alarik-console:latest
restart: unless-stopped
environment:
- NUXT_PUBLIC_API_BASE_URL=${API_BASE_URL}
- NUXT_PUBLIC_CONSOLE_BASE_URL=${CONSOLE_BASE_URL}
- NUXT_PUBLIC_ALLOW_ACCOUNT_CREATION=${ALLOW_ACCOUNT_CREATION}
expose:
- 3000
depends_on:
- alarik
volumes:
alarik-storage:

View File

@@ -0,0 +1,26 @@
[variables]
console_domain = "${domain}"
api_domain = "${domain}"
[config]
mounts = []
# S3-compatible API - point AWS CLI / SDKs / rclone / backup tools at this domain
[[config.domains]]
serviceName = "alarik"
port = 8_080
host = "${api_domain}"
# Web management console - log in with the generated admin credentials below
[[config.domains]]
serviceName = "console"
port = 3_000
host = "${console_domain}"
[config.env]
API_BASE_URL = "http://${api_domain}"
CONSOLE_BASE_URL = "http://${console_domain}"
ADMIN_USERNAME = "alarik"
ADMIN_PASSWORD = "${password:16}"
JWT = "${base64:64}"
ALLOW_ACCOUNT_CREATION = "false"

View File

@@ -0,0 +1,5 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128 128">
<rect width="128" height="128" rx="28" fill="#101828"/>
<circle cx="64" cy="64" r="34" fill="#38bdf8" opacity="0.92"/>
<text x="64" y="74" text-anchor="middle" font-family="Arial, sans-serif" font-size="30" font-weight="700" fill="#ffffff">A</text>
</svg>

After

Width:  |  Height:  |  Size: 325 B

View File

@@ -0,0 +1,16 @@
services:
archivebox:
image: archivebox/archivebox:latest
restart: unless-stopped
command: server --quick-init 0.0.0.0:8000
environment:
ALLOWED_HOSTS: ${ALLOWED_HOSTS}
PUBLIC_INDEX: ${PUBLIC_INDEX}
PUBLIC_SNAPSHOTS: ${PUBLIC_SNAPSHOTS}
volumes:
- archivebox_data:/data
ports:
- "8000"
volumes:
archivebox_data:

View File

@@ -0,0 +1,15 @@
[variables]
main_domain = "${domain}"
[config]
mounts = []
[[config.domains]]
serviceName = "archivebox"
port = 8000
host = "${main_domain}"
[config.env]
ALLOWED_HOSTS = "*"
PUBLIC_INDEX = "True"
PUBLIC_SNAPSHOTS = "True"

View File

@@ -0,0 +1,29 @@
version: "3.8"
services:
chatto:
image: ghcr.io/chattocorp/chatto:0.3.8
restart: unless-stopped
expose:
- "4000"
environment:
CHATTO_WEBSERVER_URL: https://${CHATTO_HOST}
CHATTO_WEBSERVER_PORT: "4000"
CHATTO_WEBSERVER_COOKIE_SIGNING_SECRET: ${CHATTO_COOKIE_SECRET}
CHATTO_CORE_SECRET_KEY: ${CHATTO_CORE_SECRET}
CHATTO_CORE_ASSETS_SIGNING_SECRET: ${CHATTO_ASSETS_SECRET}
CHATTO_NATS_EMBEDDED_ENABLED: true
CHATTO_NATS_EMBEDDED_DATA_DIR: /data
CHATTO_OWNERS_EMAILS: ${CHATTO_OWNER_EMAIL}
CHATTO_SMTP_ENABLED: ${CHATTO_SMTP_ENABLED:-false}
CHATTO_SMTP_HOST: ${CHATTO_SMTP_HOST:-}
CHATTO_SMTP_PORT: ${CHATTO_SMTP_PORT:-587}
CHATTO_SMTP_TLS: ${CHATTO_SMTP_TLS:-mandatory}
CHATTO_SMTP_USERNAME: ${CHATTO_SMTP_USERNAME:-}
CHATTO_SMTP_PASSWORD: ${CHATTO_SMTP_PASSWORD:-}
CHATTO_SMTP_FROM: ${CHATTO_SMTP_FROM:-}
volumes:
- chatto-data:/data
volumes:
chatto-data:

BIN
blueprints/chatto/logo.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

View File

@@ -0,0 +1,21 @@
[variables]
main_domain = "${domain}"
cookie_secret = "${hash:64}"
core_secret = "${hash:64}"
assets_secret = "${hash:64}"
owner_email = "${email}"
[config]
env = [
"CHATTO_HOST=${main_domain}",
"CHATTO_COOKIE_SECRET=${cookie_secret}",
"CHATTO_CORE_SECRET=${core_secret}",
"CHATTO_ASSETS_SECRET=${assets_secret}",
"CHATTO_OWNER_EMAIL=${owner_email}",
]
mounts = []
[[config.domains]]
serviceName = "chatto"
port = 4000
host = "${main_domain}"

View File

@@ -0,0 +1,16 @@
services:
dockge:
image: louislam/dockge:1
restart: unless-stopped
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- dockge_data:/app/data
- dockge_stacks:/opt/stacks
environment:
DOCKGE_STACKS_DIR: /opt/stacks
ports:
- "5001"
volumes:
dockge_data:
dockge_stacks:

View File

@@ -0,0 +1,5 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128 128">
<rect width="128" height="128" rx="28" fill="#101828"/>
<circle cx="64" cy="64" r="34" fill="#38bdf8" opacity="0.92"/>
<text x="64" y="74" text-anchor="middle" font-family="Arial, sans-serif" font-size="30" font-weight="700" fill="#ffffff">D</text>
</svg>

After

Width:  |  Height:  |  Size: 325 B

View File

@@ -0,0 +1,11 @@
[variables]
main_domain = "${domain}"
[config]
env = {}
mounts = []
[[config.domains]]
serviceName = "dockge"
port = 5001
host = "${main_domain}"

View File

@@ -0,0 +1,13 @@
services:
filegator:
image: filegator/filegator:v7.14.3
restart: unless-stopped
volumes:
- filegator_repository:/var/www/filegator/repository
- filegator_private:/var/www/filegator/private
ports:
- "8080"
volumes:
filegator_repository:
filegator_private:

View File

@@ -0,0 +1,5 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128 128">
<rect width="128" height="128" rx="28" fill="#101828"/>
<circle cx="64" cy="64" r="34" fill="#38bdf8" opacity="0.92"/>
<text x="64" y="74" text-anchor="middle" font-family="Arial, sans-serif" font-size="30" font-weight="700" fill="#ffffff">F</text>
</svg>

After

Width:  |  Height:  |  Size: 325 B

View File

@@ -0,0 +1,11 @@
[variables]
main_domain = "${domain}"
[config]
env = {}
mounts = []
[[config.domains]]
serviceName = "filegator"
port = 8080
host = "${main_domain}"

View File

@@ -0,0 +1,13 @@
# Firefly III
Firefly III is a self-hosted personal finance manager for budgets, accounts, transactions, categories, and reports.
This Dokploy template includes:
- Firefly III core web application
- MariaDB database with generated credentials
- Persistent upload and database volumes
- Daily cron runner using Firefly III's static cron token
- Dokploy domain routing on the application service
After deployment, open the generated domain and complete the first-user setup flow.

View File

@@ -0,0 +1,65 @@
version: "3.8"
services:
firefly-iii:
image: fireflyiii/core:version-6.6.3
restart: unless-stopped
depends_on:
firefly-iii-db:
condition: service_healthy
environment:
APP_KEY: ${APP_KEY}
APP_URL: ${APP_URL}
TRUSTED_PROXIES: "**"
TZ: ${TZ}
SITE_OWNER: ${SITE_OWNER}
DEFAULT_LANGUAGE: ${DEFAULT_LANGUAGE}
DEFAULT_LOCALE: ${DEFAULT_LOCALE}
DB_CONNECTION: mysql
DB_HOST: firefly-iii-db
DB_PORT: 3306
DB_DATABASE: ${DB_DATABASE}
DB_USERNAME: ${DB_USERNAME}
DB_PASSWORD: ${DB_PASSWORD}
STATIC_CRON_TOKEN: ${STATIC_CRON_TOKEN}
expose:
- "8080"
volumes:
- firefly-iii-upload:/var/www/html/storage/upload
firefly-iii-db:
image: mariadb:11.8
restart: unless-stopped
environment:
MYSQL_DATABASE: ${DB_DATABASE}
MYSQL_USER: ${DB_USERNAME}
MYSQL_PASSWORD: ${DB_PASSWORD}
MYSQL_RANDOM_ROOT_PASSWORD: "yes"
volumes:
- firefly-iii-db:/var/lib/mysql
healthcheck:
test: ["CMD", "healthcheck.sh", "--connect", "--innodb_initialized"]
interval: 10s
timeout: 5s
retries: 5
firefly-iii-cron:
image: alpine:3.22
restart: unless-stopped
depends_on:
- firefly-iii
environment:
TZ: ${TZ}
STATIC_CRON_TOKEN: ${STATIC_CRON_TOKEN}
command:
- sh
- -c
- |
apk add --no-cache tzdata wget && \
(ln -snf /usr/share/zoneinfo/$$TZ /etc/localtime || true) && \
echo "0 3 * * * wget -qO- http://firefly-iii:8080/api/v1/cron/$$STATIC_CRON_TOKEN; echo" | crontab - && \
crond -f -L /dev/stdout
volumes:
firefly-iii-upload: {}
firefly-iii-db: {}

View File

@@ -0,0 +1,14 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128 128" role="img" aria-label="Firefly III">
<defs>
<linearGradient id="g" x1="20" y1="16" x2="108" y2="112" gradientUnits="userSpaceOnUse">
<stop stop-color="#ffcf4a"/>
<stop offset="0.55" stop-color="#ff7a1a"/>
<stop offset="1" stop-color="#7936d8"/>
</linearGradient>
</defs>
<rect width="128" height="128" rx="28" fill="#171923"/>
<circle cx="64" cy="66" r="38" fill="url(#g)" opacity="0.2"/>
<path d="M64 23c8 15 20 27 34 35-14 8-26 20-34 35-8-15-20-27-34-35 14-8 26-20 34-35Z" fill="url(#g)"/>
<circle cx="64" cy="58" r="13" fill="#fff4c7"/>
<path d="M46 93h36c-3 9-9 14-18 14s-15-5-18-14Z" fill="#ffcf4a"/>
</svg>

After

Width:  |  Height:  |  Size: 715 B

View File

@@ -0,0 +1,36 @@
[variables]
main_domain = "${domain}"
app_key = "${base64:32}"
db_name = "firefly"
db_user = "firefly"
db_password = "${password:32}"
cron_token = "${hash:32}"
site_owner = "${email}"
timezone = "UTC"
default_language = "en_US"
default_locale = "equal"
[config]
env = [
"APP_KEY=base64:${app_key}",
"APP_URL=https://${main_domain}",
"TRUSTED_PROXIES=**",
"TZ=${timezone}",
"SITE_OWNER=${site_owner}",
"DEFAULT_LANGUAGE=${default_language}",
"DEFAULT_LOCALE=${default_locale}",
"DB_DATABASE=${db_name}",
"DB_USERNAME=${db_user}",
"DB_PASSWORD=${db_password}",
"STATIC_CRON_TOKEN=${cron_token}",
"MYSQL_DATABASE=${db_name}",
"MYSQL_USER=${db_user}",
"MYSQL_PASSWORD=${db_password}",
"MYSQL_RANDOM_ROOT_PASSWORD=yes"
]
mounts = []
[[config.domains]]
serviceName = "firefly-iii"
port = 8080
host = "${main_domain}"

View File

@@ -0,0 +1,11 @@
services:
gotify:
image: gotify/server:2.9.1
restart: unless-stopped
volumes:
- gotify_data:/app/data
ports:
- "80"
volumes:
gotify_data:

View File

@@ -0,0 +1,5 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128 128">
<rect width="128" height="128" rx="28" fill="#101828"/>
<circle cx="64" cy="64" r="34" fill="#38bdf8" opacity="0.92"/>
<text x="64" y="74" text-anchor="middle" font-family="Arial, sans-serif" font-size="30" font-weight="700" fill="#ffffff">G</text>
</svg>

After

Width:  |  Height:  |  Size: 325 B

View File

@@ -0,0 +1,11 @@
[variables]
main_domain = "${domain}"
[config]
env = {}
mounts = []
[[config.domains]]
serviceName = "gotify"
port = 80
host = "${main_domain}"

View File

@@ -0,0 +1,27 @@
version: "3.8"
services:
hermes:
image: nousresearch/hermes-agent:v2026.6.19
restart: unless-stopped
command: gateway run
ports:
- 9119
- 8642
environment:
- HERMES_DASHBOARD=${HERMES_DASHBOARD}
- HERMES_DASHBOARD_BASIC_AUTH_USERNAME=${HERMES_DASHBOARD_BASIC_AUTH_USERNAME}
- HERMES_DASHBOARD_BASIC_AUTH_PASSWORD=${HERMES_DASHBOARD_BASIC_AUTH_PASSWORD}
- HERMES_DASHBOARD_BASIC_AUTH_SECRET=${HERMES_DASHBOARD_BASIC_AUTH_SECRET}
- API_SERVER_ENABLED=${API_SERVER_ENABLED}
- API_SERVER_HOST=${API_SERVER_HOST}
- API_SERVER_KEY=${API_SERVER_KEY}
volumes:
- hermes_data:/opt/data
deploy:
resources:
limits:
memory: 4G
cpus: "2.0"
volumes:
hermes_data:

BIN
blueprints/hermes/logo.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.0 KiB

View File

@@ -0,0 +1,33 @@
[variables]
dashboard_domain = "${domain}"
gateway_domain = "${domain}"
# base64 (not just alphanumeric); 96 bytes -> 128 chars
dashboard_password = "${base64:96}"
dashboard_secret = "${base64:32}"
api_key = "${password:32}"
[config]
mounts = []
# Web dashboard (HERMES_DASHBOARD=1). Exposed behind Traefik, so Hermes'
# auth-gated mode kicks in — protect it with the bundled basic-auth provider.
[[config.domains]]
serviceName = "hermes"
port = 9119
host = "${dashboard_domain}"
# OpenAI-compatible gateway API. Disabled and loopback-bound by default,
# so it must be enabled, bound to 0.0.0.0, and given a bearer token.
[[config.domains]]
serviceName = "hermes"
port = 8642
host = "${gateway_domain}"
[config.env]
HERMES_DASHBOARD = "1"
HERMES_DASHBOARD_BASIC_AUTH_USERNAME = "admin"
HERMES_DASHBOARD_BASIC_AUTH_PASSWORD = "${dashboard_password}"
HERMES_DASHBOARD_BASIC_AUTH_SECRET = "${dashboard_secret}"
API_SERVER_ENABLED = "true"
API_SERVER_HOST = "0.0.0.0"
API_SERVER_KEY = "${api_key}"

View File

@@ -0,0 +1,22 @@
version: "3.8"
services:
inkvoice:
image: ghcr.io/pigontech/inkvoice:0.1.0
restart: unless-stopped
environment:
- ADMIN_USER=${ADMIN_USER}
- ADMIN_PASS=${ADMIN_PASS}
- JWT_SECRET=${JWT_SECRET}
- DATABASE_PATH=/app/data/invoice.db
- PORT=3000
- HOST=0.0.0.0
# Dokploy's auto-generated domain is HTTP (sslip.io); keep false so login
# works out of the box. Set true once you attach an HTTPS custom domain.
- COOKIE_SECURE=false
volumes:
- inkvoice-data:/app/data
expose:
- 3000
volumes:
inkvoice-data:

View File

@@ -0,0 +1,7 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100" width="512" height="512">
<rect x="9" y="33" width="10" height="34" rx="5" fill="#22252b"></rect>
<rect x="27" y="21" width="10" height="58" rx="5" fill="#22252b"></rect>
<rect x="45" y="8" width="10" height="84" rx="5" fill="#f3522e"></rect>
<rect x="63" y="26" width="10" height="48" rx="5" fill="#22252b"></rect>
<rect x="81" y="37" width="10" height="26" rx="5" fill="#22252b"></rect>
</svg>

After

Width:  |  Height:  |  Size: 467 B

View File

@@ -0,0 +1,17 @@
[variables]
main_domain = "${domain}"
admin_user = "admin"
admin_pass = "${password:16}"
jwt_secret = "${password:48}"
[config]
env = [
"ADMIN_USER=${admin_user}",
"ADMIN_PASS=${admin_pass}",
"JWT_SECRET=${jwt_secret}",
]
[[config.domains]]
serviceName = "inkvoice"
port = 3000
host = "${main_domain}"

View File

@@ -0,0 +1,13 @@
services:
jellyseerr:
image: fallenbagel/jellyseerr:2.7.3
restart: unless-stopped
volumes:
- jellyseerr_config:/app/config
environment:
LOG_LEVEL: info
ports:
- "5055"
volumes:
jellyseerr_config:

View File

@@ -0,0 +1,5 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128 128">
<rect width="128" height="128" rx="28" fill="#101828"/>
<circle cx="64" cy="64" r="34" fill="#38bdf8" opacity="0.92"/>
<text x="64" y="74" text-anchor="middle" font-family="Arial, sans-serif" font-size="30" font-weight="700" fill="#ffffff">J</text>
</svg>

After

Width:  |  Height:  |  Size: 325 B

View File

@@ -0,0 +1,11 @@
[variables]
main_domain = "${domain}"
[config]
env = {}
mounts = []
[[config.domains]]
serviceName = "jellyseerr"
port = 5055
host = "${main_domain}"

View File

@@ -0,0 +1,30 @@
services:
joplin-db:
image: postgres:16-alpine
restart: unless-stopped
environment:
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
POSTGRES_USER: ${POSTGRES_USER}
POSTGRES_DB: ${POSTGRES_DATABASE}
volumes:
- joplin_db_data:/var/lib/postgresql/data
joplin-server:
image: joplin/server:3.7.1
restart: unless-stopped
depends_on:
- joplin-db
environment:
APP_BASE_URL: ${APP_BASE_URL}
APP_PORT: ${APP_PORT}
DB_CLIENT: pg
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
POSTGRES_DATABASE: ${POSTGRES_DATABASE}
POSTGRES_USER: ${POSTGRES_USER}
POSTGRES_PORT: 5432
POSTGRES_HOST: joplin-db
ports:
- "22300"
volumes:
joplin_db_data:

View File

@@ -0,0 +1,5 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128 128">
<rect width="128" height="128" rx="28" fill="#101828"/>
<circle cx="64" cy="64" r="34" fill="#38bdf8" opacity="0.92"/>
<text x="64" y="74" text-anchor="middle" font-family="Arial, sans-serif" font-size="30" font-weight="700" fill="#ffffff">J</text>
</svg>

After

Width:  |  Height:  |  Size: 325 B

View File

@@ -0,0 +1,18 @@
[variables]
main_domain = "${domain}"
postgres_password = "${password:32}"
[config]
mounts = []
[[config.domains]]
serviceName = "joplin-server"
port = 22300
host = "${main_domain}"
[config.env]
APP_BASE_URL = "http://${main_domain}"
APP_PORT = "22300"
POSTGRES_PASSWORD = "${postgres_password}"
POSTGRES_USER = "joplin"
POSTGRES_DATABASE = "joplin"

View File

@@ -0,0 +1,21 @@
services:
ollama-chat-tone:
image: billnice250/chattone:latest
ports:
- 8080
environment:
APP_NAME: "Ollama Chat Tone"
ADDR: ":8080"
SESSION_SECRET: "${SESSION_SECRET}"
DB_PATH: "/data/app.db"
OLLAMA_URL: "${OLLAMA_URL}"
OLLAMA_TIMEOUT: "${OLLAMA_TIMEOUT}"
DEFAULT_MODEL: "${DEFAULT_MODEL}"
OPEN_BROWSER: "false"
BASIC_AUTH_USER: "${BASIC_AUTH_USER}"
BASIC_AUTH_PASSWORD: "${BASIC_AUTH_PASSWORD}"
volumes:
- ollama-chat-tone-data:/data
volumes:
ollama-chat-tone-data: {}

View File

@@ -0,0 +1,8 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128 128" role="img" aria-label="Ollama Chat Tone">
<rect width="128" height="128" rx="28" fill="#070b13"/>
<circle cx="42" cy="38" r="7" fill="#818cf8"/>
<circle cx="86" cy="38" r="7" fill="#a78bfa"/>
<path d="M31 57c0-10 8-18 18-18h30c10 0 18 8 18 18v17c0 10-8 18-18 18H57l-20 14v-16c-4-3-6-9-6-16V57z" fill="#111827" stroke="#818cf8" stroke-width="6" stroke-linejoin="round"/>
<path d="M50 64h28M50 78h18" stroke="#e5e7eb" stroke-width="7" stroke-linecap="round"/>
<path d="M87 80l13 13M100 80L87 93" stroke="#a78bfa" stroke-width="7" stroke-linecap="round"/>
</svg>

After

Width:  |  Height:  |  Size: 628 B

View File

@@ -0,0 +1,32 @@
[variables]
main_domain = "${domain}"
session_secret = "change-me......32charsOrMore"
ollama_url = "http://your-ollama-host:11434"
ollama_timeout = "5"
default_model = "llama3.2"
basic_auth_user = "admin"
basic_auth_password = "change-me"
[config]
[[config.domains]]
serviceName = "ollama-chat-tone"
port = 8080
host = "${main_domain}"
path = "/"
[config.env]
APP_NAME = "Ollama Chat Tone"
ADDR = ":8080"
SESSION_SECRET = "${session_secret}"
DB_PATH = "/data/app.db"
OLLAMA_URL = "${ollama_url}"
OLLAMA_TIMEOUT = "${ollama_timeout}"
DEFAULT_MODEL = "${default_model}"
OPEN_BROWSER = "false"
BASIC_AUTH_USER = "${basic_auth_user}"
BASIC_AUTH_PASSWORD = "${basic_auth_password}"
[[config.mounts]]
serviceName = "ollama-chat-tone"
filePath = "/data/app.db"
content = ""

View File

@@ -1,19 +1,35 @@
services:
registry:
restart: always
image: registry:2
ports:
- 5000
volumes:
- ../files/auth/registry.password:/auth/registry.password
- registry-data:/var/lib/registry
image: registry:3
restart: unless-stopped
environment:
REGISTRY_STORAGE_DELETE_ENABLED: true
REGISTRY_HEALTH_STORAGEDRIVER_ENABLED: false
REGISTRY_HTTP_SECRET: ${REGISTRY_HTTP_SECRET}
REGISTRY_AUTH: htpasswd
REGISTRY_AUTH_HTPASSWD_REALM: Registry Realm
REGISTRY_AUTH_HTPASSWD_PATH: /auth/registry.password
- USERNAME=${USERNAME}
- PASSWORD=${PASSWORD}
- REGISTRY_AUTH=htpasswd
- REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm
- REGISTRY_AUTH_HTPASSWD_PATH=/auth/registry.password
- REGISTRY_HTTP_RELATIVEURLS=true
entrypoint: ["sh", "/entrypoint.sh"]
volumes:
- registry-data:/var/lib/registry
- type: bind
source: ../files/entrypoint.sh
target: /entrypoint.sh
- type: bind
source: ../files/config.yml
target: /etc/docker/registry/config.yml
expose:
- 5000
healthcheck:
test:
- CMD
- wget
- "-q"
- "--spider"
- "http://localhost:5000/"
interval: 5s
timeout: 20s
retries: 10
volumes:
registry-data:
registry-data:

View File

@@ -1,6 +1,7 @@
[variables]
main_domain = "${domain}"
registry_http_secret = "${password:30}"
username = "${username}"
password = "${password:32}"
[[config.domains]]
serviceName = "registry"
@@ -8,11 +9,48 @@ port = 5_000
host = "${main_domain}"
[config.env]
REGISTRY_HTTP_SECRET = "${registry_http_secret}"
USERNAME = "${username}"
PASSWORD = "${password}"
[[config.mounts]]
filePath = "/auth/registry.password"
filePath = "./config.yml"
content = """
# from: docker run --rm --entrypoint htpasswd httpd:2 -Bbn docker password
docker:$2y$10$qWZoWev/u5PV7WneFoRAMuoGpRcAQOgUuIIdLnU7pJXogrBSY23/2
version: 0.1
log:
fields:
service: registry
storage:
cache:
blobdescriptor: inmemory
filesystem:
rootdirectory: /var/lib/registry
http:
addr: :5000
headers:
X-Content-Type-Options: [nosniff]
health:
storagedriver:
enabled: true
interval: 10s
threshold: 3
"""
[[config.mounts]]
filePath = "./entrypoint.sh"
content = """
#!/usr/bin/env sh
set -e
if [ -z "$USERNAME" ] || [ -z "$PASSWORD" ]; then
echo "Error: USERNAME and PASSWORD environment variables must be set"
exit 1
fi
apk add --no-cache apache2-utils
mkdir -p "$(dirname "$REGISTRY_AUTH_HTPASSWD_PATH")"
chmod 755 "$(dirname "$REGISTRY_AUTH_HTPASSWD_PATH")"
htpasswd -Bbc "$REGISTRY_AUTH_HTPASSWD_PATH" "$USERNAME" "$PASSWORD"
registry serve /etc/docker/registry/config.yml
"""

View File

@@ -0,0 +1,14 @@
services:
sftpgo:
image: drakkan/sftpgo:v2.7.3
restart: unless-stopped
volumes:
- sftpgo_data:/srv/sftpgo
- sftpgo_home:/var/lib/sftpgo
ports:
- "8080"
- "2022"
volumes:
sftpgo_data:
sftpgo_home:

View File

@@ -0,0 +1,5 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128 128">
<rect width="128" height="128" rx="28" fill="#101828"/>
<circle cx="64" cy="64" r="34" fill="#38bdf8" opacity="0.92"/>
<text x="64" y="74" text-anchor="middle" font-family="Arial, sans-serif" font-size="30" font-weight="700" fill="#ffffff">S</text>
</svg>

After

Width:  |  Height:  |  Size: 325 B

View File

@@ -0,0 +1,11 @@
[variables]
main_domain = "${domain}"
[config]
env = {}
mounts = []
[[config.domains]]
serviceName = "sftpgo"
port = 8080
host = "${main_domain}"

View File

@@ -0,0 +1,28 @@
services:
spliit:
image: ghcr.io/spliit-app/spliit:1.19.0
restart: unless-stopped
env_file:
- .env
depends_on:
spliit-db:
condition: service_healthy
spliit-db:
image: pgvector/pgvector:pg16
volumes:
- ${DB_DATA_LOCATION}:/var/lib/DBql/data
environment:
POSTGRES_USER: ${DB_USERNAME}
POSTGRES_PASSWORD: ${DB_PASSWORD}
POSTGRES_DB: ${DB_DATABASE:-spliit}
POSTGRES_INITDB_ARGS: '--data-checksums'
POSTGRES_HOST_AUTH_METHOD: trust
healthcheck:
test:
['CMD', 'pg_isready', '-U', "${DB_USERNAME}", '-d', "${DB_DATABASE:-spliit}"]
interval: 10s
timeout: 5s
retries: 5
restart: unless-stopped
env_file:
- .env

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.5 KiB

View File

@@ -0,0 +1,24 @@
[variables]
main_domain = "${domain}"
secret_key = "${password}"
project_name = "spliit"
[config]
mounts = []
[[config.domains]]
serviceName = "spliit"
port = 3000
host = "${main_domain}"
[config.env]
DB_USERNAME = "${project_name}-admin"
DB_PASSWORD = "${secret_key}"
DB_DATA_LOCATION = "/data/${project_name}/database"
DB_DATABASE = "${project_name}"
# --- PostgreSQL ---
POSTGRES_PRISMA_URL = "postgresql://${DB_USERNAME}:${DB_PASSWORD}@${project_name}-db:5432/${DB_DATABASE}"
POSTGRES_URL_NON_POOLING = "postgresql://${DB_USERNAME}:${DB_PASSWORD}@${project_name}-db:5432/${DB_DATABASE}"

260
meta.json
View File

@@ -161,11 +161,28 @@
"self-hosted"
]
},
{
"id": "alarik",
"name": "Alarik",
"description": "Alarik is a high-performance, S3-compatible object storage.",
"logo": "alarik.png",
"version": "latest",
"links": {
"github": "https://github.com/achtungsoftware/alarik",
"website": "https://alarik.io/",
"docs": "https://alarik.io/docs"
},
"tags": [
"storage",
"s3",
"object-storage"
]
},
{
"id": "alist",
"name": "AList",
"version": "v3.55.0",
"description": "🗂️A file list/WebDAV program that supports multiple storages, powered by Gin and Solidjs.",
"description": "🗂️A file list/WebDAV program that supports multiple storages, powered by Gin and Solidjs.",
"logo": "alist.svg",
"links": {
"github": "https://github.com/AlistGo/alist",
@@ -299,7 +316,7 @@
"id": "anytype",
"name": "Anytype",
"version": "latest",
"description": "Anytype is a personal knowledge baseyour digital brainthat lets you gather, connect and remix all kinds of information. Create pages, tasks, wikis, journalseven entire appsand define your own data model while your data stays offline-first, private and encrypted across devices.\n\nAfter installation, you can view the Anytype client configuration by running `cat /data/client-config.yml` inside the service container.",
"description": "Anytype is a personal knowledge base—your digital brain—that lets you gather, connect and remix all kinds of information. Create pages, tasks, wikis, journals—even entire apps—and define your own data model while your data stays offline-first, private and encrypted across devices.\n\nAfter installation, you can view the Anytype client configuration by running `cat /data/client-config.yml` inside the service container.",
"logo": "logo.png",
"links": {
"github": "https://github.com/grishy/any-sync-bundle",
@@ -414,6 +431,23 @@
"nosql"
]
},
{
"id": "archivebox",
"name": "ArchiveBox",
"version": "latest",
"description": "ArchiveBox is a self-hosted internet archiving solution for saving websites, media, and documents.",
"logo": "archivebox.svg",
"links": {
"github": "https://github.com/ArchiveBox/ArchiveBox",
"website": "https://archivebox.io/",
"docs": "https://docs.archivebox.io/"
},
"tags": [
"archive",
"bookmarks",
"web"
]
},
{
"id": "argilla",
"name": "Argilla",
@@ -511,7 +545,7 @@
"id": "autobase",
"name": "Autobase",
"version": "2.5.2",
"description": "Autobase for PostgreSQL® is an open-source alternative to cloud-managed databases (self-hosted DBaaS).",
"description": "Autobase for PostgreSQL® is an open-source alternative to cloud-managed databases (self-hosted DBaaS).",
"links": {
"github": "https://github.com/vitabaks/autobase",
"website": "https://autobase.tech/",
@@ -721,7 +755,7 @@
"id": "blender",
"name": "Blender",
"version": "latest",
"description": "Blender is a free and open-source 3D creation suite. It supports the entire 3D pipelinemodeling, rigging, animation, simulation, rendering, compositing and motion tracking, video editing and 2D animation pipeline.",
"description": "Blender is a free and open-source 3D creation suite. It supports the entire 3D pipeline—modeling, rigging, animation, simulation, rendering, compositing and motion tracking, video editing and 2D animation pipeline.",
"logo": "blender.svg",
"links": {
"github": "https://github.com/linuxserver/docker-blender",
@@ -1087,6 +1121,24 @@
"Notifications"
]
},
{
"id": "chatto",
"name": "Chatto (single binary)",
"version": "0.3.8",
"description": "A fully-featured real-time chat application for teams and communities. This template deploys the single Chatto binary with embedded NATS. Note: email/password registration requires SMTP to be configured after deployment; voice/video calls are not included in the single-binary setup.",
"logo": "logo.png",
"links": {
"github": "https://github.com/chattocorp/chatto",
"website": "https://chatto.run",
"docs": "https://docs.chatto.run"
},
"tags": [
"chat",
"communication",
"messaging",
"self-hosted"
]
},
{
"id": "chatwoot",
"name": "Chatwoot",
@@ -1799,6 +1851,23 @@
"discussion"
]
},
{
"id": "dockge",
"name": "Dockge",
"version": "1",
"description": "Dockge is a reactive, self-hosted Docker Compose stack manager from the creator of Uptime Kuma.",
"logo": "dockge.svg",
"links": {
"github": "https://github.com/louislam/dockge",
"website": "https://dockge.kuma.pet/",
"docs": "https://github.com/louislam/dockge"
},
"tags": [
"docker",
"compose",
"management"
]
},
{
"id": "docling-serve",
"name": "Docling Serve",
@@ -2292,6 +2361,23 @@
"storage"
]
},
{
"id": "filegator",
"name": "FileGator",
"version": "7.14.3",
"description": "FileGator is a simple self-hosted web file manager with multi-user support.",
"logo": "filegator.svg",
"links": {
"github": "https://github.com/filegator/filegator",
"website": "https://filegator.io/",
"docs": "https://docs.filegator.io/"
},
"tags": [
"files",
"file-manager",
"self-hosted"
]
},
{
"id": "filestash",
"name": "Filestash",
@@ -2328,6 +2414,23 @@
"llm"
]
},
{
"id": "firefly-iii",
"name": "Firefly III",
"version": "6.6.3",
"description": "Firefly III is a self-hosted personal finance manager for tracking expenses, budgets, accounts, and financial reports.",
"logo": "logo.svg",
"links": {
"github": "https://github.com/firefly-iii/firefly-iii",
"website": "https://www.firefly-iii.org/",
"docs": "https://docs.firefly-iii.org/"
},
"tags": [
"finance",
"budgeting",
"self-hosted"
]
},
{
"id": "fivem",
"name": "FiveM Server",
@@ -2866,6 +2969,23 @@
"tools"
]
},
{
"id": "gotify",
"name": "Gotify",
"version": "2.9.1",
"description": "Gotify is a simple server for sending and receiving self-hosted push notifications.",
"logo": "gotify.svg",
"links": {
"github": "https://github.com/gotify/server",
"website": "https://gotify.net/",
"docs": "https://gotify.net/docs/"
},
"tags": [
"notifications",
"self-hosted",
"push"
]
},
{
"id": "grafana",
"name": "Grafana",
@@ -2935,6 +3055,24 @@
"self-hosted"
]
},
{
"id": "hermes",
"name": "Hermes",
"version": "v2026.6.19",
"description": "Hermes is an open agent runtime from Nous Research, exposing an OpenAI-compatible gateway API and a supervised web dashboard for building and running AI agents.",
"logo": "logo.png",
"links": {
"github": "https://github.com/NousResearch/hermes-agent",
"website": "https://hermes-agent.nousresearch.com/",
"docs": "https://hermes-agent.nousresearch.com/docs/user-guide/docker"
},
"tags": [
"ai",
"agent",
"llm",
"self-hosted"
]
},
{
"id": "heyform",
"name": "HeyForm",
@@ -3085,7 +3223,7 @@
"id": "huly",
"name": "Huly",
"version": "0.6.377",
"description": "Huly All-in-One Project Management Platform (alternative to Linear, Jira, Slack, Notion, Motion)",
"description": "Huly — All-in-One Project Management Platform (alternative to Linear, Jira, Slack, Notion, Motion)",
"logo": "huly.svg",
"links": {
"github": "https://github.com/hcengineering/huly-selfhost",
@@ -3208,6 +3346,24 @@
"database"
]
},
{
"id": "inkvoice",
"name": "Inkvoice",
"version": "0.1.0",
"description": "Open-source invoicing for freelancers and small teams: invoices, online payments (Stripe & PayPal), expenses, multi-currency and reports.",
"logo": "inkvoice.svg",
"links": {
"github": "https://github.com/pigontech/inkvoice",
"website": "https://inkvoice.app",
"docs": "https://docs.inkvoice.app"
},
"tags": [
"invoicing",
"billing",
"finance",
"self-hosted"
]
},
{
"id": "inngest",
"name": "Inngest",
@@ -3328,6 +3484,23 @@
"media system"
]
},
{
"id": "jellyseerr",
"name": "Jellyseerr",
"version": "2.7.3",
"description": "Jellyseerr is a media request and discovery manager for Jellyfin, Plex, and Emby users.",
"logo": "jellyseerr.svg",
"links": {
"github": "https://github.com/Fallenbagel/jellyseerr",
"website": "https://docs.jellyseerr.dev/",
"docs": "https://docs.jellyseerr.dev/"
},
"tags": [
"media",
"requests",
"jellyfin"
]
},
{
"id": "jenkins",
"name": "jenkins",
@@ -3365,6 +3538,23 @@
"webrtc"
]
},
{
"id": "joplin-server",
"name": "Joplin Server",
"version": "3.7.1",
"description": "Joplin Server is the self-hosted sync backend for Joplin notes, notebooks, and attachments.",
"logo": "joplin-server.svg",
"links": {
"github": "https://github.com/laurent22/joplin",
"website": "https://joplinapp.org/",
"docs": "https://github.com/laurent22/joplin/tree/dev/packages/server"
},
"tags": [
"notes",
"sync",
"productivity"
]
},
{
"id": "kaneo",
"name": "Kaneo",
@@ -3609,7 +3799,7 @@
"id": "librechat",
"name": "LibreChat",
"version": "latest",
"description": "LibreChat is the ultimate open-source app for all your AI conversations, fully customizable and compatible with any AI provider (Openai, Ollama, Google etc.) all in one sleek interface.",
"description": "LibreChat is the ultimate open-source app for all your AI conversations, fully customizable and compatible with any AI provider (Openai, Ollama, Google etc.) — all in one sleek interface.",
"logo": "librechat.png",
"links": {
"github": "https://github.com/danny-avila/librechat",
@@ -4550,6 +4740,24 @@
"academic"
]
},
{
"id": "ollama-chat-tone",
"name": "Ollama Chat Tone",
"version": "latest",
"description": "Self-contained Ollama chat client with local auth, streaming responses, and per-user conversations.",
"logo": "ollama-chat-tone.svg",
"links": {
"github": "https://github.com/billnice250/ollama-chat-client",
"website": "https://hub.docker.com/r/billnice250/chattone",
"docs": "https://hub.docker.com/r/billnice250/chattone"
},
"tags": [
"chatbot",
"ai",
"ollama",
"docker"
]
},
{
"id": "omni-tools",
"name": "Omni-Tools",
@@ -5018,7 +5226,7 @@
"id": "photoprism",
"name": "Photoprism",
"version": "latest",
"description": "PhotoPrism® is an AI-Powered Photos App for the Decentralized Web. It makes use of the latest technologies to tag and find pictures automatically without getting in your way.",
"description": "PhotoPrism® is an AI-Powered Photos App for the Decentralized Web. It makes use of the latest technologies to tag and find pictures automatically without getting in your way.",
"logo": "photoprism.svg",
"links": {
"github": "https://github.com/photoprism/photoprism",
@@ -5759,6 +5967,23 @@
"file-system"
]
},
{
"id": "sftpgo",
"name": "SFTPGo",
"version": "2.7.3",
"description": "SFTPGo is a full-featured and highly configurable SFTP, HTTP/S, FTP/S, and WebDAV server.",
"logo": "sftpgo.svg",
"links": {
"github": "https://github.com/drakkan/sftpgo",
"website": "https://sftpgo.com/",
"docs": "https://docs.sftpgo.com/"
},
"tags": [
"sftp",
"files",
"webdav"
]
},
{
"id": "shlink",
"name": "Shlink",
@@ -5882,6 +6107,23 @@
"storage"
]
},
{
"id": "spliit",
"name": "Spliit",
"version": "latest",
"description": "Spliit is a lightweight, self-hosted alternative to Auth0 and Clerk. Open-source, cost-effective, and developer-friendly, it provides secure authentication (OAuth, email/password, social logins) with full control over your data. No per-user fees, easy to integrate, and perfect for startups or privacy-focused projects.",
"logo": "spliit.png",
"links": {
"github": "https://github.com/spliit-app/spliit",
"website": "https://spliit.app/",
"docs": "https://github.com/spliit-app"
},
"tags": [
"budgeting",
"finance",
"money"
]
},
{
"id": "stack-auth",
"name": "Stack Auth",
@@ -6049,7 +6291,7 @@
"id": "surrealdb",
"name": "SurrealDB",
"version": "2.3.10",
"description": "SurrealDB is a native, open-source, multi-model database that lets you store and manage data across relational, document, graph, time-series, vector & search, and geospatial modelsall in one place.",
"description": "SurrealDB is a native, open-source, multi-model database that lets you store and manage data across relational, document, graph, time-series, vector & search, and geospatial models—all in one place.",
"logo": "surrealdb.svg",
"links": {
"github": "https://github.com/surrealdb/surrealdb",
@@ -6321,7 +6563,7 @@
"id": "typecho",
"name": "Typecho",
"version": "stable",
"description": "Typecho 是一个轻量级的开源博客程序,基于 PHP 开发,支持多种数据库,简洁而强大。",
"description": "Typecho 是一个轻量级的开源博客程序,基于 PHP 开发,支持多种数据库,简洁而强大。",
"logo": "typecho.png",
"links": {
"github": "https://github.com/typecho/typecho",