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