From 9b299bf5329b68796e4de53d4a810fda1afa81a0 Mon Sep 17 00:00:00 2001 From: bes-r Date: Sat, 16 May 2026 15:21:58 +0200 Subject: [PATCH] Added more docker boilerplates --- apps/actual-budget/files/compose.yaml | 9 +++ apps/actual-budget/template.json | 38 +++++++++++ apps/changedetection-io/files/compose.yaml | 13 ++++ apps/changedetection-io/template.json | 52 +++++++++++++++ apps/dozzle/files/compose.yaml | 9 +++ apps/dozzle/template.json | 31 +++++++++ apps/filebrowser/files/compose.yaml | 11 ++++ apps/filebrowser/template.json | 47 ++++++++++++++ apps/ghost/files/compose.yaml | 33 ++++++++++ apps/ghost/template.json | 65 +++++++++++++++++++ apps/gotify/files/compose.yaml | 11 ++++ apps/gotify/template.json | 52 +++++++++++++++ apps/grafana/files/compose.yaml | 12 ++++ apps/grafana/template.json | 59 +++++++++++++++++ apps/home-assistant/files/compose.yaml | 11 ++++ apps/home-assistant/template.json | 45 +++++++++++++ apps/it-tools/files/compose.yaml | 7 +++ apps/it-tools/template.json | 31 +++++++++ apps/linkding/files/compose.yaml | 12 ++++ apps/linkding/template.json | 58 +++++++++++++++++ apps/mealie/files/compose.yaml | 13 ++++ apps/mealie/template.json | 57 +++++++++++++++++ apps/miniflux/files/compose.yaml | 29 +++++++++ apps/miniflux/template.json | 71 +++++++++++++++++++++ apps/pihole/files/compose.yaml | 15 +++++ apps/pihole/template.json | 67 ++++++++++++++++++++ apps/plex/files/compose.yaml | 17 +++++ apps/plex/template.json | 73 ++++++++++++++++++++++ apps/portainer/files/compose.yaml | 10 +++ apps/portainer/template.json | 38 +++++++++++ apps/speedtest-tracker/files/compose.yaml | 15 +++++ apps/speedtest-tracker/template.json | 59 +++++++++++++++++ apps/stirling-pdf/files/compose.yaml | 10 +++ apps/stirling-pdf/template.json | 38 +++++++++++ apps/syncthing/files/compose.yaml | 16 +++++ apps/syncthing/template.json | 62 ++++++++++++++++++ apps/traefik/files/compose.yaml | 23 +++++++ apps/traefik/template.json | 66 +++++++++++++++++++ apps/vikunja/files/compose.yaml | 33 ++++++++++ apps/vikunja/template.json | 67 ++++++++++++++++++++ 40 files changed, 1385 insertions(+) create mode 100644 apps/actual-budget/files/compose.yaml create mode 100644 apps/actual-budget/template.json create mode 100644 apps/changedetection-io/files/compose.yaml create mode 100644 apps/changedetection-io/template.json create mode 100644 apps/dozzle/files/compose.yaml create mode 100644 apps/dozzle/template.json create mode 100644 apps/filebrowser/files/compose.yaml create mode 100644 apps/filebrowser/template.json create mode 100644 apps/ghost/files/compose.yaml create mode 100644 apps/ghost/template.json create mode 100644 apps/gotify/files/compose.yaml create mode 100644 apps/gotify/template.json create mode 100644 apps/grafana/files/compose.yaml create mode 100644 apps/grafana/template.json create mode 100644 apps/home-assistant/files/compose.yaml create mode 100644 apps/home-assistant/template.json create mode 100644 apps/it-tools/files/compose.yaml create mode 100644 apps/it-tools/template.json create mode 100644 apps/linkding/files/compose.yaml create mode 100644 apps/linkding/template.json create mode 100644 apps/mealie/files/compose.yaml create mode 100644 apps/mealie/template.json create mode 100644 apps/miniflux/files/compose.yaml create mode 100644 apps/miniflux/template.json create mode 100644 apps/pihole/files/compose.yaml create mode 100644 apps/pihole/template.json create mode 100644 apps/plex/files/compose.yaml create mode 100644 apps/plex/template.json create mode 100644 apps/portainer/files/compose.yaml create mode 100644 apps/portainer/template.json create mode 100644 apps/speedtest-tracker/files/compose.yaml create mode 100644 apps/speedtest-tracker/template.json create mode 100644 apps/stirling-pdf/files/compose.yaml create mode 100644 apps/stirling-pdf/template.json create mode 100644 apps/syncthing/files/compose.yaml create mode 100644 apps/syncthing/template.json create mode 100644 apps/traefik/files/compose.yaml create mode 100644 apps/traefik/template.json create mode 100644 apps/vikunja/files/compose.yaml create mode 100644 apps/vikunja/template.json diff --git a/apps/actual-budget/files/compose.yaml b/apps/actual-budget/files/compose.yaml new file mode 100644 index 0000000..c4f441d --- /dev/null +++ b/apps/actual-budget/files/compose.yaml @@ -0,0 +1,9 @@ +services: + << service_name >>: + image: actualbudget/actual-server:latest + container_name: << service_name >> + ports: + - "<< port >>:5006" + volumes: + - << data_dir >>/<< service_name >>/data:/data + restart: unless-stopped diff --git a/apps/actual-budget/template.json b/apps/actual-budget/template.json new file mode 100644 index 0000000..371ac78 --- /dev/null +++ b/apps/actual-budget/template.json @@ -0,0 +1,38 @@ +{ + "kind": "compose", + "metadata": { + "name": "Actual Budget", + "description": "Lokaal persoonlijk financieel beheer en budgettering zonder cloudafhankelijkheid.", + "tags": ["financiƫn", "budget", "persoonlijk", "privacy"], + "icon": {"provider": "selfhst", "id": "actual-budget"}, + "version": {"name": "latest"} + }, + "variables": [ + { + "title": "Algemeen", + "items": [ + { + "name": "service_name", + "type": "str", + "title": "Servicenaam", + "default": "actual-budget", + "required": true + }, + { + "name": "port", + "type": "int", + "title": "Web poort", + "default": 5006, + "required": true + }, + { + "name": "data_dir", + "type": "str", + "title": "Data directory", + "default": "/opt/serverup/appdata", + "required": true + } + ] + } + ] +} diff --git a/apps/changedetection-io/files/compose.yaml b/apps/changedetection-io/files/compose.yaml new file mode 100644 index 0000000..4b62e89 --- /dev/null +++ b/apps/changedetection-io/files/compose.yaml @@ -0,0 +1,13 @@ +services: + << service_name >>: + image: ghcr.io/dgtlmoon/changedetection.io:latest + container_name: << service_name >> + ports: + - "<< port >>:5000" + environment: +<% if password %> + - CHANGEDETECTION_PASSWORD=<< password >> +<% endif %> + volumes: + - << data_dir >>/<< service_name >>/data:/datastore + restart: unless-stopped diff --git a/apps/changedetection-io/template.json b/apps/changedetection-io/template.json new file mode 100644 index 0000000..b119b76 --- /dev/null +++ b/apps/changedetection-io/template.json @@ -0,0 +1,52 @@ +{ + "kind": "compose", + "metadata": { + "name": "Changedetection.io", + "description": "Monitor websites op wijzigingen en ontvang meldingen zodra er iets verandert.", + "tags": ["monitoring", "websites", "alerting", "automatisering"], + "icon": {"provider": "selfhst", "id": "changedetection-io"}, + "version": {"name": "latest"} + }, + "variables": [ + { + "title": "Algemeen", + "items": [ + { + "name": "service_name", + "type": "str", + "title": "Servicenaam", + "default": "changedetection", + "required": true + }, + { + "name": "port", + "type": "int", + "title": "Web poort", + "default": 5000, + "required": true + }, + { + "name": "data_dir", + "type": "str", + "title": "Data directory", + "default": "/opt/serverup/appdata", + "required": true + } + ] + }, + { + "title": "Beveiliging", + "items": [ + { + "name": "password", + "type": "str", + "title": "Wachtwoord", + "default": "", + "required": false, + "description": "Optioneel wachtwoord om de webinterface te beveiligen. Laat leeg voor geen beveiliging.", + "config": {"placeholder": "sterk-wachtwoord"} + } + ] + } + ] +} diff --git a/apps/dozzle/files/compose.yaml b/apps/dozzle/files/compose.yaml new file mode 100644 index 0000000..03fa4b0 --- /dev/null +++ b/apps/dozzle/files/compose.yaml @@ -0,0 +1,9 @@ +services: + << service_name >>: + image: amir20/dozzle:latest + container_name: << service_name >> + ports: + - "<< port >>:8080" + volumes: + - /var/run/docker.sock:/var/run/docker.sock:ro + restart: unless-stopped diff --git a/apps/dozzle/template.json b/apps/dozzle/template.json new file mode 100644 index 0000000..fb0eba5 --- /dev/null +++ b/apps/dozzle/template.json @@ -0,0 +1,31 @@ +{ + "kind": "compose", + "metadata": { + "name": "Dozzle", + "description": "Realtime Docker container log viewer in je browser. Geen data opgeslagen, lichtgewicht.", + "tags": ["docker", "logs", "monitoring", "beheer"], + "icon": {"provider": "selfhst", "id": "dozzle"}, + "version": {"name": "latest"} + }, + "variables": [ + { + "title": "Algemeen", + "items": [ + { + "name": "service_name", + "type": "str", + "title": "Servicenaam", + "default": "dozzle", + "required": true + }, + { + "name": "port", + "type": "int", + "title": "Web poort", + "default": 8888, + "required": true + } + ] + } + ] +} diff --git a/apps/filebrowser/files/compose.yaml b/apps/filebrowser/files/compose.yaml new file mode 100644 index 0000000..094140c --- /dev/null +++ b/apps/filebrowser/files/compose.yaml @@ -0,0 +1,11 @@ +services: + << service_name >>: + image: filebrowser/filebrowser:latest + container_name: << service_name >> + ports: + - "<< port >>:80" + volumes: + - << files_dir >>:/srv + - << data_dir >>/<< service_name >>/filebrowser.db:/database/filebrowser.db + - << data_dir >>/<< service_name >>/.filebrowser.json:/.filebrowser.json + restart: unless-stopped diff --git a/apps/filebrowser/template.json b/apps/filebrowser/template.json new file mode 100644 index 0000000..9aaa8cf --- /dev/null +++ b/apps/filebrowser/template.json @@ -0,0 +1,47 @@ +{ + "kind": "compose", + "metadata": { + "name": "File Browser", + "description": "Webgebaseerde bestandsbeheerder voor je server: uploaden, downloaden, delen en bewerken.", + "tags": ["bestanden", "beheer", "cloud", "opslag"], + "icon": {"provider": "selfhst", "id": "filebrowser"}, + "version": {"name": "latest"} + }, + "variables": [ + { + "title": "Algemeen", + "items": [ + { + "name": "service_name", + "type": "str", + "title": "Servicenaam", + "default": "filebrowser", + "required": true + }, + { + "name": "port", + "type": "int", + "title": "Web poort", + "default": 8085, + "required": true + }, + { + "name": "data_dir", + "type": "str", + "title": "Data directory", + "default": "/opt/serverup/appdata", + "required": true, + "description": "Map voor configuratie en database" + }, + { + "name": "files_dir", + "type": "str", + "title": "Bestanden directory", + "default": "/mnt/data", + "required": true, + "description": "De map die toegankelijk is via de webinterface" + } + ] + } + ] +} diff --git a/apps/ghost/files/compose.yaml b/apps/ghost/files/compose.yaml new file mode 100644 index 0000000..dc0cbda --- /dev/null +++ b/apps/ghost/files/compose.yaml @@ -0,0 +1,33 @@ +services: + << service_name >>-db: + image: mysql:8.0 + container_name: << service_name >>-db + environment: + - MYSQL_ROOT_PASSWORD=<< db_password >> + - MYSQL_DATABASE=ghost + - MYSQL_USER=ghost + - MYSQL_PASSWORD=<< db_password >> + volumes: + - << service_name >>_dbdata:/var/lib/mysql + restart: unless-stopped + + << service_name >>: + image: ghost:latest + container_name: << service_name >> + ports: + - "<< port >>:2368" + environment: + - url=<< site_url >>:<< port >> + - database__client=mysql + - database__connection__host=<< service_name >>-db + - database__connection__user=ghost + - database__connection__password=<< db_password >> + - database__connection__database=ghost + volumes: + - << data_dir >>/<< service_name >>/content:/var/lib/ghost/content + depends_on: + - << service_name >>-db + restart: unless-stopped + +volumes: + << service_name >>_dbdata: diff --git a/apps/ghost/template.json b/apps/ghost/template.json new file mode 100644 index 0000000..3810ccc --- /dev/null +++ b/apps/ghost/template.json @@ -0,0 +1,65 @@ +{ + "kind": "compose", + "metadata": { + "name": "Ghost", + "description": "Professioneel blogplatform en CMS met abonnementen, nieuwsbrieven en moderne editor.", + "tags": ["blog", "cms", "publiceren", "nieuwsbrief"], + "icon": {"provider": "selfhst", "id": "ghost"}, + "version": {"name": "latest"} + }, + "variables": [ + { + "title": "Algemeen", + "items": [ + { + "name": "service_name", + "type": "str", + "title": "Servicenaam", + "default": "ghost", + "required": true + }, + { + "name": "port", + "type": "int", + "title": "Web poort", + "default": 2368, + "required": true + }, + { + "name": "data_dir", + "type": "str", + "title": "Data directory", + "default": "/opt/serverup/appdata", + "required": true + } + ] + }, + { + "title": "Website", + "items": [ + { + "name": "site_url", + "type": "str", + "title": "Website URL", + "default": "http://localhost", + "required": true, + "description": "Volledige URL van je Ghost-site, inclusief protocol", + "config": {"placeholder": "https://mijn-blog.nl"} + } + ] + }, + { + "title": "Database", + "items": [ + { + "name": "db_password", + "type": "str", + "title": "Database wachtwoord", + "default": "ghost_db_pass", + "required": true, + "config": {"placeholder": "sterk-wachtwoord"} + } + ] + } + ] +} diff --git a/apps/gotify/files/compose.yaml b/apps/gotify/files/compose.yaml new file mode 100644 index 0000000..3fb902b --- /dev/null +++ b/apps/gotify/files/compose.yaml @@ -0,0 +1,11 @@ +services: + << service_name >>: + image: gotify/server:latest + container_name: << service_name >> + ports: + - "<< port >>:80" + environment: + - GOTIFY_DEFAULTUSER_PASS=<< default_password >> + volumes: + - << data_dir >>/<< service_name >>/data:/app/data + restart: unless-stopped diff --git a/apps/gotify/template.json b/apps/gotify/template.json new file mode 100644 index 0000000..683329b --- /dev/null +++ b/apps/gotify/template.json @@ -0,0 +1,52 @@ +{ + "kind": "compose", + "metadata": { + "name": "Gotify", + "description": "Eenvoudige push-notificatieserver voor je eigen apparaten, scripts en apps.", + "tags": ["notificaties", "push", "messaging", "alerts"], + "icon": {"provider": "selfhst", "id": "gotify"}, + "version": {"name": "latest"} + }, + "variables": [ + { + "title": "Algemeen", + "items": [ + { + "name": "service_name", + "type": "str", + "title": "Servicenaam", + "default": "gotify", + "required": true + }, + { + "name": "port", + "type": "int", + "title": "Web poort", + "default": 8070, + "required": true + }, + { + "name": "data_dir", + "type": "str", + "title": "Data directory", + "default": "/opt/serverup/appdata", + "required": true + } + ] + }, + { + "title": "Beveiliging", + "items": [ + { + "name": "default_password", + "type": "str", + "title": "Standaard admin wachtwoord", + "default": "admin", + "required": true, + "description": "Wijzig dit na de eerste aanmelding", + "config": {"placeholder": "sterk-wachtwoord"} + } + ] + } + ] +} diff --git a/apps/grafana/files/compose.yaml b/apps/grafana/files/compose.yaml new file mode 100644 index 0000000..21c677b --- /dev/null +++ b/apps/grafana/files/compose.yaml @@ -0,0 +1,12 @@ +services: + << service_name >>: + image: grafana/grafana:latest + container_name: << service_name >> + ports: + - "<< port >>:3000" + environment: + - GF_SECURITY_ADMIN_USER=<< admin_user >> + - GF_SECURITY_ADMIN_PASSWORD=<< admin_password >> + volumes: + - << data_dir >>/<< service_name >>/data:/var/lib/grafana + restart: unless-stopped diff --git a/apps/grafana/template.json b/apps/grafana/template.json new file mode 100644 index 0000000..4466095 --- /dev/null +++ b/apps/grafana/template.json @@ -0,0 +1,59 @@ +{ + "kind": "compose", + "metadata": { + "name": "Grafana", + "description": "Visualiseer metrics, logs en traces in aanpasbare dashboards.", + "tags": ["monitoring", "dashboards", "metrics", "visualisatie"], + "icon": {"provider": "selfhst", "id": "grafana"}, + "version": {"name": "latest"} + }, + "variables": [ + { + "title": "Algemeen", + "items": [ + { + "name": "service_name", + "type": "str", + "title": "Servicenaam", + "default": "grafana", + "required": true + }, + { + "name": "port", + "type": "int", + "title": "Web poort", + "default": 3000, + "required": true + }, + { + "name": "data_dir", + "type": "str", + "title": "Data directory", + "default": "/opt/serverup/appdata", + "required": true + } + ] + }, + { + "title": "Beveiliging", + "items": [ + { + "name": "admin_user", + "type": "str", + "title": "Admin gebruikersnaam", + "default": "admin", + "required": true + }, + { + "name": "admin_password", + "type": "str", + "title": "Admin wachtwoord", + "default": "admin", + "required": true, + "description": "Wijzig dit na de eerste aanmelding", + "config": {"placeholder": "sterk-wachtwoord"} + } + ] + } + ] +} diff --git a/apps/home-assistant/files/compose.yaml b/apps/home-assistant/files/compose.yaml new file mode 100644 index 0000000..b589f38 --- /dev/null +++ b/apps/home-assistant/files/compose.yaml @@ -0,0 +1,11 @@ +services: + << service_name >>: + image: ghcr.io/home-assistant/home-assistant:stable + container_name: << service_name >> + ports: + - "<< port >>:8123" + environment: + - TZ=<< timezone >> + volumes: + - << data_dir >>/<< service_name >>/config:/config + restart: unless-stopped diff --git a/apps/home-assistant/template.json b/apps/home-assistant/template.json new file mode 100644 index 0000000..a099c82 --- /dev/null +++ b/apps/home-assistant/template.json @@ -0,0 +1,45 @@ +{ + "kind": "compose", + "metadata": { + "name": "Home Assistant", + "description": "Open-source domotica platform voor het automatiseren van je slimme huis.", + "tags": ["domotica", "smart-home", "automatisering"], + "icon": {"provider": "selfhst", "id": "home-assistant"}, + "version": {"name": "stable"} + }, + "variables": [ + { + "title": "Algemeen", + "items": [ + { + "name": "service_name", + "type": "str", + "title": "Servicenaam", + "default": "home-assistant", + "required": true + }, + { + "name": "port", + "type": "int", + "title": "Web poort", + "default": 8123, + "required": true + }, + { + "name": "data_dir", + "type": "str", + "title": "Data directory", + "default": "/opt/serverup/appdata", + "required": true + }, + { + "name": "timezone", + "type": "str", + "title": "Tijdzone", + "default": "Europe/Amsterdam", + "required": true + } + ] + } + ] +} diff --git a/apps/it-tools/files/compose.yaml b/apps/it-tools/files/compose.yaml new file mode 100644 index 0000000..c5d75c2 --- /dev/null +++ b/apps/it-tools/files/compose.yaml @@ -0,0 +1,7 @@ +services: + << service_name >>: + image: corentinth/it-tools:latest + container_name: << service_name >> + ports: + - "<< port >>:80" + restart: unless-stopped diff --git a/apps/it-tools/template.json b/apps/it-tools/template.json new file mode 100644 index 0000000..64311ea --- /dev/null +++ b/apps/it-tools/template.json @@ -0,0 +1,31 @@ +{ + "kind": "compose", + "metadata": { + "name": "IT-Tools", + "description": "Verzameling handige online tools voor developers: encoding, hashing, formattering, converters en meer.", + "tags": ["tools", "developer", "utilities", "encoding"], + "icon": {"provider": "selfhst", "id": "it-tools"}, + "version": {"name": "latest"} + }, + "variables": [ + { + "title": "Algemeen", + "items": [ + { + "name": "service_name", + "type": "str", + "title": "Servicenaam", + "default": "it-tools", + "required": true + }, + { + "name": "port", + "type": "int", + "title": "Web poort", + "default": 8086, + "required": true + } + ] + } + ] +} diff --git a/apps/linkding/files/compose.yaml b/apps/linkding/files/compose.yaml new file mode 100644 index 0000000..96d6d5c --- /dev/null +++ b/apps/linkding/files/compose.yaml @@ -0,0 +1,12 @@ +services: + << service_name >>: + image: sissbruecker/linkding:latest + container_name: << service_name >> + ports: + - "<< port >>:9090" + environment: + - LD_SUPERUSER_NAME=<< superuser_name >> + - LD_SUPERUSER_PASSWORD=<< superuser_password >> + volumes: + - << data_dir >>/<< service_name >>/data:/etc/linkding/data + restart: unless-stopped diff --git a/apps/linkding/template.json b/apps/linkding/template.json new file mode 100644 index 0000000..52b5d57 --- /dev/null +++ b/apps/linkding/template.json @@ -0,0 +1,58 @@ +{ + "kind": "compose", + "metadata": { + "name": "Linkding", + "description": "Eenvoudige zelfgehoste bladwijzerbeheerder met tags, zoekfunctie en browserextensie.", + "tags": ["bladwijzers", "links", "productiviteit"], + "icon": {"provider": "selfhst", "id": "linkding"}, + "version": {"name": "latest"} + }, + "variables": [ + { + "title": "Algemeen", + "items": [ + { + "name": "service_name", + "type": "str", + "title": "Servicenaam", + "default": "linkding", + "required": true + }, + { + "name": "port", + "type": "int", + "title": "Web poort", + "default": 9090, + "required": true + }, + { + "name": "data_dir", + "type": "str", + "title": "Data directory", + "default": "/opt/serverup/appdata", + "required": true + } + ] + }, + { + "title": "Beheerder", + "items": [ + { + "name": "superuser_name", + "type": "str", + "title": "Admin gebruikersnaam", + "default": "admin", + "required": true + }, + { + "name": "superuser_password", + "type": "str", + "title": "Admin wachtwoord", + "default": "", + "required": true, + "config": {"placeholder": "sterk-wachtwoord"} + } + ] + } + ] +} diff --git a/apps/mealie/files/compose.yaml b/apps/mealie/files/compose.yaml new file mode 100644 index 0000000..c284676 --- /dev/null +++ b/apps/mealie/files/compose.yaml @@ -0,0 +1,13 @@ +services: + << service_name >>: + image: ghcr.io/mealie-recipes/mealie:latest + container_name: << service_name >> + ports: + - "<< port >>:9000" + environment: + - TZ=<< timezone >> + - ALLOW_SIGNUP=<< allow_signup | lower >> + - BASE_URL=http://localhost:<< port >> + volumes: + - << data_dir >>/<< service_name >>/data:/app/data + restart: unless-stopped diff --git a/apps/mealie/template.json b/apps/mealie/template.json new file mode 100644 index 0000000..ce53e49 --- /dev/null +++ b/apps/mealie/template.json @@ -0,0 +1,57 @@ +{ + "kind": "compose", + "metadata": { + "name": "Mealie", + "description": "Receptenbeheer met maaltijdplanning, boodschappenlijsten en automatisch importeren van recepten.", + "tags": ["recepten", "koken", "maaltijdplanning", "voedsel"], + "icon": {"provider": "selfhst", "id": "mealie"}, + "version": {"name": "latest"} + }, + "variables": [ + { + "title": "Algemeen", + "items": [ + { + "name": "service_name", + "type": "str", + "title": "Servicenaam", + "default": "mealie", + "required": true + }, + { + "name": "port", + "type": "int", + "title": "Web poort", + "default": 9000, + "required": true + }, + { + "name": "data_dir", + "type": "str", + "title": "Data directory", + "default": "/opt/serverup/appdata", + "required": true + }, + { + "name": "timezone", + "type": "str", + "title": "Tijdzone", + "default": "Europe/Amsterdam", + "required": true + } + ] + }, + { + "title": "Instellingen", + "items": [ + { + "name": "allow_signup", + "type": "bool", + "title": "Registratie toestaan", + "default": false, + "description": "Laat nieuwe gebruikers zichzelf registreren" + } + ] + } + ] +} diff --git a/apps/miniflux/files/compose.yaml b/apps/miniflux/files/compose.yaml new file mode 100644 index 0000000..6139706 --- /dev/null +++ b/apps/miniflux/files/compose.yaml @@ -0,0 +1,29 @@ +services: + << service_name >>-db: + image: postgres:16-alpine + container_name: << service_name >>-db + environment: + - POSTGRES_DB=miniflux + - POSTGRES_USER=miniflux + - POSTGRES_PASSWORD=<< db_password >> + volumes: + - << service_name >>_dbdata:/var/lib/postgresql/data + restart: unless-stopped + + << service_name >>: + image: miniflux/miniflux:latest + container_name: << service_name >> + ports: + - "<< port >>:8080" + environment: + - DATABASE_URL=postgres://miniflux:<< db_password >>@<< service_name >>-db/miniflux?sslmode=disable + - RUN_MIGRATIONS=1 + - CREATE_ADMIN=1 + - ADMIN_USERNAME=<< admin_username >> + - ADMIN_PASSWORD=<< admin_password >> + depends_on: + - << service_name >>-db + restart: unless-stopped + +volumes: + << service_name >>_dbdata: diff --git a/apps/miniflux/template.json b/apps/miniflux/template.json new file mode 100644 index 0000000..3c0802c --- /dev/null +++ b/apps/miniflux/template.json @@ -0,0 +1,71 @@ +{ + "kind": "compose", + "metadata": { + "name": "Miniflux", + "description": "Minimalistische en snelle RSS-lezer, zelfgehost met een opgeruimde interface.", + "tags": ["rss", "nieuws", "lezer", "feeds"], + "icon": {"provider": "selfhst", "id": "miniflux"}, + "version": {"name": "latest"} + }, + "variables": [ + { + "title": "Algemeen", + "items": [ + { + "name": "service_name", + "type": "str", + "title": "Servicenaam", + "default": "miniflux", + "required": true + }, + { + "name": "port", + "type": "int", + "title": "Web poort", + "default": 8080, + "required": true + }, + { + "name": "data_dir", + "type": "str", + "title": "Data directory", + "default": "/opt/serverup/appdata", + "required": true + } + ] + }, + { + "title": "Beheerder", + "items": [ + { + "name": "admin_username", + "type": "str", + "title": "Admin gebruikersnaam", + "default": "admin", + "required": true + }, + { + "name": "admin_password", + "type": "str", + "title": "Admin wachtwoord", + "default": "", + "required": true, + "config": {"placeholder": "sterk-wachtwoord"} + } + ] + }, + { + "title": "Database", + "items": [ + { + "name": "db_password", + "type": "str", + "title": "Database wachtwoord", + "default": "miniflux_db_pass", + "required": true, + "config": {"placeholder": "sterk-wachtwoord"} + } + ] + } + ] +} diff --git a/apps/pihole/files/compose.yaml b/apps/pihole/files/compose.yaml new file mode 100644 index 0000000..c638374 --- /dev/null +++ b/apps/pihole/files/compose.yaml @@ -0,0 +1,15 @@ +services: + << service_name >>: + image: pihole/pihole:latest + container_name: << service_name >> + ports: + - "<< dns_port >>:53/tcp" + - "<< dns_port >>:53/udp" + - "<< web_port >>:80" + environment: + - TZ=<< timezone >> + - WEBPASSWORD=<< web_password >> + volumes: + - << data_dir >>/<< service_name >>/etc-pihole:/etc/pihole + - << data_dir >>/<< service_name >>/etc-dnsmasq.d:/etc/dnsmasq.d + restart: unless-stopped diff --git a/apps/pihole/template.json b/apps/pihole/template.json new file mode 100644 index 0000000..93d4bf5 --- /dev/null +++ b/apps/pihole/template.json @@ -0,0 +1,67 @@ +{ + "kind": "compose", + "metadata": { + "name": "Pi-hole", + "description": "DNS-gebaseerde advertentie- en trackerblokkering voor je hele thuisnetwerk.", + "tags": ["dns", "adblock", "privacy", "netwerk"], + "icon": {"provider": "selfhst", "id": "pi-hole"}, + "version": {"name": "latest"} + }, + "variables": [ + { + "title": "Algemeen", + "items": [ + { + "name": "service_name", + "type": "str", + "title": "Servicenaam", + "default": "pihole", + "required": true + }, + { + "name": "web_port", + "type": "int", + "title": "Web poort", + "default": 8080, + "required": true + }, + { + "name": "dns_port", + "type": "int", + "title": "DNS poort", + "default": 53, + "required": true, + "description": "Poort 53 is de standaard DNS-poort" + }, + { + "name": "data_dir", + "type": "str", + "title": "Data directory", + "default": "/opt/serverup/appdata", + "required": true + }, + { + "name": "timezone", + "type": "str", + "title": "Tijdzone", + "default": "Europe/Amsterdam", + "required": true + } + ] + }, + { + "title": "Beveiliging", + "items": [ + { + "name": "web_password", + "type": "str", + "title": "Web wachtwoord", + "default": "", + "required": true, + "description": "Wachtwoord voor het Pi-hole webpaneel", + "config": {"placeholder": "sterk-wachtwoord"} + } + ] + } + ] +} diff --git a/apps/plex/files/compose.yaml b/apps/plex/files/compose.yaml new file mode 100644 index 0000000..e3b377e --- /dev/null +++ b/apps/plex/files/compose.yaml @@ -0,0 +1,17 @@ +services: + << service_name >>: + image: lscr.io/linuxserver/plex:latest + container_name: << service_name >> + ports: + - "<< port >>:32400" + environment: + - TZ=<< timezone >> + - PUID=1000 + - PGID=1000 +<% if plex_claim %> + - PLEX_CLAIM=<< plex_claim >> +<% endif %> + volumes: + - << data_dir >>/<< service_name >>/config:/config + - << media_dir >>:/media:ro + restart: unless-stopped diff --git a/apps/plex/template.json b/apps/plex/template.json new file mode 100644 index 0000000..6a2ab02 --- /dev/null +++ b/apps/plex/template.json @@ -0,0 +1,73 @@ +{ + "kind": "compose", + "metadata": { + "name": "Plex", + "description": "Populaire mediaserver voor films, series, muziek en foto's met apps voor alle platforms.", + "tags": ["media", "streaming", "films", "muziek"], + "icon": {"provider": "selfhst", "id": "plex"}, + "version": {"name": "latest"} + }, + "variables": [ + { + "title": "Algemeen", + "items": [ + { + "name": "service_name", + "type": "str", + "title": "Servicenaam", + "default": "plex", + "required": true + }, + { + "name": "port", + "type": "int", + "title": "Web poort", + "default": 32400, + "required": true + }, + { + "name": "data_dir", + "type": "str", + "title": "Data directory", + "default": "/opt/serverup/appdata", + "required": true, + "description": "Basismap voor Plex configuratie en metadata" + }, + { + "name": "timezone", + "type": "str", + "title": "Tijdzone", + "default": "Europe/Amsterdam", + "required": true + } + ] + }, + { + "title": "Media", + "items": [ + { + "name": "media_dir", + "type": "str", + "title": "Media directory", + "default": "/mnt/media", + "required": true, + "description": "Map met je films, series en muziek (wordt read-only gemount)" + } + ] + }, + { + "title": "Plex account", + "items": [ + { + "name": "plex_claim", + "type": "str", + "title": "Plex claim token", + "default": "", + "required": false, + "description": "Haal op via plex.tv/claim om de server direct aan je account te koppelen. Verlopen na 4 minuten.", + "config": {"placeholder": "claim-xxxxxxxxxxxxxxxxxxxx"} + } + ] + } + ] +} diff --git a/apps/portainer/files/compose.yaml b/apps/portainer/files/compose.yaml new file mode 100644 index 0000000..e3d0719 --- /dev/null +++ b/apps/portainer/files/compose.yaml @@ -0,0 +1,10 @@ +services: + << service_name >>: + image: portainer/portainer-ce:latest + container_name: << service_name >> + ports: + - "<< port >>:9000" + volumes: + - /var/run/docker.sock:/var/run/docker.sock + - << data_dir >>/<< service_name >>/data:/data + restart: unless-stopped diff --git a/apps/portainer/template.json b/apps/portainer/template.json new file mode 100644 index 0000000..252db56 --- /dev/null +++ b/apps/portainer/template.json @@ -0,0 +1,38 @@ +{ + "kind": "compose", + "metadata": { + "name": "Portainer CE", + "description": "Webgebaseerde Docker-beheerinterface voor containers, images, volumes en netwerken.", + "tags": ["docker", "beheer", "containers"], + "icon": {"provider": "selfhst", "id": "portainer"}, + "version": {"name": "latest"} + }, + "variables": [ + { + "title": "Algemeen", + "items": [ + { + "name": "service_name", + "type": "str", + "title": "Servicenaam", + "default": "portainer", + "required": true + }, + { + "name": "port", + "type": "int", + "title": "Web poort", + "default": 9000, + "required": true + }, + { + "name": "data_dir", + "type": "str", + "title": "Data directory", + "default": "/opt/serverup/appdata", + "required": true + } + ] + } + ] +} diff --git a/apps/speedtest-tracker/files/compose.yaml b/apps/speedtest-tracker/files/compose.yaml new file mode 100644 index 0000000..0b55822 --- /dev/null +++ b/apps/speedtest-tracker/files/compose.yaml @@ -0,0 +1,15 @@ +services: + << service_name >>: + image: lscr.io/linuxserver/speedtest-tracker:latest + container_name: << service_name >> + ports: + - "<< port >>:80" + environment: + - TZ=<< timezone >> + - PUID=1000 + - PGID=1000 + - APP_KEY=<< app_key >> + - DB_CONNECTION=sqlite + volumes: + - << data_dir >>/<< service_name >>/config:/config + restart: unless-stopped diff --git a/apps/speedtest-tracker/template.json b/apps/speedtest-tracker/template.json new file mode 100644 index 0000000..217f564 --- /dev/null +++ b/apps/speedtest-tracker/template.json @@ -0,0 +1,59 @@ +{ + "kind": "compose", + "metadata": { + "name": "Speedtest Tracker", + "description": "Automatische internetsnelheidsmetingen met historische grafieken en statistieken.", + "tags": ["netwerk", "monitoring", "internet", "statistieken"], + "icon": {"provider": "selfhst", "id": "speedtest-tracker"}, + "version": {"name": "latest"} + }, + "variables": [ + { + "title": "Algemeen", + "items": [ + { + "name": "service_name", + "type": "str", + "title": "Servicenaam", + "default": "speedtest-tracker", + "required": true + }, + { + "name": "port", + "type": "int", + "title": "Web poort", + "default": 8765, + "required": true + }, + { + "name": "data_dir", + "type": "str", + "title": "Data directory", + "default": "/opt/serverup/appdata", + "required": true + }, + { + "name": "timezone", + "type": "str", + "title": "Tijdzone", + "default": "Europe/Amsterdam", + "required": true + } + ] + }, + { + "title": "Beveiliging", + "items": [ + { + "name": "app_key", + "type": "str", + "title": "App key", + "default": "", + "required": true, + "description": "Willekeurige 32-tekens encryptiesleutel, bijv. base64:xxxx...", + "config": {"placeholder": "base64:willekeurige-string-van-32-tekens"} + } + ] + } + ] +} diff --git a/apps/stirling-pdf/files/compose.yaml b/apps/stirling-pdf/files/compose.yaml new file mode 100644 index 0000000..69039e1 --- /dev/null +++ b/apps/stirling-pdf/files/compose.yaml @@ -0,0 +1,10 @@ +services: + << service_name >>: + image: frooodle/s-pdf:latest + container_name: << service_name >> + ports: + - "<< port >>:8080" + volumes: + - << data_dir >>/<< service_name >>/configs:/configs + - << data_dir >>/<< service_name >>/logs:/logs + restart: unless-stopped diff --git a/apps/stirling-pdf/template.json b/apps/stirling-pdf/template.json new file mode 100644 index 0000000..e06c730 --- /dev/null +++ b/apps/stirling-pdf/template.json @@ -0,0 +1,38 @@ +{ + "kind": "compose", + "metadata": { + "name": "Stirling PDF", + "description": "Web-gebaseerde PDF-tools: samenvoegen, splitsen, omzetten, comprimeren en bewerken.", + "tags": ["pdf", "tools", "documenten", "utilities"], + "icon": {"provider": "selfhst", "id": "stirling-pdf"}, + "version": {"name": "latest"} + }, + "variables": [ + { + "title": "Algemeen", + "items": [ + { + "name": "service_name", + "type": "str", + "title": "Servicenaam", + "default": "stirling-pdf", + "required": true + }, + { + "name": "port", + "type": "int", + "title": "Web poort", + "default": 8080, + "required": true + }, + { + "name": "data_dir", + "type": "str", + "title": "Data directory", + "default": "/opt/serverup/appdata", + "required": true + } + ] + } + ] +} diff --git a/apps/syncthing/files/compose.yaml b/apps/syncthing/files/compose.yaml new file mode 100644 index 0000000..bdb3cde --- /dev/null +++ b/apps/syncthing/files/compose.yaml @@ -0,0 +1,16 @@ +services: + << service_name >>: + image: lscr.io/linuxserver/syncthing:latest + container_name: << service_name >> + ports: + - "<< web_port >>:8384" + - "<< sync_port >>:22000/tcp" + - "<< sync_port >>:22000/udp" + environment: + - TZ=<< timezone >> + - PUID=1000 + - PGID=1000 + volumes: + - << data_dir >>/<< service_name >>/config:/config + - << sync_dir >>:/data + restart: unless-stopped diff --git a/apps/syncthing/template.json b/apps/syncthing/template.json new file mode 100644 index 0000000..12ad339 --- /dev/null +++ b/apps/syncthing/template.json @@ -0,0 +1,62 @@ +{ + "kind": "compose", + "metadata": { + "name": "Syncthing", + "description": "Gedecentraliseerde bestandssynchronisatie tussen apparaten zonder cloudopslag.", + "tags": ["sync", "bestanden", "backup", "privacy"], + "icon": {"provider": "selfhst", "id": "syncthing"}, + "version": {"name": "latest"} + }, + "variables": [ + { + "title": "Algemeen", + "items": [ + { + "name": "service_name", + "type": "str", + "title": "Servicenaam", + "default": "syncthing", + "required": true + }, + { + "name": "web_port", + "type": "int", + "title": "Web poort", + "default": 8384, + "required": true + }, + { + "name": "sync_port", + "type": "int", + "title": "Synchronisatiepoort", + "default": 22000, + "required": true, + "description": "Poort voor apparaat-tot-apparaat synchronisatie" + }, + { + "name": "data_dir", + "type": "str", + "title": "Data directory", + "default": "/opt/serverup/appdata", + "required": true, + "description": "Map voor Syncthing configuratie" + }, + { + "name": "sync_dir", + "type": "str", + "title": "Synchronisatie directory", + "default": "/mnt/sync", + "required": true, + "description": "Map die gesynchroniseerd wordt" + }, + { + "name": "timezone", + "type": "str", + "title": "Tijdzone", + "default": "Europe/Amsterdam", + "required": true + } + ] + } + ] +} diff --git a/apps/traefik/files/compose.yaml b/apps/traefik/files/compose.yaml new file mode 100644 index 0000000..eb30de2 --- /dev/null +++ b/apps/traefik/files/compose.yaml @@ -0,0 +1,23 @@ +services: + << service_name >>: + image: traefik:latest + container_name: << service_name >> + command: + - --api.insecure=true + - --providers.docker=true + - --providers.docker.exposedbydefault=false + - --entrypoints.web.address=:80 + - --entrypoints.websecure.address=:443 +<% if acme_email %> + - --certificatesresolvers.letsencrypt.acme.email=<< acme_email >> + - --certificatesresolvers.letsencrypt.acme.storage=/letsencrypt/acme.json + - --certificatesresolvers.letsencrypt.acme.tlschallenge=true +<% endif %> + ports: + - "<< http_port >>:80" + - "<< https_port >>:443" + - "<< dashboard_port >>:8080" + volumes: + - /var/run/docker.sock:/var/run/docker.sock:ro + - << data_dir >>/<< service_name >>/letsencrypt:/letsencrypt + restart: unless-stopped diff --git a/apps/traefik/template.json b/apps/traefik/template.json new file mode 100644 index 0000000..d6b84c7 --- /dev/null +++ b/apps/traefik/template.json @@ -0,0 +1,66 @@ +{ + "kind": "compose", + "metadata": { + "name": "Traefik", + "description": "Moderne reverse proxy en load balancer met automatische SSL via Let's Encrypt.", + "tags": ["reverse-proxy", "ssl", "netwerk", "loadbalancer"], + "icon": {"provider": "selfhst", "id": "traefik"}, + "version": {"name": "latest"} + }, + "variables": [ + { + "title": "Algemeen", + "items": [ + { + "name": "service_name", + "type": "str", + "title": "Servicenaam", + "default": "traefik", + "required": true + }, + { + "name": "http_port", + "type": "int", + "title": "HTTP poort", + "default": 80, + "required": true + }, + { + "name": "https_port", + "type": "int", + "title": "HTTPS poort", + "default": 443, + "required": true + }, + { + "name": "dashboard_port", + "type": "int", + "title": "Dashboard poort", + "default": 8080, + "required": true + }, + { + "name": "data_dir", + "type": "str", + "title": "Data directory", + "default": "/opt/serverup/appdata", + "required": true + } + ] + }, + { + "title": "Let's Encrypt", + "items": [ + { + "name": "acme_email", + "type": "str", + "title": "E-mailadres voor SSL", + "default": "", + "required": false, + "description": "E-mailadres voor Let's Encrypt SSL-certificaten. Laat leeg als je geen HTTPS gebruikt.", + "config": {"placeholder": "jij@voorbeeld.nl"} + } + ] + } + ] +} diff --git a/apps/vikunja/files/compose.yaml b/apps/vikunja/files/compose.yaml new file mode 100644 index 0000000..1690f86 --- /dev/null +++ b/apps/vikunja/files/compose.yaml @@ -0,0 +1,33 @@ +services: + << service_name >>-db: + image: postgres:16-alpine + container_name: << service_name >>-db + environment: + - POSTGRES_DB=vikunja + - POSTGRES_USER=vikunja + - POSTGRES_PASSWORD=<< db_password >> + volumes: + - << service_name >>_dbdata:/var/lib/postgresql/data + restart: unless-stopped + + << service_name >>: + image: vikunja/vikunja:latest + container_name: << service_name >> + ports: + - "<< port >>:3456" + environment: + - VIKUNJA_DATABASE_HOST=<< service_name >>-db + - VIKUNJA_DATABASE_PASSWORD=<< db_password >> + - VIKUNJA_DATABASE_TYPE=postgres + - VIKUNJA_DATABASE_USER=vikunja + - VIKUNJA_DATABASE_DATABASE=vikunja + - VIKUNJA_SERVICE_JWTSECRET=<< jwt_secret >> + - VIKUNJA_SERVICE_TIMEZONE=<< timezone >> + volumes: + - << data_dir >>/<< service_name >>/files:/app/vikunja/files + depends_on: + - << service_name >>-db + restart: unless-stopped + +volumes: + << service_name >>_dbdata: diff --git a/apps/vikunja/template.json b/apps/vikunja/template.json new file mode 100644 index 0000000..09dcdd8 --- /dev/null +++ b/apps/vikunja/template.json @@ -0,0 +1,67 @@ +{ + "kind": "compose", + "metadata": { + "name": "Vikunja", + "description": "Open-source taakbeheer en to-do app met projecten, teams, Kanban en kalenderweergave.", + "tags": ["taken", "productiviteit", "projectbeheer", "todo"], + "icon": {"provider": "selfhst", "id": "vikunja"}, + "version": {"name": "latest"} + }, + "variables": [ + { + "title": "Algemeen", + "items": [ + { + "name": "service_name", + "type": "str", + "title": "Servicenaam", + "default": "vikunja", + "required": true + }, + { + "name": "port", + "type": "int", + "title": "Web poort", + "default": 3456, + "required": true + }, + { + "name": "data_dir", + "type": "str", + "title": "Data directory", + "default": "/opt/serverup/appdata", + "required": true + }, + { + "name": "timezone", + "type": "str", + "title": "Tijdzone", + "default": "Europe/Amsterdam", + "required": true + } + ] + }, + { + "title": "Beveiliging", + "items": [ + { + "name": "jwt_secret", + "type": "str", + "title": "JWT secret", + "default": "", + "required": true, + "description": "Willekeurige geheime string voor JWT-tokenbeveiliging", + "config": {"placeholder": "willekeurige-lange-string"} + }, + { + "name": "db_password", + "type": "str", + "title": "Database wachtwoord", + "default": "vikunja_db_pass", + "required": true, + "config": {"placeholder": "sterk-wachtwoord"} + } + ] + } + ] +}