Added more docker boilerplates
Some checks are pending
Deploy server-up / deploy (push) Waiting to run

This commit is contained in:
bes-r 2026-05-16 15:21:58 +02:00
parent 60bf1a92f7
commit 9b299bf532
40 changed files with 1385 additions and 0 deletions

View file

@ -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

View file

@ -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
}
]
}
]
}

View file

@ -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

View file

@ -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"}
}
]
}
]
}

View file

@ -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

31
apps/dozzle/template.json Normal file
View file

@ -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
}
]
}
]
}

View file

@ -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

View file

@ -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"
}
]
}
]
}

View file

@ -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:

65
apps/ghost/template.json Normal file
View file

@ -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"}
}
]
}
]
}

View file

@ -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

52
apps/gotify/template.json Normal file
View file

@ -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"}
}
]
}
]
}

View file

@ -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

View file

@ -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"}
}
]
}
]
}

View file

@ -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

View file

@ -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
}
]
}
]
}

View file

@ -0,0 +1,7 @@
services:
<< service_name >>:
image: corentinth/it-tools:latest
container_name: << service_name >>
ports:
- "<< port >>:80"
restart: unless-stopped

View file

@ -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
}
]
}
]
}

View file

@ -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

View file

@ -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"}
}
]
}
]
}

View file

@ -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

57
apps/mealie/template.json Normal file
View file

@ -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"
}
]
}
]
}

View file

@ -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:

View file

@ -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"}
}
]
}
]
}

View file

@ -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

67
apps/pihole/template.json Normal file
View file

@ -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"}
}
]
}
]
}

View file

@ -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

73
apps/plex/template.json Normal file
View file

@ -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"}
}
]
}
]
}

View file

@ -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

View file

@ -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
}
]
}
]
}

View file

@ -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

View file

@ -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"}
}
]
}
]
}

View file

@ -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

View file

@ -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
}
]
}
]
}

View file

@ -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

View file

@ -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
}
]
}
]
}

View file

@ -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

View file

@ -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"}
}
]
}
]
}

View file

@ -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:

View file

@ -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"}
}
]
}
]
}