diff --git a/ct/anchor.sh b/ct/anchor.sh new file mode 100644 index 00000000..f678faae --- /dev/null +++ b/ct/anchor.sh @@ -0,0 +1,83 @@ +#!/usr/bin/env bash +source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVED/main/misc/build.func) +# Copyright (c) 2021-2026 community-scripts ORG +# Author: MickLesk (CanbiZ) +# License: MIT | https://github.com/community-scripts/ProxmoxVED/raw/main/LICENSE +# Source: https://github.com/ZhFahim/anchor + +APP="Anchor" +var_tags="${var_tags:-notes;productivity;sync}" +var_cpu="${var_cpu:-2}" +var_ram="${var_ram:-2048}" +var_disk="${var_disk:-10}" +var_os="${var_os:-debian}" +var_version="${var_version:-13}" +var_unprivileged="${var_unprivileged:-1}" + +header_info "$APP" +variables +color +catch_errors + +function update_script() { + header_info + check_container_storage + check_container_resources + + if [[ ! -f ~/.anchor ]]; then + msg_error "No ${APP} Installation Found!" + exit + fi + + if check_for_gh_release "anchor" "ZhFahim/anchor"; then + msg_info "Stopping Services" + systemctl stop anchor-web anchor-server + msg_ok "Stopped Services" + + msg_info "Backing up Configuration" + cp /opt/anchor/.env /opt/anchor.env.bak + msg_ok "Backed up Configuration" + + CLEAN_INSTALL=1 fetch_and_deploy_gh_release "anchor" "ZhFahim/anchor" "tarball" + + msg_info "Building Server" + cd /opt/anchor/server + $STD pnpm install --frozen-lockfile + $STD pnpm prisma generate + $STD pnpm build + [[ -d src/generated ]] && mkdir -p dist/src && cp -R src/generated dist/src/ + msg_ok "Built Server" + + msg_info "Building Web Interface" + cd /opt/anchor/web + $STD pnpm install --frozen-lockfile + SERVER_URL=http://127.0.0.1:3001 $STD pnpm build + cp -r .next/static .next/standalone/.next/static + cp -r public .next/standalone/public + msg_ok "Built Web Interface" + + cp /opt/anchor.env.bak /opt/anchor/.env + rm -f /opt/anchor.env.bak + + msg_info "Running Database Migrations" + cd /opt/anchor/server + set -a && source /opt/anchor/.env && set +a + $STD pnpm prisma migrate deploy + msg_ok "Ran Database Migrations" + + msg_info "Starting Services" + systemctl start anchor-server anchor-web + msg_ok "Started Services" + msg_ok "Updated ${APP}" + fi + exit +} + +start +build_container +description + +msg_ok "Completed Successfully!\n" +echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}" +echo -e "${INFO}${YW} Access it using the following URL:${CL}" +echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:3000${CL}" diff --git a/ct/slink.sh b/ct/slink.sh new file mode 100644 index 00000000..dc57d972 --- /dev/null +++ b/ct/slink.sh @@ -0,0 +1,78 @@ +#!/usr/bin/env bash +source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVED/main/misc/build.func) +# Copyright (c) 2021-2026 community-scripts ORG +# Author: MickLesk (CanbiZ) +# License: MIT | https://github.com/community-scripts/ProxmoxVED/raw/main/LICENSE +# Source: https://github.com/andrii-kryvoviaz/slink + +APP="Slink" +var_tags="${var_tags:-media;images;sharing}" +var_cpu="${var_cpu:-2}" +var_ram="${var_ram:-2048}" +var_disk="${var_disk:-10}" +var_os="${var_os:-debian}" +var_version="${var_version:-13}" +var_unprivileged="${var_unprivileged:-1}" + +header_info "$APP" +variables +color +catch_errors + +function update_script() { + header_info + check_container_storage + check_container_resources + + if [[ ! -f ~/.slink ]]; then + msg_error "No ${APP} Installation Found!" + exit + fi + + if check_for_gh_release "slink" "andrii-kryvoviaz/slink"; then + msg_info "Stopping Services" + systemctl stop slink-client caddy + msg_ok "Stopped Services" + + msg_info "Backing up Data" + cp /opt/slink/services/api/.env /opt/slink-api.env.bak + mv /opt/slink/data /opt/slink-data.bak + mv /opt/slink/images /opt/slink-images.bak + msg_ok "Backed up Data" + + CLEAN_INSTALL=1 fetch_and_deploy_gh_release "slink" "andrii-kryvoviaz/slink" "tarball" + + msg_info "Building Client" + cd /opt/slink/services/client + $STD yarn install --frozen-lockfile --non-interactive + $STD yarn svelte-kit sync + NODE_OPTIONS="--max-old-space-size=2048" $STD yarn build + msg_ok "Built Client" + + msg_info "Updating API" + cd /opt/slink/services/api + cp /opt/slink-api.env.bak .env + $STD composer install --no-dev --optimize-autoloader --no-interaction + $STD php bin/console cache:clear + msg_ok "Updated API" + + mv /opt/slink-data.bak /opt/slink/data + mv /opt/slink-images.bak /opt/slink/images + rm -f /opt/slink-api.env.bak + + msg_info "Starting Services" + systemctl start caddy slink-client + msg_ok "Started Services" + msg_ok "Updated ${APP}" + fi + exit +} + +start +build_container +description + +msg_ok "Completed Successfully!\n" +echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}" +echo -e "${INFO}${YW} Access it using the following URL:${CL}" +echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:3000${CL}" diff --git a/ct/soulsync.sh b/ct/soulsync.sh new file mode 100644 index 00000000..171ed438 --- /dev/null +++ b/ct/soulsync.sh @@ -0,0 +1,68 @@ +#!/usr/bin/env bash +source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVED/main/misc/build.func) +# Copyright (c) 2021-2026 community-scripts ORG +# Author: MickLesk (CanbiZ) +# License: MIT | https://github.com/community-scripts/ProxmoxVED/raw/main/LICENSE +# Source: https://github.com/Nezreka/SoulSync + +APP="SoulSync" +var_tags="${var_tags:-music;automation;media}" +var_cpu="${var_cpu:-2}" +var_ram="${var_ram:-2048}" +var_disk="${var_disk:-8}" +var_os="${var_os:-debian}" +var_version="${var_version:-13}" +var_unprivileged="${var_unprivileged:-1}" + +header_info "$APP" +variables +color +catch_errors + +function update_script() { + header_info + check_container_storage + check_container_resources + + if [[ ! -f ~/.soulsync ]]; then + msg_error "No ${APP} Installation Found!" + exit + fi + + if check_for_gh_release "soulsync" "Nezreka/SoulSync"; then + msg_info "Stopping Service" + systemctl stop soulsync + msg_ok "Stopped Service" + + msg_info "Backing up Data" + mv /opt/soulsync/config /opt/soulsync-config.bak + mv /opt/soulsync/data /opt/soulsync-data.bak + msg_ok "Backed up Data" + + CLEAN_INSTALL=1 fetch_and_deploy_gh_release "soulsync" "Nezreka/SoulSync" "tarball" + + msg_info "Updating Python Dependencies" + cd /opt/soulsync + $STD uv venv /opt/soulsync/.venv --python 3.11 + $STD /opt/soulsync/.venv/bin/pip install -r requirements-webui.txt + msg_ok "Updated Python Dependencies" + + mv /opt/soulsync-config.bak /opt/soulsync/config + mv /opt/soulsync-data.bak /opt/soulsync/data + + msg_info "Starting Service" + systemctl start soulsync + msg_ok "Started Service" + msg_ok "Updated ${APP}" + fi + exit +} + +start +build_container +description + +msg_ok "Completed Successfully!\n" +echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}" +echo -e "${INFO}${YW} Access it using the following URL:${CL}" +echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8008${CL}" diff --git a/ct/trek.sh b/ct/trek.sh new file mode 100644 index 00000000..a11b3275 --- /dev/null +++ b/ct/trek.sh @@ -0,0 +1,81 @@ +#!/usr/bin/env bash +source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVED/main/misc/build.func) +# Copyright (c) 2021-2026 community-scripts ORG +# Author: MickLesk (CanbiZ) +# License: MIT | https://github.com/community-scripts/ProxmoxVED/raw/main/LICENSE +# Source: https://github.com/mauriceboe/TREK + +APP="TREK" +var_tags="${var_tags:-travel;planning;collaboration}" +var_cpu="${var_cpu:-2}" +var_ram="${var_ram:-2048}" +var_disk="${var_disk:-8}" +var_os="${var_os:-debian}" +var_version="${var_version:-13}" +var_unprivileged="${var_unprivileged:-1}" + +header_info "$APP" +variables +color +catch_errors + +function update_script() { + header_info + check_container_storage + check_container_resources + + if [[ ! -f ~/.trek ]]; then + msg_error "No ${APP} Installation Found!" + exit + fi + + if check_for_gh_release "trek" "mauriceboe/TREK"; then + msg_info "Stopping Service" + systemctl stop trek + msg_ok "Stopped Service" + + msg_info "Backing up Data" + cp /opt/trek/server/.env /opt/trek.env.bak + mv /opt/trek/data /opt/trek-data.bak + mv /opt/trek/uploads /opt/trek-uploads.bak + msg_ok "Backed up Data" + + CLEAN_INSTALL=1 fetch_and_deploy_gh_release "trek" "mauriceboe/TREK" "tarball" + + msg_info "Building Client" + cd /opt/trek/client + $STD npm ci + $STD npm run build + mkdir -p /opt/trek/server/public + cp -r /opt/trek/client/dist/* /opt/trek/server/public/ + cp -r /opt/trek/client/public/fonts /opt/trek/server/public/fonts 2>/dev/null || true + msg_ok "Built Client" + + msg_info "Installing Server Dependencies" + cd /opt/trek/server + $STD npm ci --production + msg_ok "Installed Server Dependencies" + + mv /opt/trek-data.bak /opt/trek/data + mv /opt/trek-uploads.bak /opt/trek/uploads + ln -sf /opt/trek/data /opt/trek/server/data + ln -sf /opt/trek/uploads /opt/trek/server/uploads + cp /opt/trek.env.bak /opt/trek/server/.env + rm -f /opt/trek.env.bak + + msg_info "Starting Service" + systemctl start trek + msg_ok "Started Service" + msg_ok "Updated ${APP}" + fi + exit +} + +start +build_container +description + +msg_ok "Completed Successfully!\n" +echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}" +echo -e "${INFO}${YW} Access it using the following URL:${CL}" +echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:3000${CL}" diff --git a/ct/upsnap.sh b/ct/upsnap.sh new file mode 100644 index 00000000..0b4ddde1 --- /dev/null +++ b/ct/upsnap.sh @@ -0,0 +1,56 @@ +#!/usr/bin/env bash +source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVED/main/misc/build.func) +# Copyright (c) 2021-2026 community-scripts ORG +# Author: MickLesk (CanbiZ) +# License: MIT | https://github.com/community-scripts/ProxmoxVED/raw/main/LICENSE +# Source: https://github.com/seriousm4x/UpSnap + +APP="UpSnap" +var_tags="${var_tags:-network;wol;monitoring}" +var_cpu="${var_cpu:-1}" +var_ram="${var_ram:-512}" +var_disk="${var_disk:-2}" +var_os="${var_os:-debian}" +var_version="${var_version:-13}" +var_unprivileged="${var_unprivileged:-1}" + +header_info "$APP" +variables +color +catch_errors + +function update_script() { + header_info + check_container_storage + check_container_resources + + if [[ ! -f ~/.upsnap ]]; then + msg_error "No ${APP} Installation Found!" + exit + fi + + if check_for_gh_release "upsnap" "seriousm4x/UpSnap"; then + msg_info "Stopping Service" + systemctl stop upsnap + msg_ok "Stopped Service" + + fetch_and_deploy_gh_release "upsnap" "seriousm4x/UpSnap" "prebuild" "latest" "/opt/upsnap" "UpSnap_*_linux_amd64.zip" + chmod +x /opt/upsnap/upsnap + setcap 'cap_net_raw=+ep' /opt/upsnap/upsnap + + msg_info "Starting Service" + systemctl start upsnap + msg_ok "Started Service" + msg_ok "Updated ${APP}" + fi + exit +} + +start +build_container +description + +msg_ok "Completed Successfully!\n" +echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}" +echo -e "${INFO}${YW} Access it using the following URL:${CL}" +echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8090${CL}" diff --git a/install/anchor-install.sh b/install/anchor-install.sh new file mode 100644 index 00000000..3d8d8b4b --- /dev/null +++ b/install/anchor-install.sh @@ -0,0 +1,100 @@ +#!/usr/bin/env bash + +# Copyright (c) 2021-2026 community-scripts ORG +# Author: MickLesk (CanbiZ) +# License: MIT | https://github.com/community-scripts/ProxmoxVED/raw/main/LICENSE +# Source: https://github.com/ZhFahim/anchor + +source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" +color +verb_ip6 +catch_errors +setting_up_container +network_check +update_os + +NODE_VERSION="22" NODE_MODULE="pnpm" setup_nodejs + +PG_VERSION="17" setup_postgresql +PG_DB_NAME="anchor" PG_DB_USER="anchor" setup_postgresql_db + +fetch_and_deploy_gh_release "anchor" "ZhFahim/anchor" "tarball" + +msg_info "Building Server" +cd /opt/anchor/server +$STD pnpm install --frozen-lockfile +$STD pnpm prisma generate +$STD pnpm build +[[ -d src/generated ]] && mkdir -p dist/src && cp -R src/generated dist/src/ +msg_ok "Built Server" + +msg_info "Building Web Interface" +cd /opt/anchor/web +$STD pnpm install --frozen-lockfile +SERVER_URL=http://127.0.0.1:3001 $STD pnpm build +cp -r .next/static .next/standalone/.next/static +cp -r public .next/standalone/public +msg_ok "Built Web Interface" + +msg_info "Configuring Application" +JWT_SECRET=$(openssl rand -base64 32) +cat </opt/anchor/.env +APP_URL=http://${LOCAL_IP}:3000 +JWT_SECRET=${JWT_SECRET} +DATABASE_URL=postgresql://anchor:${PG_DB_PASS}@localhost:5432/anchor +PG_HOST=localhost +PG_USER=anchor +PG_PASSWORD=${PG_DB_PASS} +PG_DATABASE=anchor +PG_PORT=5432 +EOF +msg_ok "Configured Application" + +msg_info "Running Database Migrations" +cd /opt/anchor/server +set -a && source /opt/anchor/.env && set +a +$STD pnpm prisma migrate deploy +msg_ok "Ran Database Migrations" + +msg_info "Creating Services" +cat </etc/systemd/system/anchor-server.service +[Unit] +Description=Anchor API Server +After=network.target postgresql.service + +[Service] +Type=simple +User=root +WorkingDirectory=/opt/anchor/server +EnvironmentFile=/opt/anchor/.env +ExecStart=/usr/bin/node dist/src/main.js +Restart=on-failure +RestartSec=5 + +[Install] +WantedBy=multi-user.target +EOF +cat </etc/systemd/system/anchor-web.service +[Unit] +Description=Anchor Web Interface +After=network.target anchor-server.service + +[Service] +Type=simple +User=root +WorkingDirectory=/opt/anchor/web/.next/standalone +EnvironmentFile=/opt/anchor/.env +Environment=PORT=3000 HOSTNAME=0.0.0.0 NODE_ENV=production +ExecStart=/usr/bin/node server.js +Restart=on-failure +RestartSec=5 + +[Install] +WantedBy=multi-user.target +EOF +systemctl enable -q --now anchor-server anchor-web +msg_ok "Created Services" + +motd_ssh +customize +cleanup_lxc diff --git a/install/slink-install.sh b/install/slink-install.sh new file mode 100644 index 00000000..9e64fdbb --- /dev/null +++ b/install/slink-install.sh @@ -0,0 +1,83 @@ +#!/usr/bin/env bash + +# Copyright (c) 2021-2026 community-scripts ORG +# Author: MickLesk (CanbiZ) +# License: MIT | https://github.com/community-scripts/ProxmoxVED/raw/main/LICENSE +# Source: https://github.com/andrii-kryvoviaz/slink + +source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" +color +verb_ip6 +catch_errors +setting_up_container +network_check +update_os + +msg_info "Installing Dependencies" +$STD apt install -y \ + caddy \ + redis-server +msg_ok "Installed Dependencies" + +PHP_VERSION="8.3" PHP_MODULES="redis,gd,intl,zip,sqlite3,xml,curl,exif,imagick" setup_php + +setup_composer + +NODE_VERSION="22" NODE_MODULE="yarn" setup_nodejs + +fetch_and_deploy_gh_release "slink" "andrii-kryvoviaz/slink" "tarball" + +msg_info "Building Client" +cd /opt/slink/services/client +$STD yarn install --frozen-lockfile --non-interactive +$STD yarn svelte-kit sync +NODE_OPTIONS="--max-old-space-size=2048" $STD yarn build +msg_ok "Built Client" + +msg_info "Setting up API" +cd /opt/slink/services/api +[[ -f .env.example ]] && cp .env.example .env +APP_SECRET=$(openssl rand -hex 16) +sed -i "s|^APP_SECRET=.*|APP_SECRET=${APP_SECRET}|" .env +sed -i "s|^APP_ENV=.*|APP_ENV=prod|" .env +$STD composer install --no-dev --optimize-autoloader --no-interaction +mkdir -p /opt/slink/{data,images} +$STD php bin/console cache:warm --no-optional-warmers 2>/dev/null || true +msg_ok "Set up API" + +msg_info "Configuring Caddy" +PHP_VER=$(php -r 'echo PHP_MAJOR_VERSION . "." . PHP_MINOR_VERSION;') +cat </etc/caddy/Caddyfile +:8080 { + root * /opt/slink/services/api/public + php_fastcgi unix//run/php/php${PHP_VER}-fpm.sock + file_server + encode gzip +} +EOF +msg_ok "Configured Caddy" + +msg_info "Creating Services" +cat </etc/systemd/system/slink-client.service +[Unit] +Description=Slink Client +After=network.target + +[Service] +Type=simple +User=root +WorkingDirectory=/opt/slink/services/client +ExecStart=/usr/bin/node build/index.js +Environment=PORT=3000 NODE_ENV=production BODY_SIZE_LIMIT=Infinity +Restart=on-failure +RestartSec=5 + +[Install] +WantedBy=multi-user.target +EOF +systemctl enable -q --now redis-server php${PHP_VER}-fpm caddy slink-client +msg_ok "Created Services" + +motd_ssh +customize +cleanup_lxc diff --git a/install/soulsync-install.sh b/install/soulsync-install.sh new file mode 100644 index 00000000..8c4c4862 --- /dev/null +++ b/install/soulsync-install.sh @@ -0,0 +1,60 @@ +#!/usr/bin/env bash + +# Copyright (c) 2021-2026 community-scripts ORG +# Author: MickLesk (CanbiZ) +# License: MIT | https://github.com/community-scripts/ProxmoxVED/raw/main/LICENSE +# Source: https://github.com/Nezreka/SoulSync + +source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" +color +verb_ip6 +catch_errors +setting_up_container +network_check +update_os + +msg_info "Installing Dependencies" +$STD apt install -y \ + gcc \ + libffi-dev \ + libssl-dev \ + libchromaprint-tools +msg_ok "Installed Dependencies" + +UV_PYTHON="3.11" setup_uv + +setup_ffmpeg + +fetch_and_deploy_gh_release "soulsync" "Nezreka/SoulSync" "tarball" + +msg_info "Setting up Application" +cd /opt/soulsync +$STD uv venv /opt/soulsync/.venv --python 3.11 +$STD /opt/soulsync/.venv/bin/pip install -r requirements-webui.txt +mkdir -p /opt/soulsync/{config,data,logs} +msg_ok "Set up Application" + +msg_info "Creating Service" +cat </etc/systemd/system/soulsync.service +[Unit] +Description=SoulSync Music Discovery +After=network.target + +[Service] +Type=simple +User=root +WorkingDirectory=/opt/soulsync +ExecStart=/opt/soulsync/.venv/bin/python web_server.py +Environment=PYTHONPATH=/opt/soulsync PYTHONUNBUFFERED=1 DATABASE_PATH=/opt/soulsync/data/music_library.db +Restart=on-failure +RestartSec=5 + +[Install] +WantedBy=multi-user.target +EOF +systemctl enable -q --now soulsync +msg_ok "Created Service" + +motd_ssh +customize +cleanup_lxc diff --git a/install/trek-install.sh b/install/trek-install.sh new file mode 100644 index 00000000..14a1450b --- /dev/null +++ b/install/trek-install.sh @@ -0,0 +1,71 @@ +#!/usr/bin/env bash + +# Copyright (c) 2021-2026 community-scripts ORG +# Author: MickLesk (CanbiZ) +# License: MIT | https://github.com/community-scripts/ProxmoxVED/raw/main/LICENSE +# Source: https://github.com/mauriceboe/TREK + +source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" +color +verb_ip6 +catch_errors +setting_up_container +network_check +update_os + +msg_info "Installing Dependencies" +$STD apt install -y build-essential +msg_ok "Installed Dependencies" + +NODE_VERSION="22" setup_nodejs + +fetch_and_deploy_gh_release "trek" "mauriceboe/TREK" "tarball" + +msg_info "Building Client" +cd /opt/trek/client +$STD npm ci +$STD npm run build +msg_ok "Built Client" + +msg_info "Setting up Server" +cd /opt/trek/server +$STD npm ci --production +mkdir -p /opt/trek/server/public +cp -r /opt/trek/client/dist/* /opt/trek/server/public/ +cp -r /opt/trek/client/public/fonts /opt/trek/server/public/fonts 2>/dev/null || true +mkdir -p /opt/trek/{data/logs,uploads/{files,covers,avatars,photos}} +ln -sf /opt/trek/data /opt/trek/server/data +ln -sf /opt/trek/uploads /opt/trek/server/uploads +ENCRYPTION_KEY=$(openssl rand -hex 32) +cat </opt/trek/server/.env +NODE_ENV=production +PORT=3000 +ENCRYPTION_KEY=${ENCRYPTION_KEY} +TZ=UTC +EOF +msg_ok "Set up Server" + +msg_info "Creating Service" +cat </etc/systemd/system/trek.service +[Unit] +Description=TREK Travel Planner +After=network.target + +[Service] +Type=simple +User=root +WorkingDirectory=/opt/trek/server +EnvironmentFile=/opt/trek/server/.env +ExecStart=/usr/bin/node --import tsx src/index.ts +Restart=on-failure +RestartSec=5 + +[Install] +WantedBy=multi-user.target +EOF +systemctl enable -q --now trek +msg_ok "Created Service" + +motd_ssh +customize +cleanup_lxc diff --git a/install/upsnap-install.sh b/install/upsnap-install.sh new file mode 100644 index 00000000..6e7a4221 --- /dev/null +++ b/install/upsnap-install.sh @@ -0,0 +1,53 @@ +#!/usr/bin/env bash + +# Copyright (c) 2021-2026 community-scripts ORG +# Author: MickLesk (CanbiZ) +# License: MIT | https://github.com/community-scripts/ProxmoxVED/raw/main/LICENSE +# Source: https://github.com/seriousm4x/UpSnap + +source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" +color +verb_ip6 +catch_errors +setting_up_container +network_check +update_os + +msg_info "Installing Dependencies" +$STD apt install -y \ + nmap \ + smbclient \ + sshpass \ + libcap2-bin +msg_ok "Installed Dependencies" + +fetch_and_deploy_gh_release "upsnap" "seriousm4x/UpSnap" "prebuild" "latest" "/opt/upsnap" "UpSnap_*_linux_amd64.zip" + +msg_info "Setting up Application" +chmod +x /opt/upsnap/upsnap +setcap 'cap_net_raw=+ep' /opt/upsnap/upsnap +msg_ok "Set up Application" + +msg_info "Creating Service" +cat </etc/systemd/system/upsnap.service +[Unit] +Description=UpSnap Wake-on-LAN +After=network.target + +[Service] +Type=simple +User=root +WorkingDirectory=/opt/upsnap +ExecStart=/opt/upsnap/upsnap serve --http 0.0.0.0:8090 +Restart=on-failure +RestartSec=5 + +[Install] +WantedBy=multi-user.target +EOF +systemctl enable -q --now upsnap +msg_ok "Created Service" + +motd_ssh +customize +cleanup_lxc diff --git a/json/anchor.json b/json/anchor.json new file mode 100644 index 00000000..fb9ea2c4 --- /dev/null +++ b/json/anchor.json @@ -0,0 +1,44 @@ +{ + "name": "Anchor", + "slug": "anchor", + "categories": [ + 12 + ], + "date_created": "2026-04-02", + "type": "ct", + "updateable": true, + "privileged": false, + "interface_port": 3000, + "documentation": "https://github.com/ZhFahim/anchor#readme", + "website": "https://github.com/ZhFahim/anchor", + "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/anchor.webp", + "config_path": "/opt/anchor/.env", + "description": "Anchor is an offline-first, self-hosted note-taking application with rich text editing, real-time sync across devices, note sharing, tags, attachments, OIDC authentication, and admin panel.", + "install_methods": [ + { + "type": "default", + "script": "ct/anchor.sh", + "resources": { + "cpu": 2, + "ram": 2048, + "hdd": 10, + "os": "Debian", + "version": "13" + } + } + ], + "default_credentials": { + "username": null, + "password": null + }, + "notes": [ + { + "text": "The first user to register becomes the admin.", + "type": "info" + }, + { + "text": "OIDC can be configured via environment variables in `/opt/anchor/.env` or the admin panel.", + "type": "info" + } + ] +} diff --git a/json/slink.json b/json/slink.json new file mode 100644 index 00000000..3345191a --- /dev/null +++ b/json/slink.json @@ -0,0 +1,44 @@ +{ + "name": "Slink", + "slug": "slink", + "categories": [ + 11 + ], + "date_created": "2026-04-02", + "type": "ct", + "updateable": true, + "privileged": false, + "interface_port": 3000, + "documentation": "https://slink.pages.dev", + "website": "https://github.com/andrii-kryvoviaz/slink", + "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/slink.webp", + "config_path": "/opt/slink/services/api/.env", + "description": "Slink is a self-hosted image sharing platform built with Symfony and SvelteKit. It supports multi-file uploads, image compression, URL shortening, collections, tags, comments, SSO/OIDC, dark mode, and S3 storage.", + "install_methods": [ + { + "type": "default", + "script": "ct/slink.sh", + "resources": { + "cpu": 2, + "ram": 2048, + "hdd": 10, + "os": "Debian", + "version": "13" + } + } + ], + "default_credentials": { + "username": null, + "password": null + }, + "notes": [ + { + "text": "API runs on Caddy+PHP-FPM (port 8080), client on Node.js (port 3000).", + "type": "info" + }, + { + "text": "Mercure real-time notifications are not available in this bare-metal setup.", + "type": "warning" + } + ] +} diff --git a/json/soulsync.json b/json/soulsync.json new file mode 100644 index 00000000..f27597df --- /dev/null +++ b/json/soulsync.json @@ -0,0 +1,44 @@ +{ + "name": "SoulSync", + "slug": "soulsync", + "categories": [ + 13 + ], + "date_created": "2026-04-02", + "type": "ct", + "updateable": true, + "privileged": false, + "interface_port": 8008, + "documentation": "https://github.com/Nezreka/SoulSync#readme", + "website": "https://github.com/Nezreka/SoulSync", + "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/soulsync.webp", + "config_path": "/opt/soulsync/config", + "description": "SoulSync is an intelligent music discovery and automation platform. It monitors artists, generates playlists, downloads missing tracks from multiple sources, verifies audio fingerprints, enriches metadata, and syncs with your media server.", + "install_methods": [ + { + "type": "default", + "script": "ct/soulsync.sh", + "resources": { + "cpu": 2, + "ram": 2048, + "hdd": 8, + "os": "Debian", + "version": "13" + } + } + ], + "default_credentials": { + "username": null, + "password": null + }, + "notes": [ + { + "text": "Requires a running slskd instance for Soulseek downloads. Configure in Settings → Downloads.", + "type": "warning" + }, + { + "text": "Spotify API credentials are optional but recommended for discovery features. Configure at `http://IP:8008` → Settings.", + "type": "info" + } + ] +} diff --git a/json/trek.json b/json/trek.json new file mode 100644 index 00000000..ba4074b7 --- /dev/null +++ b/json/trek.json @@ -0,0 +1,44 @@ +{ + "name": "TREK", + "slug": "trek", + "categories": [ + 0 + ], + "date_created": "2026-04-02", + "type": "ct", + "updateable": true, + "privileged": false, + "interface_port": 3000, + "documentation": "https://github.com/mauriceboe/TREK#readme", + "website": "https://github.com/mauriceboe/TREK", + "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/trek.webp", + "config_path": "/opt/trek/server/.env", + "description": "TREK is a self-hosted, real-time collaborative travel planner with interactive maps, budgets, packing lists, weather forecasts, PWA support, and multi-user collaboration via WebSocket.", + "install_methods": [ + { + "type": "default", + "script": "ct/trek.sh", + "resources": { + "cpu": 2, + "ram": 2048, + "hdd": 8, + "os": "Debian", + "version": "13" + } + } + ], + "default_credentials": { + "username": null, + "password": null + }, + "notes": [ + { + "text": "The first user to register becomes the admin.", + "type": "info" + }, + { + "text": "ENCRYPTION_KEY is auto-generated during setup. See `/opt/trek/server/.env`.", + "type": "info" + } + ] +} diff --git a/json/upsnap.json b/json/upsnap.json new file mode 100644 index 00000000..2bf247b6 --- /dev/null +++ b/json/upsnap.json @@ -0,0 +1,44 @@ +{ + "name": "UpSnap", + "slug": "upsnap", + "categories": [ + 4 + ], + "date_created": "2026-04-02", + "type": "ct", + "updateable": true, + "privileged": false, + "interface_port": 8090, + "documentation": "https://github.com/seriousm4x/UpSnap/wiki", + "website": "https://github.com/seriousm4x/UpSnap", + "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/upsnap.webp", + "config_path": "", + "description": "UpSnap is a simple Wake-on-LAN web app with device dashboard, scheduled wake events via cron, network scanning with nmap, custom shutdown commands, user management, and 35 themes.", + "install_methods": [ + { + "type": "default", + "script": "ct/upsnap.sh", + "resources": { + "cpu": 1, + "ram": 512, + "hdd": 2, + "os": "Debian", + "version": "13" + } + } + ], + "default_credentials": { + "username": null, + "password": null + }, + "notes": [ + { + "text": "The first user to register becomes the admin (visit `http://IP:8090/_/`).", + "type": "info" + }, + { + "text": "Do not expose UpSnap to the internet — shutdown commands can execute shell commands. Use a VPN for remote access.", + "type": "warning" + } + ] +}