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
5
blueprints/drawnix/docker-compose.yml
Normal file
@@ -0,0 +1,5 @@
|
||||
version: "3.8"
|
||||
services:
|
||||
drawnix:
|
||||
image: pubuzhixing/drawnix:latest
|
||||
restart: unless-stopped
|
||||
BIN
blueprints/drawnix/image.png
Normal file
|
After Width: | Height: | Size: 3.4 KiB |
17
blueprints/drawnix/template.toml
Normal 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
|
||||
"""
|
||||
39
blueprints/etherpad/docker-compose.yml
Normal 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
|
||||
BIN
blueprints/etherpad/image.png
Normal file
|
After Width: | Height: | Size: 47 KiB |
28
blueprints/etherpad/template.toml
Normal 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"
|
||||
9
blueprints/gitingest/docker-compose.yml
Normal 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}
|
||||
BIN
blueprints/gitingest/image.png
Normal file
|
After Width: | Height: | Size: 16 KiB |
13
blueprints/gitingest/template.toml
Normal 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}"
|
||||
43
blueprints/hortusfox/docker-compose.yml
Normal 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:
|
||||
BIN
blueprints/hortusfox/image.png
Normal file
|
After Width: | Height: | Size: 31 KiB |
50
blueprints/hortusfox/template.toml
Normal 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"
|
||||
37
blueprints/kitchenowl/docker-compose.yml
Normal 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: {}
|
||||
BIN
blueprints/kitchenowl/image.png
Normal file
|
After Width: | Height: | Size: 17 KiB |
33
blueprints/kitchenowl/template.toml
Normal 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"
|
||||
14
blueprints/kokoro-web/docker-compose.yml
Normal 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: {}
|
||||
BIN
blueprints/kokoro-web/image.png
Normal file
|
After Width: | Height: | Size: 53 KiB |
14
blueprints/kokoro-web/template.toml
Normal 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}"
|
||||
15
blueprints/morphos/docker-compose.yml
Normal 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
|
||||
BIN
blueprints/morphos/image.png
Normal file
|
After Width: | Height: | Size: 19 KiB |
19
blueprints/morphos/template.toml
Normal 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
|
||||
39
blueprints/pastefy/docker-compose.yml
Normal 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}
|
||||
BIN
blueprints/pastefy/image.png
Normal file
|
After Width: | Height: | Size: 19 KiB |
43
blueprints/pastefy/template.toml
Normal 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)"
|
||||
]
|
||||
29
blueprints/picsur/docker-compose.yml
Normal 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
|
After Width: | Height: | Size: 5.0 KiB |
23
blueprints/picsur/template.toml
Normal 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"
|
||||
14
blueprints/tor-browser/docker-compose.yml
Normal 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}
|
||||
BIN
blueprints/tor-browser/image.png
Normal file
|
After Width: | Height: | Size: 43 KiB |
20
blueprints/tor-browser/template.toml
Normal 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]]
|
||||
39
blueprints/vikunja/docker-compose.yml
Normal 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: {}
|
||||
BIN
blueprints/vikunja/image.png
Normal file
|
After Width: | Height: | Size: 14 KiB |
33
blueprints/vikunja/template.toml
Normal 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"
|
||||
72
blueprints/wanderer/docker-compose.yml
Normal 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: {}
|
||||
BIN
blueprints/wanderer/image.png
Normal file
|
After Width: | Height: | Size: 11 KiB |
46
blueprints/wanderer/template.toml
Normal 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"
|
||||
26
blueprints/yamtrack/docker-compose.yml
Normal 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: {}
|
||||
BIN
blueprints/yamtrack/image.png
Normal file
|
After Width: | Height: | Size: 9.2 KiB |
19
blueprints/yamtrack/template.toml
Normal 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
@@ -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",
|
||||
|
||||