ATTENTION IS ALL YOU NEED (#313)

* Add blueprints for wanderer and yamtrack applications with Docker configurations and templates

* Add Vikunja blueprint

* Add Tor Browser blueprint with Docker configuration and template

* Add Picsur image hosting blueprint with Docker configuration and template

* Create new blueprint for deploying Pastefy with MariaDB and OAuth support

* Added Morsphs

* Add KitchenOwl blueprint with Docker Compose configuration and template

* Add Kokoro Web blueprint with Docker Compose configuration and template

* added HortusFox

* added gitingest

* Add Etherpad blueprint with Docker Compose configuration and template

* Add drawnix blueprint with Docker Compose configuration and template

* arranged Meta
This commit is contained in:
Jainil Prajapati 🪐
2025-08-28 11:52:23 +05:30
committed by GitHub
parent b4bf7c4fa7
commit 77266b3bd1
40 changed files with 973 additions and 0 deletions

View File

@@ -0,0 +1,5 @@
version: "3.8"
services:
drawnix:
image: pubuzhixing/drawnix:latest
restart: unless-stopped

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 KiB

View File

@@ -0,0 +1,17 @@
[variables]
main_domain = "${domain}"
[config]
[[config.domains]]
serviceName = "drawnix"
port = 3000
host = "${main_domain}"
[config.env]
[[config.mounts]]
# No specific mounts required based on available documentation; added a placeholder for potential configuration file if needed in future
filePath = "/app/config.txt"
content = """
# Placeholder content - customize if the application requires persistent configuration
"""

View File

@@ -0,0 +1,39 @@
version: "3.8"
services:
app:
user: "0:0"
image: etherpad/etherpad:latest
tty: true
stdin_open: true
volumes:
- ../files/plugins:/opt/etherpad-lite/src/plugin_packages
- ../files/etherpad_var:/opt/etherpad-lite/var
depends_on:
- postgres
environment:
NODE_ENV: ${NODE_ENV}
ADMIN_PASSWORD: ${ADMIN_PASSWORD}
DB_CHARSET: ${DB_CHARSET}
DB_HOST: ${DB_HOST}
DB_NAME: ${DB_NAME}
DB_PASS: ${DB_PASS}
DB_PORT: ${DB_PORT}
DB_TYPE: ${DB_TYPE}
DB_USER: ${DB_USER}
DEFAULT_PAD_TEXT: ${DEFAULT_PAD_TEXT}
DISABLE_IP_LOGGING: ${DISABLE_IP_LOGGING}
SOFFICE: ${SOFFICE}
TRUST_PROXY: ${TRUST_PROXY}
restart: always
expose:
- 9001
postgres:
image: postgres:15-alpine
environment:
POSTGRES_DB: ${POSTGRES_DB}
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
POSTGRES_USER: ${POSTGRES_USER}
PGDATA: /var/lib/postgresql/data/pgdata
restart: always
volumes:
- ../files/postgres_data:/var/lib/postgresql/data/pgdata

Binary file not shown.

After

Width:  |  Height:  |  Size: 47 KiB

View File

@@ -0,0 +1,28 @@
[variables]
main_domain = "${domain}"
admin_password = "${password:32}"
postgres_password = "${password:32}"
[config]
[[config.domains]]
serviceName = "app"
port = 9001
host = "${main_domain}"
[config.env]
NODE_ENV = "production"
ADMIN_PASSWORD = "${admin_password}"
DB_CHARSET = "utf8mb4"
DB_HOST = "postgres"
DB_NAME = "etherpad"
DB_PASS = "${postgres_password}"
DB_PORT = "5432"
DB_TYPE = "postgres"
DB_USER = "admin"
DEFAULT_PAD_TEXT = " "
DISABLE_IP_LOGGING = "false"
SOFFICE = "null"
TRUST_PROXY = "true"
POSTGRES_DB = "etherpad"
POSTGRES_PASSWORD = "${postgres_password}"
POSTGRES_USER = "admin"

View File

@@ -0,0 +1,9 @@
version: "3.8"
services:
gitingest:
image: elestio/gitingest:${SOFTWARE_VERSION_TAG}
restart: unless-stopped
expose:
- 8000
environment:
- ALLOWED_HOSTS=${ALLOWED_HOSTS}

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

View File

@@ -0,0 +1,13 @@
[variables]
main_domain = "${domain}"
[config]
[[config.domains]]
serviceName = "gitingest"
port = 8000
host = "${main_domain}"
[config.env]
SOFTWARE_VERSION_TAG = "latest"
ALLOWED_HOSTS = "${main_domain}"

View File

@@ -0,0 +1,43 @@
version: "3.8"
services:
app:
image: ghcr.io/danielbrendel/hortusfox-web:latest
restart: unless-stopped
volumes:
- app_images:/var/www/html/public/img
- app_logs:/var/www/html/app/logs
- app_backup:/var/www/html/public/backup
- app_themes:/var/www/html/public/themes
- app_migrate:/var/www/html/app/migrations
environment:
APP_ADMIN_EMAIL: ${APP_ADMIN_EMAIL}
APP_ADMIN_PASSWORD: ${APP_ADMIN_PASSWORD}
APP_TIMEZONE: ${APP_TIMEZONE}
DB_HOST: db
DB_PORT: 3306
DB_DATABASE: ${DB_DATABASE}
DB_USERNAME: ${DB_USERNAME}
DB_PASSWORD: ${DB_PASSWORD}
DB_CHARSET: utf8mb4
depends_on:
- db
db:
image: mariadb:11
restart: unless-stopped
environment:
MARIADB_ROOT_PASSWORD: ${MARIADB_ROOT_PASSWORD}
MARIADB_DATABASE: ${DB_DATABASE}
MARIADB_USER: ${DB_USERNAME}
MARIADB_PASSWORD: ${DB_PASSWORD}
volumes:
- db_data:/var/lib/mysql
volumes:
db_data:
app_images:
app_logs:
app_backup:
app_themes:
app_migrate:

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

View File

@@ -0,0 +1,50 @@
[variables]
main_domain = "${domain}"
APP_ADMIN_EMAIL = "${email}"
APP_ADMIN_PASSWORD = "${password:16}"
APP_TIMEZONE = "UTC"
DB_DATABASE = "hortusfox"
DB_USERNAME = "hortususer"
DB_PASSWORD = "${password:20}"
MARIADB_ROOT_PASSWORD = "${password:24}"
[config]
[[config.domains]]
serviceName = "app"
port = 80
host = "${main_domain}"
[config.env]
APP_ADMIN_EMAIL = "${APP_ADMIN_EMAIL}"
APP_ADMIN_PASSWORD = "${APP_ADMIN_PASSWORD}"
APP_TIMEZONE = "${APP_TIMEZONE}"
DB_DATABASE = "${DB_DATABASE}"
DB_USERNAME = "${DB_USERNAME}"
DB_PASSWORD = "${DB_PASSWORD}"
MARIADB_ROOT_PASSWORD = "${MARIADB_ROOT_PASSWORD}"
[[config.mounts]]
name = "app_images"
mountPath = "/var/www/html/public/img"
[[config.mounts]]
name = "app_logs"
mountPath = "/var/www/html/app/logs"
[[config.mounts]]
name = "app_backup"
mountPath = "/var/www/html/public/backup"
[[config.mounts]]
name = "app_themes"
mountPath = "/var/www/html/public/themes"
[[config.mounts]]
name = "app_migrate"
mountPath = "/var/www/html/app/migrations"
[[config.mounts]]
name = "db_data"
mountPath = "/var/lib/mysql"

View File

@@ -0,0 +1,37 @@
version: "3.8"
services:
web:
image: tombursch/kitchenowl:v0.7.1
restart: unless-stopped
environment:
- JWT_SECRET_KEY=${JWT_SECRET_KEY}
- DB_DRIVER=postgresql
- DB_HOST=db
- DB_NAME=${DB_NAME}
- DB_USER=${DB_USER}
- DB_PASSWORD=${DB_PASSWORD}
volumes:
- kitchenowl_files:/data
depends_on:
- db
db:
image: postgres:17
restart: unless-stopped
environment:
- POSTGRES_DB=${DB_NAME}
- POSTGRES_USER=${DB_USER}
- POSTGRES_PASSWORD=${DB_PASSWORD}
volumes:
- kitchenowl_db:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -d $${POSTGRES_DB} -U $${POSTGRES_USER}"]
interval: 30s
timeout: 60s
retries: 5
start_period: 80s
volumes:
kitchenowl_files: {}
kitchenowl_db: {}

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

View File

@@ -0,0 +1,33 @@
[variables]
main_domain = "${domain}"
app_password = "${password:32}"
db_password = "${password:24}"
db_user = "kitchenowl"
db_name = "kitchenowl"
[config]
[[config.domains]]
serviceName = "web"
port = 8080
host = "${main_domain}"
[config.env]
JWT_SECRET_KEY = "${app_password}"
DB_DRIVER = "postgresql"
DB_HOST = "db"
DB_NAME = "${db_name}"
DB_USER = "${db_user}"
DB_PASSWORD = "${db_password}"
# Persist uploads/attachments
[[config.mounts]]
serviceName = "web"
volumeName = "kitchenowl_files"
mountPath = "/data"
# Persist Postgres data
[[config.mounts]]
serviceName = "db"
volumeName = "kitchenowl_db"
mountPath = "/var/lib/postgresql/data"

View File

@@ -0,0 +1,14 @@
version: "3.8"
services:
kokoro-web:
image: ghcr.io/eduardolat/kokoro-web:latest
restart: unless-stopped
environment:
- KW_SECRET_API_KEY=${KW_SECRET_API_KEY}
- KW_PUBLIC_NO_TRACK=${KW_PUBLIC_NO_TRACK}
volumes:
- kokoro-cache:/kokoro/cache
volumes:
kokoro-cache: {}

Binary file not shown.

After

Width:  |  Height:  |  Size: 53 KiB

View File

@@ -0,0 +1,14 @@
[variables]
main_domain = "${domain}"
api_key = "${password:32}" # Secure random API key for Kokoro Web
no_track = "false" # Set to "true" to opt out of analytics
[config]
[[config.domains]]
serviceName = "kokoro-web"
port = 3000
host = "${main_domain}"
[config.env]
KW_SECRET_API_KEY = "${api_key}"
KW_PUBLIC_NO_TRACK = "${no_track}"

View File

@@ -0,0 +1,15 @@
version: "3.8"
services:
morphos-server:
image: ghcr.io/danvergara/morphos-server:latest
restart: unless-stopped
expose:
- 8080
volumes:
- ../files/morphos-upload:/upload:rw
healthcheck:
test: timeout 10s bash -c ':> /dev/tcp/127.0.0.1/8080' || exit 1
interval: 10s
timeout: 5s
retries: 3
start_period: 90s

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

View File

@@ -0,0 +1,19 @@
[variables]
main_domain = "${domain}"
[config]
[[config.domains]]
serviceName = "morphos-server"
port = 8080
host = "${main_domain}"
tls = true
certResolver = "letsencrypt"
[config.env]
# No environment variables required based on provided information
[[config.mounts]]
source = "../files/morphos-upload"
target = "/upload"
type = "bind"
readOnly = false

View File

@@ -0,0 +1,39 @@
version: "3.8"
services:
db:
image: mariadb:10.11
restart: unless-stopped
volumes:
- "../files/db:/var/lib/mysql"
environment:
MYSQL_ROOT_PASSWORD: ${DB_ROOT_PASSWORD}
MYSQL_DATABASE: ${DB_NAME}
MYSQL_USER: ${DB_USER}
MYSQL_PASSWORD: ${DB_PASSWORD}
pastefy:
image: interaapps/pastefy:latest
restart: unless-stopped
depends_on:
- db
expose:
- "80"
environment:
HTTP_SERVER_PORT: 80
HTTP_SERVER_CORS: ${HTTP_SERVER_CORS}
DATABASE_DRIVER: mysql
DATABASE_NAME: ${DB_NAME}
DATABASE_USER: ${DB_USER}
DATABASE_PASSWORD: ${DB_PASSWORD}
DATABASE_HOST: db
DATABASE_PORT: 3306
SERVER_NAME: ${SERVER_NAME}
OAUTH2_INTERAAPPS_CLIENT_ID: ${OAUTH2_INTERAAPPS_CLIENT_ID}
OAUTH2_INTERAAPPS_CLIENT_SECRET: ${OAUTH2_INTERAAPPS_CLIENT_SECRET}
OAUTH2_GITHUB_CLIENT_ID: ${OAUTH2_GITHUB_CLIENT_ID}
OAUTH2_GITHUB_CLIENT_SECRET: ${OAUTH2_GITHUB_CLIENT_SECRET}
OAUTH2_GOOGLE_CLIENT_ID: ${OAUTH2_GOOGLE_CLIENT_ID}
OAUTH2_GOOGLE_CLIENT_SECRET: ${OAUTH2_GOOGLE_CLIENT_SECRET}
OAUTH2_DISCORD_CLIENT_ID: ${OAUTH2_DISCORD_CLIENT_ID}
OAUTH2_DISCORD_CLIENT_SECRET: ${OAUTH2_DISCORD_CLIENT_SECRET}
OAUTH2_TWITCH_CLIENT_ID: ${OAUTH2_TWITCH_CLIENT_ID}
OAUTH2_TWITCH_CLIENT_SECRET: ${OAUTH2_TWITCH_CLIENT_SECRET}

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

View File

@@ -0,0 +1,43 @@
[variables]
main_domain = "${domain}"
db_root_password = "${password:32}"
db_password = "${password:32}"
db_user = "pastefy"
db_name = "pastefy"
http_server_cors = "*"
server_name = "https://${main_domain}"
oauth2_interaapps_client_id = "NONE"
oauth2_interaapps_client_secret = ""
oauth2_github_client_id = "NONE"
oauth2_github_client_secret = ""
oauth2_google_client_id = "NONE"
oauth2_google_client_secret = ""
oauth2_discord_client_id = "NONE"
oauth2_discord_client_secret = ""
oauth2_twitch_client_id = "NONE"
oauth2_twitch_client_secret = ""
[[config.domains]]
serviceName = "pastefy"
port = 80
host = "${main_domain}"
[config]
env = [
"DB_ROOT_PASSWORD=${db_root_password}",
"DB_NAME=${db_name}",
"DB_USER=${db_user}",
"DB_PASSWORD=${db_password}",
"HTTP_SERVER_CORS=${http_server_cors}",
"SERVER_NAME=${server_name}",
"OAUTH2_INTERAAPPS_CLIENT_ID=${oauth2_interaapps_client_id} # Interaapps API Key (optional)",
"OAUTH2_INTERAAPPS_CLIENT_SECRET=${oauth2_interaapps_client_secret} # Interaapps API Secret (optional)",
"OAUTH2_GITHUB_CLIENT_ID=${oauth2_github_client_id} # GitHub API Key (optional)",
"OAUTH2_GITHUB_CLIENT_SECRET=${oauth2_github_client_secret} # GitHub API Secret (optional)",
"OAUTH2_GOOGLE_CLIENT_ID=${oauth2_google_client_id} # Google API Key (optional)",
"OAUTH2_GOOGLE_CLIENT_SECRET=${oauth2_google_client_secret} # Google API Secret (optional)",
"OAUTH2_DISCORD_CLIENT_ID=${oauth2_discord_client_id} # Discord API Key (optional)",
"OAUTH2_DISCORD_CLIENT_SECRET=${oauth2_discord_client_secret} # Discord API Secret (optional)",
"OAUTH2_TWITCH_CLIENT_ID=${oauth2_twitch_client_id} # Twitch API Key (optional)",
"OAUTH2_TWITCH_CLIENT_SECRET=${oauth2_twitch_client_secret} # Twitch API Secret (optional)"
]

View File

@@ -0,0 +1,29 @@
version: "3.8"
services:
picsur:
image: ghcr.io/caramelfur/picsur:latest
restart: unless-stopped
environment:
PICSUR_DB_HOST: picsur_postgres
PICSUR_DB_PORT: 5432
PICSUR_DB_USERNAME: picsur
PICSUR_DB_PASSWORD: ${POSTGRES_PASSWORD}
PICSUR_DB_DATABASE: picsur
PICSUR_ADMIN_PASSWORD: ${ADMIN_PASSWORD}
PICSUR_JWT_SECRET: ${JWT_SECRET}
expose:
- 8080
picsur_postgres:
image: postgres:17-alpine
restart: unless-stopped
environment:
POSTGRES_DB: picsur
POSTGRES_USER: picsur
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
volumes:
- picsur-data:/var/lib/postgresql/data
volumes:
picsur-data: {}

BIN
blueprints/picsur/image.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.0 KiB

View File

@@ -0,0 +1,23 @@
[variables]
main_domain = "${domain}"
postgres_password = "${password:32}"
admin_password = "${password:32}"
jwt_secret = "${jwt:jwt_secret}"
[config]
[[config.domains]]
serviceName = "picsur"
port = 8080
host = "${main_domain}"
[config.env]
"PICSUR_DB_PASSWORD" = "${postgres_password}"
"PICSUR_ADMIN_PASSWORD" = "${admin_password}"
"PICSUR_JWT_SECRET" = "${jwt_secret}"
"POSTGRES_PASSWORD" = "${postgres_password}"
[[config.mounts]]
name = "picsur-data"
serviceName = "picsur_postgres"
mountPath = "/var/lib/postgresql/data"

View File

@@ -0,0 +1,14 @@
version: "3.9"
services:
tor:
image: domistyle/tor-browser
restart: always
expose:
- 5800
- 5900
environment:
DISPLAY_WIDTH: ${DISPLAY_WIDTH}
DISPLAY_HEIGHT: ${DISPLAY_HEIGHT}
KEEP_APP_RUNNING: ${KEEP_APP_RUNNING}
TZ: ${TZ}

Binary file not shown.

After

Width:  |  Height:  |  Size: 43 KiB

View File

@@ -0,0 +1,20 @@
[variables]
main_domain = "${domain}"
display_width = "1920"
display_height = "1080"
keep_app_running = "1"
timezone = "Europe/Vienna"
[config]
[[config.domains]]
serviceName = "tor"
port = 5800
host = "${main_domain}"
[config.env]
DISPLAY_WIDTH = "${display_width}"
DISPLAY_HEIGHT = "${display_height}"
KEEP_APP_RUNNING = "${keep_app_running}"
TZ = "${timezone}"
[[config.mounts]]

View File

@@ -0,0 +1,39 @@
version: "3.8"
services:
vikunja:
image: vikunja/vikunja
environment:
VIKUNJA_SERVICE_PUBLICURL: http://vikunja.local
VIKUNJA_DATABASE_HOST: db
VIKUNJA_DATABASE_PASSWORD: ${VIKUNJA_DATABASE_PASSWORD}
VIKUNJA_DATABASE_TYPE: postgres
VIKUNJA_DATABASE_USER: vikunja
VIKUNJA_DATABASE_DATABASE: vikunja
VIKUNJA_SERVICE_JWTSECRET: ${VIKUNJA_SERVICE_JWTSECRET}
expose:
- 3456
volumes:
- vikunja-files:/app/vikunja/files
depends_on:
db:
condition: service_healthy
restart: unless-stopped
db:
image: postgres:17
environment:
POSTGRES_PASSWORD: ${VIKUNJA_DATABASE_PASSWORD}
POSTGRES_USER: vikunja
POSTGRES_DB: vikunja
volumes:
- vikunja-db:/var/lib/postgresql/data
restart: unless-stopped
healthcheck:
test: ["CMD-SHELL", "pg_isready -h localhost -U $$POSTGRES_USER"]
interval: 2s
start_period: 30s
volumes:
vikunja-files: {}
vikunja-db: {}

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

View File

@@ -0,0 +1,33 @@
[variables]
main_domain = "${domain}"
db_password = "${password:32}"
jwt_secret = "${jwt:db_password}"
[config]
[[config.domains]]
serviceName = "vikunja"
port = 3456
host = "${main_domain}"
[config.env]
VIKUNJA_SERVICE_PUBLICURL = "https://${main_domain}"
VIKUNJA_DATABASE_HOST = "db"
VIKUNJA_DATABASE_PASSWORD = "${db_password}"
VIKUNJA_DATABASE_TYPE = "postgres"
VIKUNJA_DATABASE_USER = "vikunja"
VIKUNJA_DATABASE_DATABASE = "vikunja"
VIKUNJA_SERVICE_JWTSECRET = "${jwt_secret}"
POSTGRES_PASSWORD = "${db_password}"
POSTGRES_USER = "vikunja"
POSTGRES_DB = "vikunja"
[[config.mounts]]
serviceName = "vikunja"
volumeName = "vikunja-files"
mountPath = "/app/vikunja/files"
[[config.mounts]]
serviceName = "db"
volumeName = "vikunja-db"
mountPath = "/var/lib/postgresql/data"

View File

@@ -0,0 +1,72 @@
version: "3.8"
services:
search:
image: getmeili/meilisearch:v1.11.3
environment:
MEILI_URL: http://search:7700
MEILI_MASTER_KEY: ${MEILI_MASTER_KEY}
MEILI_NO_ANALYTICS: "true"
volumes:
- search-data:/meili_data/data.ms
restart: unless-stopped
healthcheck:
test: curl --fail http://localhost:7700/health || exit 1
interval: 15s
retries: 10
start_period: 20s
timeout: 10s
db:
image: flomp/wanderer-db
depends_on:
search:
condition: service_healthy
environment:
MEILI_URL: http://search:7700
MEILI_MASTER_KEY: ${MEILI_MASTER_KEY}
POCKETBASE_ENCRYPTION_KEY: ${POCKETBASE_ENCRYPTION_KEY}
ORIGIN: ${ORIGIN}
volumes:
- db-data:/pb_data
restart: unless-stopped
healthcheck:
test: wget --spider -q http://localhost:8090/health || exit 1
interval: 15s
retries: 10
start_period: 20s
timeout: 10s
web:
image: flomp/wanderer-web
depends_on:
search:
condition: service_healthy
db:
condition: service_healthy
environment:
MEILI_URL: http://search:7700
MEILI_MASTER_KEY: ${MEILI_MASTER_KEY}
ORIGIN: ${ORIGIN}
BODY_SIZE_LIMIT: Infinity
PUBLIC_POCKETBASE_URL: http://db:8090
PUBLIC_DISABLE_SIGNUP: "false"
UPLOAD_FOLDER: /app/uploads
UPLOAD_USER: ${UPLOAD_USER}
UPLOAD_PASSWORD: ${UPLOAD_PASSWORD}
PUBLIC_VALHALLA_URL: https://valhalla1.openstreetmap.de
PUBLIC_NOMINATIM_URL: https://nominatim.openstreetmap.org
volumes:
- uploads:/app/uploads
restart: unless-stopped
healthcheck:
test: curl --fail http://localhost:3000/ || exit 1
interval: 15s
retries: 10
start_period: 20s
timeout: 10s
volumes:
search-data: {}
db-data: {}
uploads: {}

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

View File

@@ -0,0 +1,46 @@
[variables]
main_domain = "${domain}"
meili_master_key = "${password:32}"
pocketbase_key = "${password:32}"
upload_user = "${username}"
upload_password = "${password:16}"
[config]
[[config.domains]]
serviceName = "web"
port = 3000
host = "${main_domain}"
[[config.domains]]
serviceName = "db"
port = 8090
host = "db.${main_domain}"
[[config.domains]]
serviceName = "search"
port = 7700
host = "search.${main_domain}"
[config.env]
MEILI_MASTER_KEY = "${meili_master_key}"
POCKETBASE_ENCRYPTION_KEY = "${pocketbase_key}"
UPLOAD_USER = "${upload_user}"
UPLOAD_PASSWORD = "${upload_password}"
ORIGIN = "http://${main_domain}"
[[config.mounts]]
serviceName = "search"
volumeName = "search-data"
mountPath = "/meili_data/data.ms"
[[config.mounts]]
serviceName = "db"
volumeName = "db-data"
mountPath = "/pb_data"
[[config.mounts]]
serviceName = "web"
volumeName = "uploads"
mountPath = "/app/uploads"

View File

@@ -0,0 +1,26 @@
version: "3.8"
services:
yamtrack:
image: ghcr.io/fuzzygrim/yamtrack
restart: unless-stopped
depends_on:
- redis
environment:
- TZ=Europe/Berlin
- SECRET=${SECRET}
- REDIS_URL=redis://redis:6379
volumes:
- yamtrack-db:/yamtrack/db
expose:
- 8000
redis:
image: redis:7-alpine
restart: unless-stopped
volumes:
- redis_data:/data
volumes:
yamtrack-db: {}
redis_data: {}

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.2 KiB

View File

@@ -0,0 +1,19 @@
[variables]
main_domain = "${domain}"
SECRET = "${password:64}"
[config]
[[config.domains]]
serviceName = "yamtrack"
port = 8000
host = "${main_domain}"
[config.env]
SECRET = "${SECRET}"
TZ = "Europe/Berlin"
REDIS_URL = "redis://redis:6379"
[[config.mounts]]
serviceName = "yamtrack"
volumeName = "yamtrack-db"
mountPath = "/yamtrack/db"

234
meta.json
View File

@@ -1509,6 +1509,22 @@
"diagrams"
]
},
{
"id": "drawnix",
"name": "Drawnix",
"version": "latest",
"description": "Drawnix is an application for generating and managing visual content, powered by pubuzhixing/drawnix Docker image.",
"logo": "image.png",
"links": {
"github": "https://github.com/pubuzhixing/drawnix",
"website": "https://hub.docker.com/r/pubuzhixing/drawnix",
"docs": "https://hub.docker.com/r/pubuzhixing/drawnix"
},
"tags": [
"visualization",
"content-generation"
]
},
{
"id": "drizzle-gateway",
"name": "drizzle gateway",
@@ -1647,6 +1663,23 @@
"hrms"
]
},
{
"id": "etherpad",
"name": "Etherpad",
"version": "latest",
"description": "Etherpad is a real-time collaborative text editor that allows multiple users to edit documents simultaneously.",
"logo": "image.png",
"links": {
"github": "https://github.com/ether/etherpad-lite",
"website": "https://etherpad.org/",
"docs": "https://github.com/ether/etherpad-lite/wiki"
},
"tags": [
"collaboration",
"text-editor",
"real-time"
]
},
{
"id": "evolutionapi",
"name": "Evolution API",
@@ -1981,6 +2014,25 @@
"self-hosted"
]
},
{
"id": "gitingest",
"name": "Gitingest",
"version": "latest",
"description": "Gitingest is an application that supports Prometheus metrics, Sentry integration, and S3-backed storage.",
"logo": "image.png",
"links": {
"github": "https://github.com/<your-org>/gitingest",
"website": "https://gitingest.com",
"docs": "https://github.com/<your-org>/gitingest#readme"
},
"tags": [
"analytics",
"s3",
"monitoring",
"sentry",
"metrics"
]
},
{
"id": "gitlab-ce",
"name": "GitLab CE",
@@ -2242,6 +2294,26 @@
"server"
]
},
{
"id": "hortusfox",
"name": "HortusFox",
"version": "5.0",
"description": "HortusFox is an open source task and photo management app, designed for photographers and creatives to manage projects, tasks, and images effectively.",
"logo": "image.png",
"links": {
"github": "https://github.com/danielbrendel/hortusfox-web",
"website": "https://www.hortusfox.com",
"docs": "https://github.com/danielbrendel/hortusfox-web#readme",
"discord": "https://discord.gg/kc6xGmjzVS"
},
"tags": [
"productivity",
"photo",
"task-management",
"php",
"mariadb"
]
},
{
"id": "huly",
"name": "Huly",
@@ -2488,6 +2560,42 @@
"finance"
]
},
{
"id": "kitchenowl",
"name": "KitchenOwl",
"version": "v0.7.1",
"description": "KitchenOwl is a self-hosted grocery list and recipe manager.",
"logo": "image.png",
"links": {
"github": "https://github.com/TomBursch/kitchenowl",
"website": "https://kitchenowl.org/",
"docs": "https://github.com/TomBursch/kitchenowl/wiki"
},
"tags": [
"self-hosted",
"recipes",
"grocery",
"personal"
]
},
{
"id": "kokoro-web",
"name": "Kokoro Web",
"version": "latest",
"description": "Kokoro Web provides an interface for text-to-speech using advanced AI voice synthesis. It allows model caching and API integration with authentication.",
"logo": "image.png",
"links": {
"github": "https://github.com/eduardolat/kokoro-web",
"website": "https://github.com/eduardolat/kokoro-web",
"docs": "https://github.com/eduardolat/kokoro-web#readme"
},
"tags": [
"text-to-speech",
"ai",
"voice",
"web"
]
},
{
"id": "kutt",
"name": "Kutt",
@@ -2854,6 +2962,23 @@
"storage"
]
},
{
"id": "morphos",
"name": "Morphos",
"version": "latest",
"description": "Morphos is a lightweight service for distributed operations and orchestration.",
"logo": "image.png",
"links": {
"github": "https://github.com/danvergara/morphos-server",
"website": "https://github.com/danvergara/morphos-server",
"docs": "https://github.com/danvergara/morphos-server#readme"
},
"tags": [
"server",
"orchestration",
"lightweight"
]
},
{
"id": "movary",
"name": "Movary",
@@ -3222,6 +3347,24 @@
"open-source"
]
},
{
"id": "pastefy",
"name": "Pastefy",
"version": "latest",
"description": "Pastefy is an open-source pastebin with support for syntax highlighting and OAuth2 authentication.",
"logo": "image.png",
"links": {
"github": "https://github.com/interaapps/pastefy",
"website": "https://pastefy.app",
"docs": "https://github.com/interaapps/pastefy/wiki"
},
"tags": [
"pastebin",
"text-sharing",
"collaboration",
"oauth2"
]
},
{
"id": "penpot",
"name": "Penpot",
@@ -3304,6 +3447,24 @@
"database"
]
},
{
"id": "picsur",
"name": "Picsur",
"version": "latest",
"description": "Picsur is a simple, self-hosted image hosting service with an admin interface and Postgres backend.",
"logo": "image.png",
"links": {
"github": "https://github.com/CaramelFur/picsur",
"website": "https://github.com/CaramelFur/picsur",
"docs": "https://github.com/CaramelFur/picsur#readme"
},
"tags": [
"image-hosting",
"media",
"self-hosted",
"postgres"
]
},
{
"id": "pinchflat",
"name": "Pinchflat",
@@ -3969,6 +4130,24 @@
"self-hosted"
]
},
{
"id": "tor-browser",
"name": "Tor Browser",
"version": "latest",
"description": "A Dockerized Tor Browser accessible via web VNC (noVNC) and VNC client.",
"logo": "image.png",
"links": {
"github": "https://github.com/DomiStyle/docker-tor-browser",
"website": "https://www.torproject.org/",
"docs": "https://hub.docker.com/r/domistyle/tor-browser"
},
"tags": [
"privacy",
"security",
"browser",
"tor"
]
},
{
"id": "triggerdotdev",
"name": "Trigger.dev",
@@ -4161,6 +4340,24 @@
"open-source"
]
},
{
"id": "vikunja",
"name": "Vikunja",
"version": "0.23.0",
"description": "Vikunja is a self-hosted, open-source to-do list application to organize tasks, projects, and notes.",
"logo": "image.png",
"links": {
"github": "https://kolaente.dev/vikunja/",
"website": "https://vikunja.io/",
"docs": "https://vikunja.io/docs/"
},
"tags": [
"productivity",
"tasks",
"self-hosted",
"project-management"
]
},
{
"id": "wallos",
"name": "Wallos",
@@ -4180,6 +4377,24 @@
"spending"
]
},
{
"id": "wanderer",
"name": "Wanderer",
"version": "1.0.0",
"description": "Wanderer is a self-hosted mapping and geolocation platform powered by Meilisearch, PocketBase, and a web frontend.",
"logo": "image.png",
"links": {
"github": "https://github.com/flomp/wanderer",
"website": "https://wanderer.app",
"docs": "https://github.com/flomp/wanderer#readme"
},
"tags": [
"mapping",
"geolocation",
"search",
"self-hosted"
]
},
{
"id": "web-check",
"name": "Web-Check",
@@ -4281,6 +4496,25 @@
"cms"
]
},
{
"id": "yamtrack",
"name": "Yamtrack",
"version": "latest",
"description": "Yamtrack is a self-hosted anime and manga tracker with Redis backend support.",
"logo": "image.png",
"links": {
"github": "https://github.com/fuzzygrim/yamtrack",
"website": "https://github.com/fuzzygrim/yamtrack",
"docs": "https://github.com/fuzzygrim/yamtrack"
},
"tags": [
"media",
"anime",
"manga",
"tracker",
"redis"
]
},
{
"id": "yourls",
"name": "YOURLS",