Add CT installers and metadata for six apps
Add container templates, install scripts and metadata for six applications: BirdNET-Go, ERPNext, Jitsi Meet, Storybook, Storyteller and Tube Archivist. New files include ct/* scripts (container templates and update handlers), install/* scripts (installation and systemd service setup, dependency installation and build steps) and json/* metadata entries (app catalog data, default resources, ports and notes). Each install script configures required dependencies, creates services, and prepares runtime configuration (e.g. DB, ElasticSearch, Node/Python environments, ffmpeg/Readium). This commit enables automated LXC provisioning and update flows for these apps.
This commit is contained in:
48
json/birdnet-go.json
Normal file
48
json/birdnet-go.json
Normal file
@@ -0,0 +1,48 @@
|
||||
{
|
||||
"name": "BirdNET-Go",
|
||||
"slug": "birdnet-go",
|
||||
"categories": [
|
||||
9
|
||||
],
|
||||
"date_created": "2026-03-25",
|
||||
"type": "ct",
|
||||
"updateable": true,
|
||||
"privileged": false,
|
||||
"interface_port": 8080,
|
||||
"documentation": "https://github.com/tphakala/birdnet-go/wiki",
|
||||
"website": "https://github.com/tphakala/birdnet-go",
|
||||
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/birdnet-go.webp",
|
||||
"config_path": "/opt/birdnet-go/data",
|
||||
"description": "BirdNET-Go is an AI-powered solution for continuous avian monitoring and identification, providing 24/7 realtime bird song analysis.",
|
||||
"install_methods": [
|
||||
{
|
||||
"type": "default",
|
||||
"script": "ct/birdnet-go.sh",
|
||||
"resources": {
|
||||
"cpu": 4,
|
||||
"ram": 2048,
|
||||
"hdd": 12,
|
||||
"os": "Debian",
|
||||
"version": "13"
|
||||
}
|
||||
}
|
||||
],
|
||||
"default_credentials": {
|
||||
"username": null,
|
||||
"password": null
|
||||
},
|
||||
"notes": [
|
||||
{
|
||||
"text": "Audio device passthrough is required for realtime monitoring. Add the audio device to the LXC configuration.",
|
||||
"type": "warning"
|
||||
},
|
||||
{
|
||||
"text": "Data and recordings are stored in `/opt/birdnet-go/data`.",
|
||||
"type": "info"
|
||||
},
|
||||
{
|
||||
"text": "GPU acceleration is not available in the LXC version. CPU-based transcription is used.",
|
||||
"type": "info"
|
||||
}
|
||||
]
|
||||
}
|
||||
48
json/erpnext.json
Normal file
48
json/erpnext.json
Normal file
@@ -0,0 +1,48 @@
|
||||
{
|
||||
"name": "ERPNext",
|
||||
"slug": "erpnext",
|
||||
"categories": [
|
||||
25
|
||||
],
|
||||
"date_created": "2026-03-25",
|
||||
"type": "ct",
|
||||
"updateable": true,
|
||||
"privileged": false,
|
||||
"interface_port": 8000,
|
||||
"documentation": "https://docs.erpnext.com/",
|
||||
"website": "https://erpnext.com/",
|
||||
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/erpnext.webp",
|
||||
"config_path": "/opt/frappe-bench/.env",
|
||||
"description": "ERPNext is a powerful, intuitive and open-source ERP system for managing accounting, inventory, manufacturing, CRM, projects, HR and more.",
|
||||
"install_methods": [
|
||||
{
|
||||
"type": "default",
|
||||
"script": "ct/erpnext.sh",
|
||||
"resources": {
|
||||
"cpu": 4,
|
||||
"ram": 4096,
|
||||
"hdd": 20,
|
||||
"os": "Debian",
|
||||
"version": "13"
|
||||
}
|
||||
}
|
||||
],
|
||||
"default_credentials": {
|
||||
"username": "Administrator",
|
||||
"password": null
|
||||
},
|
||||
"notes": [
|
||||
{
|
||||
"text": "Admin password is stored in `/opt/frappe-bench/.env`.",
|
||||
"type": "info"
|
||||
},
|
||||
{
|
||||
"text": "The default site name is `site1.local`. Configure your domain in Frappe settings.",
|
||||
"type": "info"
|
||||
},
|
||||
{
|
||||
"text": "Run `bench update` from `/opt/frappe-bench` to update ERPNext manually.",
|
||||
"type": "info"
|
||||
}
|
||||
]
|
||||
}
|
||||
48
json/jitsi.json
Normal file
48
json/jitsi.json
Normal file
@@ -0,0 +1,48 @@
|
||||
{
|
||||
"name": "Jitsi Meet",
|
||||
"slug": "jitsi",
|
||||
"categories": [
|
||||
0
|
||||
],
|
||||
"date_created": "2026-03-25",
|
||||
"type": "ct",
|
||||
"updateable": true,
|
||||
"privileged": false,
|
||||
"interface_port": 443,
|
||||
"documentation": "https://jitsi.github.io/handbook/",
|
||||
"website": "https://jitsi.org/",
|
||||
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/jitsi.webp",
|
||||
"config_path": "/etc/jitsi",
|
||||
"description": "Jitsi Meet is a set of open-source projects for secure, simple and scalable video conferences with state-of-the-art video quality and features.",
|
||||
"install_methods": [
|
||||
{
|
||||
"type": "default",
|
||||
"script": "ct/jitsi.sh",
|
||||
"resources": {
|
||||
"cpu": 4,
|
||||
"ram": 4096,
|
||||
"hdd": 12,
|
||||
"os": "Debian",
|
||||
"version": "13"
|
||||
}
|
||||
}
|
||||
],
|
||||
"default_credentials": {
|
||||
"username": null,
|
||||
"password": null
|
||||
},
|
||||
"notes": [
|
||||
{
|
||||
"text": "Uses a self-signed certificate by default. Your browser will show a security warning.",
|
||||
"type": "info"
|
||||
},
|
||||
{
|
||||
"text": "Port 10000/UDP must be forwarded to the container for video/audio to work properly.",
|
||||
"type": "warning"
|
||||
},
|
||||
{
|
||||
"text": "Configuration files are located in `/etc/jitsi/`.",
|
||||
"type": "info"
|
||||
}
|
||||
]
|
||||
}
|
||||
44
json/storybook.json
Normal file
44
json/storybook.json
Normal file
@@ -0,0 +1,44 @@
|
||||
{
|
||||
"name": "Storybook",
|
||||
"slug": "storybook",
|
||||
"categories": [
|
||||
20
|
||||
],
|
||||
"date_created": "2026-03-25",
|
||||
"type": "ct",
|
||||
"updateable": true,
|
||||
"privileged": false,
|
||||
"interface_port": 6006,
|
||||
"documentation": "https://storybook.js.org/docs",
|
||||
"website": "https://storybook.js.org/",
|
||||
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/storybook.webp",
|
||||
"config_path": "",
|
||||
"description": "Storybook is a frontend workshop for building UI components and pages in isolation. It's used for UI development, testing, and documentation.",
|
||||
"install_methods": [
|
||||
{
|
||||
"type": "default",
|
||||
"script": "ct/storybook.sh",
|
||||
"resources": {
|
||||
"cpu": 2,
|
||||
"ram": 2048,
|
||||
"hdd": 8,
|
||||
"os": "Debian",
|
||||
"version": "13"
|
||||
}
|
||||
}
|
||||
],
|
||||
"default_credentials": {
|
||||
"username": null,
|
||||
"password": null
|
||||
},
|
||||
"notes": [
|
||||
{
|
||||
"text": "The installer uses an interactive setup wizard (like fumadocs). Follow the prompts during installation.",
|
||||
"type": "info"
|
||||
},
|
||||
{
|
||||
"text": "Storybook runs in development mode on port 6006.",
|
||||
"type": "info"
|
||||
}
|
||||
]
|
||||
}
|
||||
48
json/storyteller.json
Normal file
48
json/storyteller.json
Normal file
@@ -0,0 +1,48 @@
|
||||
{
|
||||
"name": "Storyteller",
|
||||
"slug": "storyteller",
|
||||
"categories": [
|
||||
13
|
||||
],
|
||||
"date_created": "2026-03-25",
|
||||
"type": "ct",
|
||||
"updateable": true,
|
||||
"privileged": false,
|
||||
"interface_port": 8001,
|
||||
"documentation": "https://storyteller-platform.dev/docs/welcome",
|
||||
"website": "https://storyteller-platform.dev/",
|
||||
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/storyteller.webp",
|
||||
"config_path": "/opt/storyteller/.env",
|
||||
"description": "Storyteller is a self-hosted platform for creating and reading ebooks with synced narration, combining audiobooks and ebooks with automatic synchronization.",
|
||||
"install_methods": [
|
||||
{
|
||||
"type": "default",
|
||||
"script": "ct/storyteller.sh",
|
||||
"resources": {
|
||||
"cpu": 4,
|
||||
"ram": 8192,
|
||||
"hdd": 16,
|
||||
"os": "Debian",
|
||||
"version": "13"
|
||||
}
|
||||
}
|
||||
],
|
||||
"default_credentials": {
|
||||
"username": null,
|
||||
"password": null
|
||||
},
|
||||
"notes": [
|
||||
{
|
||||
"text": "Minimum 8GB RAM recommended. AI-based transcription is resource-intensive.",
|
||||
"type": "warning"
|
||||
},
|
||||
{
|
||||
"text": "Secret key is stored in `/opt/storyteller/.env`.",
|
||||
"type": "info"
|
||||
},
|
||||
{
|
||||
"text": "GPU acceleration is not available in the LXC version. Use CPU-based transcription.",
|
||||
"type": "info"
|
||||
}
|
||||
]
|
||||
}
|
||||
52
json/tubearchivist.json
Normal file
52
json/tubearchivist.json
Normal file
@@ -0,0 +1,52 @@
|
||||
{
|
||||
"name": "Tube Archivist",
|
||||
"slug": "tubearchivist",
|
||||
"categories": [
|
||||
13
|
||||
],
|
||||
"date_created": "2026-03-25",
|
||||
"type": "ct",
|
||||
"updateable": true,
|
||||
"privileged": false,
|
||||
"interface_port": 8000,
|
||||
"documentation": "https://docs.tubearchivist.com/",
|
||||
"website": "https://github.com/tubearchivist/tubearchivist",
|
||||
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/tube-archivist.webp",
|
||||
"config_path": "/opt/tubearchivist/.env",
|
||||
"description": "Tube Archivist is a self-hosted YouTube media collection manager that indexes your video collection with metadata for organizing, searching, and playing archived YouTube videos offline.",
|
||||
"install_methods": [
|
||||
{
|
||||
"type": "default",
|
||||
"script": "ct/tubearchivist.sh",
|
||||
"resources": {
|
||||
"cpu": 4,
|
||||
"ram": 6144,
|
||||
"hdd": 30,
|
||||
"os": "Debian",
|
||||
"version": "13"
|
||||
}
|
||||
}
|
||||
],
|
||||
"default_credentials": {
|
||||
"username": "admin",
|
||||
"password": null
|
||||
},
|
||||
"notes": [
|
||||
{
|
||||
"text": "Requires `vm.max_map_count=262144` on the Proxmox host. Run `sysctl -w vm.max_map_count=262144` on the host and add it to `/etc/sysctl.conf` for persistence.",
|
||||
"type": "warning"
|
||||
},
|
||||
{
|
||||
"text": "ElasticSearch is configured with 1GB heap. Adjust `/etc/elasticsearch/jvm.options.d/heap.options` for larger collections.",
|
||||
"type": "info"
|
||||
},
|
||||
{
|
||||
"text": "Admin password is stored in `/opt/tubearchivist/.env`.",
|
||||
"type": "info"
|
||||
},
|
||||
{
|
||||
"text": "Minimum 6GB RAM recommended. ElasticSearch alone requires 2GB+.",
|
||||
"type": "warning"
|
||||
}
|
||||
]
|
||||
}
|
||||
Reference in New Issue
Block a user