v0.8.00-beta - 55 apps erbij, en drie kapotte images gevonden
All checks were successful
Deploy server-up (dev) / deploy (push) Successful in 2m22s
All checks were successful
Deploy server-up (dev) / deploy (push) Successful in 2m22s
- Catalogus van 142 naar 197 apps. Het zwaartepunt lag na het ARR-werk op media (42 apps) terwijl communicatie er 4 had, AI 4, financien 3 en foto's 2 - Drie nieuwe categorieen: Statistiek, Zakelijk en Spellen - Homelab-gereedschap: Dockge, Komodo, Glance, Gatus, Scrutiny, Backrest, Headscale, Zoraxy, CrowdSec, NetAlertX, Pocket ID, Authentik - Communicatie van 4 naar 12: Mattermost, Synapse, Element, Listmonk, Mumble, Roundcube, Stalwart - Notities: Outline, Trilium, SilverBullet, Readeck, Docmost, Kiwix - Verder LibreChat, AnythingLLM, LocalAI, Ghostfolio, Wallos, Maybe, Lychee, Piwigo, Homebox, wger, Donetick, Dawarich, Gitea, Adminer, code-server, Woodpecker, Semaphore, Opengist, MinIO, Pingvin Share, Umami, Matomo, Odoo, FreeScout, EspoCRM, RomM, Minecraft, Leantime, PrivateBin, Emby, ConvertX - Drie bestaande apps waren niet installeerbaar: Forgejo wees naar een latest-tag die dat project niet publiceert, Planka naar een tag 1 die niet bestaat, en Baby Buddy naar een ghcr-pad dat er niet is. Gevonden door alle 213 images in de catalogus langs de registries te halen - Twee testregels waren te krap: een config.yaml in files/ die geen compose is telde niet mee voor "veld wordt gebruikt", en geheimen die de gebruiker zelf aanlevert stonden in een handmatige namenlijst. Dat laatste is nu een vlag in het sjabloon: "eigen_invoer": true - Nieuwe controles voor de 36 apps met een eigen database: elke extra container draagt de servicenaam als voorvoegsel, geen vaste databasewachtwoorden, en er wacht altijd iemand met depends_on op de database Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Q9eqpADJSRs49SoGGr4NAy
This commit is contained in:
parent
279c1e36e3
commit
7d178a68b0
125 changed files with 5789 additions and 13 deletions
41
CHANGELOG.md
41
CHANGELOG.md
|
|
@ -1,3 +1,44 @@
|
||||||
|
# v0.8.00-beta — 55 apps erbij, en drie kapotte images gevonden
|
||||||
|
|
||||||
|
**De catalogus stond scheef.** Na het ARR-werk telde media 42 apps en downloaden
|
||||||
|
19, terwijl communicatie er 4 had, AI 4, financiën 3 en foto's 2. Wie de store
|
||||||
|
opende voor iets anders dan media, vond het vaak niet. Er zijn nu 55 apps bij, van
|
||||||
|
142 naar 197, gekozen op wat er in 2026 daadwerkelijk gedraaid wordt.
|
||||||
|
|
||||||
|
**Drie nieuwe categorieën:** Statistiek (Umami, Matomo), Zakelijk (Odoo,
|
||||||
|
FreeScout, EspoCRM) en Spellen (RomM, Minecraft) — hoeken die er helemaal niet
|
||||||
|
waren.
|
||||||
|
|
||||||
|
**Homelab-gereedschap:** Dockge, Komodo, Glance, Gatus, Scrutiny, Backrest,
|
||||||
|
Headscale, Zoraxy, CrowdSec, NetAlertX, Pocket ID en Authentik.
|
||||||
|
**Communicatie** gaat van 4 naar 12 met Mattermost, Synapse, Element, Listmonk,
|
||||||
|
Mumble, Roundcube en Stalwart. **Notities en documenten:** Outline, Trilium,
|
||||||
|
SilverBullet, Readeck, Docmost en Kiwix. Verder LibreChat, AnythingLLM, LocalAI,
|
||||||
|
Ghostfolio, Wallos, Maybe, Lychee, Piwigo, Homebox, wger, Donetick, Dawarich,
|
||||||
|
Gitea, Adminer, code-server, Woodpecker, Semaphore, Opengist, MinIO, Pingvin
|
||||||
|
Share, Leantime, PrivateBin, Emby en ConvertX.
|
||||||
|
|
||||||
|
**Drie apps in de catalogus waren niet te installeren.** De controle die bij het
|
||||||
|
ARR-werk Huntarr ontmaskerde, is nu over alle 213 images in de catalogus gehaald.
|
||||||
|
Daaruit kwamen drie stille fouten: Forgejo wees naar `:latest` terwijl dat project
|
||||||
|
helemaal geen latest-tag publiceert, Planka naar een tag `1` die niet bestaat, en
|
||||||
|
Baby Buddy naar `ghcr.io/babybuddy/babybuddy` — een pad dat er niet is, terwijl
|
||||||
|
het sjabloon met zijn PUID/PGID al voor de linuxserver-variant geschreven was. Alle
|
||||||
|
drie rechtgezet.
|
||||||
|
|
||||||
|
**Twee testregels waren te krap.** Een `config.yaml` in `files/` die geen
|
||||||
|
compose-bestand is, viel tussen wal en schip: hij werd niet als compose gescand en
|
||||||
|
overgeslagen omdat hij op `.yaml` eindigt — velden die alleen dáár gebruikt werden,
|
||||||
|
gingen door voor ongebruikt. En een verplicht geheim dat de gebruiker ergens anders
|
||||||
|
vandaan haalt, stond in een handmatige lijst met veldnamen. Dat is nu een vlag in
|
||||||
|
het sjabloon zelf: `"eigen_invoer": true`.
|
||||||
|
|
||||||
|
**Nieuwe controles.** Zesendertig apps brengen inmiddels hun eigen database mee.
|
||||||
|
Daarvoor geldt nu: elke extra container draagt de servicenaam als voorvoegsel
|
||||||
|
(anders botsen twee installaties van dezelfde app), geen enkel databasewachtwoord
|
||||||
|
staat vast in een sjabloon, en er wacht altijd iemand met `depends_on` op de
|
||||||
|
database.
|
||||||
|
|
||||||
# v0.7.90-beta — De ARR-stack uit elkaar, en netwerkopties per container
|
# v0.7.90-beta — De ARR-stack uit elkaar, en netwerkopties per container
|
||||||
|
|
||||||
**Elk *arr-onderdeel is nu een losse app.** Wie alleen Sonarr wil, hoefde eerst
|
**Elk *arr-onderdeel is nu een losse app.** Wie alleen Sonarr wil, hoefde eerst
|
||||||
|
|
|
||||||
|
|
@ -16,7 +16,7 @@ IP-adres in je netwerk geven.
|
||||||
|
|
||||||
| | |
|
| | |
|
||||||
|---|---|
|
|---|---|
|
||||||
| **App-catalogus** | 96 kant-en-klare apps, ingedeeld in categorieën met kleur. Zoeken, filteren en installeren met een formulier in plaats van YAML. |
|
| **App-catalogus** | 197 kant-en-klare apps, ingedeeld in categorieën met kleur. Zoeken, filteren en installeren met een formulier in plaats van YAML. |
|
||||||
| **Stacks beheren** | Starten, stoppen, bijwerken en herstarten — per stack of per losse container, met logs en live CPU-/geheugengebruik. |
|
| **Stacks beheren** | Starten, stoppen, bijwerken en herstarten — per stack of per losse container, met logs en live CPU-/geheugengebruik. |
|
||||||
| **Apps koppelen** | Stacks komen op een gedeeld netwerk, zodat ze elkaar op naam bereiken. Een veld dat naar een andere app verwijst toont een keuzelijst met wat je al draait. |
|
| **Apps koppelen** | Stacks komen op een gedeeld netwerk, zodat ze elkaar op naam bereiken. Een veld dat naar een andere app verwijst toont een keuzelijst met wat je al draait. |
|
||||||
| **Eigen IP per stack** | Met macvlan of ipvlan krijgt een app een eigen adres in je LAN in plaats van poorten op de host. |
|
| **Eigen IP per stack** | Met macvlan of ipvlan krijgt een app een eigen adres in je LAN in plaats van poorten op de host. |
|
||||||
|
|
|
||||||
2
VERSION
2
VERSION
|
|
@ -1 +1 @@
|
||||||
0.7.90-beta
|
0.8.00-beta
|
||||||
|
|
|
||||||
9
apps/adminer/files/compose.yaml
Normal file
9
apps/adminer/files/compose.yaml
Normal file
|
|
@ -0,0 +1,9 @@
|
||||||
|
services:
|
||||||
|
<< service_name >>:
|
||||||
|
image: adminer:latest
|
||||||
|
container_name: << service_name >>
|
||||||
|
environment:
|
||||||
|
- TZ=<< timezone >>
|
||||||
|
ports:
|
||||||
|
- "<< port >>:8080"
|
||||||
|
restart: unless-stopped
|
||||||
51
apps/adminer/template.json
Normal file
51
apps/adminer/template.json
Normal file
|
|
@ -0,0 +1,51 @@
|
||||||
|
{
|
||||||
|
"kind": "compose",
|
||||||
|
"metadata": {
|
||||||
|
"name": "Adminer",
|
||||||
|
"description": "Databasebeheer in één bestand: MySQL, PostgreSQL, SQLite en meer, zonder installatie per database. Let op: Adminer geeft volledige toegang tot elke database die hij kan bereiken. Zet hem niet zomaar op internet.",
|
||||||
|
"tags": [
|
||||||
|
"database",
|
||||||
|
"beheer",
|
||||||
|
"ontwikkeling"
|
||||||
|
],
|
||||||
|
"icon": {
|
||||||
|
"provider": "selfhst",
|
||||||
|
"id": "adminer"
|
||||||
|
},
|
||||||
|
"version": {
|
||||||
|
"name": "latest"
|
||||||
|
},
|
||||||
|
"categories": [
|
||||||
|
"ontwikkeling"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"variables": [
|
||||||
|
{
|
||||||
|
"title": "Algemeen",
|
||||||
|
"items": [
|
||||||
|
{
|
||||||
|
"name": "service_name",
|
||||||
|
"type": "str",
|
||||||
|
"title": "Servicenaam",
|
||||||
|
"default": "adminer",
|
||||||
|
"required": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "port",
|
||||||
|
"type": "int",
|
||||||
|
"title": "Webinterface",
|
||||||
|
"default": 8160,
|
||||||
|
"required": true,
|
||||||
|
"description": "Standaard 8080; hier verplaatst omdat die poort al bezet is"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "timezone",
|
||||||
|
"type": "str",
|
||||||
|
"title": "Tijdzone",
|
||||||
|
"default": "Europe/Amsterdam",
|
||||||
|
"required": true
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
14
apps/anythingllm/files/compose.yaml
Normal file
14
apps/anythingllm/files/compose.yaml
Normal file
|
|
@ -0,0 +1,14 @@
|
||||||
|
services:
|
||||||
|
<< service_name >>:
|
||||||
|
image: mintplexlabs/anythingllm:latest
|
||||||
|
container_name: << service_name >>
|
||||||
|
environment:
|
||||||
|
- TZ=<< timezone >>
|
||||||
|
- STORAGE_DIR=/app/server/storage
|
||||||
|
volumes:
|
||||||
|
- << appdata_dir >>/<< service_name >>:/app/server/storage
|
||||||
|
ports:
|
||||||
|
- "<< port >>:3001"
|
||||||
|
cap_add:
|
||||||
|
- SYS_ADMIN
|
||||||
|
restart: unless-stopped
|
||||||
61
apps/anythingllm/template.json
Normal file
61
apps/anythingllm/template.json
Normal file
|
|
@ -0,0 +1,61 @@
|
||||||
|
{
|
||||||
|
"kind": "compose",
|
||||||
|
"metadata": {
|
||||||
|
"name": "AnythingLLM",
|
||||||
|
"description": "Praat met je eigen documenten: laadt bestanden in een vectordatabase en gebruikt die als context. Werkt met Ollama.",
|
||||||
|
"tags": [
|
||||||
|
"ai",
|
||||||
|
"llm",
|
||||||
|
"rag",
|
||||||
|
"documenten"
|
||||||
|
],
|
||||||
|
"icon": {
|
||||||
|
"provider": "selfhst",
|
||||||
|
"id": "anythingllm"
|
||||||
|
},
|
||||||
|
"version": {
|
||||||
|
"name": "latest"
|
||||||
|
},
|
||||||
|
"categories": [
|
||||||
|
"ai",
|
||||||
|
"documenten"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"variables": [
|
||||||
|
{
|
||||||
|
"title": "Algemeen",
|
||||||
|
"items": [
|
||||||
|
{
|
||||||
|
"name": "service_name",
|
||||||
|
"type": "str",
|
||||||
|
"title": "Servicenaam",
|
||||||
|
"default": "anythingllm",
|
||||||
|
"required": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "port",
|
||||||
|
"type": "int",
|
||||||
|
"title": "Webinterface",
|
||||||
|
"default": 8142,
|
||||||
|
"required": true,
|
||||||
|
"description": "Standaard 3001; hier verplaatst omdat die poort al bezet is"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "appdata_dir",
|
||||||
|
"type": "str",
|
||||||
|
"title": "Appdata-map",
|
||||||
|
"default": "/opt/serverup/appdata",
|
||||||
|
"required": true,
|
||||||
|
"description": "Basismap voor de gegevens van deze app"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "timezone",
|
||||||
|
"type": "str",
|
||||||
|
"title": "Tijdzone",
|
||||||
|
"default": "Europe/Amsterdam",
|
||||||
|
"required": true
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
58
apps/authentik/files/compose.yaml
Normal file
58
apps/authentik/files/compose.yaml
Normal file
|
|
@ -0,0 +1,58 @@
|
||||||
|
services:
|
||||||
|
<< service_name >>:
|
||||||
|
image: ghcr.io/goauthentik/server:latest
|
||||||
|
container_name: << service_name >>
|
||||||
|
environment:
|
||||||
|
- TZ=<< timezone >>
|
||||||
|
- AUTHENTIK_SECRET_KEY=<< secret_key >>
|
||||||
|
- AUTHENTIK_POSTGRESQL__HOST=<< service_name >>-db
|
||||||
|
- AUTHENTIK_POSTGRESQL__USER=authentik
|
||||||
|
- AUTHENTIK_POSTGRESQL__NAME=authentik
|
||||||
|
- AUTHENTIK_POSTGRESQL__PASSWORD=<< db_password >>
|
||||||
|
- AUTHENTIK_REDIS__HOST=<< service_name >>-redis
|
||||||
|
volumes:
|
||||||
|
- << appdata_dir >>/<< service_name >>:/media
|
||||||
|
- << appdata_dir >>/<< service_name >>-templates:/templates
|
||||||
|
command: server
|
||||||
|
ports:
|
||||||
|
- "<< port >>:9000"
|
||||||
|
depends_on:
|
||||||
|
- << service_name >>-db
|
||||||
|
- << service_name >>-redis
|
||||||
|
restart: unless-stopped
|
||||||
|
<< service_name >>-worker:
|
||||||
|
image: ghcr.io/goauthentik/server:latest
|
||||||
|
container_name: << service_name >>-worker
|
||||||
|
command: worker
|
||||||
|
environment:
|
||||||
|
- AUTHENTIK_SECRET_KEY=<< secret_key >>
|
||||||
|
- AUTHENTIK_POSTGRESQL__HOST=<< service_name >>-db
|
||||||
|
- AUTHENTIK_POSTGRESQL__USER=authentik
|
||||||
|
- AUTHENTIK_POSTGRESQL__NAME=authentik
|
||||||
|
- AUTHENTIK_POSTGRESQL__PASSWORD=<< db_password >>
|
||||||
|
- AUTHENTIK_REDIS__HOST=<< service_name >>-redis
|
||||||
|
volumes:
|
||||||
|
- << appdata_dir >>/<< service_name >>/media:/media
|
||||||
|
- << appdata_dir >>/<< service_name >>-templates:/templates
|
||||||
|
- /var/run/docker.sock:/var/run/docker.sock
|
||||||
|
depends_on:
|
||||||
|
- << service_name >>-db
|
||||||
|
- << service_name >>-redis
|
||||||
|
restart: unless-stopped
|
||||||
|
<< service_name >>-db:
|
||||||
|
image: postgres:16-alpine
|
||||||
|
container_name: << service_name >>-db
|
||||||
|
environment:
|
||||||
|
- POSTGRES_DB=authentik
|
||||||
|
- POSTGRES_USER=authentik
|
||||||
|
- POSTGRES_PASSWORD=<< db_password >>
|
||||||
|
volumes:
|
||||||
|
- << appdata_dir >>/<< service_name >>-db:/var/lib/postgresql/data
|
||||||
|
restart: unless-stopped
|
||||||
|
<< service_name >>-redis:
|
||||||
|
image: valkey/valkey:8-alpine
|
||||||
|
container_name: << service_name >>-redis
|
||||||
|
command: valkey-server --save 60 1
|
||||||
|
volumes:
|
||||||
|
- << appdata_dir >>/<< service_name >>-redis:/data
|
||||||
|
restart: unless-stopped
|
||||||
86
apps/authentik/template.json
Normal file
86
apps/authentik/template.json
Normal file
|
|
@ -0,0 +1,86 @@
|
||||||
|
{
|
||||||
|
"kind": "compose",
|
||||||
|
"metadata": {
|
||||||
|
"name": "Authentik",
|
||||||
|
"description": "Volledige identiteitsserver: OIDC, SAML, LDAP en passkeys, met een visuele opbouw van je inlogstappen. De zwaardere broer van Authelia.",
|
||||||
|
"tags": [
|
||||||
|
"sso",
|
||||||
|
"oidc",
|
||||||
|
"saml",
|
||||||
|
"ldap",
|
||||||
|
"authenticatie"
|
||||||
|
],
|
||||||
|
"icon": {
|
||||||
|
"provider": "selfhst",
|
||||||
|
"id": "authentik"
|
||||||
|
},
|
||||||
|
"version": {
|
||||||
|
"name": "latest"
|
||||||
|
},
|
||||||
|
"categories": [
|
||||||
|
"beveiliging"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"variables": [
|
||||||
|
{
|
||||||
|
"title": "Algemeen",
|
||||||
|
"items": [
|
||||||
|
{
|
||||||
|
"name": "service_name",
|
||||||
|
"type": "str",
|
||||||
|
"title": "Servicenaam",
|
||||||
|
"default": "authentik",
|
||||||
|
"required": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "port",
|
||||||
|
"type": "int",
|
||||||
|
"title": "Webinterface",
|
||||||
|
"default": 8133,
|
||||||
|
"required": true,
|
||||||
|
"description": "Standaard 9000; hier verplaatst omdat die poort al bezet is"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "appdata_dir",
|
||||||
|
"type": "str",
|
||||||
|
"title": "Appdata-map",
|
||||||
|
"default": "/opt/serverup/appdata",
|
||||||
|
"required": true,
|
||||||
|
"description": "Basismap voor de gegevens van deze app"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "timezone",
|
||||||
|
"type": "str",
|
||||||
|
"title": "Tijdzone",
|
||||||
|
"default": "Europe/Amsterdam",
|
||||||
|
"required": true
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "Toegang",
|
||||||
|
"items": [
|
||||||
|
{
|
||||||
|
"name": "db_password",
|
||||||
|
"type": "str",
|
||||||
|
"title": "Databasewachtwoord",
|
||||||
|
"default": "",
|
||||||
|
"required": true,
|
||||||
|
"secret": true,
|
||||||
|
"generate": "auto",
|
||||||
|
"description": "Wordt automatisch ingevuld en in .env bewaard"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "secret_key",
|
||||||
|
"type": "str",
|
||||||
|
"title": "Geheime sleutel",
|
||||||
|
"default": "",
|
||||||
|
"required": true,
|
||||||
|
"secret": true,
|
||||||
|
"generate": "auto",
|
||||||
|
"description": "Ondertekent de sessies; verlies je hem, dan moet iedereen opnieuw inloggen"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
services:
|
services:
|
||||||
<< service_name >>:
|
<< service_name >>:
|
||||||
image: ghcr.io/babybuddy/babybuddy:latest
|
image: lscr.io/linuxserver/babybuddy:latest
|
||||||
container_name: << service_name >>
|
container_name: << service_name >>
|
||||||
ports:
|
ports:
|
||||||
- "<< port >>:8000"
|
- "<< port >>:8000"
|
||||||
|
|
@ -12,5 +12,5 @@ services:
|
||||||
- ALLOWED_HOSTS=<< allowed_hosts >>
|
- ALLOWED_HOSTS=<< allowed_hosts >>
|
||||||
- CSRF_TRUSTED_ORIGINS=http://<< allowed_hosts >>
|
- CSRF_TRUSTED_ORIGINS=http://<< allowed_hosts >>
|
||||||
volumes:
|
volumes:
|
||||||
- << appdata_dir >>/<< service_name >>/config:/app/data
|
- << appdata_dir >>/<< service_name >>:/config
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
|
|
|
||||||
14
apps/backrest/files/compose.yaml
Normal file
14
apps/backrest/files/compose.yaml
Normal file
|
|
@ -0,0 +1,14 @@
|
||||||
|
services:
|
||||||
|
<< service_name >>:
|
||||||
|
image: garethgeorge/backrest:latest
|
||||||
|
container_name: << service_name >>
|
||||||
|
environment:
|
||||||
|
- TZ=<< timezone >>
|
||||||
|
volumes:
|
||||||
|
- << appdata_dir >>/<< service_name >>:/config
|
||||||
|
- << appdata_dir >>/<< service_name >>-data:/data
|
||||||
|
- << appdata_dir >>/<< service_name >>-cache:/cache
|
||||||
|
- << bron_dir >>:/userdata:ro
|
||||||
|
ports:
|
||||||
|
- "<< port >>:9898"
|
||||||
|
restart: unless-stopped
|
||||||
72
apps/backrest/template.json
Normal file
72
apps/backrest/template.json
Normal file
|
|
@ -0,0 +1,72 @@
|
||||||
|
{
|
||||||
|
"kind": "compose",
|
||||||
|
"metadata": {
|
||||||
|
"name": "Backrest",
|
||||||
|
"description": "Webinterface voor restic: back-upschema's, snapshots doorbladeren en terugzetten, zonder de commandoregel.",
|
||||||
|
"tags": [
|
||||||
|
"backup",
|
||||||
|
"restic",
|
||||||
|
"opslag"
|
||||||
|
],
|
||||||
|
"icon": {
|
||||||
|
"provider": "selfhst",
|
||||||
|
"id": "backrest"
|
||||||
|
},
|
||||||
|
"version": {
|
||||||
|
"name": "latest"
|
||||||
|
},
|
||||||
|
"categories": [
|
||||||
|
"opslag"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"variables": [
|
||||||
|
{
|
||||||
|
"title": "Algemeen",
|
||||||
|
"items": [
|
||||||
|
{
|
||||||
|
"name": "service_name",
|
||||||
|
"type": "str",
|
||||||
|
"title": "Servicenaam",
|
||||||
|
"default": "backrest",
|
||||||
|
"required": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "port",
|
||||||
|
"type": "int",
|
||||||
|
"title": "Webinterface",
|
||||||
|
"default": 8127,
|
||||||
|
"required": true,
|
||||||
|
"description": "Standaard 9898; hier verplaatst omdat die poort al bezet is"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "appdata_dir",
|
||||||
|
"type": "str",
|
||||||
|
"title": "Appdata-map",
|
||||||
|
"default": "/opt/serverup/appdata",
|
||||||
|
"required": true,
|
||||||
|
"description": "Basismap voor de gegevens van deze app"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "timezone",
|
||||||
|
"type": "str",
|
||||||
|
"title": "Tijdzone",
|
||||||
|
"default": "Europe/Amsterdam",
|
||||||
|
"required": true
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "Instellingen",
|
||||||
|
"items": [
|
||||||
|
{
|
||||||
|
"name": "bron_dir",
|
||||||
|
"type": "str",
|
||||||
|
"title": "Map om te back-uppen",
|
||||||
|
"default": "/opt/serverup",
|
||||||
|
"required": true,
|
||||||
|
"description": "Wordt alleen-lezen gekoppeld als /userdata"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
16
apps/code-server/files/compose.yaml
Normal file
16
apps/code-server/files/compose.yaml
Normal file
|
|
@ -0,0 +1,16 @@
|
||||||
|
services:
|
||||||
|
<< service_name >>:
|
||||||
|
image: lscr.io/linuxserver/code-server:latest
|
||||||
|
container_name: << service_name >>
|
||||||
|
environment:
|
||||||
|
- PUID=<< puid >>
|
||||||
|
- PGID=<< pgid >>
|
||||||
|
- TZ=<< timezone >>
|
||||||
|
- UMASK=002
|
||||||
|
- PASSWORD=<< wachtwoord >>
|
||||||
|
- DEFAULT_WORKSPACE=/config/workspace
|
||||||
|
volumes:
|
||||||
|
- << appdata_dir >>/<< service_name >>:/config
|
||||||
|
ports:
|
||||||
|
- "<< port >>:8443"
|
||||||
|
restart: unless-stopped
|
||||||
93
apps/code-server/template.json
Normal file
93
apps/code-server/template.json
Normal file
|
|
@ -0,0 +1,93 @@
|
||||||
|
{
|
||||||
|
"kind": "compose",
|
||||||
|
"metadata": {
|
||||||
|
"name": "code-server",
|
||||||
|
"description": "Visual Studio Code in je browser, draaiend op de server. Handig om vanaf een tablet of een andere machine te werken.",
|
||||||
|
"tags": [
|
||||||
|
"editor",
|
||||||
|
"ontwikkeling",
|
||||||
|
"code"
|
||||||
|
],
|
||||||
|
"icon": {
|
||||||
|
"provider": "selfhst",
|
||||||
|
"id": "vscode"
|
||||||
|
},
|
||||||
|
"version": {
|
||||||
|
"name": "latest"
|
||||||
|
},
|
||||||
|
"categories": [
|
||||||
|
"ontwikkeling"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"variables": [
|
||||||
|
{
|
||||||
|
"title": "Algemeen",
|
||||||
|
"items": [
|
||||||
|
{
|
||||||
|
"name": "service_name",
|
||||||
|
"type": "str",
|
||||||
|
"title": "Servicenaam",
|
||||||
|
"default": "codeserver",
|
||||||
|
"required": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "port",
|
||||||
|
"type": "int",
|
||||||
|
"title": "Webinterface",
|
||||||
|
"default": 8161,
|
||||||
|
"required": true,
|
||||||
|
"description": "Standaard 8443; hier verplaatst omdat die poort al bezet is"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "appdata_dir",
|
||||||
|
"type": "str",
|
||||||
|
"title": "Appdata-map",
|
||||||
|
"default": "/opt/serverup/appdata",
|
||||||
|
"required": true,
|
||||||
|
"description": "Basismap voor de gegevens van deze app"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "timezone",
|
||||||
|
"type": "str",
|
||||||
|
"title": "Tijdzone",
|
||||||
|
"default": "Europe/Amsterdam",
|
||||||
|
"required": true
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "Gebruiker",
|
||||||
|
"items": [
|
||||||
|
{
|
||||||
|
"name": "puid",
|
||||||
|
"type": "int",
|
||||||
|
"title": "Gebruikers-ID (PUID)",
|
||||||
|
"default": 1000,
|
||||||
|
"required": true,
|
||||||
|
"description": "`id -u` op je server; bepaalt de eigenaar van de bestanden"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "pgid",
|
||||||
|
"type": "int",
|
||||||
|
"title": "Groeps-ID (PGID)",
|
||||||
|
"default": 1000,
|
||||||
|
"required": true
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "Toegang",
|
||||||
|
"items": [
|
||||||
|
{
|
||||||
|
"name": "wachtwoord",
|
||||||
|
"type": "str",
|
||||||
|
"title": "Wachtwoord voor de editor",
|
||||||
|
"default": "",
|
||||||
|
"required": true,
|
||||||
|
"secret": true,
|
||||||
|
"eigen_invoer": true
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
13
apps/convertx/files/compose.yaml
Normal file
13
apps/convertx/files/compose.yaml
Normal file
|
|
@ -0,0 +1,13 @@
|
||||||
|
services:
|
||||||
|
<< service_name >>:
|
||||||
|
image: ghcr.io/c4illin/convertx:latest
|
||||||
|
container_name: << service_name >>
|
||||||
|
environment:
|
||||||
|
- TZ=<< timezone >>
|
||||||
|
- JWT_SECRET=<< jwt_secret >>
|
||||||
|
- ACCOUNT_REGISTRATION=false
|
||||||
|
volumes:
|
||||||
|
- << appdata_dir >>/<< service_name >>:/app/data
|
||||||
|
ports:
|
||||||
|
- "<< port >>:3000"
|
||||||
|
restart: unless-stopped
|
||||||
73
apps/convertx/template.json
Normal file
73
apps/convertx/template.json
Normal file
|
|
@ -0,0 +1,73 @@
|
||||||
|
{
|
||||||
|
"kind": "compose",
|
||||||
|
"metadata": {
|
||||||
|
"name": "ConvertX",
|
||||||
|
"description": "Zet bestanden om naar een ander formaat in je browser: afbeeldingen, documenten, video en geluid, zonder uploaddienst van derden.",
|
||||||
|
"tags": [
|
||||||
|
"conversie",
|
||||||
|
"bestanden",
|
||||||
|
"gereedschap"
|
||||||
|
],
|
||||||
|
"icon": {
|
||||||
|
"provider": "selfhst",
|
||||||
|
"id": "convertx"
|
||||||
|
},
|
||||||
|
"version": {
|
||||||
|
"name": "latest"
|
||||||
|
},
|
||||||
|
"categories": [
|
||||||
|
"productiviteit"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"variables": [
|
||||||
|
{
|
||||||
|
"title": "Algemeen",
|
||||||
|
"items": [
|
||||||
|
{
|
||||||
|
"name": "service_name",
|
||||||
|
"type": "str",
|
||||||
|
"title": "Servicenaam",
|
||||||
|
"default": "convertx",
|
||||||
|
"required": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "port",
|
||||||
|
"type": "int",
|
||||||
|
"title": "Webinterface",
|
||||||
|
"default": 8176,
|
||||||
|
"required": true,
|
||||||
|
"description": "Standaard 3000; hier verplaatst omdat die poort al bezet is"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "appdata_dir",
|
||||||
|
"type": "str",
|
||||||
|
"title": "Appdata-map",
|
||||||
|
"default": "/opt/serverup/appdata",
|
||||||
|
"required": true,
|
||||||
|
"description": "Basismap voor de gegevens van deze app"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "timezone",
|
||||||
|
"type": "str",
|
||||||
|
"title": "Tijdzone",
|
||||||
|
"default": "Europe/Amsterdam",
|
||||||
|
"required": true
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "Toegang",
|
||||||
|
"items": [
|
||||||
|
{
|
||||||
|
"name": "jwt_secret",
|
||||||
|
"type": "str",
|
||||||
|
"title": "JWT-sleutel",
|
||||||
|
"default": "",
|
||||||
|
"required": true,
|
||||||
|
"secret": true,
|
||||||
|
"generate": "auto"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
14
apps/crowdsec/files/compose.yaml
Normal file
14
apps/crowdsec/files/compose.yaml
Normal file
|
|
@ -0,0 +1,14 @@
|
||||||
|
services:
|
||||||
|
<< service_name >>:
|
||||||
|
image: crowdsecurity/crowdsec:latest
|
||||||
|
container_name: << service_name >>
|
||||||
|
environment:
|
||||||
|
- TZ=<< timezone >>
|
||||||
|
- COLLECTIONS=crowdsecurity/linux crowdsecurity/nginx
|
||||||
|
volumes:
|
||||||
|
- << appdata_dir >>/<< service_name >>:/etc/crowdsec
|
||||||
|
- << appdata_dir >>/<< service_name >>-data:/var/lib/crowdsec/data
|
||||||
|
- << log_dir >>:/var/log/host:ro
|
||||||
|
ports:
|
||||||
|
- "<< port >>:8080"
|
||||||
|
restart: unless-stopped
|
||||||
72
apps/crowdsec/template.json
Normal file
72
apps/crowdsec/template.json
Normal file
|
|
@ -0,0 +1,72 @@
|
||||||
|
{
|
||||||
|
"kind": "compose",
|
||||||
|
"metadata": {
|
||||||
|
"name": "CrowdSec",
|
||||||
|
"description": "Leest je logbestanden mee en blokkeert aanvallers, met een blocklijst die door alle gebruikers samen wordt opgebouwd.",
|
||||||
|
"tags": [
|
||||||
|
"beveiliging",
|
||||||
|
"firewall",
|
||||||
|
"logs"
|
||||||
|
],
|
||||||
|
"icon": {
|
||||||
|
"provider": "selfhst",
|
||||||
|
"id": "crowdsec"
|
||||||
|
},
|
||||||
|
"version": {
|
||||||
|
"name": "latest"
|
||||||
|
},
|
||||||
|
"categories": [
|
||||||
|
"beveiliging"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"variables": [
|
||||||
|
{
|
||||||
|
"title": "Algemeen",
|
||||||
|
"items": [
|
||||||
|
{
|
||||||
|
"name": "service_name",
|
||||||
|
"type": "str",
|
||||||
|
"title": "Servicenaam",
|
||||||
|
"default": "crowdsec",
|
||||||
|
"required": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "port",
|
||||||
|
"type": "int",
|
||||||
|
"title": "API-poort",
|
||||||
|
"default": 8130,
|
||||||
|
"required": true,
|
||||||
|
"description": "Standaard 8080; hier verplaatst omdat die poort al bezet is"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "appdata_dir",
|
||||||
|
"type": "str",
|
||||||
|
"title": "Appdata-map",
|
||||||
|
"default": "/opt/serverup/appdata",
|
||||||
|
"required": true,
|
||||||
|
"description": "Basismap voor de gegevens van deze app"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "timezone",
|
||||||
|
"type": "str",
|
||||||
|
"title": "Tijdzone",
|
||||||
|
"default": "Europe/Amsterdam",
|
||||||
|
"required": true
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "Instellingen",
|
||||||
|
"items": [
|
||||||
|
{
|
||||||
|
"name": "log_dir",
|
||||||
|
"type": "str",
|
||||||
|
"title": "Logmap van de host",
|
||||||
|
"default": "/var/log",
|
||||||
|
"required": true,
|
||||||
|
"description": "Wordt alleen-lezen gekoppeld; hier leest CrowdSec in mee"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
40
apps/dawarich/files/compose.yaml
Normal file
40
apps/dawarich/files/compose.yaml
Normal file
|
|
@ -0,0 +1,40 @@
|
||||||
|
services:
|
||||||
|
<< service_name >>:
|
||||||
|
image: freikin/dawarich:latest
|
||||||
|
container_name: << service_name >>
|
||||||
|
environment:
|
||||||
|
- RAILS_ENV=development
|
||||||
|
- DATABASE_HOST=<< service_name >>-db
|
||||||
|
- DATABASE_USERNAME=dawarich
|
||||||
|
- DATABASE_PASSWORD=<< db_password >>
|
||||||
|
- DATABASE_NAME=dawarich
|
||||||
|
- REDIS_URL=redis://<< service_name >>-redis:6379
|
||||||
|
- APPLICATION_HOSTS=<< app_hosts >>
|
||||||
|
- TIME_ZONE=<< timezone >>
|
||||||
|
- SECRET_KEY_BASE=<< secret_key_base >>
|
||||||
|
volumes:
|
||||||
|
- << appdata_dir >>/<< service_name >>:/var/app/public
|
||||||
|
command: ["web-entrypoint.sh", "bin/rails", "server", "-p", "3000", "-b", "::"]
|
||||||
|
ports:
|
||||||
|
- "<< port >>:3000"
|
||||||
|
depends_on:
|
||||||
|
- << service_name >>-db
|
||||||
|
- << service_name >>-redis
|
||||||
|
restart: unless-stopped
|
||||||
|
<< service_name >>-db:
|
||||||
|
image: postgis/postgis:16-3.4-alpine
|
||||||
|
container_name: << service_name >>-db
|
||||||
|
environment:
|
||||||
|
- POSTGRES_DB=dawarich
|
||||||
|
- POSTGRES_USER=dawarich
|
||||||
|
- POSTGRES_PASSWORD=<< db_password >>
|
||||||
|
volumes:
|
||||||
|
- << appdata_dir >>/<< service_name >>-db:/var/lib/postgresql/data
|
||||||
|
restart: unless-stopped
|
||||||
|
<< service_name >>-redis:
|
||||||
|
image: valkey/valkey:8-alpine
|
||||||
|
container_name: << service_name >>-redis
|
||||||
|
command: valkey-server --save 60 1
|
||||||
|
volumes:
|
||||||
|
- << appdata_dir >>/<< service_name >>-redis:/data
|
||||||
|
restart: unless-stopped
|
||||||
97
apps/dawarich/template.json
Normal file
97
apps/dawarich/template.json
Normal file
|
|
@ -0,0 +1,97 @@
|
||||||
|
{
|
||||||
|
"kind": "compose",
|
||||||
|
"metadata": {
|
||||||
|
"name": "Dawarich",
|
||||||
|
"description": "Je eigen locatiegeschiedenis, als vervanging van Google Maps Timeline. Importeert je oude Google-export.",
|
||||||
|
"tags": [
|
||||||
|
"locatie",
|
||||||
|
"kaart",
|
||||||
|
"privacy"
|
||||||
|
],
|
||||||
|
"icon": {
|
||||||
|
"provider": "selfhst",
|
||||||
|
"id": "dawarich"
|
||||||
|
},
|
||||||
|
"version": {
|
||||||
|
"name": "latest"
|
||||||
|
},
|
||||||
|
"categories": [
|
||||||
|
"gezin",
|
||||||
|
"beveiliging"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"variables": [
|
||||||
|
{
|
||||||
|
"title": "Algemeen",
|
||||||
|
"items": [
|
||||||
|
{
|
||||||
|
"name": "service_name",
|
||||||
|
"type": "str",
|
||||||
|
"title": "Servicenaam",
|
||||||
|
"default": "dawarich",
|
||||||
|
"required": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "port",
|
||||||
|
"type": "int",
|
||||||
|
"title": "Webinterface",
|
||||||
|
"default": 8152,
|
||||||
|
"required": true,
|
||||||
|
"description": "Standaard 3000; hier verplaatst omdat die poort al bezet is"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "appdata_dir",
|
||||||
|
"type": "str",
|
||||||
|
"title": "Appdata-map",
|
||||||
|
"default": "/opt/serverup/appdata",
|
||||||
|
"required": true,
|
||||||
|
"description": "Basismap voor de gegevens van deze app"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "timezone",
|
||||||
|
"type": "str",
|
||||||
|
"title": "Tijdzone",
|
||||||
|
"default": "Europe/Amsterdam",
|
||||||
|
"required": true
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "Instellingen",
|
||||||
|
"items": [
|
||||||
|
{
|
||||||
|
"name": "app_hosts",
|
||||||
|
"type": "str",
|
||||||
|
"title": "Toegestane adressen",
|
||||||
|
"default": "localhost",
|
||||||
|
"required": true,
|
||||||
|
"description": "Komma-gescheiden; Rails weigert verzoeken van andere namen"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "Toegang",
|
||||||
|
"items": [
|
||||||
|
{
|
||||||
|
"name": "db_password",
|
||||||
|
"type": "str",
|
||||||
|
"title": "Databasewachtwoord",
|
||||||
|
"default": "",
|
||||||
|
"required": true,
|
||||||
|
"secret": true,
|
||||||
|
"generate": "auto",
|
||||||
|
"description": "Wordt automatisch ingevuld en in .env bewaard"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "secret_key_base",
|
||||||
|
"type": "str",
|
||||||
|
"title": "Rails-sleutel",
|
||||||
|
"default": "",
|
||||||
|
"required": true,
|
||||||
|
"secret": true,
|
||||||
|
"generate": "auto"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
14
apps/dockge/files/compose.yaml
Normal file
14
apps/dockge/files/compose.yaml
Normal file
|
|
@ -0,0 +1,14 @@
|
||||||
|
services:
|
||||||
|
<< service_name >>:
|
||||||
|
image: louislam/dockge:1
|
||||||
|
container_name: << service_name >>
|
||||||
|
environment:
|
||||||
|
- TZ=<< timezone >>
|
||||||
|
- DOCKGE_STACKS_DIR=/opt/stacks
|
||||||
|
volumes:
|
||||||
|
- << appdata_dir >>/<< service_name >>:/app/data
|
||||||
|
- /var/run/docker.sock:/var/run/docker.sock
|
||||||
|
- << stacks_dir >>:/opt/stacks
|
||||||
|
ports:
|
||||||
|
- "<< port >>:5001"
|
||||||
|
restart: unless-stopped
|
||||||
73
apps/dockge/template.json
Normal file
73
apps/dockge/template.json
Normal file
|
|
@ -0,0 +1,73 @@
|
||||||
|
{
|
||||||
|
"kind": "compose",
|
||||||
|
"metadata": {
|
||||||
|
"name": "Dockge",
|
||||||
|
"description": "Beheert je compose-stacks met een interface die het compose-bestand laat zien in plaats van te verstoppen. Lichter dan Portainer.",
|
||||||
|
"tags": [
|
||||||
|
"docker",
|
||||||
|
"beheer",
|
||||||
|
"containers"
|
||||||
|
],
|
||||||
|
"icon": {
|
||||||
|
"provider": "selfhst",
|
||||||
|
"id": "dockge"
|
||||||
|
},
|
||||||
|
"version": {
|
||||||
|
"name": "latest"
|
||||||
|
},
|
||||||
|
"categories": [
|
||||||
|
"beheer"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"variables": [
|
||||||
|
{
|
||||||
|
"title": "Algemeen",
|
||||||
|
"items": [
|
||||||
|
{
|
||||||
|
"name": "service_name",
|
||||||
|
"type": "str",
|
||||||
|
"title": "Servicenaam",
|
||||||
|
"default": "dockge",
|
||||||
|
"required": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "port",
|
||||||
|
"type": "int",
|
||||||
|
"title": "Webinterface",
|
||||||
|
"default": 8121,
|
||||||
|
"required": true,
|
||||||
|
"description": "Standaard 5001; hier verplaatst omdat die poort al bezet is"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "appdata_dir",
|
||||||
|
"type": "str",
|
||||||
|
"title": "Appdata-map",
|
||||||
|
"default": "/opt/serverup/appdata",
|
||||||
|
"required": true,
|
||||||
|
"description": "Basismap voor de gegevens van deze app"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "timezone",
|
||||||
|
"type": "str",
|
||||||
|
"title": "Tijdzone",
|
||||||
|
"default": "Europe/Amsterdam",
|
||||||
|
"required": true
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "Instellingen",
|
||||||
|
"items": [
|
||||||
|
{
|
||||||
|
"name": "stacks_dir",
|
||||||
|
"type": "str",
|
||||||
|
"title": "Stacks-map",
|
||||||
|
"default": "/opt/stacks",
|
||||||
|
"required": true,
|
||||||
|
"description": "Waar Dockge de compose-bestanden neerzet",
|
||||||
|
"help": "Dockge bewaart hier zijn eigen stacks. Wijs dit niet naar de library van Server Up: dan beheren twee programma's dezelfde mappen en overschrijven ze elkaars werk."
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
35
apps/docmost/files/compose.yaml
Normal file
35
apps/docmost/files/compose.yaml
Normal file
|
|
@ -0,0 +1,35 @@
|
||||||
|
services:
|
||||||
|
<< service_name >>:
|
||||||
|
image: docmost/docmost:latest
|
||||||
|
container_name: << service_name >>
|
||||||
|
environment:
|
||||||
|
- TZ=<< timezone >>
|
||||||
|
- APP_URL=<< app_url >>
|
||||||
|
- APP_SECRET=<< app_secret >>
|
||||||
|
- DATABASE_URL=postgresql://docmost:<< db_password >>@<< service_name >>-db:5432/docmost?schema=public
|
||||||
|
- REDIS_URL=redis://<< service_name >>-redis:6379
|
||||||
|
volumes:
|
||||||
|
- << appdata_dir >>/<< service_name >>:/app/data/storage
|
||||||
|
ports:
|
||||||
|
- "<< port >>:3000"
|
||||||
|
depends_on:
|
||||||
|
- << service_name >>-db
|
||||||
|
- << service_name >>-redis
|
||||||
|
restart: unless-stopped
|
||||||
|
<< service_name >>-db:
|
||||||
|
image: postgres:16-alpine
|
||||||
|
container_name: << service_name >>-db
|
||||||
|
environment:
|
||||||
|
- POSTGRES_DB=docmost
|
||||||
|
- POSTGRES_USER=docmost
|
||||||
|
- POSTGRES_PASSWORD=<< db_password >>
|
||||||
|
volumes:
|
||||||
|
- << appdata_dir >>/<< service_name >>-db:/var/lib/postgresql/data
|
||||||
|
restart: unless-stopped
|
||||||
|
<< service_name >>-redis:
|
||||||
|
image: valkey/valkey:8-alpine
|
||||||
|
container_name: << service_name >>-redis
|
||||||
|
command: valkey-server --save 60 1
|
||||||
|
volumes:
|
||||||
|
- << appdata_dir >>/<< service_name >>-redis:/data
|
||||||
|
restart: unless-stopped
|
||||||
96
apps/docmost/template.json
Normal file
96
apps/docmost/template.json
Normal file
|
|
@ -0,0 +1,96 @@
|
||||||
|
{
|
||||||
|
"kind": "compose",
|
||||||
|
"metadata": {
|
||||||
|
"name": "Docmost",
|
||||||
|
"description": "Documenten samen bewerken in realtime, met werkruimtes en rechten. Vergelijkbaar met Confluence of Notion.",
|
||||||
|
"tags": [
|
||||||
|
"wiki",
|
||||||
|
"documenten",
|
||||||
|
"samenwerken"
|
||||||
|
],
|
||||||
|
"icon": {
|
||||||
|
"provider": "selfhst",
|
||||||
|
"id": "docmost"
|
||||||
|
},
|
||||||
|
"version": {
|
||||||
|
"name": "latest"
|
||||||
|
},
|
||||||
|
"categories": [
|
||||||
|
"documenten",
|
||||||
|
"productiviteit"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"variables": [
|
||||||
|
{
|
||||||
|
"title": "Algemeen",
|
||||||
|
"items": [
|
||||||
|
{
|
||||||
|
"name": "service_name",
|
||||||
|
"type": "str",
|
||||||
|
"title": "Servicenaam",
|
||||||
|
"default": "docmost",
|
||||||
|
"required": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "port",
|
||||||
|
"type": "int",
|
||||||
|
"title": "Webinterface",
|
||||||
|
"default": 8157,
|
||||||
|
"required": true,
|
||||||
|
"description": "Standaard 3000; hier verplaatst omdat die poort al bezet is"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "appdata_dir",
|
||||||
|
"type": "str",
|
||||||
|
"title": "Appdata-map",
|
||||||
|
"default": "/opt/serverup/appdata",
|
||||||
|
"required": true,
|
||||||
|
"description": "Basismap voor de gegevens van deze app"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "timezone",
|
||||||
|
"type": "str",
|
||||||
|
"title": "Tijdzone",
|
||||||
|
"default": "Europe/Amsterdam",
|
||||||
|
"required": true
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "Instellingen",
|
||||||
|
"items": [
|
||||||
|
{
|
||||||
|
"name": "app_url",
|
||||||
|
"type": "str",
|
||||||
|
"title": "Publiek adres",
|
||||||
|
"default": "http://localhost:8157",
|
||||||
|
"required": true
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "Toegang",
|
||||||
|
"items": [
|
||||||
|
{
|
||||||
|
"name": "db_password",
|
||||||
|
"type": "str",
|
||||||
|
"title": "Databasewachtwoord",
|
||||||
|
"default": "",
|
||||||
|
"required": true,
|
||||||
|
"secret": true,
|
||||||
|
"generate": "auto",
|
||||||
|
"description": "Wordt automatisch ingevuld en in .env bewaard"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "app_secret",
|
||||||
|
"type": "str",
|
||||||
|
"title": "Geheime sleutel",
|
||||||
|
"default": "",
|
||||||
|
"required": true,
|
||||||
|
"secret": true,
|
||||||
|
"generate": "auto"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
14
apps/donetick/files/compose.yaml
Normal file
14
apps/donetick/files/compose.yaml
Normal file
|
|
@ -0,0 +1,14 @@
|
||||||
|
services:
|
||||||
|
<< service_name >>:
|
||||||
|
image: donetick/donetick:latest
|
||||||
|
container_name: << service_name >>
|
||||||
|
environment:
|
||||||
|
- TZ=<< timezone >>
|
||||||
|
- DT_ENV=selfhosted
|
||||||
|
- DT_SQLITE_PATH=/donetick-data/donetick.db
|
||||||
|
- DT_JWT_SECRET=<< jwt_secret >>
|
||||||
|
volumes:
|
||||||
|
- << appdata_dir >>/<< service_name >>:/donetick-data
|
||||||
|
ports:
|
||||||
|
- "<< port >>:2021"
|
||||||
|
restart: unless-stopped
|
||||||
74
apps/donetick/template.json
Normal file
74
apps/donetick/template.json
Normal file
|
|
@ -0,0 +1,74 @@
|
||||||
|
{
|
||||||
|
"kind": "compose",
|
||||||
|
"metadata": {
|
||||||
|
"name": "Donetick",
|
||||||
|
"description": "Terugkerende klusjes verdelen in huis, met beurten die doorschuiven en een melding als jij aan de beurt bent.",
|
||||||
|
"tags": [
|
||||||
|
"taken",
|
||||||
|
"huishouden",
|
||||||
|
"klusjes"
|
||||||
|
],
|
||||||
|
"icon": {
|
||||||
|
"provider": "selfhst",
|
||||||
|
"id": "donetick"
|
||||||
|
},
|
||||||
|
"version": {
|
||||||
|
"name": "latest"
|
||||||
|
},
|
||||||
|
"categories": [
|
||||||
|
"gezin",
|
||||||
|
"productiviteit"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"variables": [
|
||||||
|
{
|
||||||
|
"title": "Algemeen",
|
||||||
|
"items": [
|
||||||
|
{
|
||||||
|
"name": "service_name",
|
||||||
|
"type": "str",
|
||||||
|
"title": "Servicenaam",
|
||||||
|
"default": "donetick",
|
||||||
|
"required": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "port",
|
||||||
|
"type": "int",
|
||||||
|
"title": "Webinterface",
|
||||||
|
"default": 8151,
|
||||||
|
"required": true,
|
||||||
|
"description": "Standaard 2021; hier verplaatst omdat die poort al bezet is"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "appdata_dir",
|
||||||
|
"type": "str",
|
||||||
|
"title": "Appdata-map",
|
||||||
|
"default": "/opt/serverup/appdata",
|
||||||
|
"required": true,
|
||||||
|
"description": "Basismap voor de gegevens van deze app"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "timezone",
|
||||||
|
"type": "str",
|
||||||
|
"title": "Tijdzone",
|
||||||
|
"default": "Europe/Amsterdam",
|
||||||
|
"required": true
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "Toegang",
|
||||||
|
"items": [
|
||||||
|
{
|
||||||
|
"name": "jwt_secret",
|
||||||
|
"type": "str",
|
||||||
|
"title": "JWT-sleutel",
|
||||||
|
"default": "",
|
||||||
|
"required": true,
|
||||||
|
"secret": true,
|
||||||
|
"generate": "auto"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
11
apps/element/files/compose.yaml
Normal file
11
apps/element/files/compose.yaml
Normal file
|
|
@ -0,0 +1,11 @@
|
||||||
|
services:
|
||||||
|
<< service_name >>:
|
||||||
|
image: vectorim/element-web:latest
|
||||||
|
container_name: << service_name >>
|
||||||
|
environment:
|
||||||
|
- TZ=<< timezone >>
|
||||||
|
volumes:
|
||||||
|
- ./config.json:/app/config.json:ro
|
||||||
|
ports:
|
||||||
|
- "<< port >>:80"
|
||||||
|
restart: unless-stopped
|
||||||
10
apps/element/files/config.json
Normal file
10
apps/element/files/config.json
Normal file
|
|
@ -0,0 +1,10 @@
|
||||||
|
{
|
||||||
|
"default_server_config": {
|
||||||
|
"m.homeserver": {
|
||||||
|
"base_url": "<< homeserver >>",
|
||||||
|
"server_name": "<< server_name >>"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"brand": "Element",
|
||||||
|
"disable_guests": true
|
||||||
|
}
|
||||||
77
apps/element/template.json
Normal file
77
apps/element/template.json
Normal file
|
|
@ -0,0 +1,77 @@
|
||||||
|
{
|
||||||
|
"kind": "compose",
|
||||||
|
"metadata": {
|
||||||
|
"name": "Element",
|
||||||
|
"description": "Webclient voor Matrix. Wijst standaard naar matrix.org; koppel hem aan je eigen Synapse.",
|
||||||
|
"tags": [
|
||||||
|
"matrix",
|
||||||
|
"chat",
|
||||||
|
"communicatie"
|
||||||
|
],
|
||||||
|
"icon": {
|
||||||
|
"provider": "selfhst",
|
||||||
|
"id": "element"
|
||||||
|
},
|
||||||
|
"version": {
|
||||||
|
"name": "latest"
|
||||||
|
},
|
||||||
|
"categories": [
|
||||||
|
"communicatie"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"variables": [
|
||||||
|
{
|
||||||
|
"title": "Algemeen",
|
||||||
|
"items": [
|
||||||
|
{
|
||||||
|
"name": "service_name",
|
||||||
|
"type": "str",
|
||||||
|
"title": "Servicenaam",
|
||||||
|
"default": "element",
|
||||||
|
"required": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "port",
|
||||||
|
"type": "int",
|
||||||
|
"title": "Webinterface",
|
||||||
|
"default": 8136,
|
||||||
|
"required": true,
|
||||||
|
"description": "Standaard 80; hier verplaatst omdat die poort al bezet is"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "timezone",
|
||||||
|
"type": "str",
|
||||||
|
"title": "Tijdzone",
|
||||||
|
"default": "Europe/Amsterdam",
|
||||||
|
"required": true
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "Instellingen",
|
||||||
|
"items": [
|
||||||
|
{
|
||||||
|
"name": "homeserver",
|
||||||
|
"type": "str",
|
||||||
|
"title": "Adres van je homeserver",
|
||||||
|
"default": "https://matrix.example.com",
|
||||||
|
"required": true,
|
||||||
|
"connect": {
|
||||||
|
"app": "synapse",
|
||||||
|
"scheme": "http",
|
||||||
|
"port": 8008
|
||||||
|
},
|
||||||
|
"help": "Het adres van de Matrix-server waar deze client op inlogt. Draai je Synapse zelf, kies die dan hier."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "server_name",
|
||||||
|
"type": "str",
|
||||||
|
"title": "Servernaam",
|
||||||
|
"default": "matrix.example.com",
|
||||||
|
"required": true,
|
||||||
|
"description": "Wordt getoond op het inlogscherm"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
14
apps/emby/files/compose.yaml
Normal file
14
apps/emby/files/compose.yaml
Normal file
|
|
@ -0,0 +1,14 @@
|
||||||
|
services:
|
||||||
|
<< service_name >>:
|
||||||
|
image: emby/embyserver:latest
|
||||||
|
container_name: << service_name >>
|
||||||
|
environment:
|
||||||
|
- TZ=<< timezone >>
|
||||||
|
- UID=<< puid >>
|
||||||
|
- GID=<< pgid >>
|
||||||
|
volumes:
|
||||||
|
- << appdata_dir >>/<< service_name >>:/config
|
||||||
|
- << data_root >>/media:/data/media:ro
|
||||||
|
ports:
|
||||||
|
- "<< port >>:8096"
|
||||||
|
restart: unless-stopped
|
||||||
89
apps/emby/template.json
Normal file
89
apps/emby/template.json
Normal file
|
|
@ -0,0 +1,89 @@
|
||||||
|
{
|
||||||
|
"kind": "compose",
|
||||||
|
"metadata": {
|
||||||
|
"name": "Emby",
|
||||||
|
"description": "Mediaserver voor films, series en muziek, met eigen apps voor tv en telefoon. Alternatief voor Jellyfin en Plex.",
|
||||||
|
"tags": [
|
||||||
|
"media",
|
||||||
|
"streaming",
|
||||||
|
"films",
|
||||||
|
"series"
|
||||||
|
],
|
||||||
|
"icon": {
|
||||||
|
"provider": "selfhst",
|
||||||
|
"id": "emby"
|
||||||
|
},
|
||||||
|
"version": {
|
||||||
|
"name": "latest"
|
||||||
|
},
|
||||||
|
"categories": [
|
||||||
|
"media"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"variables": [
|
||||||
|
{
|
||||||
|
"title": "Algemeen",
|
||||||
|
"items": [
|
||||||
|
{
|
||||||
|
"name": "service_name",
|
||||||
|
"type": "str",
|
||||||
|
"title": "Servicenaam",
|
||||||
|
"default": "emby",
|
||||||
|
"required": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "port",
|
||||||
|
"type": "int",
|
||||||
|
"title": "Webinterface",
|
||||||
|
"default": 8175,
|
||||||
|
"required": true,
|
||||||
|
"description": "Standaard 8096; hier verplaatst omdat die poort al bezet is"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "appdata_dir",
|
||||||
|
"type": "str",
|
||||||
|
"title": "Appdata-map",
|
||||||
|
"default": "/opt/serverup/appdata",
|
||||||
|
"required": true,
|
||||||
|
"description": "Basismap voor de gegevens van deze app"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "data_root",
|
||||||
|
"type": "str",
|
||||||
|
"title": "Gedeelde datamap",
|
||||||
|
"default": "/mnt/data",
|
||||||
|
"required": true,
|
||||||
|
"description": "Eén map met je media, gekoppeld als /data",
|
||||||
|
"help": "Media en downloads horen onder één map te staan, die als /data in elke container komt. Alleen dan kan een voltooide download met een hardlink naar je bibliotheek: geen kopie, geen dubbele opslag, en je torrent blijft seeden. Zet je ze op gescheiden paden, dan kopieert elke download opnieuw. Eronder: media/films, media/series, torrents/ en usenet/."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "timezone",
|
||||||
|
"type": "str",
|
||||||
|
"title": "Tijdzone",
|
||||||
|
"default": "Europe/Amsterdam",
|
||||||
|
"required": true
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "Gebruiker",
|
||||||
|
"items": [
|
||||||
|
{
|
||||||
|
"name": "puid",
|
||||||
|
"type": "int",
|
||||||
|
"title": "Gebruikers-ID (PUID)",
|
||||||
|
"default": 1000,
|
||||||
|
"required": true,
|
||||||
|
"description": "`id -u` op je server; bepaalt de eigenaar van de bestanden"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "pgid",
|
||||||
|
"type": "int",
|
||||||
|
"title": "Groeps-ID (PGID)",
|
||||||
|
"default": 1000,
|
||||||
|
"required": true
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
31
apps/espocrm/files/compose.yaml
Normal file
31
apps/espocrm/files/compose.yaml
Normal file
|
|
@ -0,0 +1,31 @@
|
||||||
|
services:
|
||||||
|
<< service_name >>:
|
||||||
|
image: espocrm/espocrm:latest
|
||||||
|
container_name: << service_name >>
|
||||||
|
environment:
|
||||||
|
- TZ=<< timezone >>
|
||||||
|
- ESPOCRM_DATABASE_HOST=<< service_name >>-db
|
||||||
|
- ESPOCRM_DATABASE_NAME=espocrm
|
||||||
|
- ESPOCRM_DATABASE_USER=espocrm
|
||||||
|
- ESPOCRM_DATABASE_PASSWORD=<< db_password >>
|
||||||
|
- ESPOCRM_ADMIN_USERNAME=<< admin_user >>
|
||||||
|
- ESPOCRM_ADMIN_PASSWORD=<< admin_password >>
|
||||||
|
- ESPOCRM_SITE_URL=<< app_url >>
|
||||||
|
volumes:
|
||||||
|
- << appdata_dir >>/<< service_name >>:/var/www/html
|
||||||
|
ports:
|
||||||
|
- "<< port >>:80"
|
||||||
|
depends_on:
|
||||||
|
- << service_name >>-db
|
||||||
|
restart: unless-stopped
|
||||||
|
<< service_name >>-db:
|
||||||
|
image: mariadb:11
|
||||||
|
container_name: << service_name >>-db
|
||||||
|
environment:
|
||||||
|
- MARIADB_DATABASE=espocrm
|
||||||
|
- MARIADB_USER=espocrm
|
||||||
|
- MARIADB_PASSWORD=<< db_password >>
|
||||||
|
- MARIADB_ROOT_PASSWORD=<< db_password >>
|
||||||
|
volumes:
|
||||||
|
- << appdata_dir >>/<< service_name >>-db:/var/lib/mysql
|
||||||
|
restart: unless-stopped
|
||||||
102
apps/espocrm/template.json
Normal file
102
apps/espocrm/template.json
Normal file
|
|
@ -0,0 +1,102 @@
|
||||||
|
{
|
||||||
|
"kind": "compose",
|
||||||
|
"metadata": {
|
||||||
|
"name": "EspoCRM",
|
||||||
|
"description": "Klantrelatiebeheer: contacten, kansen, offertes en e-mail op één plek, met eigen velden en schermen.",
|
||||||
|
"tags": [
|
||||||
|
"crm",
|
||||||
|
"klanten",
|
||||||
|
"verkoop"
|
||||||
|
],
|
||||||
|
"icon": {
|
||||||
|
"provider": "selfhst",
|
||||||
|
"id": "espocrm"
|
||||||
|
},
|
||||||
|
"version": {
|
||||||
|
"name": "latest"
|
||||||
|
},
|
||||||
|
"categories": [
|
||||||
|
"zakelijk"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"variables": [
|
||||||
|
{
|
||||||
|
"title": "Algemeen",
|
||||||
|
"items": [
|
||||||
|
{
|
||||||
|
"name": "service_name",
|
||||||
|
"type": "str",
|
||||||
|
"title": "Servicenaam",
|
||||||
|
"default": "espocrm",
|
||||||
|
"required": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "port",
|
||||||
|
"type": "int",
|
||||||
|
"title": "Webinterface",
|
||||||
|
"default": 8171,
|
||||||
|
"required": true,
|
||||||
|
"description": "Standaard 80; hier verplaatst omdat die poort al bezet is"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "appdata_dir",
|
||||||
|
"type": "str",
|
||||||
|
"title": "Appdata-map",
|
||||||
|
"default": "/opt/serverup/appdata",
|
||||||
|
"required": true,
|
||||||
|
"description": "Basismap voor de gegevens van deze app"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "timezone",
|
||||||
|
"type": "str",
|
||||||
|
"title": "Tijdzone",
|
||||||
|
"default": "Europe/Amsterdam",
|
||||||
|
"required": true
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "Instellingen",
|
||||||
|
"items": [
|
||||||
|
{
|
||||||
|
"name": "admin_user",
|
||||||
|
"type": "str",
|
||||||
|
"title": "Beheerdersnaam",
|
||||||
|
"default": "admin",
|
||||||
|
"required": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "app_url",
|
||||||
|
"type": "str",
|
||||||
|
"title": "Publiek adres",
|
||||||
|
"default": "http://localhost:8171",
|
||||||
|
"required": true
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "Toegang",
|
||||||
|
"items": [
|
||||||
|
{
|
||||||
|
"name": "db_password",
|
||||||
|
"type": "str",
|
||||||
|
"title": "Databasewachtwoord",
|
||||||
|
"default": "",
|
||||||
|
"required": true,
|
||||||
|
"secret": true,
|
||||||
|
"generate": "auto",
|
||||||
|
"description": "Wordt automatisch ingevuld en in .env bewaard"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "admin_password",
|
||||||
|
"type": "str",
|
||||||
|
"title": "Beheerderswachtwoord",
|
||||||
|
"default": "",
|
||||||
|
"required": true,
|
||||||
|
"secret": true,
|
||||||
|
"eigen_invoer": true
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
services:
|
services:
|
||||||
<< service_name >>:
|
<< service_name >>:
|
||||||
image: codeberg.org/forgejo/forgejo:latest
|
image: codeberg.org/forgejo/forgejo:13
|
||||||
container_name: << service_name >>
|
container_name: << service_name >>
|
||||||
ports:
|
ports:
|
||||||
- "<< port_web >>:3000"
|
- "<< port_web >>:3000"
|
||||||
|
|
|
||||||
33
apps/freescout/files/compose.yaml
Normal file
33
apps/freescout/files/compose.yaml
Normal file
|
|
@ -0,0 +1,33 @@
|
||||||
|
services:
|
||||||
|
<< service_name >>:
|
||||||
|
image: tiredofit/freescout:latest
|
||||||
|
container_name: << service_name >>
|
||||||
|
environment:
|
||||||
|
- TZ=<< timezone >>
|
||||||
|
- SITE_URL=<< app_url >>
|
||||||
|
- DB_TYPE=mariadb
|
||||||
|
- DB_HOST=<< service_name >>-db
|
||||||
|
- DB_NAME=freescout
|
||||||
|
- DB_USER=freescout
|
||||||
|
- DB_PASS=<< db_password >>
|
||||||
|
- ADMIN_EMAIL=<< admin_email >>
|
||||||
|
- ADMIN_PASS=<< admin_password >>
|
||||||
|
- DISPLAY_ERRORS=FALSE
|
||||||
|
volumes:
|
||||||
|
- << appdata_dir >>/<< service_name >>:/data
|
||||||
|
ports:
|
||||||
|
- "<< port >>:80"
|
||||||
|
depends_on:
|
||||||
|
- << service_name >>-db
|
||||||
|
restart: unless-stopped
|
||||||
|
<< service_name >>-db:
|
||||||
|
image: mariadb:11
|
||||||
|
container_name: << service_name >>-db
|
||||||
|
environment:
|
||||||
|
- MARIADB_DATABASE=freescout
|
||||||
|
- MARIADB_USER=freescout
|
||||||
|
- MARIADB_PASSWORD=<< db_password >>
|
||||||
|
- MARIADB_ROOT_PASSWORD=<< db_password >>
|
||||||
|
volumes:
|
||||||
|
- << appdata_dir >>/<< service_name >>-db:/var/lib/mysql
|
||||||
|
restart: unless-stopped
|
||||||
104
apps/freescout/template.json
Normal file
104
apps/freescout/template.json
Normal file
|
|
@ -0,0 +1,104 @@
|
||||||
|
{
|
||||||
|
"kind": "compose",
|
||||||
|
"metadata": {
|
||||||
|
"name": "FreeScout",
|
||||||
|
"description": "Gedeelde postbus voor klantvragen: e-mails worden tickets, met notities en toewijzing per medewerker.",
|
||||||
|
"tags": [
|
||||||
|
"helpdesk",
|
||||||
|
"tickets",
|
||||||
|
"e-mail",
|
||||||
|
"klanten"
|
||||||
|
],
|
||||||
|
"icon": {
|
||||||
|
"provider": "selfhst",
|
||||||
|
"id": "freescout"
|
||||||
|
},
|
||||||
|
"version": {
|
||||||
|
"name": "latest"
|
||||||
|
},
|
||||||
|
"categories": [
|
||||||
|
"zakelijk",
|
||||||
|
"communicatie"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"variables": [
|
||||||
|
{
|
||||||
|
"title": "Algemeen",
|
||||||
|
"items": [
|
||||||
|
{
|
||||||
|
"name": "service_name",
|
||||||
|
"type": "str",
|
||||||
|
"title": "Servicenaam",
|
||||||
|
"default": "freescout",
|
||||||
|
"required": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "port",
|
||||||
|
"type": "int",
|
||||||
|
"title": "Webinterface",
|
||||||
|
"default": 8170,
|
||||||
|
"required": true,
|
||||||
|
"description": "Standaard 80; hier verplaatst omdat die poort al bezet is"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "appdata_dir",
|
||||||
|
"type": "str",
|
||||||
|
"title": "Appdata-map",
|
||||||
|
"default": "/opt/serverup/appdata",
|
||||||
|
"required": true,
|
||||||
|
"description": "Basismap voor de gegevens van deze app"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "timezone",
|
||||||
|
"type": "str",
|
||||||
|
"title": "Tijdzone",
|
||||||
|
"default": "Europe/Amsterdam",
|
||||||
|
"required": true
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "Instellingen",
|
||||||
|
"items": [
|
||||||
|
{
|
||||||
|
"name": "app_url",
|
||||||
|
"type": "str",
|
||||||
|
"title": "Publiek adres",
|
||||||
|
"default": "http://localhost:8170",
|
||||||
|
"required": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "admin_email",
|
||||||
|
"type": "str",
|
||||||
|
"title": "E-mailadres beheerder",
|
||||||
|
"default": "admin@example.com",
|
||||||
|
"required": true
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "Toegang",
|
||||||
|
"items": [
|
||||||
|
{
|
||||||
|
"name": "db_password",
|
||||||
|
"type": "str",
|
||||||
|
"title": "Databasewachtwoord",
|
||||||
|
"default": "",
|
||||||
|
"required": true,
|
||||||
|
"secret": true,
|
||||||
|
"generate": "auto",
|
||||||
|
"description": "Wordt automatisch ingevuld en in .env bewaard"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "admin_password",
|
||||||
|
"type": "str",
|
||||||
|
"title": "Beheerderswachtwoord",
|
||||||
|
"default": "",
|
||||||
|
"required": true,
|
||||||
|
"secret": true,
|
||||||
|
"eigen_invoer": true
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
12
apps/gatus/files/compose.yaml
Normal file
12
apps/gatus/files/compose.yaml
Normal file
|
|
@ -0,0 +1,12 @@
|
||||||
|
services:
|
||||||
|
<< service_name >>:
|
||||||
|
image: twinproduction/gatus:latest
|
||||||
|
container_name: << service_name >>
|
||||||
|
environment:
|
||||||
|
- TZ=<< timezone >>
|
||||||
|
volumes:
|
||||||
|
- << appdata_dir >>/<< service_name >>:/config
|
||||||
|
- ./config.yaml:/config/config.yaml
|
||||||
|
ports:
|
||||||
|
- "<< port >>:8080"
|
||||||
|
restart: unless-stopped
|
||||||
6
apps/gatus/files/config.yaml
Normal file
6
apps/gatus/files/config.yaml
Normal file
|
|
@ -0,0 +1,6 @@
|
||||||
|
endpoints:
|
||||||
|
- name: server-up
|
||||||
|
url: "http://<< service_name >>:8080/health"
|
||||||
|
interval: 60s
|
||||||
|
conditions:
|
||||||
|
- "[STATUS] == 200"
|
||||||
59
apps/gatus/template.json
Normal file
59
apps/gatus/template.json
Normal file
|
|
@ -0,0 +1,59 @@
|
||||||
|
{
|
||||||
|
"kind": "compose",
|
||||||
|
"metadata": {
|
||||||
|
"name": "Gatus",
|
||||||
|
"description": "Bewaakt je diensten en toont per dienst een statuspagina met geschiedenis. Stuurt bericht als iets eruit ligt.",
|
||||||
|
"tags": [
|
||||||
|
"monitoring",
|
||||||
|
"status",
|
||||||
|
"uptime"
|
||||||
|
],
|
||||||
|
"icon": {
|
||||||
|
"provider": "selfhst",
|
||||||
|
"id": "gatus"
|
||||||
|
},
|
||||||
|
"version": {
|
||||||
|
"name": "latest"
|
||||||
|
},
|
||||||
|
"categories": [
|
||||||
|
"monitoring"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"variables": [
|
||||||
|
{
|
||||||
|
"title": "Algemeen",
|
||||||
|
"items": [
|
||||||
|
{
|
||||||
|
"name": "service_name",
|
||||||
|
"type": "str",
|
||||||
|
"title": "Servicenaam",
|
||||||
|
"default": "gatus",
|
||||||
|
"required": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "port",
|
||||||
|
"type": "int",
|
||||||
|
"title": "Webinterface",
|
||||||
|
"default": 8125,
|
||||||
|
"required": true,
|
||||||
|
"description": "Standaard 8080; hier verplaatst omdat die poort al bezet is"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "appdata_dir",
|
||||||
|
"type": "str",
|
||||||
|
"title": "Appdata-map",
|
||||||
|
"default": "/opt/serverup/appdata",
|
||||||
|
"required": true,
|
||||||
|
"description": "Basismap voor de gegevens van deze app"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "timezone",
|
||||||
|
"type": "str",
|
||||||
|
"title": "Tijdzone",
|
||||||
|
"default": "Europe/Amsterdam",
|
||||||
|
"required": true
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
37
apps/ghostfolio/files/compose.yaml
Normal file
37
apps/ghostfolio/files/compose.yaml
Normal file
|
|
@ -0,0 +1,37 @@
|
||||||
|
services:
|
||||||
|
<< service_name >>:
|
||||||
|
image: ghostfolio/ghostfolio:latest
|
||||||
|
container_name: << service_name >>
|
||||||
|
environment:
|
||||||
|
- TZ=<< timezone >>
|
||||||
|
- DATABASE_URL=postgresql://ghostfolio:<< db_password >>@<< service_name >>-db:5432/ghostfolio?sslmode=prefer
|
||||||
|
- REDIS_HOST=<< service_name >>-redis
|
||||||
|
- REDIS_PORT=6379
|
||||||
|
- ACCESS_TOKEN_SALT=<< access_token_salt >>
|
||||||
|
- JWT_SECRET_KEY=<< jwt_secret >>
|
||||||
|
- NODE_ENV=production
|
||||||
|
volumes:
|
||||||
|
- << appdata_dir >>/<< service_name >>:/tmp/ghostfolio
|
||||||
|
ports:
|
||||||
|
- "<< port >>:3333"
|
||||||
|
depends_on:
|
||||||
|
- << service_name >>-db
|
||||||
|
- << service_name >>-redis
|
||||||
|
restart: unless-stopped
|
||||||
|
<< service_name >>-db:
|
||||||
|
image: postgres:16-alpine
|
||||||
|
container_name: << service_name >>-db
|
||||||
|
environment:
|
||||||
|
- POSTGRES_DB=ghostfolio
|
||||||
|
- POSTGRES_USER=ghostfolio
|
||||||
|
- POSTGRES_PASSWORD=<< db_password >>
|
||||||
|
volumes:
|
||||||
|
- << appdata_dir >>/<< service_name >>-db:/var/lib/postgresql/data
|
||||||
|
restart: unless-stopped
|
||||||
|
<< service_name >>-redis:
|
||||||
|
image: valkey/valkey:8-alpine
|
||||||
|
container_name: << service_name >>-redis
|
||||||
|
command: valkey-server --save 60 1
|
||||||
|
volumes:
|
||||||
|
- << appdata_dir >>/<< service_name >>-redis:/data
|
||||||
|
restart: unless-stopped
|
||||||
92
apps/ghostfolio/template.json
Normal file
92
apps/ghostfolio/template.json
Normal file
|
|
@ -0,0 +1,92 @@
|
||||||
|
{
|
||||||
|
"kind": "compose",
|
||||||
|
"metadata": {
|
||||||
|
"name": "Ghostfolio",
|
||||||
|
"description": "Houdt je beleggingen bij over meerdere rekeningen heen, met spreiding, rendement en een tijdlijn.",
|
||||||
|
"tags": [
|
||||||
|
"beleggen",
|
||||||
|
"portefeuille",
|
||||||
|
"financien"
|
||||||
|
],
|
||||||
|
"icon": {
|
||||||
|
"provider": "selfhst",
|
||||||
|
"id": "ghostfolio"
|
||||||
|
},
|
||||||
|
"version": {
|
||||||
|
"name": "latest"
|
||||||
|
},
|
||||||
|
"categories": [
|
||||||
|
"financien"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"variables": [
|
||||||
|
{
|
||||||
|
"title": "Algemeen",
|
||||||
|
"items": [
|
||||||
|
{
|
||||||
|
"name": "service_name",
|
||||||
|
"type": "str",
|
||||||
|
"title": "Servicenaam",
|
||||||
|
"default": "ghostfolio",
|
||||||
|
"required": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "port",
|
||||||
|
"type": "int",
|
||||||
|
"title": "Webinterface",
|
||||||
|
"default": 8144,
|
||||||
|
"required": true,
|
||||||
|
"description": "Standaard 3333; hier verplaatst omdat die poort al bezet is"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "appdata_dir",
|
||||||
|
"type": "str",
|
||||||
|
"title": "Appdata-map",
|
||||||
|
"default": "/opt/serverup/appdata",
|
||||||
|
"required": true,
|
||||||
|
"description": "Basismap voor de gegevens van deze app"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "timezone",
|
||||||
|
"type": "str",
|
||||||
|
"title": "Tijdzone",
|
||||||
|
"default": "Europe/Amsterdam",
|
||||||
|
"required": true
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "Toegang",
|
||||||
|
"items": [
|
||||||
|
{
|
||||||
|
"name": "db_password",
|
||||||
|
"type": "str",
|
||||||
|
"title": "Databasewachtwoord",
|
||||||
|
"default": "",
|
||||||
|
"required": true,
|
||||||
|
"secret": true,
|
||||||
|
"generate": "auto",
|
||||||
|
"description": "Wordt automatisch ingevuld en in .env bewaard"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "access_token_salt",
|
||||||
|
"type": "str",
|
||||||
|
"title": "Salt voor toegangstokens",
|
||||||
|
"default": "",
|
||||||
|
"required": true,
|
||||||
|
"secret": true,
|
||||||
|
"generate": "auto"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "jwt_secret",
|
||||||
|
"type": "str",
|
||||||
|
"title": "JWT-sleutel",
|
||||||
|
"default": "",
|
||||||
|
"required": true,
|
||||||
|
"secret": true,
|
||||||
|
"generate": "auto"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
17
apps/gitea/files/compose.yaml
Normal file
17
apps/gitea/files/compose.yaml
Normal file
|
|
@ -0,0 +1,17 @@
|
||||||
|
services:
|
||||||
|
<< service_name >>:
|
||||||
|
image: gitea/gitea:latest
|
||||||
|
container_name: << service_name >>
|
||||||
|
environment:
|
||||||
|
- TZ=<< timezone >>
|
||||||
|
- USER_UID=<< puid >>
|
||||||
|
- USER_GID=<< pgid >>
|
||||||
|
- GITEA__database__DB_TYPE=sqlite3
|
||||||
|
- GITEA__server__ROOT_URL=<< root_url >>
|
||||||
|
- GITEA__server__SSH_PORT=<< port_ssh >>
|
||||||
|
volumes:
|
||||||
|
- << appdata_dir >>/<< service_name >>:/data
|
||||||
|
ports:
|
||||||
|
- "<< port >>:3000"
|
||||||
|
- "<< port_ssh >>:22"
|
||||||
|
restart: unless-stopped
|
||||||
100
apps/gitea/template.json
Normal file
100
apps/gitea/template.json
Normal file
|
|
@ -0,0 +1,100 @@
|
||||||
|
{
|
||||||
|
"kind": "compose",
|
||||||
|
"metadata": {
|
||||||
|
"name": "Gitea",
|
||||||
|
"description": "Git-hosting met issues, pull requests en een ingebouwde registry. Het project waar Forgejo uit voortkwam.",
|
||||||
|
"tags": [
|
||||||
|
"git",
|
||||||
|
"code",
|
||||||
|
"ontwikkeling"
|
||||||
|
],
|
||||||
|
"icon": {
|
||||||
|
"provider": "selfhst",
|
||||||
|
"id": "gitea"
|
||||||
|
},
|
||||||
|
"version": {
|
||||||
|
"name": "latest"
|
||||||
|
},
|
||||||
|
"categories": [
|
||||||
|
"ontwikkeling"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"variables": [
|
||||||
|
{
|
||||||
|
"title": "Algemeen",
|
||||||
|
"items": [
|
||||||
|
{
|
||||||
|
"name": "service_name",
|
||||||
|
"type": "str",
|
||||||
|
"title": "Servicenaam",
|
||||||
|
"default": "gitea",
|
||||||
|
"required": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "port",
|
||||||
|
"type": "int",
|
||||||
|
"title": "Webinterface",
|
||||||
|
"default": 8159,
|
||||||
|
"required": true,
|
||||||
|
"description": "Standaard 3000; hier verplaatst omdat die poort al bezet is"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "port_ssh",
|
||||||
|
"type": "int",
|
||||||
|
"title": "SSH-poort",
|
||||||
|
"default": 2223,
|
||||||
|
"required": true,
|
||||||
|
"description": "Voor git via ssh"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "appdata_dir",
|
||||||
|
"type": "str",
|
||||||
|
"title": "Appdata-map",
|
||||||
|
"default": "/opt/serverup/appdata",
|
||||||
|
"required": true,
|
||||||
|
"description": "Basismap voor de gegevens van deze app"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "timezone",
|
||||||
|
"type": "str",
|
||||||
|
"title": "Tijdzone",
|
||||||
|
"default": "Europe/Amsterdam",
|
||||||
|
"required": true
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "Gebruiker",
|
||||||
|
"items": [
|
||||||
|
{
|
||||||
|
"name": "puid",
|
||||||
|
"type": "int",
|
||||||
|
"title": "Gebruikers-ID (PUID)",
|
||||||
|
"default": 1000,
|
||||||
|
"required": true,
|
||||||
|
"description": "`id -u` op je server; bepaalt de eigenaar van de bestanden"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "pgid",
|
||||||
|
"type": "int",
|
||||||
|
"title": "Groeps-ID (PGID)",
|
||||||
|
"default": 1000,
|
||||||
|
"required": true
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "Instellingen",
|
||||||
|
"items": [
|
||||||
|
{
|
||||||
|
"name": "root_url",
|
||||||
|
"type": "str",
|
||||||
|
"title": "Publiek adres",
|
||||||
|
"default": "http://localhost:8159/",
|
||||||
|
"required": true,
|
||||||
|
"description": "Met een schuine streep aan het eind"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
13
apps/glance/files/compose.yaml
Normal file
13
apps/glance/files/compose.yaml
Normal file
|
|
@ -0,0 +1,13 @@
|
||||||
|
services:
|
||||||
|
<< service_name >>:
|
||||||
|
image: glanceapp/glance:latest
|
||||||
|
container_name: << service_name >>
|
||||||
|
environment:
|
||||||
|
- TZ=<< timezone >>
|
||||||
|
volumes:
|
||||||
|
- << appdata_dir >>/<< service_name >>:/app/config
|
||||||
|
- /var/run/docker.sock:/var/run/docker.sock:ro
|
||||||
|
- ./glance.yml:/app/config/glance.yml
|
||||||
|
ports:
|
||||||
|
- "<< port >>:8080"
|
||||||
|
restart: unless-stopped
|
||||||
7
apps/glance/files/glance.yml
Normal file
7
apps/glance/files/glance.yml
Normal file
|
|
@ -0,0 +1,7 @@
|
||||||
|
pages:
|
||||||
|
- name: Start
|
||||||
|
columns:
|
||||||
|
- size: full
|
||||||
|
widgets:
|
||||||
|
- type: docker-containers
|
||||||
|
- type: server-stats
|
||||||
59
apps/glance/template.json
Normal file
59
apps/glance/template.json
Normal file
|
|
@ -0,0 +1,59 @@
|
||||||
|
{
|
||||||
|
"kind": "compose",
|
||||||
|
"metadata": {
|
||||||
|
"name": "Glance",
|
||||||
|
"description": "Startpagina die je feeds, servercijfers, weer en agenda's op één scherm zet. Volledig in te richten met een configuratiebestand.",
|
||||||
|
"tags": [
|
||||||
|
"dashboard",
|
||||||
|
"startpagina",
|
||||||
|
"overzicht"
|
||||||
|
],
|
||||||
|
"icon": {
|
||||||
|
"provider": "selfhst",
|
||||||
|
"id": "glance"
|
||||||
|
},
|
||||||
|
"version": {
|
||||||
|
"name": "latest"
|
||||||
|
},
|
||||||
|
"categories": [
|
||||||
|
"beheer"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"variables": [
|
||||||
|
{
|
||||||
|
"title": "Algemeen",
|
||||||
|
"items": [
|
||||||
|
{
|
||||||
|
"name": "service_name",
|
||||||
|
"type": "str",
|
||||||
|
"title": "Servicenaam",
|
||||||
|
"default": "glance",
|
||||||
|
"required": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "port",
|
||||||
|
"type": "int",
|
||||||
|
"title": "Webinterface",
|
||||||
|
"default": 8124,
|
||||||
|
"required": true,
|
||||||
|
"description": "Standaard 8080; hier verplaatst omdat die poort al bezet is"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "appdata_dir",
|
||||||
|
"type": "str",
|
||||||
|
"title": "Appdata-map",
|
||||||
|
"default": "/opt/serverup/appdata",
|
||||||
|
"required": true,
|
||||||
|
"description": "Basismap voor de gegevens van deze app"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "timezone",
|
||||||
|
"type": "str",
|
||||||
|
"title": "Tijdzone",
|
||||||
|
"default": "Europe/Amsterdam",
|
||||||
|
"required": true
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
14
apps/headscale/files/compose.yaml
Normal file
14
apps/headscale/files/compose.yaml
Normal file
|
|
@ -0,0 +1,14 @@
|
||||||
|
services:
|
||||||
|
<< service_name >>:
|
||||||
|
image: headscale/headscale:latest
|
||||||
|
container_name: << service_name >>
|
||||||
|
environment:
|
||||||
|
- TZ=<< timezone >>
|
||||||
|
volumes:
|
||||||
|
- << appdata_dir >>/<< service_name >>:/etc/headscale
|
||||||
|
- << appdata_dir >>/<< service_name >>-lib:/var/lib/headscale
|
||||||
|
- ./config.yaml:/etc/headscale/config.yaml
|
||||||
|
command: serve
|
||||||
|
ports:
|
||||||
|
- "<< port >>:8080"
|
||||||
|
restart: unless-stopped
|
||||||
11
apps/headscale/files/config.yaml
Normal file
11
apps/headscale/files/config.yaml
Normal file
|
|
@ -0,0 +1,11 @@
|
||||||
|
server_url: http://<< server_url >>
|
||||||
|
listen_addr: 0.0.0.0:8080
|
||||||
|
metrics_listen_addr: 127.0.0.1:9090
|
||||||
|
noise:
|
||||||
|
private_key_path: /var/lib/headscale/noise_private.key
|
||||||
|
prefixes:
|
||||||
|
v4: 100.64.0.0/10
|
||||||
|
database:
|
||||||
|
type: sqlite
|
||||||
|
sqlite:
|
||||||
|
path: /var/lib/headscale/db.sqlite
|
||||||
74
apps/headscale/template.json
Normal file
74
apps/headscale/template.json
Normal file
|
|
@ -0,0 +1,74 @@
|
||||||
|
{
|
||||||
|
"kind": "compose",
|
||||||
|
"metadata": {
|
||||||
|
"name": "Headscale",
|
||||||
|
"description": "Eigen coördinatieserver voor Tailscale-clients, zodat je mesh-VPN niet van een externe dienst afhangt. Let op: Zet Headscale niet achter een andere reverse proxy van jezelf zonder websockets door te laten; de clients houden een verbinding open.",
|
||||||
|
"tags": [
|
||||||
|
"vpn",
|
||||||
|
"netwerk",
|
||||||
|
"tailscale",
|
||||||
|
"wireguard"
|
||||||
|
],
|
||||||
|
"icon": {
|
||||||
|
"provider": "selfhst",
|
||||||
|
"id": "headscale"
|
||||||
|
},
|
||||||
|
"version": {
|
||||||
|
"name": "latest"
|
||||||
|
},
|
||||||
|
"categories": [
|
||||||
|
"netwerk",
|
||||||
|
"beveiliging"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"variables": [
|
||||||
|
{
|
||||||
|
"title": "Algemeen",
|
||||||
|
"items": [
|
||||||
|
{
|
||||||
|
"name": "service_name",
|
||||||
|
"type": "str",
|
||||||
|
"title": "Servicenaam",
|
||||||
|
"default": "headscale",
|
||||||
|
"required": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "port",
|
||||||
|
"type": "int",
|
||||||
|
"title": "Webinterface",
|
||||||
|
"default": 8128,
|
||||||
|
"required": true,
|
||||||
|
"description": "Standaard 8080; hier verplaatst omdat die poort al bezet is"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "appdata_dir",
|
||||||
|
"type": "str",
|
||||||
|
"title": "Appdata-map",
|
||||||
|
"default": "/opt/serverup/appdata",
|
||||||
|
"required": true,
|
||||||
|
"description": "Basismap voor de gegevens van deze app"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "timezone",
|
||||||
|
"type": "str",
|
||||||
|
"title": "Tijdzone",
|
||||||
|
"default": "Europe/Amsterdam",
|
||||||
|
"required": true
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "Instellingen",
|
||||||
|
"items": [
|
||||||
|
{
|
||||||
|
"name": "server_url",
|
||||||
|
"type": "str",
|
||||||
|
"title": "Publiek adres",
|
||||||
|
"default": "headscale.example.com:8128",
|
||||||
|
"required": true,
|
||||||
|
"description": "Het adres waarop je clients Headscale bereiken"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
13
apps/homebox/files/compose.yaml
Normal file
13
apps/homebox/files/compose.yaml
Normal file
|
|
@ -0,0 +1,13 @@
|
||||||
|
services:
|
||||||
|
<< service_name >>:
|
||||||
|
image: ghcr.io/sysadminsmedia/homebox:latest
|
||||||
|
container_name: << service_name >>
|
||||||
|
environment:
|
||||||
|
- TZ=<< timezone >>
|
||||||
|
- HBOX_LOG_LEVEL=info
|
||||||
|
- HBOX_OPTIONS_ALLOW_REGISTRATION=false
|
||||||
|
volumes:
|
||||||
|
- << appdata_dir >>/<< service_name >>:/data
|
||||||
|
ports:
|
||||||
|
- "<< port >>:7745"
|
||||||
|
restart: unless-stopped
|
||||||
59
apps/homebox/template.json
Normal file
59
apps/homebox/template.json
Normal file
|
|
@ -0,0 +1,59 @@
|
||||||
|
{
|
||||||
|
"kind": "compose",
|
||||||
|
"metadata": {
|
||||||
|
"name": "Homebox",
|
||||||
|
"description": "Houdt bij wat je in huis hebt: waar het ligt, wat het kostte, wanneer de garantie afloopt. Met etiketten en QR-codes.",
|
||||||
|
"tags": [
|
||||||
|
"inventaris",
|
||||||
|
"huishouden",
|
||||||
|
"spullen"
|
||||||
|
],
|
||||||
|
"icon": {
|
||||||
|
"provider": "selfhst",
|
||||||
|
"id": "homebox"
|
||||||
|
},
|
||||||
|
"version": {
|
||||||
|
"name": "latest"
|
||||||
|
},
|
||||||
|
"categories": [
|
||||||
|
"gezin"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"variables": [
|
||||||
|
{
|
||||||
|
"title": "Algemeen",
|
||||||
|
"items": [
|
||||||
|
{
|
||||||
|
"name": "service_name",
|
||||||
|
"type": "str",
|
||||||
|
"title": "Servicenaam",
|
||||||
|
"default": "homebox",
|
||||||
|
"required": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "port",
|
||||||
|
"type": "int",
|
||||||
|
"title": "Webinterface",
|
||||||
|
"default": 8149,
|
||||||
|
"required": true,
|
||||||
|
"description": "Standaard 7745; hier verplaatst omdat die poort al bezet is"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "appdata_dir",
|
||||||
|
"type": "str",
|
||||||
|
"title": "Appdata-map",
|
||||||
|
"default": "/opt/serverup/appdata",
|
||||||
|
"required": true,
|
||||||
|
"description": "Basismap voor de gegevens van deze app"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "timezone",
|
||||||
|
"type": "str",
|
||||||
|
"title": "Tijdzone",
|
||||||
|
"default": "Europe/Amsterdam",
|
||||||
|
"required": true
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
12
apps/kiwix/files/compose.yaml
Normal file
12
apps/kiwix/files/compose.yaml
Normal file
|
|
@ -0,0 +1,12 @@
|
||||||
|
services:
|
||||||
|
<< service_name >>:
|
||||||
|
image: ghcr.io/kiwix/kiwix-serve:latest
|
||||||
|
container_name: << service_name >>
|
||||||
|
environment:
|
||||||
|
- TZ=<< timezone >>
|
||||||
|
volumes:
|
||||||
|
- << appdata_dir >>/<< service_name >>:/data
|
||||||
|
command: "*.zim"
|
||||||
|
ports:
|
||||||
|
- "<< port >>:8080"
|
||||||
|
restart: unless-stopped
|
||||||
59
apps/kiwix/template.json
Normal file
59
apps/kiwix/template.json
Normal file
|
|
@ -0,0 +1,59 @@
|
||||||
|
{
|
||||||
|
"kind": "compose",
|
||||||
|
"metadata": {
|
||||||
|
"name": "Kiwix",
|
||||||
|
"description": "Serveert offline kopieën van Wikipedia, Stack Overflow en meer uit zim-bestanden. Werkt zonder internet. Let op: Zet eerst een of meer .zim-bestanden in de datamap; download ze op library.kiwix.org. Zonder bestand start de container niet.",
|
||||||
|
"tags": [
|
||||||
|
"offline",
|
||||||
|
"wikipedia",
|
||||||
|
"naslag"
|
||||||
|
],
|
||||||
|
"icon": {
|
||||||
|
"provider": "selfhst",
|
||||||
|
"id": "kiwix"
|
||||||
|
},
|
||||||
|
"version": {
|
||||||
|
"name": "latest"
|
||||||
|
},
|
||||||
|
"categories": [
|
||||||
|
"documenten"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"variables": [
|
||||||
|
{
|
||||||
|
"title": "Algemeen",
|
||||||
|
"items": [
|
||||||
|
{
|
||||||
|
"name": "service_name",
|
||||||
|
"type": "str",
|
||||||
|
"title": "Servicenaam",
|
||||||
|
"default": "kiwix",
|
||||||
|
"required": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "port",
|
||||||
|
"type": "int",
|
||||||
|
"title": "Webinterface",
|
||||||
|
"default": 8158,
|
||||||
|
"required": true,
|
||||||
|
"description": "Standaard 8080; hier verplaatst omdat die poort al bezet is"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "appdata_dir",
|
||||||
|
"type": "str",
|
||||||
|
"title": "Appdata-map",
|
||||||
|
"default": "/opt/serverup/appdata",
|
||||||
|
"required": true,
|
||||||
|
"description": "Basismap voor de gegevens van deze app"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "timezone",
|
||||||
|
"type": "str",
|
||||||
|
"title": "Tijdzone",
|
||||||
|
"default": "Europe/Amsterdam",
|
||||||
|
"required": true
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
30
apps/leantime/files/compose.yaml
Normal file
30
apps/leantime/files/compose.yaml
Normal file
|
|
@ -0,0 +1,30 @@
|
||||||
|
services:
|
||||||
|
<< service_name >>:
|
||||||
|
image: leantime/leantime:latest
|
||||||
|
container_name: << service_name >>
|
||||||
|
environment:
|
||||||
|
- TZ=<< timezone >>
|
||||||
|
- LEAN_DB_HOST=<< service_name >>-db
|
||||||
|
- LEAN_DB_USER=leantime
|
||||||
|
- LEAN_DB_PASSWORD=<< db_password >>
|
||||||
|
- LEAN_DB_DATABASE=leantime
|
||||||
|
- LEAN_APP_URL=<< app_url >>
|
||||||
|
- LEAN_SESSION_PASSWORD=<< session_password >>
|
||||||
|
volumes:
|
||||||
|
- << appdata_dir >>/<< service_name >>:/var/www/html/public/userfiles
|
||||||
|
ports:
|
||||||
|
- "<< port >>:8080"
|
||||||
|
depends_on:
|
||||||
|
- << service_name >>-db
|
||||||
|
restart: unless-stopped
|
||||||
|
<< service_name >>-db:
|
||||||
|
image: mariadb:11
|
||||||
|
container_name: << service_name >>-db
|
||||||
|
environment:
|
||||||
|
- MARIADB_DATABASE=leantime
|
||||||
|
- MARIADB_USER=leantime
|
||||||
|
- MARIADB_PASSWORD=<< db_password >>
|
||||||
|
- MARIADB_ROOT_PASSWORD=<< db_password >>
|
||||||
|
volumes:
|
||||||
|
- << appdata_dir >>/<< service_name >>-db:/var/lib/mysql
|
||||||
|
restart: unless-stopped
|
||||||
96
apps/leantime/template.json
Normal file
96
apps/leantime/template.json
Normal file
|
|
@ -0,0 +1,96 @@
|
||||||
|
{
|
||||||
|
"kind": "compose",
|
||||||
|
"metadata": {
|
||||||
|
"name": "Leantime",
|
||||||
|
"description": "Projectbeheer voor kleine teams: doelen, taken, tijdregistratie en een planbord, zonder de overdaad van de grote pakketten.",
|
||||||
|
"tags": [
|
||||||
|
"projecten",
|
||||||
|
"taken",
|
||||||
|
"planning"
|
||||||
|
],
|
||||||
|
"icon": {
|
||||||
|
"provider": "selfhst",
|
||||||
|
"id": "leantime"
|
||||||
|
},
|
||||||
|
"version": {
|
||||||
|
"name": "latest"
|
||||||
|
},
|
||||||
|
"categories": [
|
||||||
|
"productiviteit",
|
||||||
|
"zakelijk"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"variables": [
|
||||||
|
{
|
||||||
|
"title": "Algemeen",
|
||||||
|
"items": [
|
||||||
|
{
|
||||||
|
"name": "service_name",
|
||||||
|
"type": "str",
|
||||||
|
"title": "Servicenaam",
|
||||||
|
"default": "leantime",
|
||||||
|
"required": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "port",
|
||||||
|
"type": "int",
|
||||||
|
"title": "Webinterface",
|
||||||
|
"default": 8173,
|
||||||
|
"required": true,
|
||||||
|
"description": "Standaard 8080; hier verplaatst omdat die poort al bezet is"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "appdata_dir",
|
||||||
|
"type": "str",
|
||||||
|
"title": "Appdata-map",
|
||||||
|
"default": "/opt/serverup/appdata",
|
||||||
|
"required": true,
|
||||||
|
"description": "Basismap voor de gegevens van deze app"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "timezone",
|
||||||
|
"type": "str",
|
||||||
|
"title": "Tijdzone",
|
||||||
|
"default": "Europe/Amsterdam",
|
||||||
|
"required": true
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "Instellingen",
|
||||||
|
"items": [
|
||||||
|
{
|
||||||
|
"name": "app_url",
|
||||||
|
"type": "str",
|
||||||
|
"title": "Publiek adres",
|
||||||
|
"default": "http://localhost:8173",
|
||||||
|
"required": true
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "Toegang",
|
||||||
|
"items": [
|
||||||
|
{
|
||||||
|
"name": "db_password",
|
||||||
|
"type": "str",
|
||||||
|
"title": "Databasewachtwoord",
|
||||||
|
"default": "",
|
||||||
|
"required": true,
|
||||||
|
"secret": true,
|
||||||
|
"generate": "auto",
|
||||||
|
"description": "Wordt automatisch ingevuld en in .env bewaard"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "session_password",
|
||||||
|
"type": "str",
|
||||||
|
"title": "Sleutel voor de sessies",
|
||||||
|
"default": "",
|
||||||
|
"required": true,
|
||||||
|
"secret": true,
|
||||||
|
"generate": "auto"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
29
apps/librechat/files/compose.yaml
Normal file
29
apps/librechat/files/compose.yaml
Normal file
|
|
@ -0,0 +1,29 @@
|
||||||
|
services:
|
||||||
|
<< service_name >>:
|
||||||
|
image: ghcr.io/danny-avila/librechat:latest
|
||||||
|
container_name: << service_name >>
|
||||||
|
environment:
|
||||||
|
- TZ=<< timezone >>
|
||||||
|
- HOST=0.0.0.0
|
||||||
|
- PORT=3080
|
||||||
|
- MONGO_URI=mongodb://app:<< db_password >>@<< service_name >>-db:27017/LibreChat?authSource=admin
|
||||||
|
- CREDS_KEY=<< creds_key >>
|
||||||
|
- CREDS_IV=<< creds_iv >>
|
||||||
|
- JWT_SECRET=<< jwt_secret >>
|
||||||
|
- JWT_REFRESH_SECRET=<< jwt_refresh_secret >>
|
||||||
|
volumes:
|
||||||
|
- << appdata_dir >>/<< service_name >>:/app/client/public/images
|
||||||
|
ports:
|
||||||
|
- "<< port >>:3080"
|
||||||
|
depends_on:
|
||||||
|
- << service_name >>-db
|
||||||
|
restart: unless-stopped
|
||||||
|
<< service_name >>-db:
|
||||||
|
image: mongo:8
|
||||||
|
container_name: << service_name >>-db
|
||||||
|
environment:
|
||||||
|
- MONGO_INITDB_ROOT_USERNAME=app
|
||||||
|
- MONGO_INITDB_ROOT_PASSWORD=<< db_password >>
|
||||||
|
volumes:
|
||||||
|
- << appdata_dir >>/<< service_name >>-db:/data/db
|
||||||
|
restart: unless-stopped
|
||||||
110
apps/librechat/template.json
Normal file
110
apps/librechat/template.json
Normal file
|
|
@ -0,0 +1,110 @@
|
||||||
|
{
|
||||||
|
"kind": "compose",
|
||||||
|
"metadata": {
|
||||||
|
"name": "LibreChat",
|
||||||
|
"description": "Chatinterface voor meerdere AI-aanbieders tegelijk, met gesprekken, presets en gedeelde prompts.",
|
||||||
|
"tags": [
|
||||||
|
"ai",
|
||||||
|
"llm",
|
||||||
|
"chat"
|
||||||
|
],
|
||||||
|
"icon": {
|
||||||
|
"provider": "selfhst",
|
||||||
|
"id": "librechat"
|
||||||
|
},
|
||||||
|
"version": {
|
||||||
|
"name": "latest"
|
||||||
|
},
|
||||||
|
"categories": [
|
||||||
|
"ai"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"variables": [
|
||||||
|
{
|
||||||
|
"title": "Algemeen",
|
||||||
|
"items": [
|
||||||
|
{
|
||||||
|
"name": "service_name",
|
||||||
|
"type": "str",
|
||||||
|
"title": "Servicenaam",
|
||||||
|
"default": "librechat",
|
||||||
|
"required": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "port",
|
||||||
|
"type": "int",
|
||||||
|
"title": "Webinterface",
|
||||||
|
"default": 8141,
|
||||||
|
"required": true,
|
||||||
|
"description": "Standaard 3080; hier verplaatst omdat die poort al bezet is"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "appdata_dir",
|
||||||
|
"type": "str",
|
||||||
|
"title": "Appdata-map",
|
||||||
|
"default": "/opt/serverup/appdata",
|
||||||
|
"required": true,
|
||||||
|
"description": "Basismap voor de gegevens van deze app"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "timezone",
|
||||||
|
"type": "str",
|
||||||
|
"title": "Tijdzone",
|
||||||
|
"default": "Europe/Amsterdam",
|
||||||
|
"required": true
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "Toegang",
|
||||||
|
"items": [
|
||||||
|
{
|
||||||
|
"name": "db_password",
|
||||||
|
"type": "str",
|
||||||
|
"title": "Databasewachtwoord",
|
||||||
|
"default": "",
|
||||||
|
"required": true,
|
||||||
|
"secret": true,
|
||||||
|
"generate": "auto",
|
||||||
|
"description": "Wordt automatisch ingevuld en in .env bewaard"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "creds_key",
|
||||||
|
"type": "str",
|
||||||
|
"title": "Sleutel voor opgeslagen gegevens",
|
||||||
|
"default": "",
|
||||||
|
"required": true,
|
||||||
|
"secret": true,
|
||||||
|
"generate": "auto"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "creds_iv",
|
||||||
|
"type": "str",
|
||||||
|
"title": "Beginwaarde voor de versleuteling",
|
||||||
|
"default": "",
|
||||||
|
"required": true,
|
||||||
|
"secret": true,
|
||||||
|
"generate": "auto"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "jwt_secret",
|
||||||
|
"type": "str",
|
||||||
|
"title": "JWT-sleutel",
|
||||||
|
"default": "",
|
||||||
|
"required": true,
|
||||||
|
"secret": true,
|
||||||
|
"generate": "auto"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "jwt_refresh_secret",
|
||||||
|
"type": "str",
|
||||||
|
"title": "JWT-vernieuwsleutel",
|
||||||
|
"default": "",
|
||||||
|
"required": true,
|
||||||
|
"secret": true,
|
||||||
|
"generate": "auto"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
33
apps/listmonk/files/compose.yaml
Normal file
33
apps/listmonk/files/compose.yaml
Normal file
|
|
@ -0,0 +1,33 @@
|
||||||
|
services:
|
||||||
|
<< service_name >>:
|
||||||
|
image: listmonk/listmonk:latest
|
||||||
|
container_name: << service_name >>
|
||||||
|
environment:
|
||||||
|
- TZ=<< timezone >>
|
||||||
|
- LISTMONK_app__address=0.0.0.0:9000
|
||||||
|
- LISTMONK_db__host=<< service_name >>-db
|
||||||
|
- LISTMONK_db__port=5432
|
||||||
|
- LISTMONK_db__user=listmonk
|
||||||
|
- LISTMONK_db__password=<< db_password >>
|
||||||
|
- LISTMONK_db__database=listmonk
|
||||||
|
- LISTMONK_db__ssl_mode=disable
|
||||||
|
- LISTMONK_app__admin_username=<< admin_user >>
|
||||||
|
- LISTMONK_app__admin_password=<< admin_password >>
|
||||||
|
volumes:
|
||||||
|
- << appdata_dir >>/<< service_name >>:/listmonk/uploads
|
||||||
|
command: sh -c "./listmonk --install --idempotent --yes --config '' && ./listmonk --config ''"
|
||||||
|
ports:
|
||||||
|
- "<< port >>:9000"
|
||||||
|
depends_on:
|
||||||
|
- << service_name >>-db
|
||||||
|
restart: unless-stopped
|
||||||
|
<< service_name >>-db:
|
||||||
|
image: postgres:16-alpine
|
||||||
|
container_name: << service_name >>-db
|
||||||
|
environment:
|
||||||
|
- POSTGRES_DB=listmonk
|
||||||
|
- POSTGRES_USER=listmonk
|
||||||
|
- POSTGRES_PASSWORD=<< db_password >>
|
||||||
|
volumes:
|
||||||
|
- << appdata_dir >>/<< service_name >>-db:/var/lib/postgresql/data
|
||||||
|
restart: unless-stopped
|
||||||
97
apps/listmonk/template.json
Normal file
97
apps/listmonk/template.json
Normal file
|
|
@ -0,0 +1,97 @@
|
||||||
|
{
|
||||||
|
"kind": "compose",
|
||||||
|
"metadata": {
|
||||||
|
"name": "Listmonk",
|
||||||
|
"description": "Nieuwsbrieven en mailinglijsten versturen, met sjablonen, segmenten en statistieken per campagne.",
|
||||||
|
"tags": [
|
||||||
|
"nieuwsbrief",
|
||||||
|
"e-mail",
|
||||||
|
"campagnes"
|
||||||
|
],
|
||||||
|
"icon": {
|
||||||
|
"provider": "selfhst",
|
||||||
|
"id": "listmonk"
|
||||||
|
},
|
||||||
|
"version": {
|
||||||
|
"name": "latest"
|
||||||
|
},
|
||||||
|
"categories": [
|
||||||
|
"communicatie",
|
||||||
|
"zakelijk"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"variables": [
|
||||||
|
{
|
||||||
|
"title": "Algemeen",
|
||||||
|
"items": [
|
||||||
|
{
|
||||||
|
"name": "service_name",
|
||||||
|
"type": "str",
|
||||||
|
"title": "Servicenaam",
|
||||||
|
"default": "listmonk",
|
||||||
|
"required": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "port",
|
||||||
|
"type": "int",
|
||||||
|
"title": "Webinterface",
|
||||||
|
"default": 8137,
|
||||||
|
"required": true,
|
||||||
|
"description": "Standaard 9000; hier verplaatst omdat die poort al bezet is"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "appdata_dir",
|
||||||
|
"type": "str",
|
||||||
|
"title": "Appdata-map",
|
||||||
|
"default": "/opt/serverup/appdata",
|
||||||
|
"required": true,
|
||||||
|
"description": "Basismap voor de gegevens van deze app"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "timezone",
|
||||||
|
"type": "str",
|
||||||
|
"title": "Tijdzone",
|
||||||
|
"default": "Europe/Amsterdam",
|
||||||
|
"required": true
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "Instellingen",
|
||||||
|
"items": [
|
||||||
|
{
|
||||||
|
"name": "admin_user",
|
||||||
|
"type": "str",
|
||||||
|
"title": "Beheerdersnaam",
|
||||||
|
"default": "admin",
|
||||||
|
"required": true
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "Toegang",
|
||||||
|
"items": [
|
||||||
|
{
|
||||||
|
"name": "db_password",
|
||||||
|
"type": "str",
|
||||||
|
"title": "Databasewachtwoord",
|
||||||
|
"default": "",
|
||||||
|
"required": true,
|
||||||
|
"secret": true,
|
||||||
|
"generate": "auto",
|
||||||
|
"description": "Wordt automatisch ingevuld en in .env bewaard"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "admin_password",
|
||||||
|
"type": "str",
|
||||||
|
"title": "Beheerderswachtwoord",
|
||||||
|
"default": "",
|
||||||
|
"required": true,
|
||||||
|
"secret": true,
|
||||||
|
"eigen_invoer": true,
|
||||||
|
"description": "Minimaal 8 tekens"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
13
apps/localai/files/compose.yaml
Normal file
13
apps/localai/files/compose.yaml
Normal file
|
|
@ -0,0 +1,13 @@
|
||||||
|
services:
|
||||||
|
<< service_name >>:
|
||||||
|
image: localai/localai:latest
|
||||||
|
container_name: << service_name >>
|
||||||
|
environment:
|
||||||
|
- TZ=<< timezone >>
|
||||||
|
- MODELS_PATH=/models
|
||||||
|
- THREADS=4
|
||||||
|
volumes:
|
||||||
|
- << appdata_dir >>/<< service_name >>:/models
|
||||||
|
ports:
|
||||||
|
- "<< port >>:8080"
|
||||||
|
restart: unless-stopped
|
||||||
59
apps/localai/template.json
Normal file
59
apps/localai/template.json
Normal file
|
|
@ -0,0 +1,59 @@
|
||||||
|
{
|
||||||
|
"kind": "compose",
|
||||||
|
"metadata": {
|
||||||
|
"name": "LocalAI",
|
||||||
|
"description": "Draait taalmodellen lokaal achter een API die dezelfde vorm heeft als die van OpenAI, zodat bestaande tools er zo op aansluiten.",
|
||||||
|
"tags": [
|
||||||
|
"ai",
|
||||||
|
"llm",
|
||||||
|
"api"
|
||||||
|
],
|
||||||
|
"icon": {
|
||||||
|
"provider": "selfhst",
|
||||||
|
"id": "localai"
|
||||||
|
},
|
||||||
|
"version": {
|
||||||
|
"name": "latest"
|
||||||
|
},
|
||||||
|
"categories": [
|
||||||
|
"ai"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"variables": [
|
||||||
|
{
|
||||||
|
"title": "Algemeen",
|
||||||
|
"items": [
|
||||||
|
{
|
||||||
|
"name": "service_name",
|
||||||
|
"type": "str",
|
||||||
|
"title": "Servicenaam",
|
||||||
|
"default": "localai",
|
||||||
|
"required": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "port",
|
||||||
|
"type": "int",
|
||||||
|
"title": "Webinterface",
|
||||||
|
"default": 8143,
|
||||||
|
"required": true,
|
||||||
|
"description": "Standaard 8080; hier verplaatst omdat die poort al bezet is"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "appdata_dir",
|
||||||
|
"type": "str",
|
||||||
|
"title": "Appdata-map",
|
||||||
|
"default": "/opt/serverup/appdata",
|
||||||
|
"required": true,
|
||||||
|
"description": "Basismap voor de gegevens van deze app"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "timezone",
|
||||||
|
"type": "str",
|
||||||
|
"title": "Tijdzone",
|
||||||
|
"default": "Europe/Amsterdam",
|
||||||
|
"required": true
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
15
apps/lychee/files/compose.yaml
Normal file
15
apps/lychee/files/compose.yaml
Normal file
|
|
@ -0,0 +1,15 @@
|
||||||
|
services:
|
||||||
|
<< service_name >>:
|
||||||
|
image: lycheeorg/lychee:latest
|
||||||
|
container_name: << service_name >>
|
||||||
|
environment:
|
||||||
|
- DB_CONNECTION=sqlite
|
||||||
|
- APP_URL=<< app_url >>
|
||||||
|
- TIMEZONE=<< timezone >>
|
||||||
|
volumes:
|
||||||
|
- << appdata_dir >>/<< service_name >>:/conf
|
||||||
|
- << appdata_dir >>/<< service_name >>-uploads:/uploads
|
||||||
|
- << appdata_dir >>/<< service_name >>-sym:/sym
|
||||||
|
ports:
|
||||||
|
- "<< port >>:80"
|
||||||
|
restart: unless-stopped
|
||||||
71
apps/lychee/template.json
Normal file
71
apps/lychee/template.json
Normal file
|
|
@ -0,0 +1,71 @@
|
||||||
|
{
|
||||||
|
"kind": "compose",
|
||||||
|
"metadata": {
|
||||||
|
"name": "Lychee",
|
||||||
|
"description": "Fotoalbums die je kunt delen, met wachtwoorden per album en een importmap. Lichter dan Immich als je geen telefoonsynchronisatie nodig hebt.",
|
||||||
|
"tags": [
|
||||||
|
"fotos",
|
||||||
|
"albums",
|
||||||
|
"delen"
|
||||||
|
],
|
||||||
|
"icon": {
|
||||||
|
"provider": "selfhst",
|
||||||
|
"id": "lychee"
|
||||||
|
},
|
||||||
|
"version": {
|
||||||
|
"name": "latest"
|
||||||
|
},
|
||||||
|
"categories": [
|
||||||
|
"fotos"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"variables": [
|
||||||
|
{
|
||||||
|
"title": "Algemeen",
|
||||||
|
"items": [
|
||||||
|
{
|
||||||
|
"name": "service_name",
|
||||||
|
"type": "str",
|
||||||
|
"title": "Servicenaam",
|
||||||
|
"default": "lychee",
|
||||||
|
"required": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "port",
|
||||||
|
"type": "int",
|
||||||
|
"title": "Webinterface",
|
||||||
|
"default": 8147,
|
||||||
|
"required": true,
|
||||||
|
"description": "Standaard 80; hier verplaatst omdat die poort al bezet is"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "appdata_dir",
|
||||||
|
"type": "str",
|
||||||
|
"title": "Appdata-map",
|
||||||
|
"default": "/opt/serverup/appdata",
|
||||||
|
"required": true,
|
||||||
|
"description": "Basismap voor de gegevens van deze app"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "timezone",
|
||||||
|
"type": "str",
|
||||||
|
"title": "Tijdzone",
|
||||||
|
"default": "Europe/Amsterdam",
|
||||||
|
"required": true
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "Instellingen",
|
||||||
|
"items": [
|
||||||
|
{
|
||||||
|
"name": "app_url",
|
||||||
|
"type": "str",
|
||||||
|
"title": "Publiek adres",
|
||||||
|
"default": "http://localhost:8147",
|
||||||
|
"required": true
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
28
apps/matomo/files/compose.yaml
Normal file
28
apps/matomo/files/compose.yaml
Normal file
|
|
@ -0,0 +1,28 @@
|
||||||
|
services:
|
||||||
|
<< service_name >>:
|
||||||
|
image: matomo:latest
|
||||||
|
container_name: << service_name >>
|
||||||
|
environment:
|
||||||
|
- TZ=<< timezone >>
|
||||||
|
- MATOMO_DATABASE_HOST=<< service_name >>-db
|
||||||
|
- MATOMO_DATABASE_USERNAME=matomo
|
||||||
|
- MATOMO_DATABASE_PASSWORD=<< db_password >>
|
||||||
|
- MATOMO_DATABASE_DBNAME=matomo
|
||||||
|
volumes:
|
||||||
|
- << appdata_dir >>/<< service_name >>:/var/www/html
|
||||||
|
ports:
|
||||||
|
- "<< port >>:80"
|
||||||
|
depends_on:
|
||||||
|
- << service_name >>-db
|
||||||
|
restart: unless-stopped
|
||||||
|
<< service_name >>-db:
|
||||||
|
image: mariadb:11
|
||||||
|
container_name: << service_name >>-db
|
||||||
|
environment:
|
||||||
|
- MARIADB_DATABASE=matomo
|
||||||
|
- MARIADB_USER=matomo
|
||||||
|
- MARIADB_PASSWORD=<< db_password >>
|
||||||
|
- MARIADB_ROOT_PASSWORD=<< db_password >>
|
||||||
|
volumes:
|
||||||
|
- << appdata_dir >>/<< service_name >>-db:/var/lib/mysql
|
||||||
|
restart: unless-stopped
|
||||||
74
apps/matomo/template.json
Normal file
74
apps/matomo/template.json
Normal file
|
|
@ -0,0 +1,74 @@
|
||||||
|
{
|
||||||
|
"kind": "compose",
|
||||||
|
"metadata": {
|
||||||
|
"name": "Matomo",
|
||||||
|
"description": "Uitgebreide webstatistieken met trechters, doelen en heatmaps, waarbij de gegevens bij jou blijven.",
|
||||||
|
"tags": [
|
||||||
|
"analytics",
|
||||||
|
"bezoekers",
|
||||||
|
"privacy"
|
||||||
|
],
|
||||||
|
"icon": {
|
||||||
|
"provider": "selfhst",
|
||||||
|
"id": "matomo"
|
||||||
|
},
|
||||||
|
"version": {
|
||||||
|
"name": "latest"
|
||||||
|
},
|
||||||
|
"categories": [
|
||||||
|
"analytics"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"variables": [
|
||||||
|
{
|
||||||
|
"title": "Algemeen",
|
||||||
|
"items": [
|
||||||
|
{
|
||||||
|
"name": "service_name",
|
||||||
|
"type": "str",
|
||||||
|
"title": "Servicenaam",
|
||||||
|
"default": "matomo",
|
||||||
|
"required": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "port",
|
||||||
|
"type": "int",
|
||||||
|
"title": "Webinterface",
|
||||||
|
"default": 8168,
|
||||||
|
"required": true,
|
||||||
|
"description": "Standaard 80; hier verplaatst omdat die poort al bezet is"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "appdata_dir",
|
||||||
|
"type": "str",
|
||||||
|
"title": "Appdata-map",
|
||||||
|
"default": "/opt/serverup/appdata",
|
||||||
|
"required": true,
|
||||||
|
"description": "Basismap voor de gegevens van deze app"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "timezone",
|
||||||
|
"type": "str",
|
||||||
|
"title": "Tijdzone",
|
||||||
|
"default": "Europe/Amsterdam",
|
||||||
|
"required": true
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "Toegang",
|
||||||
|
"items": [
|
||||||
|
{
|
||||||
|
"name": "db_password",
|
||||||
|
"type": "str",
|
||||||
|
"title": "Databasewachtwoord",
|
||||||
|
"default": "",
|
||||||
|
"required": true,
|
||||||
|
"secret": true,
|
||||||
|
"generate": "auto",
|
||||||
|
"description": "Wordt automatisch ingevuld en in .env bewaard"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
29
apps/mattermost/files/compose.yaml
Normal file
29
apps/mattermost/files/compose.yaml
Normal file
|
|
@ -0,0 +1,29 @@
|
||||||
|
services:
|
||||||
|
<< service_name >>:
|
||||||
|
image: mattermost/mattermost-team-edition:latest
|
||||||
|
container_name: << service_name >>
|
||||||
|
environment:
|
||||||
|
- TZ=<< timezone >>
|
||||||
|
- MM_SQLSETTINGS_DRIVERNAME=postgres
|
||||||
|
- MM_SQLSETTINGS_DATASOURCE=postgres://mattermost:<< db_password >>@<< service_name >>-db:5432/mattermost?sslmode=disable
|
||||||
|
- MM_SERVICESETTINGS_SITEURL=<< site_url >>
|
||||||
|
volumes:
|
||||||
|
- << appdata_dir >>/<< service_name >>:/mattermost/config
|
||||||
|
- << appdata_dir >>/<< service_name >>-data:/mattermost/data
|
||||||
|
- << appdata_dir >>/<< service_name >>-logs:/mattermost/logs
|
||||||
|
- << appdata_dir >>/<< service_name >>-plugins:/mattermost/plugins
|
||||||
|
ports:
|
||||||
|
- "<< port >>:8065"
|
||||||
|
depends_on:
|
||||||
|
- << service_name >>-db
|
||||||
|
restart: unless-stopped
|
||||||
|
<< service_name >>-db:
|
||||||
|
image: postgres:16-alpine
|
||||||
|
container_name: << service_name >>-db
|
||||||
|
environment:
|
||||||
|
- POSTGRES_DB=mattermost
|
||||||
|
- POSTGRES_USER=mattermost
|
||||||
|
- POSTGRES_PASSWORD=<< db_password >>
|
||||||
|
volumes:
|
||||||
|
- << appdata_dir >>/<< service_name >>-db:/var/lib/postgresql/data
|
||||||
|
restart: unless-stopped
|
||||||
88
apps/mattermost/template.json
Normal file
88
apps/mattermost/template.json
Normal file
|
|
@ -0,0 +1,88 @@
|
||||||
|
{
|
||||||
|
"kind": "compose",
|
||||||
|
"metadata": {
|
||||||
|
"name": "Mattermost",
|
||||||
|
"description": "Teamchat in kanalen, met threads, zoeken en koppelingen. Het zelfgehoste alternatief voor Slack.",
|
||||||
|
"tags": [
|
||||||
|
"chat",
|
||||||
|
"team",
|
||||||
|
"communicatie"
|
||||||
|
],
|
||||||
|
"icon": {
|
||||||
|
"provider": "selfhst",
|
||||||
|
"id": "mattermost"
|
||||||
|
},
|
||||||
|
"version": {
|
||||||
|
"name": "latest"
|
||||||
|
},
|
||||||
|
"categories": [
|
||||||
|
"communicatie",
|
||||||
|
"productiviteit"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"variables": [
|
||||||
|
{
|
||||||
|
"title": "Algemeen",
|
||||||
|
"items": [
|
||||||
|
{
|
||||||
|
"name": "service_name",
|
||||||
|
"type": "str",
|
||||||
|
"title": "Servicenaam",
|
||||||
|
"default": "mattermost",
|
||||||
|
"required": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "port",
|
||||||
|
"type": "int",
|
||||||
|
"title": "Webinterface",
|
||||||
|
"default": 8134,
|
||||||
|
"required": true,
|
||||||
|
"description": "Standaard 8065; hier verplaatst omdat die poort al bezet is"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "appdata_dir",
|
||||||
|
"type": "str",
|
||||||
|
"title": "Appdata-map",
|
||||||
|
"default": "/opt/serverup/appdata",
|
||||||
|
"required": true,
|
||||||
|
"description": "Basismap voor de gegevens van deze app"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "timezone",
|
||||||
|
"type": "str",
|
||||||
|
"title": "Tijdzone",
|
||||||
|
"default": "Europe/Amsterdam",
|
||||||
|
"required": true
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "Instellingen",
|
||||||
|
"items": [
|
||||||
|
{
|
||||||
|
"name": "site_url",
|
||||||
|
"type": "str",
|
||||||
|
"title": "Publiek adres",
|
||||||
|
"default": "http://localhost:8134",
|
||||||
|
"required": true,
|
||||||
|
"description": "Nodig voor uitnodigingen en meldingen"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "Toegang",
|
||||||
|
"items": [
|
||||||
|
{
|
||||||
|
"name": "db_password",
|
||||||
|
"type": "str",
|
||||||
|
"title": "Databasewachtwoord",
|
||||||
|
"default": "",
|
||||||
|
"required": true,
|
||||||
|
"secret": true,
|
||||||
|
"generate": "auto",
|
||||||
|
"description": "Wordt automatisch ingevuld en in .env bewaard"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
31
apps/maybe/files/compose.yaml
Normal file
31
apps/maybe/files/compose.yaml
Normal file
|
|
@ -0,0 +1,31 @@
|
||||||
|
services:
|
||||||
|
<< service_name >>:
|
||||||
|
image: ghcr.io/maybe-finance/maybe:latest
|
||||||
|
container_name: << service_name >>
|
||||||
|
environment:
|
||||||
|
- TZ=<< timezone >>
|
||||||
|
- SELF_HOSTED=true
|
||||||
|
- RAILS_FORCE_SSL=false
|
||||||
|
- RAILS_ASSUME_SSL=false
|
||||||
|
- SECRET_KEY_BASE=<< secret_key_base >>
|
||||||
|
- DB_HOST=<< service_name >>-db
|
||||||
|
- POSTGRES_DB=maybe
|
||||||
|
- POSTGRES_USER=maybe
|
||||||
|
- POSTGRES_PASSWORD=<< db_password >>
|
||||||
|
volumes:
|
||||||
|
- << appdata_dir >>/<< service_name >>:/rails/storage
|
||||||
|
ports:
|
||||||
|
- "<< port >>:3000"
|
||||||
|
depends_on:
|
||||||
|
- << service_name >>-db
|
||||||
|
restart: unless-stopped
|
||||||
|
<< service_name >>-db:
|
||||||
|
image: postgres:16-alpine
|
||||||
|
container_name: << service_name >>-db
|
||||||
|
environment:
|
||||||
|
- POSTGRES_DB=maybe
|
||||||
|
- POSTGRES_USER=maybe
|
||||||
|
- POSTGRES_PASSWORD=<< db_password >>
|
||||||
|
volumes:
|
||||||
|
- << appdata_dir >>/<< service_name >>-db:/var/lib/postgresql/data
|
||||||
|
restart: unless-stopped
|
||||||
83
apps/maybe/template.json
Normal file
83
apps/maybe/template.json
Normal file
|
|
@ -0,0 +1,83 @@
|
||||||
|
{
|
||||||
|
"kind": "compose",
|
||||||
|
"metadata": {
|
||||||
|
"name": "Maybe",
|
||||||
|
"description": "Persoonlijke financiën op één plek: rekeningen, uitgaven, vermogen en waar het naartoe gaat.",
|
||||||
|
"tags": [
|
||||||
|
"budget",
|
||||||
|
"vermogen",
|
||||||
|
"financien"
|
||||||
|
],
|
||||||
|
"icon": {
|
||||||
|
"provider": "selfhst",
|
||||||
|
"id": "maybe"
|
||||||
|
},
|
||||||
|
"version": {
|
||||||
|
"name": "latest"
|
||||||
|
},
|
||||||
|
"categories": [
|
||||||
|
"financien"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"variables": [
|
||||||
|
{
|
||||||
|
"title": "Algemeen",
|
||||||
|
"items": [
|
||||||
|
{
|
||||||
|
"name": "service_name",
|
||||||
|
"type": "str",
|
||||||
|
"title": "Servicenaam",
|
||||||
|
"default": "maybe",
|
||||||
|
"required": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "port",
|
||||||
|
"type": "int",
|
||||||
|
"title": "Webinterface",
|
||||||
|
"default": 8146,
|
||||||
|
"required": true,
|
||||||
|
"description": "Standaard 3000; hier verplaatst omdat die poort al bezet is"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "appdata_dir",
|
||||||
|
"type": "str",
|
||||||
|
"title": "Appdata-map",
|
||||||
|
"default": "/opt/serverup/appdata",
|
||||||
|
"required": true,
|
||||||
|
"description": "Basismap voor de gegevens van deze app"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "timezone",
|
||||||
|
"type": "str",
|
||||||
|
"title": "Tijdzone",
|
||||||
|
"default": "Europe/Amsterdam",
|
||||||
|
"required": true
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "Toegang",
|
||||||
|
"items": [
|
||||||
|
{
|
||||||
|
"name": "db_password",
|
||||||
|
"type": "str",
|
||||||
|
"title": "Databasewachtwoord",
|
||||||
|
"default": "",
|
||||||
|
"required": true,
|
||||||
|
"secret": true,
|
||||||
|
"generate": "auto",
|
||||||
|
"description": "Wordt automatisch ingevuld en in .env bewaard"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "secret_key_base",
|
||||||
|
"type": "str",
|
||||||
|
"title": "Rails-sleutel",
|
||||||
|
"default": "",
|
||||||
|
"required": true,
|
||||||
|
"secret": true,
|
||||||
|
"generate": "auto"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
14
apps/minecraft/files/compose.yaml
Normal file
14
apps/minecraft/files/compose.yaml
Normal file
|
|
@ -0,0 +1,14 @@
|
||||||
|
services:
|
||||||
|
<< service_name >>:
|
||||||
|
image: itzg/minecraft-server:latest
|
||||||
|
container_name: << service_name >>
|
||||||
|
environment:
|
||||||
|
- EULA=<< eula >>
|
||||||
|
- TYPE=<< server_type >>
|
||||||
|
- MEMORY=<< geheugen >>
|
||||||
|
- TZ=<< timezone >>
|
||||||
|
volumes:
|
||||||
|
- << appdata_dir >>/<< service_name >>:/data
|
||||||
|
ports:
|
||||||
|
- "<< port >>:25565"
|
||||||
|
restart: unless-stopped
|
||||||
96
apps/minecraft/template.json
Normal file
96
apps/minecraft/template.json
Normal file
|
|
@ -0,0 +1,96 @@
|
||||||
|
{
|
||||||
|
"kind": "compose",
|
||||||
|
"metadata": {
|
||||||
|
"name": "Minecraft-server",
|
||||||
|
"description": "Eigen Minecraft-server, met keuze uit vanilla, Paper, Fabric en Forge. Werkt met mods en plugins.",
|
||||||
|
"tags": [
|
||||||
|
"spellen",
|
||||||
|
"minecraft",
|
||||||
|
"gameserver"
|
||||||
|
],
|
||||||
|
"icon": {
|
||||||
|
"provider": "selfhst",
|
||||||
|
"id": "minecraft"
|
||||||
|
},
|
||||||
|
"version": {
|
||||||
|
"name": "latest"
|
||||||
|
},
|
||||||
|
"categories": [
|
||||||
|
"spellen"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"variables": [
|
||||||
|
{
|
||||||
|
"title": "Algemeen",
|
||||||
|
"items": [
|
||||||
|
{
|
||||||
|
"name": "service_name",
|
||||||
|
"type": "str",
|
||||||
|
"title": "Servicenaam",
|
||||||
|
"default": "minecraft",
|
||||||
|
"required": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "port",
|
||||||
|
"type": "int",
|
||||||
|
"title": "Serverpoort",
|
||||||
|
"default": 25565,
|
||||||
|
"required": true,
|
||||||
|
"description": "Zet deze poort open in je router als je van buitenaf wilt spelen"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "appdata_dir",
|
||||||
|
"type": "str",
|
||||||
|
"title": "Appdata-map",
|
||||||
|
"default": "/opt/serverup/appdata",
|
||||||
|
"required": true,
|
||||||
|
"description": "Basismap voor de gegevens van deze app"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "timezone",
|
||||||
|
"type": "str",
|
||||||
|
"title": "Tijdzone",
|
||||||
|
"default": "Europe/Amsterdam",
|
||||||
|
"required": true
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "Instellingen",
|
||||||
|
"items": [
|
||||||
|
{
|
||||||
|
"name": "eula",
|
||||||
|
"type": "bool",
|
||||||
|
"title": "Ik ga akkoord met de Minecraft-EULA",
|
||||||
|
"default": false,
|
||||||
|
"required": false,
|
||||||
|
"description": "Zonder akkoord start de server niet — zie minecraft.net/eula"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "server_type",
|
||||||
|
"type": "enum",
|
||||||
|
"title": "Serversoort",
|
||||||
|
"default": "PAPER",
|
||||||
|
"required": true,
|
||||||
|
"config": {
|
||||||
|
"options": [
|
||||||
|
"VANILLA",
|
||||||
|
"PAPER",
|
||||||
|
"FABRIC",
|
||||||
|
"FORGE",
|
||||||
|
"SPIGOT"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "geheugen",
|
||||||
|
"type": "str",
|
||||||
|
"title": "Geheugen",
|
||||||
|
"default": "2G",
|
||||||
|
"required": true,
|
||||||
|
"description": "Bijvoorbeeld 2G of 4G"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
15
apps/minio/files/compose.yaml
Normal file
15
apps/minio/files/compose.yaml
Normal file
|
|
@ -0,0 +1,15 @@
|
||||||
|
services:
|
||||||
|
<< service_name >>:
|
||||||
|
image: minio/minio:latest
|
||||||
|
container_name: << service_name >>
|
||||||
|
environment:
|
||||||
|
- TZ=<< timezone >>
|
||||||
|
- MINIO_ROOT_USER=<< root_user >>
|
||||||
|
- MINIO_ROOT_PASSWORD=<< root_password >>
|
||||||
|
volumes:
|
||||||
|
- << appdata_dir >>/<< service_name >>:/data
|
||||||
|
command: server /data --console-address ":9001"
|
||||||
|
ports:
|
||||||
|
- "<< port >>:9000"
|
||||||
|
- "<< port_console >>:9001"
|
||||||
|
restart: unless-stopped
|
||||||
94
apps/minio/template.json
Normal file
94
apps/minio/template.json
Normal file
|
|
@ -0,0 +1,94 @@
|
||||||
|
{
|
||||||
|
"kind": "compose",
|
||||||
|
"metadata": {
|
||||||
|
"name": "MinIO",
|
||||||
|
"description": "Objectopslag die de S3-API spreekt, zodat back-uptools en applicaties er zonder aanpassing op aansluiten.",
|
||||||
|
"tags": [
|
||||||
|
"opslag",
|
||||||
|
"s3",
|
||||||
|
"objecten"
|
||||||
|
],
|
||||||
|
"icon": {
|
||||||
|
"provider": "selfhst",
|
||||||
|
"id": "minio"
|
||||||
|
},
|
||||||
|
"version": {
|
||||||
|
"name": "latest"
|
||||||
|
},
|
||||||
|
"categories": [
|
||||||
|
"opslag",
|
||||||
|
"ontwikkeling"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"variables": [
|
||||||
|
{
|
||||||
|
"title": "Algemeen",
|
||||||
|
"items": [
|
||||||
|
{
|
||||||
|
"name": "service_name",
|
||||||
|
"type": "str",
|
||||||
|
"title": "Servicenaam",
|
||||||
|
"default": "minio",
|
||||||
|
"required": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "port",
|
||||||
|
"type": "int",
|
||||||
|
"title": "API-poort",
|
||||||
|
"default": 8164,
|
||||||
|
"required": true,
|
||||||
|
"description": "Standaard 9000; hier verplaatst omdat die poort al bezet is"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "port_console",
|
||||||
|
"type": "int",
|
||||||
|
"title": "Beheerinterface",
|
||||||
|
"default": 8165,
|
||||||
|
"required": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "appdata_dir",
|
||||||
|
"type": "str",
|
||||||
|
"title": "Appdata-map",
|
||||||
|
"default": "/opt/serverup/appdata",
|
||||||
|
"required": true,
|
||||||
|
"description": "Basismap voor de gegevens van deze app"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "timezone",
|
||||||
|
"type": "str",
|
||||||
|
"title": "Tijdzone",
|
||||||
|
"default": "Europe/Amsterdam",
|
||||||
|
"required": true
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "Instellingen",
|
||||||
|
"items": [
|
||||||
|
{
|
||||||
|
"name": "root_user",
|
||||||
|
"type": "str",
|
||||||
|
"title": "Beheerdersnaam",
|
||||||
|
"default": "minioadmin",
|
||||||
|
"required": true
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "Toegang",
|
||||||
|
"items": [
|
||||||
|
{
|
||||||
|
"name": "root_password",
|
||||||
|
"type": "str",
|
||||||
|
"title": "Beheerderswachtwoord",
|
||||||
|
"default": "",
|
||||||
|
"required": true,
|
||||||
|
"secret": true,
|
||||||
|
"generate": "auto",
|
||||||
|
"description": "Minimaal 8 tekens"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
14
apps/mumble/files/compose.yaml
Normal file
14
apps/mumble/files/compose.yaml
Normal file
|
|
@ -0,0 +1,14 @@
|
||||||
|
services:
|
||||||
|
<< service_name >>:
|
||||||
|
image: mumblevoip/mumble-server:latest
|
||||||
|
container_name: << service_name >>
|
||||||
|
environment:
|
||||||
|
- TZ=<< timezone >>
|
||||||
|
- MUMBLE_CONFIG_welcometext=<< welkomsttekst >>
|
||||||
|
- MUMBLE_SUPERUSER_PASSWORD=<< superuser_password >>
|
||||||
|
volumes:
|
||||||
|
- << appdata_dir >>/<< service_name >>:/data
|
||||||
|
ports:
|
||||||
|
- "<< port >>:64738"
|
||||||
|
- "<< port >>:64738/udp"
|
||||||
|
restart: unless-stopped
|
||||||
86
apps/mumble/template.json
Normal file
86
apps/mumble/template.json
Normal file
|
|
@ -0,0 +1,86 @@
|
||||||
|
{
|
||||||
|
"kind": "compose",
|
||||||
|
"metadata": {
|
||||||
|
"name": "Mumble",
|
||||||
|
"description": "Spraakserver met lage vertraging, oorspronkelijk voor gamers maar prima voor elk gesprek waar geluid telt.",
|
||||||
|
"tags": [
|
||||||
|
"spraak",
|
||||||
|
"voip",
|
||||||
|
"communicatie"
|
||||||
|
],
|
||||||
|
"icon": {
|
||||||
|
"provider": "selfhst",
|
||||||
|
"id": "mumble"
|
||||||
|
},
|
||||||
|
"version": {
|
||||||
|
"name": "latest"
|
||||||
|
},
|
||||||
|
"categories": [
|
||||||
|
"communicatie"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"variables": [
|
||||||
|
{
|
||||||
|
"title": "Algemeen",
|
||||||
|
"items": [
|
||||||
|
{
|
||||||
|
"name": "service_name",
|
||||||
|
"type": "str",
|
||||||
|
"title": "Servicenaam",
|
||||||
|
"default": "mumble",
|
||||||
|
"required": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "port",
|
||||||
|
"type": "int",
|
||||||
|
"title": "Serverpoort",
|
||||||
|
"default": 64738,
|
||||||
|
"required": true,
|
||||||
|
"description": "TCP en UDP op hetzelfde nummer"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "appdata_dir",
|
||||||
|
"type": "str",
|
||||||
|
"title": "Appdata-map",
|
||||||
|
"default": "/opt/serverup/appdata",
|
||||||
|
"required": true,
|
||||||
|
"description": "Basismap voor de gegevens van deze app"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "timezone",
|
||||||
|
"type": "str",
|
||||||
|
"title": "Tijdzone",
|
||||||
|
"default": "Europe/Amsterdam",
|
||||||
|
"required": true
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "Instellingen",
|
||||||
|
"items": [
|
||||||
|
{
|
||||||
|
"name": "welkomsttekst",
|
||||||
|
"type": "str",
|
||||||
|
"title": "Welkomsttekst",
|
||||||
|
"default": "Welkom op deze Mumble-server",
|
||||||
|
"required": false
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "Toegang",
|
||||||
|
"items": [
|
||||||
|
{
|
||||||
|
"name": "superuser_password",
|
||||||
|
"type": "str",
|
||||||
|
"title": "SuperUser-wachtwoord",
|
||||||
|
"default": "",
|
||||||
|
"required": true,
|
||||||
|
"secret": true,
|
||||||
|
"generate": "auto",
|
||||||
|
"description": "Waarmee je de server beheert"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
12
apps/netalertx/files/compose.yaml
Normal file
12
apps/netalertx/files/compose.yaml
Normal file
|
|
@ -0,0 +1,12 @@
|
||||||
|
services:
|
||||||
|
<< service_name >>:
|
||||||
|
image: jokobsk/netalertx:latest
|
||||||
|
container_name: << service_name >>
|
||||||
|
environment:
|
||||||
|
- TZ=<< timezone >>
|
||||||
|
- PORT=20211
|
||||||
|
volumes:
|
||||||
|
- << appdata_dir >>/<< service_name >>:/app/config
|
||||||
|
- << appdata_dir >>/<< service_name >>-db:/app/db
|
||||||
|
network_mode: host
|
||||||
|
restart: unless-stopped
|
||||||
52
apps/netalertx/template.json
Normal file
52
apps/netalertx/template.json
Normal file
|
|
@ -0,0 +1,52 @@
|
||||||
|
{
|
||||||
|
"kind": "compose",
|
||||||
|
"metadata": {
|
||||||
|
"name": "NetAlertX",
|
||||||
|
"description": "Scant je netwerk en meldt het zodra er een apparaat bijkomt dat je niet kent. Let op: Draait op het netwerk van de host, want anders ziet de scanner alleen het Docker-netwerk. Bereikbaar op poort 20211 van je server.",
|
||||||
|
"tags": [
|
||||||
|
"netwerk",
|
||||||
|
"monitoring",
|
||||||
|
"beveiliging"
|
||||||
|
],
|
||||||
|
"icon": {
|
||||||
|
"provider": "selfhst",
|
||||||
|
"id": "netalertx"
|
||||||
|
},
|
||||||
|
"version": {
|
||||||
|
"name": "latest"
|
||||||
|
},
|
||||||
|
"categories": [
|
||||||
|
"netwerk",
|
||||||
|
"monitoring"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"variables": [
|
||||||
|
{
|
||||||
|
"title": "Algemeen",
|
||||||
|
"items": [
|
||||||
|
{
|
||||||
|
"name": "service_name",
|
||||||
|
"type": "str",
|
||||||
|
"title": "Servicenaam",
|
||||||
|
"default": "netalertx",
|
||||||
|
"required": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "appdata_dir",
|
||||||
|
"type": "str",
|
||||||
|
"title": "Appdata-map",
|
||||||
|
"default": "/opt/serverup/appdata",
|
||||||
|
"required": true,
|
||||||
|
"description": "Basismap voor de gegevens van deze app"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "timezone",
|
||||||
|
"type": "str",
|
||||||
|
"title": "Tijdzone",
|
||||||
|
"default": "Europe/Amsterdam",
|
||||||
|
"required": true
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
26
apps/odoo/files/compose.yaml
Normal file
26
apps/odoo/files/compose.yaml
Normal file
|
|
@ -0,0 +1,26 @@
|
||||||
|
services:
|
||||||
|
<< service_name >>:
|
||||||
|
image: odoo:latest
|
||||||
|
container_name: << service_name >>
|
||||||
|
environment:
|
||||||
|
- TZ=<< timezone >>
|
||||||
|
- HOST=<< service_name >>-db
|
||||||
|
- USER=odoo
|
||||||
|
- PASSWORD=<< db_password >>
|
||||||
|
volumes:
|
||||||
|
- << appdata_dir >>/<< service_name >>:/var/lib/odoo
|
||||||
|
ports:
|
||||||
|
- "<< port >>:8069"
|
||||||
|
depends_on:
|
||||||
|
- << service_name >>-db
|
||||||
|
restart: unless-stopped
|
||||||
|
<< service_name >>-db:
|
||||||
|
image: postgres:16-alpine
|
||||||
|
container_name: << service_name >>-db
|
||||||
|
environment:
|
||||||
|
- POSTGRES_DB=postgres
|
||||||
|
- POSTGRES_USER=odoo
|
||||||
|
- POSTGRES_PASSWORD=<< db_password >>
|
||||||
|
volumes:
|
||||||
|
- << appdata_dir >>/<< service_name >>-db:/var/lib/postgresql/data
|
||||||
|
restart: unless-stopped
|
||||||
75
apps/odoo/template.json
Normal file
75
apps/odoo/template.json
Normal file
|
|
@ -0,0 +1,75 @@
|
||||||
|
{
|
||||||
|
"kind": "compose",
|
||||||
|
"metadata": {
|
||||||
|
"name": "Odoo",
|
||||||
|
"description": "Bedrijfssoftware in modules: verkoop, voorraad, facturen, CRM en boekhouding. Je zet aan wat je nodig hebt.",
|
||||||
|
"tags": [
|
||||||
|
"erp",
|
||||||
|
"crm",
|
||||||
|
"facturen",
|
||||||
|
"boekhouding"
|
||||||
|
],
|
||||||
|
"icon": {
|
||||||
|
"provider": "selfhst",
|
||||||
|
"id": "odoo"
|
||||||
|
},
|
||||||
|
"version": {
|
||||||
|
"name": "latest"
|
||||||
|
},
|
||||||
|
"categories": [
|
||||||
|
"zakelijk"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"variables": [
|
||||||
|
{
|
||||||
|
"title": "Algemeen",
|
||||||
|
"items": [
|
||||||
|
{
|
||||||
|
"name": "service_name",
|
||||||
|
"type": "str",
|
||||||
|
"title": "Servicenaam",
|
||||||
|
"default": "odoo",
|
||||||
|
"required": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "port",
|
||||||
|
"type": "int",
|
||||||
|
"title": "Webinterface",
|
||||||
|
"default": 8169,
|
||||||
|
"required": true,
|
||||||
|
"description": "Standaard 8069; hier verplaatst omdat die poort al bezet is"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "appdata_dir",
|
||||||
|
"type": "str",
|
||||||
|
"title": "Appdata-map",
|
||||||
|
"default": "/opt/serverup/appdata",
|
||||||
|
"required": true,
|
||||||
|
"description": "Basismap voor de gegevens van deze app"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "timezone",
|
||||||
|
"type": "str",
|
||||||
|
"title": "Tijdzone",
|
||||||
|
"default": "Europe/Amsterdam",
|
||||||
|
"required": true
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "Toegang",
|
||||||
|
"items": [
|
||||||
|
{
|
||||||
|
"name": "db_password",
|
||||||
|
"type": "str",
|
||||||
|
"title": "Databasewachtwoord",
|
||||||
|
"default": "",
|
||||||
|
"required": true,
|
||||||
|
"secret": true,
|
||||||
|
"generate": "auto",
|
||||||
|
"description": "Wordt automatisch ingevuld en in .env bewaard"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
15
apps/opengist/files/compose.yaml
Normal file
15
apps/opengist/files/compose.yaml
Normal file
|
|
@ -0,0 +1,15 @@
|
||||||
|
services:
|
||||||
|
<< service_name >>:
|
||||||
|
image: ghcr.io/thomiceli/opengist:latest
|
||||||
|
container_name: << service_name >>
|
||||||
|
environment:
|
||||||
|
- TZ=<< timezone >>
|
||||||
|
- OG_EXTERNAL_URL=<< app_url >>
|
||||||
|
- OG_SSH_GIT_ENABLED=true
|
||||||
|
- OG_SSH_GIT_PORT=<< port_ssh >>
|
||||||
|
volumes:
|
||||||
|
- << appdata_dir >>/<< service_name >>:/opengist
|
||||||
|
ports:
|
||||||
|
- "<< port >>:6157"
|
||||||
|
- "<< port_ssh >>:2222"
|
||||||
|
restart: unless-stopped
|
||||||
79
apps/opengist/template.json
Normal file
79
apps/opengist/template.json
Normal file
|
|
@ -0,0 +1,79 @@
|
||||||
|
{
|
||||||
|
"kind": "compose",
|
||||||
|
"metadata": {
|
||||||
|
"name": "Opengist",
|
||||||
|
"description": "Eigen plek voor codefragmenten, met versiegeschiedenis via git. Zelfgehoste GitHub Gist.",
|
||||||
|
"tags": [
|
||||||
|
"code",
|
||||||
|
"snippets",
|
||||||
|
"git"
|
||||||
|
],
|
||||||
|
"icon": {
|
||||||
|
"provider": "selfhst",
|
||||||
|
"id": "opengist"
|
||||||
|
},
|
||||||
|
"version": {
|
||||||
|
"name": "latest"
|
||||||
|
},
|
||||||
|
"categories": [
|
||||||
|
"ontwikkeling"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"variables": [
|
||||||
|
{
|
||||||
|
"title": "Algemeen",
|
||||||
|
"items": [
|
||||||
|
{
|
||||||
|
"name": "service_name",
|
||||||
|
"type": "str",
|
||||||
|
"title": "Servicenaam",
|
||||||
|
"default": "opengist",
|
||||||
|
"required": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "port",
|
||||||
|
"type": "int",
|
||||||
|
"title": "Webinterface",
|
||||||
|
"default": 8177,
|
||||||
|
"required": true,
|
||||||
|
"description": "Standaard 6157; hier verplaatst omdat die poort al bezet is"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "port_ssh",
|
||||||
|
"type": "int",
|
||||||
|
"title": "SSH-poort",
|
||||||
|
"default": 2224,
|
||||||
|
"required": true,
|
||||||
|
"description": "Voor git via ssh"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "appdata_dir",
|
||||||
|
"type": "str",
|
||||||
|
"title": "Appdata-map",
|
||||||
|
"default": "/opt/serverup/appdata",
|
||||||
|
"required": true,
|
||||||
|
"description": "Basismap voor de gegevens van deze app"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "timezone",
|
||||||
|
"type": "str",
|
||||||
|
"title": "Tijdzone",
|
||||||
|
"default": "Europe/Amsterdam",
|
||||||
|
"required": true
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "Instellingen",
|
||||||
|
"items": [
|
||||||
|
{
|
||||||
|
"name": "app_url",
|
||||||
|
"type": "str",
|
||||||
|
"title": "Publiek adres",
|
||||||
|
"default": "http://localhost:8177",
|
||||||
|
"required": true
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
47
apps/outline/files/compose.yaml
Normal file
47
apps/outline/files/compose.yaml
Normal file
|
|
@ -0,0 +1,47 @@
|
||||||
|
services:
|
||||||
|
<< service_name >>:
|
||||||
|
image: outlinewiki/outline:latest
|
||||||
|
container_name: << service_name >>
|
||||||
|
environment:
|
||||||
|
- TZ=<< timezone >>
|
||||||
|
- NODE_ENV=production
|
||||||
|
- URL=<< app_url >>
|
||||||
|
- PORT=3000
|
||||||
|
- SECRET_KEY=<< secret_key >>
|
||||||
|
- UTILS_SECRET=<< utils_secret >>
|
||||||
|
- DATABASE_URL=postgres://outline:<< db_password >>@<< service_name >>-db:5432/outline
|
||||||
|
- PGSSLMODE=disable
|
||||||
|
- REDIS_URL=redis://<< service_name >>-redis:6379
|
||||||
|
- FILE_STORAGE=local
|
||||||
|
- FILE_STORAGE_LOCAL_ROOT_DIR=/var/lib/outline/data
|
||||||
|
- OIDC_CLIENT_ID=<< oidc_client_id >>
|
||||||
|
- OIDC_CLIENT_SECRET=<< oidc_client_secret >>
|
||||||
|
- OIDC_AUTH_URI=<< oidc_url_inloggen >>
|
||||||
|
- OIDC_TOKEN_URI=<< oidc_url_uitwisselen >>
|
||||||
|
- OIDC_USERINFO_URI=<< oidc_url_profiel >>
|
||||||
|
- OIDC_DISPLAY_NAME=<< oidc_naam >>
|
||||||
|
volumes:
|
||||||
|
- << appdata_dir >>/<< service_name >>:/var/lib/outline/data
|
||||||
|
ports:
|
||||||
|
- "<< port >>:3000"
|
||||||
|
depends_on:
|
||||||
|
- << service_name >>-db
|
||||||
|
- << service_name >>-redis
|
||||||
|
restart: unless-stopped
|
||||||
|
<< service_name >>-db:
|
||||||
|
image: postgres:16-alpine
|
||||||
|
container_name: << service_name >>-db
|
||||||
|
environment:
|
||||||
|
- POSTGRES_DB=outline
|
||||||
|
- POSTGRES_USER=outline
|
||||||
|
- POSTGRES_PASSWORD=<< db_password >>
|
||||||
|
volumes:
|
||||||
|
- << appdata_dir >>/<< service_name >>-db:/var/lib/postgresql/data
|
||||||
|
restart: unless-stopped
|
||||||
|
<< service_name >>-redis:
|
||||||
|
image: valkey/valkey:8-alpine
|
||||||
|
container_name: << service_name >>-redis
|
||||||
|
command: valkey-server --save 60 1
|
||||||
|
volumes:
|
||||||
|
- << appdata_dir >>/<< service_name >>-redis:/data
|
||||||
|
restart: unless-stopped
|
||||||
156
apps/outline/template.json
Normal file
156
apps/outline/template.json
Normal file
|
|
@ -0,0 +1,156 @@
|
||||||
|
{
|
||||||
|
"kind": "compose",
|
||||||
|
"metadata": {
|
||||||
|
"name": "Outline",
|
||||||
|
"description": "Kennisbank voor teams: gedeelde documenten met versies, rechten per collectie en goed zoeken. Let op: Outline kent geen eigen wachtwoorden. Zonder werkende OIDC-instellingen kom je niet voorbij het inlogscherm.",
|
||||||
|
"tags": [
|
||||||
|
"wiki",
|
||||||
|
"kennis",
|
||||||
|
"documenten",
|
||||||
|
"samenwerken"
|
||||||
|
],
|
||||||
|
"icon": {
|
||||||
|
"provider": "selfhst",
|
||||||
|
"id": "outline"
|
||||||
|
},
|
||||||
|
"version": {
|
||||||
|
"name": "latest"
|
||||||
|
},
|
||||||
|
"categories": [
|
||||||
|
"documenten",
|
||||||
|
"productiviteit"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"variables": [
|
||||||
|
{
|
||||||
|
"title": "Algemeen",
|
||||||
|
"items": [
|
||||||
|
{
|
||||||
|
"name": "service_name",
|
||||||
|
"type": "str",
|
||||||
|
"title": "Servicenaam",
|
||||||
|
"default": "outline",
|
||||||
|
"required": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "port",
|
||||||
|
"type": "int",
|
||||||
|
"title": "Webinterface",
|
||||||
|
"default": 8153,
|
||||||
|
"required": true,
|
||||||
|
"description": "Standaard 3000; hier verplaatst omdat die poort al bezet is"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "appdata_dir",
|
||||||
|
"type": "str",
|
||||||
|
"title": "Appdata-map",
|
||||||
|
"default": "/opt/serverup/appdata",
|
||||||
|
"required": true,
|
||||||
|
"description": "Basismap voor de gegevens van deze app"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "timezone",
|
||||||
|
"type": "str",
|
||||||
|
"title": "Tijdzone",
|
||||||
|
"default": "Europe/Amsterdam",
|
||||||
|
"required": true
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "Instellingen",
|
||||||
|
"items": [
|
||||||
|
{
|
||||||
|
"name": "app_url",
|
||||||
|
"type": "str",
|
||||||
|
"title": "Publiek adres",
|
||||||
|
"default": "http://localhost:8153",
|
||||||
|
"required": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "oidc_naam",
|
||||||
|
"type": "str",
|
||||||
|
"title": "Naam van je inlogdienst",
|
||||||
|
"default": "Authentik",
|
||||||
|
"required": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "oidc_client_id",
|
||||||
|
"type": "str",
|
||||||
|
"title": "OIDC client-id",
|
||||||
|
"default": "",
|
||||||
|
"required": true,
|
||||||
|
"connect": {
|
||||||
|
"app": "authentik",
|
||||||
|
"scheme": "http",
|
||||||
|
"port": 9000
|
||||||
|
},
|
||||||
|
"help": "Outline heeft geen eigen accounts: je logt altijd in via een externe dienst. Maak in Authentik, Keycloak of Pocket ID een OIDC-toepassing aan en neem de gegevens hier over."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "oidc_url_inloggen",
|
||||||
|
"type": "str",
|
||||||
|
"title": "OIDC-adres om in te loggen",
|
||||||
|
"default": "",
|
||||||
|
"required": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "oidc_url_uitwisselen",
|
||||||
|
"type": "str",
|
||||||
|
"title": "OIDC-adres om de code in te wisselen",
|
||||||
|
"default": "",
|
||||||
|
"required": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "oidc_url_profiel",
|
||||||
|
"type": "str",
|
||||||
|
"title": "OIDC-adres met de profielgegevens",
|
||||||
|
"default": "",
|
||||||
|
"required": true
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "Toegang",
|
||||||
|
"items": [
|
||||||
|
{
|
||||||
|
"name": "db_password",
|
||||||
|
"type": "str",
|
||||||
|
"title": "Databasewachtwoord",
|
||||||
|
"default": "",
|
||||||
|
"required": true,
|
||||||
|
"secret": true,
|
||||||
|
"generate": "auto",
|
||||||
|
"description": "Wordt automatisch ingevuld en in .env bewaard"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "secret_key",
|
||||||
|
"type": "str",
|
||||||
|
"title": "Geheime sleutel",
|
||||||
|
"default": "",
|
||||||
|
"required": true,
|
||||||
|
"secret": true,
|
||||||
|
"generate": "auto"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "utils_secret",
|
||||||
|
"type": "str",
|
||||||
|
"title": "Sleutel voor hulpfuncties",
|
||||||
|
"default": "",
|
||||||
|
"required": true,
|
||||||
|
"secret": true,
|
||||||
|
"generate": "auto"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "oidc_client_secret",
|
||||||
|
"type": "str",
|
||||||
|
"title": "OIDC client-secret",
|
||||||
|
"default": "",
|
||||||
|
"required": true,
|
||||||
|
"secret": true,
|
||||||
|
"eigen_invoer": true
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
12
apps/pingvin-share/files/compose.yaml
Normal file
12
apps/pingvin-share/files/compose.yaml
Normal file
|
|
@ -0,0 +1,12 @@
|
||||||
|
services:
|
||||||
|
<< service_name >>:
|
||||||
|
image: stonith404/pingvin-share:latest
|
||||||
|
container_name: << service_name >>
|
||||||
|
environment:
|
||||||
|
- TZ=<< timezone >>
|
||||||
|
volumes:
|
||||||
|
- << appdata_dir >>/<< service_name >>:/opt/app/backend/data
|
||||||
|
- << appdata_dir >>/<< service_name >>-img:/opt/app/frontend/public/img
|
||||||
|
ports:
|
||||||
|
- "<< port >>:3000"
|
||||||
|
restart: unless-stopped
|
||||||
59
apps/pingvin-share/template.json
Normal file
59
apps/pingvin-share/template.json
Normal file
|
|
@ -0,0 +1,59 @@
|
||||||
|
{
|
||||||
|
"kind": "compose",
|
||||||
|
"metadata": {
|
||||||
|
"name": "Pingvin Share",
|
||||||
|
"description": "Bestanden delen via een link die vanzelf verloopt, met een limiet op het aantal downloads.",
|
||||||
|
"tags": [
|
||||||
|
"bestanden",
|
||||||
|
"delen",
|
||||||
|
"opslag"
|
||||||
|
],
|
||||||
|
"icon": {
|
||||||
|
"provider": "selfhst",
|
||||||
|
"id": "pingvin-share"
|
||||||
|
},
|
||||||
|
"version": {
|
||||||
|
"name": "latest"
|
||||||
|
},
|
||||||
|
"categories": [
|
||||||
|
"opslag"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"variables": [
|
||||||
|
{
|
||||||
|
"title": "Algemeen",
|
||||||
|
"items": [
|
||||||
|
{
|
||||||
|
"name": "service_name",
|
||||||
|
"type": "str",
|
||||||
|
"title": "Servicenaam",
|
||||||
|
"default": "pingvinshare",
|
||||||
|
"required": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "port",
|
||||||
|
"type": "int",
|
||||||
|
"title": "Webinterface",
|
||||||
|
"default": 8166,
|
||||||
|
"required": true,
|
||||||
|
"description": "Standaard 3000; hier verplaatst omdat die poort al bezet is"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "appdata_dir",
|
||||||
|
"type": "str",
|
||||||
|
"title": "Appdata-map",
|
||||||
|
"default": "/opt/serverup/appdata",
|
||||||
|
"required": true,
|
||||||
|
"description": "Basismap voor de gegevens van deze app"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "timezone",
|
||||||
|
"type": "str",
|
||||||
|
"title": "Tijdzone",
|
||||||
|
"default": "Europe/Amsterdam",
|
||||||
|
"required": true
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
27
apps/piwigo/files/compose.yaml
Normal file
27
apps/piwigo/files/compose.yaml
Normal file
|
|
@ -0,0 +1,27 @@
|
||||||
|
services:
|
||||||
|
<< service_name >>:
|
||||||
|
image: lscr.io/linuxserver/piwigo:latest
|
||||||
|
container_name: << service_name >>
|
||||||
|
environment:
|
||||||
|
- PUID=<< puid >>
|
||||||
|
- PGID=<< pgid >>
|
||||||
|
- TZ=<< timezone >>
|
||||||
|
- UMASK=002
|
||||||
|
volumes:
|
||||||
|
- << appdata_dir >>/<< service_name >>:/config
|
||||||
|
ports:
|
||||||
|
- "<< port >>:80"
|
||||||
|
depends_on:
|
||||||
|
- << service_name >>-db
|
||||||
|
restart: unless-stopped
|
||||||
|
<< service_name >>-db:
|
||||||
|
image: mariadb:11
|
||||||
|
container_name: << service_name >>-db
|
||||||
|
environment:
|
||||||
|
- MARIADB_DATABASE=piwigo
|
||||||
|
- MARIADB_USER=piwigo
|
||||||
|
- MARIADB_PASSWORD=<< db_password >>
|
||||||
|
- MARIADB_ROOT_PASSWORD=<< db_password >>
|
||||||
|
volumes:
|
||||||
|
- << appdata_dir >>/<< service_name >>-db:/var/lib/mysql
|
||||||
|
restart: unless-stopped
|
||||||
93
apps/piwigo/template.json
Normal file
93
apps/piwigo/template.json
Normal file
|
|
@ -0,0 +1,93 @@
|
||||||
|
{
|
||||||
|
"kind": "compose",
|
||||||
|
"metadata": {
|
||||||
|
"name": "Piwigo",
|
||||||
|
"description": "Fotobibliotheek met een eigen database, tags, gebruikersrechten en een groot aanbod aan uitbreidingen.",
|
||||||
|
"tags": [
|
||||||
|
"fotos",
|
||||||
|
"albums"
|
||||||
|
],
|
||||||
|
"icon": {
|
||||||
|
"provider": "selfhst",
|
||||||
|
"id": "piwigo"
|
||||||
|
},
|
||||||
|
"version": {
|
||||||
|
"name": "latest"
|
||||||
|
},
|
||||||
|
"categories": [
|
||||||
|
"fotos"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"variables": [
|
||||||
|
{
|
||||||
|
"title": "Algemeen",
|
||||||
|
"items": [
|
||||||
|
{
|
||||||
|
"name": "service_name",
|
||||||
|
"type": "str",
|
||||||
|
"title": "Servicenaam",
|
||||||
|
"default": "piwigo",
|
||||||
|
"required": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "port",
|
||||||
|
"type": "int",
|
||||||
|
"title": "Webinterface",
|
||||||
|
"default": 8148,
|
||||||
|
"required": true,
|
||||||
|
"description": "Standaard 80; hier verplaatst omdat die poort al bezet is"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "appdata_dir",
|
||||||
|
"type": "str",
|
||||||
|
"title": "Appdata-map",
|
||||||
|
"default": "/opt/serverup/appdata",
|
||||||
|
"required": true,
|
||||||
|
"description": "Basismap voor de gegevens van deze app"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "timezone",
|
||||||
|
"type": "str",
|
||||||
|
"title": "Tijdzone",
|
||||||
|
"default": "Europe/Amsterdam",
|
||||||
|
"required": true
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "Gebruiker",
|
||||||
|
"items": [
|
||||||
|
{
|
||||||
|
"name": "puid",
|
||||||
|
"type": "int",
|
||||||
|
"title": "Gebruikers-ID (PUID)",
|
||||||
|
"default": 1000,
|
||||||
|
"required": true,
|
||||||
|
"description": "`id -u` op je server; bepaalt de eigenaar van de bestanden"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "pgid",
|
||||||
|
"type": "int",
|
||||||
|
"title": "Groeps-ID (PGID)",
|
||||||
|
"default": 1000,
|
||||||
|
"required": true
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "Toegang",
|
||||||
|
"items": [
|
||||||
|
{
|
||||||
|
"name": "db_password",
|
||||||
|
"type": "str",
|
||||||
|
"title": "Databasewachtwoord",
|
||||||
|
"default": "",
|
||||||
|
"required": true,
|
||||||
|
"secret": true,
|
||||||
|
"generate": "auto",
|
||||||
|
"description": "Wordt automatisch ingevuld en in .env bewaard"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
services:
|
services:
|
||||||
<< service_name >>:
|
<< service_name >>:
|
||||||
image: ghcr.io/plankanban/planka:1
|
image: ghcr.io/plankanban/planka:latest
|
||||||
container_name: << service_name >>
|
container_name: << service_name >>
|
||||||
ports:
|
ports:
|
||||||
- "<< port >>:1337"
|
- "<< port >>:1337"
|
||||||
|
|
|
||||||
13
apps/pocket-id/files/compose.yaml
Normal file
13
apps/pocket-id/files/compose.yaml
Normal file
|
|
@ -0,0 +1,13 @@
|
||||||
|
services:
|
||||||
|
<< service_name >>:
|
||||||
|
image: ghcr.io/pocket-id/pocket-id:latest
|
||||||
|
container_name: << service_name >>
|
||||||
|
environment:
|
||||||
|
- TZ=<< timezone >>
|
||||||
|
- APP_URL=<< app_url >>
|
||||||
|
- TRUST_PROXY=true
|
||||||
|
volumes:
|
||||||
|
- << appdata_dir >>/<< service_name >>:/app/data
|
||||||
|
ports:
|
||||||
|
- "<< port >>:1411"
|
||||||
|
restart: unless-stopped
|
||||||
74
apps/pocket-id/template.json
Normal file
74
apps/pocket-id/template.json
Normal file
|
|
@ -0,0 +1,74 @@
|
||||||
|
{
|
||||||
|
"kind": "compose",
|
||||||
|
"metadata": {
|
||||||
|
"name": "Pocket ID",
|
||||||
|
"description": "Inloggen met passkeys voor al je apps. Eenvoudiger dan Authentik of Keycloak als je alleen OIDC nodig hebt.",
|
||||||
|
"tags": [
|
||||||
|
"sso",
|
||||||
|
"oidc",
|
||||||
|
"passkeys",
|
||||||
|
"authenticatie"
|
||||||
|
],
|
||||||
|
"icon": {
|
||||||
|
"provider": "selfhst",
|
||||||
|
"id": "pocket-id"
|
||||||
|
},
|
||||||
|
"version": {
|
||||||
|
"name": "latest"
|
||||||
|
},
|
||||||
|
"categories": [
|
||||||
|
"beveiliging"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"variables": [
|
||||||
|
{
|
||||||
|
"title": "Algemeen",
|
||||||
|
"items": [
|
||||||
|
{
|
||||||
|
"name": "service_name",
|
||||||
|
"type": "str",
|
||||||
|
"title": "Servicenaam",
|
||||||
|
"default": "pocketid",
|
||||||
|
"required": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "port",
|
||||||
|
"type": "int",
|
||||||
|
"title": "Webinterface",
|
||||||
|
"default": 8132,
|
||||||
|
"required": true,
|
||||||
|
"description": "Standaard 1411; hier verplaatst omdat die poort al bezet is"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "appdata_dir",
|
||||||
|
"type": "str",
|
||||||
|
"title": "Appdata-map",
|
||||||
|
"default": "/opt/serverup/appdata",
|
||||||
|
"required": true,
|
||||||
|
"description": "Basismap voor de gegevens van deze app"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "timezone",
|
||||||
|
"type": "str",
|
||||||
|
"title": "Tijdzone",
|
||||||
|
"default": "Europe/Amsterdam",
|
||||||
|
"required": true
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "Instellingen",
|
||||||
|
"items": [
|
||||||
|
{
|
||||||
|
"name": "app_url",
|
||||||
|
"type": "str",
|
||||||
|
"title": "Publiek adres",
|
||||||
|
"default": "https://id.example.com",
|
||||||
|
"required": true,
|
||||||
|
"description": "Passkeys zijn aan het exacte adres gebonden",
|
||||||
|
"help": "Een passkey wordt vastgelegd op het domein waar je hem aanmaakt. Verandert dit adres later, dan werken bestaande passkeys niet meer en moet iedereen opnieuw registreren."
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
11
apps/privatebin/files/compose.yaml
Normal file
11
apps/privatebin/files/compose.yaml
Normal file
|
|
@ -0,0 +1,11 @@
|
||||||
|
services:
|
||||||
|
<< service_name >>:
|
||||||
|
image: privatebin/nginx-fpm-alpine:latest
|
||||||
|
container_name: << service_name >>
|
||||||
|
environment:
|
||||||
|
- TZ=<< timezone >>
|
||||||
|
volumes:
|
||||||
|
- << appdata_dir >>/<< service_name >>:/srv/data
|
||||||
|
ports:
|
||||||
|
- "<< port >>:8080"
|
||||||
|
restart: unless-stopped
|
||||||
60
apps/privatebin/template.json
Normal file
60
apps/privatebin/template.json
Normal file
|
|
@ -0,0 +1,60 @@
|
||||||
|
{
|
||||||
|
"kind": "compose",
|
||||||
|
"metadata": {
|
||||||
|
"name": "PrivateBin",
|
||||||
|
"description": "Tekst delen die in je browser versleuteld wordt, zodat de server zelf niet kan lezen wat erin staat.",
|
||||||
|
"tags": [
|
||||||
|
"pastebin",
|
||||||
|
"delen",
|
||||||
|
"privacy"
|
||||||
|
],
|
||||||
|
"icon": {
|
||||||
|
"provider": "selfhst",
|
||||||
|
"id": "privatebin"
|
||||||
|
},
|
||||||
|
"version": {
|
||||||
|
"name": "latest"
|
||||||
|
},
|
||||||
|
"categories": [
|
||||||
|
"productiviteit",
|
||||||
|
"beveiliging"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"variables": [
|
||||||
|
{
|
||||||
|
"title": "Algemeen",
|
||||||
|
"items": [
|
||||||
|
{
|
||||||
|
"name": "service_name",
|
||||||
|
"type": "str",
|
||||||
|
"title": "Servicenaam",
|
||||||
|
"default": "privatebin",
|
||||||
|
"required": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "port",
|
||||||
|
"type": "int",
|
||||||
|
"title": "Webinterface",
|
||||||
|
"default": 8174,
|
||||||
|
"required": true,
|
||||||
|
"description": "Standaard 8080; hier verplaatst omdat die poort al bezet is"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "appdata_dir",
|
||||||
|
"type": "str",
|
||||||
|
"title": "Appdata-map",
|
||||||
|
"default": "/opt/serverup/appdata",
|
||||||
|
"required": true,
|
||||||
|
"description": "Basismap voor de gegevens van deze app"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "timezone",
|
||||||
|
"type": "str",
|
||||||
|
"title": "Tijdzone",
|
||||||
|
"default": "Europe/Amsterdam",
|
||||||
|
"required": true
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
13
apps/readeck/files/compose.yaml
Normal file
13
apps/readeck/files/compose.yaml
Normal file
|
|
@ -0,0 +1,13 @@
|
||||||
|
services:
|
||||||
|
<< service_name >>:
|
||||||
|
image: codeberg.org/readeck/readeck:latest
|
||||||
|
container_name: << service_name >>
|
||||||
|
environment:
|
||||||
|
- TZ=<< timezone >>
|
||||||
|
- READECK_LOG_LEVEL=info
|
||||||
|
- READECK_ALLOWED_HOSTS=<< toegestane_hosts >>
|
||||||
|
volumes:
|
||||||
|
- << appdata_dir >>/<< service_name >>:/readeck
|
||||||
|
ports:
|
||||||
|
- "<< port >>:8000"
|
||||||
|
restart: unless-stopped
|
||||||
72
apps/readeck/template.json
Normal file
72
apps/readeck/template.json
Normal file
|
|
@ -0,0 +1,72 @@
|
||||||
|
{
|
||||||
|
"kind": "compose",
|
||||||
|
"metadata": {
|
||||||
|
"name": "Readeck",
|
||||||
|
"description": "Bewaart artikelen om later te lezen, ontdaan van reclame en opmaak. Met markeringen en eigen labels.",
|
||||||
|
"tags": [
|
||||||
|
"lezen",
|
||||||
|
"artikelen",
|
||||||
|
"bladwijzers"
|
||||||
|
],
|
||||||
|
"icon": {
|
||||||
|
"provider": "selfhst",
|
||||||
|
"id": "readeck"
|
||||||
|
},
|
||||||
|
"version": {
|
||||||
|
"name": "latest"
|
||||||
|
},
|
||||||
|
"categories": [
|
||||||
|
"documenten"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"variables": [
|
||||||
|
{
|
||||||
|
"title": "Algemeen",
|
||||||
|
"items": [
|
||||||
|
{
|
||||||
|
"name": "service_name",
|
||||||
|
"type": "str",
|
||||||
|
"title": "Servicenaam",
|
||||||
|
"default": "readeck",
|
||||||
|
"required": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "port",
|
||||||
|
"type": "int",
|
||||||
|
"title": "Webinterface",
|
||||||
|
"default": 8156,
|
||||||
|
"required": true,
|
||||||
|
"description": "Standaard 8000; hier verplaatst omdat die poort al bezet is"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "appdata_dir",
|
||||||
|
"type": "str",
|
||||||
|
"title": "Appdata-map",
|
||||||
|
"default": "/opt/serverup/appdata",
|
||||||
|
"required": true,
|
||||||
|
"description": "Basismap voor de gegevens van deze app"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "timezone",
|
||||||
|
"type": "str",
|
||||||
|
"title": "Tijdzone",
|
||||||
|
"default": "Europe/Amsterdam",
|
||||||
|
"required": true
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "Instellingen",
|
||||||
|
"items": [
|
||||||
|
{
|
||||||
|
"name": "toegestane_hosts",
|
||||||
|
"type": "str",
|
||||||
|
"title": "Toegestane adressen",
|
||||||
|
"default": "localhost",
|
||||||
|
"required": true,
|
||||||
|
"description": "Komma-gescheiden lijst van namen waarop je Readeck opent"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
32
apps/romm/files/compose.yaml
Normal file
32
apps/romm/files/compose.yaml
Normal file
|
|
@ -0,0 +1,32 @@
|
||||||
|
services:
|
||||||
|
<< service_name >>:
|
||||||
|
image: rommapp/romm:latest
|
||||||
|
container_name: << service_name >>
|
||||||
|
environment:
|
||||||
|
- TZ=<< timezone >>
|
||||||
|
- DB_HOST=<< service_name >>-db
|
||||||
|
- DB_NAME=romm
|
||||||
|
- DB_USER=romm
|
||||||
|
- DB_PASSWD=<< db_password >>
|
||||||
|
- ROMM_AUTH_SECRET_KEY=<< auth_secret >>
|
||||||
|
volumes:
|
||||||
|
- << appdata_dir >>/<< service_name >>:/romm/config
|
||||||
|
- << data_root >>:/data
|
||||||
|
- << appdata_dir >>/<< service_name >>-resources:/romm/resources
|
||||||
|
- << appdata_dir >>/<< service_name >>-redis:/redis-data
|
||||||
|
ports:
|
||||||
|
- "<< port >>:8080"
|
||||||
|
depends_on:
|
||||||
|
- << service_name >>-db
|
||||||
|
restart: unless-stopped
|
||||||
|
<< service_name >>-db:
|
||||||
|
image: mariadb:11
|
||||||
|
container_name: << service_name >>-db
|
||||||
|
environment:
|
||||||
|
- MARIADB_DATABASE=romm
|
||||||
|
- MARIADB_USER=romm
|
||||||
|
- MARIADB_PASSWORD=<< db_password >>
|
||||||
|
- MARIADB_ROOT_PASSWORD=<< db_password >>
|
||||||
|
volumes:
|
||||||
|
- << appdata_dir >>/<< service_name >>-db:/var/lib/mysql
|
||||||
|
restart: unless-stopped
|
||||||
93
apps/romm/template.json
Normal file
93
apps/romm/template.json
Normal file
|
|
@ -0,0 +1,93 @@
|
||||||
|
{
|
||||||
|
"kind": "compose",
|
||||||
|
"metadata": {
|
||||||
|
"name": "RomM",
|
||||||
|
"description": "Beheert je verzameling retro-spellen, haalt er omslagen en gegevens bij, en laat je ze in de browser spelen. Let op: Zet je roms onder /data/roms, met een submap per platform (bijvoorbeeld /data/roms/snes).",
|
||||||
|
"tags": [
|
||||||
|
"retro",
|
||||||
|
"spellen",
|
||||||
|
"emulator"
|
||||||
|
],
|
||||||
|
"icon": {
|
||||||
|
"provider": "selfhst",
|
||||||
|
"id": "romm"
|
||||||
|
},
|
||||||
|
"version": {
|
||||||
|
"name": "latest"
|
||||||
|
},
|
||||||
|
"categories": [
|
||||||
|
"spellen",
|
||||||
|
"media"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"variables": [
|
||||||
|
{
|
||||||
|
"title": "Algemeen",
|
||||||
|
"items": [
|
||||||
|
{
|
||||||
|
"name": "service_name",
|
||||||
|
"type": "str",
|
||||||
|
"title": "Servicenaam",
|
||||||
|
"default": "romm",
|
||||||
|
"required": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "port",
|
||||||
|
"type": "int",
|
||||||
|
"title": "Webinterface",
|
||||||
|
"default": 8172,
|
||||||
|
"required": true,
|
||||||
|
"description": "Standaard 8080; hier verplaatst omdat die poort al bezet is"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "appdata_dir",
|
||||||
|
"type": "str",
|
||||||
|
"title": "Appdata-map",
|
||||||
|
"default": "/opt/serverup/appdata",
|
||||||
|
"required": true,
|
||||||
|
"description": "Basismap voor de gegevens van deze app"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "data_root",
|
||||||
|
"type": "str",
|
||||||
|
"title": "Gedeelde datamap",
|
||||||
|
"default": "/mnt/data",
|
||||||
|
"required": true,
|
||||||
|
"description": "Eén map met je media, gekoppeld als /data",
|
||||||
|
"help": "Media en downloads horen onder één map te staan, die als /data in elke container komt. Alleen dan kan een voltooide download met een hardlink naar je bibliotheek: geen kopie, geen dubbele opslag, en je torrent blijft seeden. Zet je ze op gescheiden paden, dan kopieert elke download opnieuw. Eronder: media/films, media/series, torrents/ en usenet/."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "timezone",
|
||||||
|
"type": "str",
|
||||||
|
"title": "Tijdzone",
|
||||||
|
"default": "Europe/Amsterdam",
|
||||||
|
"required": true
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "Toegang",
|
||||||
|
"items": [
|
||||||
|
{
|
||||||
|
"name": "db_password",
|
||||||
|
"type": "str",
|
||||||
|
"title": "Databasewachtwoord",
|
||||||
|
"default": "",
|
||||||
|
"required": true,
|
||||||
|
"secret": true,
|
||||||
|
"generate": "auto",
|
||||||
|
"description": "Wordt automatisch ingevuld en in .env bewaard"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "auth_secret",
|
||||||
|
"type": "str",
|
||||||
|
"title": "Sleutel voor de inlogsessies",
|
||||||
|
"default": "",
|
||||||
|
"required": true,
|
||||||
|
"secret": true,
|
||||||
|
"generate": "auto"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
14
apps/roundcube/files/compose.yaml
Normal file
14
apps/roundcube/files/compose.yaml
Normal file
|
|
@ -0,0 +1,14 @@
|
||||||
|
services:
|
||||||
|
<< service_name >>:
|
||||||
|
image: roundcube/roundcubemail:latest
|
||||||
|
container_name: << service_name >>
|
||||||
|
environment:
|
||||||
|
- TZ=<< timezone >>
|
||||||
|
- ROUNDCUBEMAIL_DB_TYPE=sqlite
|
||||||
|
- ROUNDCUBEMAIL_DEFAULT_HOST=<< imap_server >>
|
||||||
|
- ROUNDCUBEMAIL_SMTP_SERVER=<< smtp_server >>
|
||||||
|
volumes:
|
||||||
|
- << appdata_dir >>/<< service_name >>:/var/www/html
|
||||||
|
ports:
|
||||||
|
- "<< port >>:80"
|
||||||
|
restart: unless-stopped
|
||||||
79
apps/roundcube/template.json
Normal file
79
apps/roundcube/template.json
Normal file
|
|
@ -0,0 +1,79 @@
|
||||||
|
{
|
||||||
|
"kind": "compose",
|
||||||
|
"metadata": {
|
||||||
|
"name": "Roundcube",
|
||||||
|
"description": "Webmail voor een bestaande mailserver. Geen mailserver zelf: je logt in op je eigen IMAP-account.",
|
||||||
|
"tags": [
|
||||||
|
"e-mail",
|
||||||
|
"webmail",
|
||||||
|
"imap"
|
||||||
|
],
|
||||||
|
"icon": {
|
||||||
|
"provider": "selfhst",
|
||||||
|
"id": "roundcube"
|
||||||
|
},
|
||||||
|
"version": {
|
||||||
|
"name": "latest"
|
||||||
|
},
|
||||||
|
"categories": [
|
||||||
|
"communicatie"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"variables": [
|
||||||
|
{
|
||||||
|
"title": "Algemeen",
|
||||||
|
"items": [
|
||||||
|
{
|
||||||
|
"name": "service_name",
|
||||||
|
"type": "str",
|
||||||
|
"title": "Servicenaam",
|
||||||
|
"default": "roundcube",
|
||||||
|
"required": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "port",
|
||||||
|
"type": "int",
|
||||||
|
"title": "Webinterface",
|
||||||
|
"default": 8139,
|
||||||
|
"required": true,
|
||||||
|
"description": "Standaard 80; hier verplaatst omdat die poort al bezet is"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "appdata_dir",
|
||||||
|
"type": "str",
|
||||||
|
"title": "Appdata-map",
|
||||||
|
"default": "/opt/serverup/appdata",
|
||||||
|
"required": true,
|
||||||
|
"description": "Basismap voor de gegevens van deze app"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "timezone",
|
||||||
|
"type": "str",
|
||||||
|
"title": "Tijdzone",
|
||||||
|
"default": "Europe/Amsterdam",
|
||||||
|
"required": true
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "Instellingen",
|
||||||
|
"items": [
|
||||||
|
{
|
||||||
|
"name": "imap_server",
|
||||||
|
"type": "str",
|
||||||
|
"title": "IMAP-server",
|
||||||
|
"default": "ssl://imap.example.com",
|
||||||
|
"required": true,
|
||||||
|
"description": "Met ssl:// of tls:// ervoor"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "smtp_server",
|
||||||
|
"type": "str",
|
||||||
|
"title": "SMTP-server",
|
||||||
|
"default": "tls://smtp.example.com",
|
||||||
|
"required": true
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
17
apps/scrutiny/files/compose.yaml
Normal file
17
apps/scrutiny/files/compose.yaml
Normal file
|
|
@ -0,0 +1,17 @@
|
||||||
|
services:
|
||||||
|
<< service_name >>:
|
||||||
|
image: ghcr.io/analogj/scrutiny:master-omnibus
|
||||||
|
container_name: << service_name >>
|
||||||
|
environment:
|
||||||
|
- TZ=<< timezone >>
|
||||||
|
volumes:
|
||||||
|
- << appdata_dir >>/<< service_name >>:/opt/scrutiny/config
|
||||||
|
- << appdata_dir >>/<< service_name >>-influxdb:/opt/scrutiny/influxdb
|
||||||
|
- /run/udev:/run/udev:ro
|
||||||
|
ports:
|
||||||
|
- "<< port >>:8080"
|
||||||
|
cap_add:
|
||||||
|
- SYS_RAWIO
|
||||||
|
devices:
|
||||||
|
- /dev/sda:/dev/sda
|
||||||
|
restart: unless-stopped
|
||||||
61
apps/scrutiny/template.json
Normal file
61
apps/scrutiny/template.json
Normal file
|
|
@ -0,0 +1,61 @@
|
||||||
|
{
|
||||||
|
"kind": "compose",
|
||||||
|
"metadata": {
|
||||||
|
"name": "Scrutiny",
|
||||||
|
"description": "Leest de SMART-gegevens van je schijven uit en waarschuwt vóórdat er een stukgaat, in plaats van erna. Let op: Pas de lijst onder `devices` aan naar de schijven in jouw server; zonder toegang tot het apparaat zelf kan Scrutiny niets uitlezen.",
|
||||||
|
"tags": [
|
||||||
|
"schijven",
|
||||||
|
"smart",
|
||||||
|
"monitoring",
|
||||||
|
"hardware"
|
||||||
|
],
|
||||||
|
"icon": {
|
||||||
|
"provider": "selfhst",
|
||||||
|
"id": "scrutiny"
|
||||||
|
},
|
||||||
|
"version": {
|
||||||
|
"name": "latest"
|
||||||
|
},
|
||||||
|
"categories": [
|
||||||
|
"monitoring",
|
||||||
|
"opslag"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"variables": [
|
||||||
|
{
|
||||||
|
"title": "Algemeen",
|
||||||
|
"items": [
|
||||||
|
{
|
||||||
|
"name": "service_name",
|
||||||
|
"type": "str",
|
||||||
|
"title": "Servicenaam",
|
||||||
|
"default": "scrutiny",
|
||||||
|
"required": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "port",
|
||||||
|
"type": "int",
|
||||||
|
"title": "Webinterface",
|
||||||
|
"default": 8126,
|
||||||
|
"required": true,
|
||||||
|
"description": "Standaard 8080; hier verplaatst omdat die poort al bezet is"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "appdata_dir",
|
||||||
|
"type": "str",
|
||||||
|
"title": "Appdata-map",
|
||||||
|
"default": "/opt/serverup/appdata",
|
||||||
|
"required": true,
|
||||||
|
"description": "Basismap voor de gegevens van deze app"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "timezone",
|
||||||
|
"type": "str",
|
||||||
|
"title": "Tijdzone",
|
||||||
|
"default": "Europe/Amsterdam",
|
||||||
|
"required": true
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue