Merge remote-tracking branch 'origin/canary' into add-jitsi-meet-template
# Conflicts: # meta.json
2
.gitignore
vendored
@@ -1,3 +1,3 @@
|
||||
node_modules
|
||||
package-lock.json
|
||||
meta.json.backup.*
|
||||
meta.json.backup.*
|
||||
BIN
blueprints/alarik/alarik.png
Normal file
|
After Width: | Height: | Size: 55 KiB |
30
blueprints/alarik/docker-compose.yml
Normal 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:
|
||||
26
blueprints/alarik/template.toml
Normal 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"
|
||||
5
blueprints/archivebox/archivebox.svg
Normal 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 |
16
blueprints/archivebox/docker-compose.yml
Normal 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:
|
||||
15
blueprints/archivebox/template.toml
Normal 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"
|
||||
29
blueprints/chatto/docker-compose.yml
Normal 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
|
After Width: | Height: | Size: 36 KiB |
21
blueprints/chatto/template.toml
Normal 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}"
|
||||
16
blueprints/dockge/docker-compose.yml
Normal 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:
|
||||
5
blueprints/dockge/dockge.svg
Normal 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 |
11
blueprints/dockge/template.toml
Normal file
@@ -0,0 +1,11 @@
|
||||
[variables]
|
||||
main_domain = "${domain}"
|
||||
|
||||
[config]
|
||||
env = {}
|
||||
mounts = []
|
||||
|
||||
[[config.domains]]
|
||||
serviceName = "dockge"
|
||||
port = 5001
|
||||
host = "${main_domain}"
|
||||
13
blueprints/filegator/docker-compose.yml
Normal 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:
|
||||
5
blueprints/filegator/filegator.svg
Normal 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 |
11
blueprints/filegator/template.toml
Normal file
@@ -0,0 +1,11 @@
|
||||
[variables]
|
||||
main_domain = "${domain}"
|
||||
|
||||
[config]
|
||||
env = {}
|
||||
mounts = []
|
||||
|
||||
[[config.domains]]
|
||||
serviceName = "filegator"
|
||||
port = 8080
|
||||
host = "${main_domain}"
|
||||
13
blueprints/firefly-iii/README.md
Normal 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.
|
||||
65
blueprints/firefly-iii/docker-compose.yml
Normal 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: {}
|
||||
14
blueprints/firefly-iii/logo.svg
Normal 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 |
36
blueprints/firefly-iii/template.toml
Normal 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}"
|
||||
11
blueprints/gotify/docker-compose.yml
Normal 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:
|
||||
5
blueprints/gotify/gotify.svg
Normal 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 |
11
blueprints/gotify/template.toml
Normal file
@@ -0,0 +1,11 @@
|
||||
[variables]
|
||||
main_domain = "${domain}"
|
||||
|
||||
[config]
|
||||
env = {}
|
||||
mounts = []
|
||||
|
||||
[[config.domains]]
|
||||
serviceName = "gotify"
|
||||
port = 80
|
||||
host = "${main_domain}"
|
||||
27
blueprints/hermes/docker-compose.yml
Normal 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
|
After Width: | Height: | Size: 4.0 KiB |
33
blueprints/hermes/template.toml
Normal 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}"
|
||||
22
blueprints/inkvoice/docker-compose.yml
Normal 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:
|
||||
7
blueprints/inkvoice/inkvoice.svg
Normal 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 |
17
blueprints/inkvoice/template.toml
Normal 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}"
|
||||
13
blueprints/jellyseerr/docker-compose.yml
Normal 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:
|
||||
5
blueprints/jellyseerr/jellyseerr.svg
Normal 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 |
11
blueprints/jellyseerr/template.toml
Normal file
@@ -0,0 +1,11 @@
|
||||
[variables]
|
||||
main_domain = "${domain}"
|
||||
|
||||
[config]
|
||||
env = {}
|
||||
mounts = []
|
||||
|
||||
[[config.domains]]
|
||||
serviceName = "jellyseerr"
|
||||
port = 5055
|
||||
host = "${main_domain}"
|
||||
30
blueprints/joplin-server/docker-compose.yml
Normal 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:
|
||||
5
blueprints/joplin-server/joplin-server.svg
Normal 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 |
18
blueprints/joplin-server/template.toml
Normal 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"
|
||||
21
blueprints/ollama-chat-tone/docker-compose.yml
Normal 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: {}
|
||||
8
blueprints/ollama-chat-tone/ollama-chat-tone.svg
Normal 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 |
32
blueprints/ollama-chat-tone/template.toml
Normal 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 = ""
|
||||
@@ -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:
|
||||
|
||||
@@ -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
|
||||
"""
|
||||
|
||||
14
blueprints/sftpgo/docker-compose.yml
Normal 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:
|
||||
5
blueprints/sftpgo/sftpgo.svg
Normal 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 |
11
blueprints/sftpgo/template.toml
Normal file
@@ -0,0 +1,11 @@
|
||||
[variables]
|
||||
main_domain = "${domain}"
|
||||
|
||||
[config]
|
||||
env = {}
|
||||
mounts = []
|
||||
|
||||
[[config.domains]]
|
||||
serviceName = "sftpgo"
|
||||
port = 8080
|
||||
host = "${main_domain}"
|
||||
28
blueprints/spliit/docker-compose.yml
Normal 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
|
||||
BIN
blueprints/spliit/spliit.png
Normal file
|
After Width: | Height: | Size: 9.5 KiB |
24
blueprints/spliit/template.toml
Normal 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
@@ -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 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.",
|
||||
"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 pipeline—modeling, 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 models—all 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",
|
||||
|
||||