Commit Graph

3433 Commits

Author SHA1 Message Date
CanbiZ (MickLesk)
558c27ec88 Add Baserow, LabCA, and LobeHub installers
Add container templates, install scripts, and metadata for Baserow, LabCA, and LobeHub. New ct/*.sh scripts provide container build and update logic (fetching GitHub releases, backup/restore, build steps). New install/*.sh scripts install dependencies, configure PostgreSQL/Node/uv/PNPM as needed, run migrations, and create systemd services for each app. Corresponding json/*.json entries add metadata (ports, resource defaults, docs, and notes) for UI/registry integration.
2026-03-25 17:34:25 +01:00
CanbiZ (MickLesk)
864761104c fix(tubearchivist): restart nginx after writing config
Debian auto-starts nginx on install with default config (port 80).
'enable --now' is a no-op if already running. Use explicit restart
to pick up our port 8000 config.
2026-03-25 17:08:56 +01:00
CanbiZ (MickLesk)
6983456e68 fix(tubearchivist): add ES_SNAPSHOT_DIR to .env
ES snapshot repo defaults to Docker path /usr/share/elasticsearch/data/snapshot
but our elasticsearch.yml uses path.repo: /var/lib/elasticsearch/snapshot.
Add ES_SNAPSHOT_DIR=/var/lib/elasticsearch/snapshot to match.
2026-03-25 17:05:16 +01:00
CanbiZ (MickLesk)
df6fabdbc4 fix(tubearchivist): source .env in run.sh + symlink for dotenv
run.sh needs env vars (TA_CACHE_DIR etc) before Django starts.
- Add set -a/source .env in run.sh so vars are available
- Symlink .env to backend/ so Django's load_dotenv('.env') finds it
- Fixes 'unable to open database file' (CACHE_DIR defaulting to /cache)
2026-03-25 17:02:45 +01:00
CanbiZ (MickLesk)
3bce8dd3f8 fix(tubearchivist): use startup wrapper script like Docker
Move Django management commands (migrate, collectstatic, ta_envcheck,
ta_connection, ta_startup) into run.sh startup wrapper that:
- Waits up to 60s for ElasticSearch to be healthy
- Runs all init commands before starting uvicorn
- Matches Docker's run.sh approach

This fixes ta_startup failing during install because ES wasn't ready.
The commands now run at every service start with ES readiness check.
2026-03-25 16:43:07 +01:00
CanbiZ (MickLesk)
462c95ee19 fix(tubearchivist): add nginx reverse proxy + celery services
TubeArchivist requires nginx to serve the frontend SPA and proxy API
requests to Django. Without nginx, only API routes work.

Changes:
- Add nginx with config matching Docker's nginx.conf (port 8000)
- Add TA_APP_DIR, TA_CACHE_DIR, TA_MEDIA_DIR env vars for bare-metal paths
- Run Django migrate, collectstatic, ta_envcheck, ta_connection, ta_startup
- Add celery worker + beat scheduler as separate systemd services
- Fix interface port from 8080 to 8000 (nginx)
- Add migrations step to update script
2026-03-25 16:30:36 +01:00
CanbiZ (MickLesk)
617b4443f9 fix(tubearchivist): correct port to 8080
backend_start.py reads TA_BACKEND_PORT (default 8080), not TA_PORT.
Fix .env var name and all port references from 8000 to 8080.
2026-03-25 16:19:04 +01:00
CanbiZ (MickLesk)
b3df4b8cb2 fix(teable): remove unnecessary .creds file
PG_DB_PASS is auto-generated by setup_postgresql_db and stored in
.env. No user-facing credentials are generated - accounts are
created via the web UI.
2026-03-25 16:09:08 +01:00
CanbiZ (MickLesk)
c5e5a938c7 feat: add .creds files for erpnext, teable, tubearchivist, storyteller
Write credentials to ~/appname.creds matching existing convention
(affine, discourse, ente). Update CT scripts to reference .creds.

- erpnext: admin pass, db root pass
- teable: db pass, secret key
- tubearchivist: admin pass, ES pass
- storyteller: secret key
2026-03-25 16:07:52 +01:00
CanbiZ (MickLesk)
f8e8feea87 fix(erpnext): link supervisor config and load process groups
bench setup production generates supervisor.conf but doesn't
symlink it into /etc/supervisor/conf.d/. Without the link,
supervisord has no programs and gunicorn never starts (502).

Add: symlink + supervisorctl reread/update after bench setup.
2026-03-25 16:01:13 +01:00
CanbiZ (MickLesk)
8c9c69aa22 fix(erpnext): symlink ansible binaries to /usr/local/bin
bench setup role spawns a subprocess that checks for ansible on
PATH. The binaries are inside the uv venv and not discoverable.
Symlink ansible* to /usr/local/bin/ to make them available.
2026-03-25 15:56:35 +01:00
CanbiZ (MickLesk)
61b8d3e088 fix(erpnext): use get-pip.py instead of ensurepip
uv's bundled Python has ensurepip stripped out.
Bootstrap pip via get-pip.py from pypa instead.
2026-03-25 15:54:39 +01:00
CanbiZ (MickLesk)
d817b4326c fix(erpnext): bootstrap pip in uv venv for ansible install
bench setup production internally runs:
  sudo <uv-venv-python> -m pip install ansible
but uv tool environments don't include pip by default.

Fix: run ensurepip + pip install ansible before bench setup
production to satisfy the dependency.
2026-03-25 15:38:18 +01:00
CanbiZ (MickLesk)
1e9311e67f fix(teable): rm -rf static dir before symlinking
The build creates /opt/teable/static/ as a real directory.
ln -sf on an existing directory creates the symlink INSIDE it
instead of replacing it. Must rm -rf first.
2026-03-25 15:36:35 +01:00
CanbiZ (MickLesk)
20c6c3e74f fix(teable): point static symlink to nested static/static dir
Build process reorganizes apps/nestjs-backend/static/ creating a
nested static/static/{plugin,system} structure. The code resolves
paths like 'static/system/automation-robot.png' relative to cwd,
so the symlink must point to the inner static/ directory.

Adds fallback: checks for nested structure first, falls back to
direct path if not present.
2026-03-25 15:29:38 +01:00
CanbiZ (MickLesk)
4fead19d7d fix(teable): symlink static/ dir for builtin system assets
- NestJS backend expects /opt/teable/static/ at workspace root
- Actual files live in apps/nestjs-backend/static/
- Fixes ENOENT on automation-robot.png during startup
2026-03-25 15:24:24 +01:00
CanbiZ (MickLesk)
9e4d963645 fix(teable): add missing env vars for NestJS config validation
- Add BACKEND_CACHE_PROVIDER=sqlite (no Redis needed)
- Add BACKEND_CACHE_SQLITE_URI for sqlite cache path
- Add NEXTJS_DIR for next.js app resolution
- Create .assets and .temporary dirs for local cache/storage
- Fixes 'PRISMA_DATABASE_URL is required' config validation error
2026-03-25 15:20:48 +01:00
CanbiZ (MickLesk)
402c2f6924 fix(erpnext): add frappe user to sudoers with NOPASSWD
- bench init internally invokes sudo for system operations
- frappe user has no password, causing 'Sorry, try again' hang
- Add /etc/sudoers.d/frappe with NOPASSWD:ALL
2026-03-25 15:04:20 +01:00
CanbiZ (MickLesk)
83a2a4c37e fix(storyteller): use Node.js 24 as recommended by upstream docs
- Upstream requires Node 24.x - fixes SyntaxError in worker.cjs
- Add sqlite3 CLI tool as recommended dependency
2026-03-25 15:03:28 +01:00
CanbiZ (MickLesk)
2ca9ae4d1b fix(storyteller): use cp -rT to merge into existing standalone dirs
- cp -r creates nested dirs when target already exists (sqlite/sqlite/)
- cp -rT merges source contents INTO the target directory
- mkdir -p ensures target dirs exist before merge
- Fixes uuid.c.so not being found in standalone/web/sqlite/
2026-03-25 14:59:43 +01:00
CanbiZ (MickLesk)
17b027da9b feat(teable): add Teable no-code database LXC script
- NestJS backend serves both API and Next.js frontend on port 3000
- PostgreSQL 16 with Prisma ORM for database management
- pnpm monorepo build with NODE_OPTIONS=8192MB heap
- Symlink /app -> /opt/teable for upstream compatibility
- 4 CPU / 10GB RAM / 25GB disk (heavy build process)
2026-03-25 14:56:16 +01:00
CanbiZ (MickLesk)
f42318842e fix(jitsi): remove sysctl tuning - not available in LXC containers
- net.core.rmem_max and netdev_max_backlog are kernel params
- Unprivileged LXC containers cannot modify /proc/sys/net/core/*
- These are optional performance tunings, not required for Jitsi
2026-03-25 14:26:39 +01:00
CanbiZ (MickLesk)
825a718a07 fix(erpnext): run bench setup production as root, add nginx+supervisor
- bench setup production requires root (is_root check) - was failing as frappe user
- Add nginx and supervisor as apt dependencies for production setup
- Remove custom erpnext.service - bench manages gunicorn+workers via supervisor
- Port 8000 → 80 (nginx reverse proxy)
- Fix bench update in CT to run as frappe user with proper PATH
2026-03-25 14:26:04 +01:00
CanbiZ (MickLesk)
1c939ff0cc fix(storyteller): copy migrations, sqlite and .env to standalone dir
- cp migrations/ and sqlite/ (dlopen needs real files, not symlinks)
- symlink .env into standalone working directory
- Fixes standalone mode missing database and config files
2026-03-25 14:17:24 +01:00
CanbiZ (MickLesk)
ba21020873 fix(erpnext): set MariaDB root password for frappe user access
- MariaDB uses unix_socket auth - frappe user can't connect as MySQL root
- Set proper password and pass via --db-root-password to bench new-site
- Store DB_ROOT_PASSWORD in .env for reference
2026-03-25 14:04:04 +01:00
CanbiZ (MickLesk)
5352292d5b fix(storyteller): OOM fix - limit Node heap, restore \, bump RAM to 10GB
- NODE_OPTIONS=--max-old-space-size=4096 to cap V8 heap during yarn install/build
- Restore \ prefixes removed by formatter
- RAM 8192 -> 10240 in JSON
- yarn install --network-timeout 600000 for large monorepo fetch
2026-03-25 13:52:18 +01:00
CanbiZ (MickLesk)
2b85a73348 test 2026-03-25 13:51:36 +01:00
CanbiZ (MickLesk)
18c29e3ce2 fix(erpnext): add python3-dev for hiredis compilation (Python.h) 2026-03-25 13:43:03 +01:00
CanbiZ (MickLesk)
bfbafb781b fix(jitsi): remove prosody.im repo, use Debian's prosody 0.12.x
Prosody 13.x from prosody.im requires Lua 5.2+ but Debian 12 only has
Lua 5.1. Debian's own prosody (0.12.x) is compatible and satisfies
jitsi-meet's >= 0.12.0 dependency.
2026-03-25 13:34:35 +01:00
CanbiZ (MickLesk)
0ac7fa4e2f Run Frappe bench as 'frappe' system user
Create a dedicated 'frappe' user and run all bench/uv commands as that user. Chown /opt, install frappe-bench and perform bench init, get-app and new-site via sudo -u frappe (preserving PATH), and run 'bench setup production frappe --yes'. Update the systemd service to User=frappe so Gunicorn and bench processes do not run as root, improving security and isolation.
2026-03-25 13:28:03 +01:00
CanbiZ (MickLesk)
8dc0295f13 fix(storybook): add --no-dev to prevent init from starting dev server
storybook v10 starts the dev server after init by default, causing the
install script to hang forever
2026-03-25 12:46:25 +01:00
CanbiZ (MickLesk)
f5a72358f3 fix(tubearchivist): remove nginx, backend listens directly on 8000
- Remove nginx reverse proxy (caused 502 because backend didn't start)
- TA_PORT=8000 so Django serves directly on port 8000
2026-03-25 12:15:16 +01:00
CanbiZ (MickLesk)
419893df01 fix(storyteller): correct standalone path, add CI=1, copy static assets
- WorkingDirectory: web/.next/standalone/web (not .next/standalone/web)
- CI=1 to prevent interactive prompts during yarn build
- Copy .next/static and public into standalone output
2026-03-25 12:14:36 +01:00
CanbiZ (MickLesk)
1f94843c9c fix: tubearchivist port conflict, jitsi flat repo, erpnext root env
- tubearchivist: backend on 8100 behind nginx on 8000 (was both 8000)
- jitsi: URI=download.jitsi.org suite=stable/ component=empty for flat repo
- erpnext: use CI=1 and FRAPPE_ALLOW_SUPERUSER=1 (not BENCH_ALLOW_SUPERUSER)
2026-03-25 12:08:20 +01:00
CanbiZ (MickLesk)
c2f189e9f9 fix(jitsi): use ./ suite for flat repo format
stable/ is also a flat repo but setup_deb822_repo only recognizes
./ as flat. Use URI with /stable and suite ./ to avoid malformed
sources entry.
2026-03-25 11:56:13 +01:00
CanbiZ (MickLesk)
01e5884ae4 fix: erpnext bench root, jitsi repo URL, tubearchivist python3-dev, storyteller deps
- erpnext: add BENCH_ALLOW_SUPERUSER=1 for root execution
- jitsi: fix double stable/stable/ in repo URL
- tubearchivist: add python3-dev for python-ldap C extension build
- storyteller: add python3-setuptools and pkg-config for sqlite3 build
2026-03-25 11:47:22 +01:00
CanbiZ (MickLesk)
7a68fd9a24 Set Debian version to 12 and drop Java setup
Align defaults to Debian 12 and remove the explicit Java setup call from the installer. Updated ct/jitsi-meet.sh to default var_version to 12, json/jitsi.json to reflect version "12", and removed the `JAVA_VERSION=17 setup_java` line from install/jitsi-meet-install.sh so Java is no longer forced by the installer.
2026-03-25 11:27:57 +01:00
CanbiZ (MickLesk)
85d41e542d Update install scripts for storybook, readium, ES
Small fixes and improvements to installer scripts:

- storybook-install.sh: make npx non-interactive (add -y) and cd into the detected project path before writing .projectpath to ensure generated files land in the project directory.
- storyteller-install.sh: replace manual Readium curl/chmod flow with fetch_and_deploy_gh_release helper for consistent deployment; keep symlink to /usr/local/bin/readium.
- tubearchivist-install.sh: set ES_JAVA_OPTS during elasticsearch install to limit heap (-Xms1g -Xmx1g) and explicitly disable xpack transport/http SSL in the config to avoid local SSL requirements.

These changes improve automation reliability and resource/config defaults during automated installs.
2026-03-25 11:18:47 +01:00
CanbiZ (MickLesk)
525387e6d5 fix(erpnext): add ~/.local/bin to PATH after uv tool install
uv tool install frappe-bench places the bench executable in
~/.local/bin which is not on PATH by default, causing 'command
not found' (exit 127) when running bench init.
2026-03-25 11:07:17 +01:00
CanbiZ (MickLesk)
65a9b046c2 ffmpeg 2026-03-25 10:59:03 +01:00
CanbiZ (MickLesk)
91e1d2831e add java 2026-03-25 10:57:08 +01:00
CanbiZ (MickLesk)
1778396549 fixes 2026-03-25 10:51:12 +01:00
CanbiZ (MickLesk)
f77a0fd9cc rename jitsy 2026-03-25 10:43:54 +01:00
CanbiZ (MickLesk)
4d40f65286 Include ffmpeg and drop setup_ffmpeg from install
Add ffmpeg to the apt packages installed by install/birdnet-install.sh and remove the now-unnecessary setup_ffmpeg invocation. Also apply a minor whitespace change to json/birdnet.json (remove trailing newline).
2026-03-25 10:37:09 +01:00
CanbiZ (MickLesk)
c64a0c60ab rename birdnet 2026-03-25 10:27:09 +01:00
CanbiZ (MickLesk)
9d21dfa112 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.
2026-03-25 10:21:42 +01:00
CanbiZ (MickLesk)
adcb155210 Expose Matter Server data at /data; fix scripts
Create a /data symlink to /opt/matter-server/data (remove existing symlink if present) and update the matter-server systemd ExecStart to use /data and /data/credentials so storage can be mounted externally. Also clean up step-ca install script formatting: fix sed -i spacing, collapse the while loop header, and normalize indentation for whiptail and step-ca command lines (no functional behavior changes).
2026-03-25 08:46:01 +01:00
CanbiZ (MickLesk)
8c47039d0f Merge pull request #1519 from onionrings29/feat/add-plane
feat: add Plane LXC helper script
2026-03-25 08:42:51 +01:00
MickLesk
a794aa7fcc finalize 2026-03-24 21:49:43 +01:00
MickLesk
5ee4a927d9 fixes 2026-03-24 21:41:34 +01:00