Compare commits
No commits in common. "main" and "pr-update-app-files" have entirely different histories.
main
...
pr-update-
@ -105,10 +105,10 @@ jobs:
|
||||
run: |
|
||||
git config --global user.name "github-actions-automege[bot]"
|
||||
git config --global user.email "github-actions-automege[bot]@users.noreply.github.com"
|
||||
PR_NUMBER=$(gh pr list --head "${BRANCH_NAME}" --json number --jq '.[0].number')
|
||||
PR_NUMBER=$(gh pr list --head "${BRANCH_NAME}" --json number --jq '.[].number')
|
||||
if [ -n "$PR_NUMBER" ]; then
|
||||
gh pr review "$PR_NUMBER" --approve
|
||||
gh pr merge "$PR_NUMBER" --squash --admin
|
||||
gh pr review $PR_NUMBER --approve
|
||||
gh pr merge $PR_NUMBER --squash --admin
|
||||
fi
|
||||
|
||||
# Step 8: Output success message when no changes
|
||||
|
4
.github/workflows/delete_new_script.yaml
vendored
4
.github/workflows/delete_new_script.yaml
vendored
@ -59,7 +59,7 @@ jobs:
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
run: |
|
||||
branch="delete_files"
|
||||
branch=$(echo "delete-files_${{ github.event.issue.number }}_${TITLE}" | tr '[:upper:]' '[:lower:]' | sed 's/ /_/g')
|
||||
git config --global user.name "github-actions[bot]"
|
||||
git config --global user.email "github-actions[bot]@users.noreply.github.com"
|
||||
git checkout -b $branch
|
||||
@ -72,7 +72,7 @@ jobs:
|
||||
exit 0
|
||||
fi
|
||||
git commit -m "Deleted files for issue: ${{ github.event.issue.title }}"
|
||||
git push origin $branch --force
|
||||
git push origin $branch
|
||||
gh pr create --title "Delete Files for ${{ github.event.issue.title }} after Merge to Main" --body "Delete files after merge in main repo." --base main --head $branch
|
||||
|
||||
pr_number=$(gh pr list | grep -m 1 $branch | awk '{print $1}')
|
||||
|
@ -121,8 +121,8 @@ jobs:
|
||||
run: |
|
||||
git config --global user.name "github-actions-automege[bot]"
|
||||
git config --global user.email "github-actions-automege[bot]@users.noreply.github.com"
|
||||
PR_NUMBER=$(gh pr list --head "${BRANCH_NAME}" --json number --jq '.[0].number')
|
||||
PR_NUMBER=$(gh pr list --head "${BRANCH_NAME}" --json number --jq '.[].number')
|
||||
if [ -n "$PR_NUMBER" ]; then
|
||||
gh pr review "$PR_NUMBER" --approve
|
||||
gh pr merge "$PR_NUMBER" --squash --admin
|
||||
gh pr review $PR_NUMBER --approve
|
||||
gh pr merge $PR_NUMBER --squash --admin
|
||||
fi
|
||||
|
@ -1,50 +1,34 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Function for generating Figlet headers
|
||||
generate_headers() {
|
||||
local base_dir=$1
|
||||
local target_subdir=$2
|
||||
local search_pattern=$3
|
||||
# Base directory for headers
|
||||
headers_dir="./ct/headers"
|
||||
|
||||
local headers_dir="${base_dir}/headers"
|
||||
mkdir -p "$headers_dir"
|
||||
rm -f "$headers_dir"/*
|
||||
# Ensure the headers directory exists and clear it
|
||||
mkdir -p "$headers_dir"
|
||||
rm -f "$headers_dir"/*
|
||||
|
||||
# Recursive or non-recursive search
|
||||
if [[ "$search_pattern" == "**" ]]; then
|
||||
shopt -s globstar nullglob
|
||||
file_list=("${base_dir}"/**/*.sh)
|
||||
shopt -u globstar
|
||||
else
|
||||
file_list=("${base_dir}"/*.sh)
|
||||
fi
|
||||
# Find all .sh files in ./ct directory, sorted alphabetically
|
||||
find ./ct -type f -name "*.sh" | sort | while read -r script; do
|
||||
# Extract the APP name from the APP line
|
||||
app_name=$(grep -oP '^APP="\K[^"]+' "$script" 2>/dev/null)
|
||||
|
||||
for script in "${file_list[@]}"; do
|
||||
[[ -f "$script" ]] || continue
|
||||
if [[ -n "$app_name" ]]; then
|
||||
# Define the output file name in the headers directory
|
||||
output_file="${headers_dir}/$(basename "${script%.*}")"
|
||||
|
||||
app_name=$(grep -oP '^APP="\K[^"]+' "$script" 2>/dev/null)
|
||||
if [[ -n "$app_name" ]]; then
|
||||
output_file="${headers_dir}/$(basename "${script%.*}")"
|
||||
figlet_output=$(figlet -w 500 -f slant "$app_name")
|
||||
if [[ -n "$figlet_output" ]]; then
|
||||
echo "$figlet_output" >"$output_file"
|
||||
echo "Generated: $output_file"
|
||||
else
|
||||
echo "Figlet failed for $app_name in $script"
|
||||
fi
|
||||
# Generate figlet output
|
||||
figlet_output=$(figlet -w 500 -f slant "$app_name")
|
||||
|
||||
# Check if figlet output is not empty
|
||||
if [[ -n "$figlet_output" ]]; then
|
||||
echo "$figlet_output" > "$output_file"
|
||||
echo "Generated: $output_file"
|
||||
else
|
||||
echo "No APP name found in $script, skipping."
|
||||
echo "Figlet failed for $app_name in $script"
|
||||
fi
|
||||
done
|
||||
}
|
||||
else
|
||||
echo "No APP name found in $script, skipping."
|
||||
fi
|
||||
done
|
||||
|
||||
# ct
|
||||
generate_headers "./ct" "headers" "*"
|
||||
|
||||
# tools (addon, pve, ...)
|
||||
generate_headers "./tools" "headers" "**"
|
||||
|
||||
# vm
|
||||
generate_headers "./vm" "headers" "*"
|
||||
|
||||
echo "Completed processing all sections."
|
||||
echo "Completed processing .sh files."
|
||||
|
89
ct/alpine-bitmagnet.sh
Normal file
89
ct/alpine-bitmagnet.sh
Normal file
@ -0,0 +1,89 @@
|
||||
#!/usr/bin/env bash
|
||||
source <(curl -fsSL https://git.community-scripts.org/community-scripts/ProxmoxVED/raw/branch/main/misc/build.func)
|
||||
# Copyright (c) 2021-2025 community-scripts ORG
|
||||
# Author: Slaviša Arežina (tremor021)
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
# Source: https://github.com/bitmagnet-io/bitmagnet
|
||||
|
||||
APP="Alpine-bitmagnet"
|
||||
var_tags="${var_tags:-alpine;torrent}"
|
||||
var_cpu="${var_cpu:-1}"
|
||||
var_ram="${var_ram:-256}"
|
||||
var_disk="${var_disk:-3}"
|
||||
var_os="${var_os:-alpine}"
|
||||
var_version="${var_version:-3.21}"
|
||||
var_unprivileged="${var_unprivileged:-1}"
|
||||
|
||||
header_info "$APP"
|
||||
variables
|
||||
color
|
||||
catch_errors
|
||||
|
||||
function update_script() {
|
||||
header_info
|
||||
|
||||
if [[ ! -d /opt/bitmagnet ]]; then
|
||||
msg_error "No ${APP} Installation Found!"
|
||||
exit 1
|
||||
fi
|
||||
RELEASE=$(curl -s https://api.github.com/repos/bitmagnet-io/bitmagnet/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
||||
if [ "${RELEASE}" != "$(cat /opt/bitmagnet_version.txt)" ] || [ ! -f /opt/bitmagnet_version.txt ]; then
|
||||
msg_info "Backing up database"
|
||||
rm -f /tmp/backup.sql
|
||||
$STD sudo -u postgres pg_dump \
|
||||
--column-inserts \
|
||||
--data-only \
|
||||
--on-conflict-do-nothing \
|
||||
--rows-per-insert=1000 \
|
||||
--table=metadata_sources \
|
||||
--table=content \
|
||||
--table=content_attributes \
|
||||
--table=content_collections \
|
||||
--table=content_collections_content \
|
||||
--table=torrent_sources \
|
||||
--table=torrents \
|
||||
--table=torrent_files \
|
||||
--table=torrent_hints \
|
||||
--table=torrent_contents \
|
||||
--table=torrent_tags \
|
||||
--table=torrents_torrent_sources \
|
||||
--table=key_values \
|
||||
bitmagnet \
|
||||
>/tmp/backup.sql
|
||||
mv /tmp/backup.sql /opt/
|
||||
msg_ok "Database backed up"
|
||||
|
||||
msg_info "Updating ${APP} from $(cat /opt/bitmagnet_version.txt) to ${RELEASE}"
|
||||
$STD apk -U upgrade
|
||||
$STD service bitmagnet stop
|
||||
[ -f /opt/bitmagnet/.env ] && cp /opt/bitmagnet/.env /opt/
|
||||
[ -f /opt/bitmagnet/config.yml ] && cp /opt/bitmagnet/config.yml /opt/
|
||||
rm -rf /opt/bitmagnet/*
|
||||
temp_file=$(mktemp)
|
||||
curl -fsSL "https://github.com/bitmagnet-io/bitmagnet/archive/refs/tags/v${RELEASE}.tar.gz" -o "$temp_file"
|
||||
tar zxf "$temp_file" --strip-components=1 -C /opt/bitmagnet
|
||||
cd /opt/bitmagnet
|
||||
VREL=v$RELEASE
|
||||
$STD go build -ldflags "-s -w -X github.com/bitmagnet-io/bitmagnet/internal/version.GitTag=$VREL"
|
||||
chmod +x bitmagnet
|
||||
[ -f "/opt/.env" ] && cp "/opt/.env" /opt/bitmagnet/
|
||||
[ -f "/opt/config.yml" ] && cp "/opt/config.yml" /opt/bitmagnet/
|
||||
rm -f "$temp_file"
|
||||
echo "${RELEASE}" >/opt/bitmagnet_version.txt
|
||||
$STD service bitmagnet start
|
||||
msg_ok "Updated Successfully"
|
||||
else
|
||||
msg_ok "No update required. ${APP} is already at ${RELEASE}"
|
||||
fi
|
||||
|
||||
exit 0
|
||||
}
|
||||
|
||||
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 IP:${CL}"
|
||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:3333${CL}"
|
@ -1,114 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVED/main/misc/build.func)
|
||||
# Copyright (c) 2021-2025 tteck
|
||||
# Author: tteck (tteckster) | Co-Author: MickLesk (Canbiz) | Co-Author: CrazyWolf13
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
# Source: https://homarr.dev/
|
||||
|
||||
APP="alpine-homarr"
|
||||
var_tags="${var_tags:-arr;dashboard}"
|
||||
var_cpu="${var_cpu:-2}"
|
||||
var_ram="${var_ram:-4096}"
|
||||
var_disk="${var_disk:-8}"
|
||||
var_os="${var_os:-alpine}"
|
||||
var_version="${var_version:-3.21}"
|
||||
var_unprivileged="${var_unprivileged:-1}"
|
||||
|
||||
header_info "$APP"
|
||||
|
||||
variables
|
||||
color
|
||||
catch_errors
|
||||
|
||||
function update_script() {
|
||||
header_info
|
||||
RELEASE=$(curl -fsSL https://api.github.com/repos/homarr-labs/homarr/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
||||
if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
|
||||
|
||||
msg_info "Stopping Services (Patience)"
|
||||
systemctl stop homarr
|
||||
msg_ok "Services Stopped"
|
||||
|
||||
msg_info "Backup Data"
|
||||
mkdir -p /opt/homarr-data-backup
|
||||
cp /opt/homarr/.env /opt/homarr-data-backup/.env
|
||||
msg_ok "Backup Data"
|
||||
|
||||
msg_info "Updating and rebuilding ${APP} to v${RELEASE} (Patience)"
|
||||
rm /opt/run_homarr.sh
|
||||
cat <<'EOF' >/opt/run_homarr.sh
|
||||
#!/bin/bash
|
||||
set -a
|
||||
source /opt/homarr/.env
|
||||
set +a
|
||||
export DB_DIALECT='sqlite'
|
||||
export AUTH_SECRET=$(openssl rand -base64 32)
|
||||
node /opt/homarr_db/migrations/$DB_DIALECT/migrate.cjs /opt/homarr_db/migrations/$DB_DIALECT
|
||||
for dir in $(find /opt/homarr_db/migrations/migrations -mindepth 1 -maxdepth 1 -type d); do
|
||||
dirname=$(basename "$dir")
|
||||
mkdir -p "/opt/homarr_db/migrations/$dirname"
|
||||
cp -r "$dir"/* "/opt/homarr_db/migrations/$dirname/" 2>/dev/null || true
|
||||
done
|
||||
export HOSTNAME=$(ip route get 1.1.1.1 | grep -oP 'src \K[^ ]+')
|
||||
envsubst '${HOSTNAME}' < /etc/nginx/templates/nginx.conf > /etc/nginx/nginx.conf
|
||||
nginx -g 'daemon off;' &
|
||||
redis-server /opt/homarr/packages/redis/redis.conf &
|
||||
node apps/tasks/tasks.cjs &
|
||||
node apps/websocket/wssServer.cjs &
|
||||
node apps/nextjs/server.js & PID=$!
|
||||
wait $PID
|
||||
EOF
|
||||
chmod +x /opt/run_homarr.sh
|
||||
NODE_VERSION=$(curl -s https://raw.githubusercontent.com/homarr-labs/homarr/dev/package.json | jq -r '.engines.node | split(">=")[1] | split(".")[0]')
|
||||
NODE_MODULE="pnpm@$(curl -s https://raw.githubusercontent.com/homarr-labs/homarr/dev/package.json | jq -r '.packageManager | split("@")[1]')"
|
||||
install_node_and_modules
|
||||
rm -rf /opt/homarr
|
||||
fetch_and_deploy_gh_release "homarr-labs/homarr"
|
||||
mv /opt/homarr-data-backup/.env /opt/homarr/.env
|
||||
cd /opt/homarr
|
||||
echo "test2"
|
||||
export NODE_ENV=""
|
||||
$STD pnpm install --recursive --frozen-lockfile --shamefully-hoist
|
||||
$STD pnpm build
|
||||
cp /opt/homarr/apps/nextjs/next.config.ts .
|
||||
cp /opt/homarr/apps/nextjs/package.json .
|
||||
cp -r /opt/homarr/packages/db/migrations /opt/homarr_db/migrations
|
||||
cp -r /opt/homarr/apps/nextjs/.next/standalone/* /opt/homarr
|
||||
mkdir -p /appdata/redis
|
||||
cp /opt/homarr/packages/redis/redis.conf /opt/homarr/redis.conf
|
||||
rm /etc/nginx/nginx.conf
|
||||
mkdir -p /etc/nginx/templates
|
||||
cp /opt/homarr/nginx.conf /etc/nginx/templates/nginx.conf
|
||||
|
||||
mkdir -p /opt/homarr/apps/cli
|
||||
cp /opt/homarr/packages/cli/cli.cjs /opt/homarr/apps/cli/cli.cjs
|
||||
echo $'#!/bin/bash\ncd /opt/homarr/apps/cli && node ./cli.cjs "$@"' >/usr/bin/homarr
|
||||
chmod +x /usr/bin/homarr
|
||||
|
||||
mkdir /opt/homarr/build
|
||||
cp ./node_modules/better-sqlite3/build/Release/better_sqlite3.node ./build/better_sqlite3.node
|
||||
echo "${RELEASE}" >/opt/${APP}_version.txt
|
||||
msg_ok "Updated ${APP}"
|
||||
|
||||
msg_info "Starting Services"
|
||||
systemctl start homarr
|
||||
msg_ok "Started Services"
|
||||
msg_ok "Updated Successfully"
|
||||
read -p "It's recommended to reboot the LXC after an update, would you like to reboot the LXC now ? (y/n): " choice
|
||||
if [[ "$choice" =~ ^[Yy]$ ]]; then
|
||||
reboot
|
||||
fi
|
||||
else
|
||||
msg_ok "No update required. ${APP} is already at v${RELEASE}"
|
||||
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}:7575${CL}"
|
53
ct/argus.sh
53
ct/argus.sh
@ -1,53 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
source <(curl -fsSL https://git.community-scripts.org/community-scripts/ProxmoxVED/raw/branch/main/misc/build.func)
|
||||
# Copyright (c) 2021-2025 community-scripts ORG
|
||||
# Author: MickLesk (CanbiZ)
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVED/raw/main/LICENSE
|
||||
# Source: https://release-argus.io/
|
||||
|
||||
APP="Argus"
|
||||
var_tags="${var_tags:-os}"
|
||||
var_cpu="${var_cpu:-1}"
|
||||
var_ram="${var_ram:-512}"
|
||||
var_disk="${var_disk:-3}"
|
||||
var_os="${var_os:-debian}"
|
||||
var_version="${var_version:-12}"
|
||||
var_unprivileged="${var_unprivileged:-1}"
|
||||
|
||||
header_info "$APP"
|
||||
variables
|
||||
color
|
||||
catch_errors
|
||||
|
||||
function update_script() {
|
||||
header_info
|
||||
check_container_storage
|
||||
check_container_resources
|
||||
|
||||
if [[ ! -d /opt/argus ]]; then
|
||||
msg_error "No ${APP} Installation Found!"
|
||||
exit
|
||||
fi
|
||||
|
||||
RELEASE=$(curl -fsSL https://api.github.com/repos/release-argus/Argus/releases/latest | jq -r .tag_name | sed 's/^v//')
|
||||
if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
|
||||
msg_info "Updating $APP to ${RELEASE}"
|
||||
rm -f /opt/argus/Argus
|
||||
curl -fsSL "https://github.com/release-argus/Argus/releases/download/${RELEASE}/Argus-${RELEASE}.linux-amd64" -o /opt/argus/Argus
|
||||
chmod +x /opt/argus/Argus
|
||||
systemctl restart argus
|
||||
echo "${RELEASE}" >/opt/${APP}_version.txt
|
||||
msg_ok "Updated ${APP} to ${RELEASE}"
|
||||
else
|
||||
msg_ok "${APP} is already up to date (${RELEASE})"
|
||||
fi
|
||||
}
|
||||
|
||||
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}:8080${CL}"
|
@ -5,7 +5,7 @@ source <(curl -s https://git.community-scripts.org/community-scripts/ProxmoxVED/
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
# Source:
|
||||
|
||||
APP="Baby Buddy"
|
||||
APP="BabyBuddy"
|
||||
var_tags="${var_tags:-baby}"
|
||||
var_disk="${var_disk:-5}"
|
||||
var_cpu="${var_cpu:-2}"
|
||||
@ -20,60 +20,19 @@ color
|
||||
catch_errors
|
||||
|
||||
function update_script() {
|
||||
header_info
|
||||
check_container_storage
|
||||
check_container_resources
|
||||
if [[ ! -d /opt/babybuddy ]]; then
|
||||
msg_error "No ${APP} Installation Found!"
|
||||
exit
|
||||
fi
|
||||
|
||||
RELEASE=$(curl -fsSL https://api.github.com/repos/babybuddy/babybuddy/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
||||
if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/babybuddy_version.txt)" ]]; then
|
||||
setup_uv
|
||||
|
||||
msg_info "Stopping Services"
|
||||
systemctl stop nginx
|
||||
systemctl stop uwsgi
|
||||
msg_ok "Services Stopped"
|
||||
|
||||
msg_info "Cleaning old files"
|
||||
cp babybuddy/settings/production.py /tmp/production.py.bak
|
||||
find . -mindepth 1 -maxdepth 1 ! -name '.venv' -exec rm -rf {} +
|
||||
msg_ok "Cleaned old files"
|
||||
|
||||
msg_info "Updating ${APP} to v${RELEASE}"
|
||||
temp_file=$(mktemp)
|
||||
curl -fsSL "https://github.com/babybuddy/babybuddy/archive/refs/tags/v${RELEASE}.tar.gz" -o "$temp_file"
|
||||
cd /opt/babybuddy
|
||||
tar zxf "$temp_file" --strip-components=1 -C /opt/babybuddy
|
||||
mv /tmp/production.py.bak babybuddy/settings/production.py
|
||||
cd /opt/babybuddy
|
||||
source .venv/bin/activate
|
||||
$STD uv pip install -r requirements.txt
|
||||
$STD python manage.py migrate
|
||||
echo "${RELEASE}" >/opt/${APP}_version.txt
|
||||
msg_ok "Updated ${APP} to v${RELEASE}"
|
||||
|
||||
msg_info "Fixing permissions"
|
||||
chown -R www-data:www-data /opt/data
|
||||
chmod 640 /opt/data/db.sqlite3
|
||||
chmod 750 /opt/data
|
||||
msg_ok "Permissions fixed"
|
||||
|
||||
msg_info "Starting Services"
|
||||
systemctl start uwsgi
|
||||
systemctl start nginx
|
||||
msg_ok "Services Started"
|
||||
|
||||
msg_info "Cleaning up"
|
||||
rm -f "$temp_file"
|
||||
msg_ok "Cleaned"
|
||||
msg_ok "Updated Successfully"
|
||||
else
|
||||
msg_ok "No update required. ${APP} is already at v${RELEASE}"
|
||||
fi
|
||||
exit
|
||||
header_info
|
||||
check_container_storage
|
||||
check_container_resources
|
||||
if [[ ! -d /opt/maxun ]]; then
|
||||
msg_error "No ${APP} Installation Found!"
|
||||
exit
|
||||
fi
|
||||
RELEASE=$(curl -s https://api.github.com/repos/xxxxx/xxxxx/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
|
||||
if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
|
||||
msg_info "Stopping Services"
|
||||
systemctl stop APP
|
||||
msg_ok "Services Stopped"
|
||||
fi
|
||||
}
|
||||
|
||||
start
|
||||
@ -83,4 +42,4 @@ 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}${CL}"
|
||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8080${CL}"
|
||||
|
@ -48,13 +48,13 @@ function update_script() {
|
||||
cp /opt/bar-assistant-backup/storage/bar-assistant /opt/bar-assistant/storage/bar-assistant
|
||||
cd /opt/bar-assistant
|
||||
composer install
|
||||
$STD php artisan migrate --force
|
||||
$STD php artisan storage:link
|
||||
$STD php artisan bar:setup-meilisearch
|
||||
$STD php artisan scout:sync-index-settings
|
||||
$STD php artisan config:cache
|
||||
$STD php artisan route:cache
|
||||
$STD php artisan event:cache
|
||||
php artisan migrate --force
|
||||
php artisan storage:link
|
||||
php artisan bar:setup-meilisearch
|
||||
php artisan scout:sync-index-settings
|
||||
php artisan config:cache
|
||||
php artisan route:cache
|
||||
php artisan event:cache
|
||||
echo "${RELEASE_BARASSISTANT}" >/opt/${APP}_version.txt
|
||||
msg_ok "Updated $APP to v${RELEASE_BARASSISTANT}"
|
||||
|
||||
|
98
ct/bitmagnet.sh
Normal file
98
ct/bitmagnet.sh
Normal file
@ -0,0 +1,98 @@
|
||||
#!/usr/bin/env bash
|
||||
source <(curl -s https://git.community-scripts.org/community-scripts/ProxmoxVED/raw/branch/main/misc/build.func)
|
||||
# Copyright (c) 2021-2025 community-scripts ORG
|
||||
# Author: Slaviša Arežina (tremor021)
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVED/raw/main/LICENSE
|
||||
# Source: https://github.com/bitmagnet/bitmagnet
|
||||
|
||||
APP="Bitmagnet"
|
||||
var_tags="${var_tags:-os}"
|
||||
var_cpu="${var_cpu:-1}"
|
||||
var_ram="${var_ram:-512}"
|
||||
var_disk="${var_disk:-4}"
|
||||
var_os="${var_os:-debian}"
|
||||
var_version="${var_version:-12}"
|
||||
var_unprivileged="${var_unprivileged:-1}"
|
||||
|
||||
header_info "$APP"
|
||||
variables
|
||||
color
|
||||
catch_errors
|
||||
|
||||
function update_script() {
|
||||
header_info
|
||||
check_container_storage
|
||||
check_container_resources
|
||||
if [[ ! -d /opt/bitmagnet ]]; then
|
||||
msg_error "No ${APP} Installation Found!"
|
||||
exit
|
||||
fi
|
||||
RELEASE=$(curl -s https://api.github.com/repos/bitmagnet-io/bitmagnet/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
||||
if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
|
||||
msg_info "Stopping Service"
|
||||
systemctl stop bitmagnet-web
|
||||
msg_ok "Stopped Service"
|
||||
|
||||
msg_info "Backing up database"
|
||||
rm -f /tmp/backup.sql
|
||||
$STD sudo -u postgres pg_dump \
|
||||
--column-inserts \
|
||||
--data-only \
|
||||
--on-conflict-do-nothing \
|
||||
--rows-per-insert=1000 \
|
||||
--table=metadata_sources \
|
||||
--table=content \
|
||||
--table=content_attributes \
|
||||
--table=content_collections \
|
||||
--table=content_collections_content \
|
||||
--table=torrent_sources \
|
||||
--table=torrents \
|
||||
--table=torrent_files \
|
||||
--table=torrent_hints \
|
||||
--table=torrent_contents \
|
||||
--table=torrent_tags \
|
||||
--table=torrents_torrent_sources \
|
||||
--table=key_values \
|
||||
bitmagnet \
|
||||
>/tmp/backup.sql
|
||||
mv /tmp/backup.sql /opt/
|
||||
msg_ok "Database backed up"
|
||||
|
||||
msg_info "Updating ${APP} to v${RELEASE}"
|
||||
[ -f /opt/bitmagnet/.env ] && cp /opt/bitmagnet/.env /opt/
|
||||
[ -f /opt/bitmagnet/config.yml ] && cp /opt/bitmagnet/config.yml /opt/
|
||||
rm -rf /opt/bitmagnet/*
|
||||
temp_file=$(mktemp)
|
||||
curl -fsSL "https://github.com/bitmagnet-io/bitmagnet/archive/refs/tags/v${RELEASE}.tar.gz" -o "$temp_file"
|
||||
tar zxf "$temp_file" --strip-components=1 -C /opt/bitmagnet
|
||||
cd /opt/bitmagnet
|
||||
VREL=v$RELEASE
|
||||
$STD go build -ldflags "-s -w -X github.com/bitmagnet-io/bitmagnet/internal/version.GitTag=$VREL"
|
||||
chmod +x bitmagnet
|
||||
[ -f "/opt/.env" ] && cp "/opt/.env" /opt/bitmagnet/
|
||||
[ -f "/opt/config.yml" ] && cp "/opt/config.yml" /opt/bitmagnet/
|
||||
echo "${RELEASE}" >/opt/${APP}_version.txt
|
||||
msg_ok "Updated $APP to v${RELEASE}"
|
||||
|
||||
msg_info "Starting Service"
|
||||
systemctl start bitmagnet-web
|
||||
msg_ok "Started Service"
|
||||
|
||||
msg_info "Cleaning up"
|
||||
rm -f "$temp_file"
|
||||
msg_ok "Cleaned"
|
||||
msg_ok "Updated Successfully"
|
||||
else
|
||||
msg_ok "No update required. ${APP} is already at v${RELEASE}"
|
||||
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}:3333${CL}"
|
@ -20,15 +20,15 @@ color
|
||||
catch_errors
|
||||
|
||||
function update_script() {
|
||||
header_info
|
||||
check_container_storage
|
||||
check_container_resources
|
||||
if [[ ! -f /etc/systemd/system/cloudflare-ddns.service ]]; then
|
||||
msg_error "No ${APP} Installation Found!"
|
||||
header_info
|
||||
check_container_storage
|
||||
check_container_resources
|
||||
if [[ ! -f /etc/systemd/system/cloudflare-ddns.service ]]; then
|
||||
msg_error "No ${APP} Installation Found!"
|
||||
exit
|
||||
fi
|
||||
msg_error "There is no update function for ${APP}."
|
||||
exit
|
||||
fi
|
||||
msg_error "There is no update function for ${APP}."
|
||||
exit
|
||||
}
|
||||
|
||||
start
|
||||
|
@ -1,51 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
source <(curl -s https://git.community-scripts.org/community-scripts/ProxmoxVED/raw/branch/main/misc/build.func)
|
||||
# Copyright (c) 2021-2025 community-scripts ORG
|
||||
# Author: Omar Minaya
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
# Source: https://github.com/C4illin/ConvertX
|
||||
|
||||
APP="ConvertX"
|
||||
var_tags="${var_tags:-converter}"
|
||||
var_cpu="${var_cpu:-2}"
|
||||
var_ram="${var_ram:-4096}"
|
||||
var_disk="${var_disk:-20}"
|
||||
var_os="${var_os:-debian}"
|
||||
var_version="${var_version:-12}"
|
||||
var_unprivileged="${var_unprivileged:-1}"
|
||||
|
||||
header_info "$APP"
|
||||
variables
|
||||
color
|
||||
catch_errors
|
||||
|
||||
function update_script() {
|
||||
header_info
|
||||
check_container_storage
|
||||
check_container_resources
|
||||
if [[ ! -d /var ]]; then
|
||||
msg_error "No ${APP} Installation Found!"
|
||||
exit
|
||||
fi
|
||||
msg_info "Updating $APP LXC"
|
||||
RELEASE=$(curl -fsSL https://api.github.com/repos/C4illin/ConvertX/releases/latest | jq -r .tag_name | sed 's/^v//')
|
||||
curl -fsSL -o "/opt/convertx/ConvertX-${RELEASE}.tar.gz" "https://github.com/C4illin/ConvertX/archive/refs/tags/v${RELEASE}.tar.gz"
|
||||
tar --strip-components=1 -xf "/opt/convertx/ConvertX-${RELEASE}.tar.gz" -C /opt/convertx
|
||||
cd /opt/convertx
|
||||
bun update
|
||||
|
||||
$STD systemctl restart convertx
|
||||
$STD apt-get update
|
||||
$STD apt-get -y upgrade
|
||||
msg_ok "Updated $APP LXC"
|
||||
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}"
|
174
ct/create_lxc.sh
174
ct/create_lxc.sh
@ -49,64 +49,59 @@ fi
|
||||
|
||||
# This function is used to select the storage class and determine the corresponding storage content type and label.
|
||||
function select_storage() {
|
||||
local CLASS="$1"
|
||||
local CLASS=$1
|
||||
local CONTENT
|
||||
local CONTENT_LABEL
|
||||
|
||||
case "$CLASS" in
|
||||
case $CLASS in
|
||||
container)
|
||||
CONTENT='rootdir'
|
||||
CONTENT_LABEL='Container'
|
||||
;;
|
||||
template)
|
||||
CONTENT='vztmpl'
|
||||
CONTENT_LABEL='Container Template'
|
||||
CONTENT_LABEL='Container template'
|
||||
;;
|
||||
*)
|
||||
msg_error "Invalid storage class: $CLASS"
|
||||
*) false || {
|
||||
msg_error "Invalid storage class."
|
||||
exit 201
|
||||
;;
|
||||
} ;;
|
||||
esac
|
||||
|
||||
# Collect storage options
|
||||
# This Queries all storage locations
|
||||
local -a MENU
|
||||
local MSG_MAX_LENGTH=0
|
||||
|
||||
while read -r TAG TYPE _ _ _ FREE _; do
|
||||
local TYPE_PADDED
|
||||
local FREE_FMT
|
||||
|
||||
TYPE_PADDED=$(printf "%-10s" "$TYPE")
|
||||
FREE_FMT=$(numfmt --to=iec --from-unit=K --format %.2f <<<"$FREE")B
|
||||
local ITEM="Type: $TYPE_PADDED Free: $FREE_FMT"
|
||||
|
||||
((${#ITEM} + 2 > MSG_MAX_LENGTH)) && MSG_MAX_LENGTH=$((${#ITEM} + 2))
|
||||
while read -r line; do
|
||||
local TAG=$(echo $line | awk '{print $1}')
|
||||
local TYPE=$(echo $line | awk '{printf "%-10s", $2}')
|
||||
local FREE=$(echo $line | numfmt --field 4-6 --from-unit=K --to=iec --format %.2f | awk '{printf( "%9sB", $6)}')
|
||||
local ITEM="Type: $TYPE Free: $FREE "
|
||||
local OFFSET=2
|
||||
if [[ $((${#ITEM} + $OFFSET)) -gt ${MSG_MAX_LENGTH:-} ]]; then
|
||||
local MSG_MAX_LENGTH=$((${#ITEM} + $OFFSET))
|
||||
fi
|
||||
MENU+=("$TAG" "$ITEM" "OFF")
|
||||
done < <(pvesm status -content "$CONTENT" | awk 'NR>1')
|
||||
done < <(pvesm status -content $CONTENT | awk 'NR>1')
|
||||
|
||||
local OPTION_COUNT=$((${#MENU[@]} / 3))
|
||||
|
||||
# Auto-select if only one option available
|
||||
if [[ "$OPTION_COUNT" -eq 1 ]]; then
|
||||
echo "${MENU[0]}"
|
||||
return 0
|
||||
# Select storage location
|
||||
if [ $((${#MENU[@]} / 3)) -eq 1 ]; then
|
||||
printf ${MENU[0]}
|
||||
else
|
||||
local STORAGE
|
||||
while [ -z "${STORAGE:+x}" ]; do
|
||||
STORAGE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "Storage Pools" --radiolist \
|
||||
"Which storage pool you would like to use for the ${CONTENT_LABEL,,}?\nTo make a selection, use the Spacebar.\n" \
|
||||
16 $(($MSG_MAX_LENGTH + 23)) 6 \
|
||||
"${MENU[@]}" 3>&1 1>&2 2>&3) || {
|
||||
msg_error "Menu aborted."
|
||||
exit 202
|
||||
}
|
||||
if [ $? -ne 0 ]; then
|
||||
echo -e "${CROSS}${RD} Menu aborted by user.${CL}"
|
||||
exit 0
|
||||
fi
|
||||
done
|
||||
printf "%s" "$STORAGE"
|
||||
fi
|
||||
|
||||
# Display selection menu
|
||||
local STORAGE
|
||||
while [[ -z "${STORAGE:+x}" ]]; do
|
||||
STORAGE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "Storage Pools" --radiolist \
|
||||
"Select the storage pool to use for the ${CONTENT_LABEL,,}.\nUse the spacebar to make a selection.\n" \
|
||||
16 $((MSG_MAX_LENGTH + 23)) 6 \
|
||||
"${MENU[@]}" 3>&1 1>&2 2>&3) || {
|
||||
msg_error "Storage selection cancelled."
|
||||
exit 202
|
||||
}
|
||||
done
|
||||
|
||||
echo "$STORAGE"
|
||||
}
|
||||
|
||||
# Test if required variables are set
|
||||
[[ "${CTID:-}" ]] || {
|
||||
msg_error "You need to set 'CTID' variable."
|
||||
@ -131,63 +126,53 @@ if qm status "$CTID" &>/dev/null || pct status "$CTID" &>/dev/null; then
|
||||
exit 206
|
||||
fi
|
||||
|
||||
# # Get template storage
|
||||
# TEMPLATE_STORAGE=$(select_storage template)
|
||||
# CONTAINER_STORAGE=$(select_storage container) || exit
|
||||
# msg_ok "Template Storage: ${BL}$TEMPLATE_STORAGE${CL} ${GN}Container Storage: ${BL}$CONTAINER_STORAGE${CL}."
|
||||
|
||||
# Get template storage
|
||||
TEMPLATE_STORAGE=$(select_storage template)
|
||||
TEMPLATE_STORAGE=$(select_storage template) || exit
|
||||
msg_ok "Using ${BL}$TEMPLATE_STORAGE${CL} ${GN}for Template Storage."
|
||||
|
||||
# Get container storage
|
||||
CONTAINER_STORAGE=$(select_storage container)
|
||||
CONTAINER_STORAGE=$(select_storage container) || exit
|
||||
msg_ok "Using ${BL}$CONTAINER_STORAGE${CL} ${GN}for Container Storage."
|
||||
|
||||
# Update LXC template list
|
||||
$STD msg_info "Updating LXC Template List"
|
||||
if ! timeout 10 pveam update >/dev/null 2>&1; then
|
||||
msg_error "Failed to update LXC template list. Please check your Proxmox host's internet connection and DNS resolution."
|
||||
exit 201
|
||||
fi
|
||||
$STD msg_ok "LXC Template List Updated"
|
||||
msg_info "Updating LXC Template List"
|
||||
#check_network
|
||||
pveam update >/dev/null
|
||||
msg_ok "Updated LXC Template List"
|
||||
|
||||
# Get LXC template string
|
||||
TEMPLATE_SEARCH="${PCT_OSTYPE}-${PCT_OSVERSION:-}"
|
||||
TEMPLATE_SEARCH=${PCT_OSTYPE}-${PCT_OSVERSION:-}
|
||||
mapfile -t TEMPLATES < <(pveam available -section system | sed -n "s/.*\($TEMPLATE_SEARCH.*\)/\1/p" | sort -t - -k 2 -V)
|
||||
|
||||
if [ ${#TEMPLATES[@]} -eq 0 ]; then
|
||||
msg_error "No matching LXC template found for '${TEMPLATE_SEARCH}'. Make sure your host can reach the Proxmox template repository."
|
||||
[ ${#TEMPLATES[@]} -gt 0 ] || {
|
||||
msg_error "Unable to find a template when searching for '$TEMPLATE_SEARCH'."
|
||||
exit 207
|
||||
fi
|
||||
|
||||
}
|
||||
TEMPLATE="${TEMPLATES[-1]}"
|
||||
TEMPLATE_PATH="$(pvesm path "$TEMPLATE_STORAGE":vztmpl/$TEMPLATE)"
|
||||
|
||||
# Check if template exists and is valid
|
||||
TEMPLATE_PATH="$(pvesm path $TEMPLATE_STORAGE:vztmpl/$TEMPLATE)"
|
||||
# Without NAS/Mount: TEMPLATE_PATH="/var/lib/vz/template/cache/$TEMPLATE"
|
||||
# Check if template exists, if corrupt remove and redownload
|
||||
if ! pveam list "$TEMPLATE_STORAGE" | grep -q "$TEMPLATE" || ! zstdcat "$TEMPLATE_PATH" | tar -tf - >/dev/null 2>&1; then
|
||||
msg_warn "Template $TEMPLATE not found or appears to be corrupted. Re-downloading."
|
||||
|
||||
msg_warn "Template $TEMPLATE not found in storage or seems to be corrupted. Redownloading."
|
||||
[[ -f "$TEMPLATE_PATH" ]] && rm -f "$TEMPLATE_PATH"
|
||||
|
||||
# Download with 3 attempts
|
||||
for attempt in {1..3}; do
|
||||
msg_info "Attempt $attempt: Downloading LXC template..."
|
||||
|
||||
if timeout 120 pveam download "$TEMPLATE_STORAGE" "$TEMPLATE" >/dev/null 2>&1; then
|
||||
if timeout 120 pveam download "$TEMPLATE_STORAGE" "$TEMPLATE" >/dev/null; then
|
||||
msg_ok "Template download successful."
|
||||
break
|
||||
fi
|
||||
|
||||
if [ $attempt -eq 3 ]; then
|
||||
msg_error "Failed after 3 attempts. Please check your Proxmox host’s internet access or manually run:\n pveam download $TEMPLATE_STORAGE $TEMPLATE"
|
||||
msg_error "Three failed attempts. Aborting."
|
||||
exit 208
|
||||
fi
|
||||
|
||||
sleep $((attempt * 5))
|
||||
done
|
||||
fi
|
||||
|
||||
msg_ok "LXC Template '$TEMPLATE' is ready to use."
|
||||
msg_ok "LXC Template is ready to use."
|
||||
|
||||
# Check and fix subuid/subgid
|
||||
grep -q "root:100000:65536" /etc/subuid || echo "root:100000:65536" >>/etc/subuid
|
||||
@ -197,55 +182,30 @@ grep -q "root:100000:65536" /etc/subgid || echo "root:100000:65536" >>/etc/subgi
|
||||
PCT_OPTIONS=(${PCT_OPTIONS[@]:-${DEFAULT_PCT_OPTIONS[@]}})
|
||||
[[ " ${PCT_OPTIONS[@]} " =~ " -rootfs " ]] || PCT_OPTIONS+=(-rootfs "$CONTAINER_STORAGE:${PCT_DISK_SIZE:-8}")
|
||||
|
||||
# Secure creation of the LXC container with lock and template check
|
||||
lockfile="/tmp/template.${TEMPLATE}.lock"
|
||||
exec 9>"$lockfile"
|
||||
flock -w 60 9 || {
|
||||
msg_error "Timeout while waiting for template lock"
|
||||
exit 211
|
||||
}
|
||||
|
||||
msg_info "Creating LXC Container"
|
||||
if ! pct create "$CTID" "${TEMPLATE_STORAGE}:vztmpl/${TEMPLATE}" "${PCT_OPTIONS[@]}" &>/dev/null; then
|
||||
msg_error "Container creation failed. Checking if template is corrupted or incomplete."
|
||||
msg_error "Container creation failed. Checking if template is corrupted."
|
||||
|
||||
if [[ ! -s "$TEMPLATE_PATH" || "$(stat -c%s "$TEMPLATE_PATH")" -lt 1000000 ]]; then
|
||||
msg_error "Template file too small or missing – re-downloading."
|
||||
if ! zstdcat "$TEMPLATE_PATH" | tar -tf - >/dev/null 2>&1; then
|
||||
msg_error "Template appears to be corrupted. Removing and re-downloading."
|
||||
rm -f "$TEMPLATE_PATH"
|
||||
elif ! zstdcat "$TEMPLATE_PATH" | tar -tf - &>/dev/null; then
|
||||
msg_error "Template appears to be corrupted – re-downloading."
|
||||
rm -f "$TEMPLATE_PATH"
|
||||
else
|
||||
msg_error "Template is valid, but container creation still failed."
|
||||
exit 209
|
||||
fi
|
||||
|
||||
# Retry download
|
||||
for attempt in {1..3}; do
|
||||
msg_info "Attempt $attempt: Re-downloading template..."
|
||||
if timeout 120 pveam download "$TEMPLATE_STORAGE" "$TEMPLATE" >/dev/null; then
|
||||
msg_ok "Template re-download successful."
|
||||
break
|
||||
fi
|
||||
if [ "$attempt" -eq 3 ]; then
|
||||
msg_error "Three failed attempts. Aborting."
|
||||
if ! timeout 120 pveam download "$TEMPLATE_STORAGE" "$TEMPLATE" >/dev/null; then
|
||||
msg_error "Failed to re-download template."
|
||||
exit 208
|
||||
fi
|
||||
sleep $((attempt * 5))
|
||||
done
|
||||
|
||||
sleep 1 # I/O-Sync-Delay
|
||||
msg_ok "Re-downloaded LXC Template"
|
||||
|
||||
if ! pct create "$CTID" "${TEMPLATE_STORAGE}:vztmpl/${TEMPLATE}" "${PCT_OPTIONS[@]}" &>/dev/null; then
|
||||
msg_error "Container creation failed after re-downloading template."
|
||||
exit 200
|
||||
if ! pct create "$CTID" "${TEMPLATE_STORAGE}:vztmpl/${TEMPLATE}" "${PCT_OPTIONS[@]}" &>/dev/null; then
|
||||
msg_error "Container creation failed after re-downloading template."
|
||||
exit 200
|
||||
fi
|
||||
else
|
||||
msg_error "Container creation failed, but template is not corrupted."
|
||||
exit 209
|
||||
fi
|
||||
fi
|
||||
|
||||
if ! pct status "$CTID" &>/dev/null; then
|
||||
msg_error "Container not found after pct create – assuming failure."
|
||||
exit 210
|
||||
fi
|
||||
: "${UDHCPC_FIX:=}"
|
||||
if [ "$UDHCPC_FIX" == "yes" ]; then
|
||||
# Ensure container is mounted
|
||||
|
33
ct/debian.sh
33
ct/debian.sh
@ -13,8 +13,6 @@ var_disk="${var_disk:-2}"
|
||||
var_os="${var_os:-debian}"
|
||||
var_version="${var_version:-12}"
|
||||
var_unprivileged="${var_unprivileged:-1}"
|
||||
var_fuse="${var_fuse:-yes}"
|
||||
var_tun="${var_tun:-yes}"
|
||||
|
||||
header_info "$APP"
|
||||
variables
|
||||
@ -22,18 +20,18 @@ color
|
||||
catch_errors
|
||||
|
||||
function update_script() {
|
||||
header_info
|
||||
check_container_storage
|
||||
check_container_resources
|
||||
if [[ ! -d /var ]]; then
|
||||
msg_error "No ${APP} Installation Found!"
|
||||
header_info
|
||||
check_container_storage
|
||||
check_container_resources
|
||||
if [[ ! -d /var ]]; then
|
||||
msg_error "No ${APP} Installation Found!"
|
||||
exit
|
||||
fi
|
||||
msg_info "Updating $APP LXC"
|
||||
$STD apt-get update
|
||||
$STD apt-get -y upgrade
|
||||
msg_ok "Updated $APP LXC"
|
||||
exit
|
||||
fi
|
||||
msg_info "Updating $APP LXC"
|
||||
$STD apt-get update
|
||||
$STD apt-get -y upgrade
|
||||
msg_ok "Updated $APP LXC"
|
||||
exit
|
||||
}
|
||||
|
||||
start
|
||||
@ -42,12 +40,3 @@ description
|
||||
|
||||
msg_ok "Completed Successfully!\n"
|
||||
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
||||
|
||||
read -p "Remove this Container? <y/N> " prompt
|
||||
if [[ "${prompt,,}" =~ ^(y|yes)$ ]]; then
|
||||
pct stop "$CTID"
|
||||
pct destroy "$CTID"
|
||||
msg_ok "Removed this script"
|
||||
else
|
||||
msg_warn "Did not remove this script"
|
||||
fi
|
||||
|
@ -1,14 +1,14 @@
|
||||
#!/usr/bin/env bash
|
||||
source <(curl -s https://git.community-scripts.org/community-scripts/ProxmoxVED/raw/branch/main/misc/build.func)
|
||||
# Copyright (c) 2021-2025 community-scripts ORG
|
||||
# Author: Slaviša Arežina (tremor021)
|
||||
# Author: Arian Nasr (arian-nasr)
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVED/raw/main/LICENSE
|
||||
# Source: https://github.com/jitsi/jitsi-meet
|
||||
# Source: https://www.freepbx.org/
|
||||
|
||||
APP="Jitsi-Meet"
|
||||
var_tags="${var_tags:-os}"
|
||||
var_cpu="${var_cpu:-2}"
|
||||
var_ram="${var_ram:-4096}"
|
||||
APP="FreePBX"
|
||||
var_tags="pbx;voip;telephony"
|
||||
var_cpu="${var_cpu:-1}"
|
||||
var_ram="${var_ram:-1024}"
|
||||
var_disk="${var_disk:-20}"
|
||||
var_os="${var_os:-debian}"
|
||||
var_version="${var_version:-12}"
|
||||
@ -20,18 +20,17 @@ color
|
||||
catch_errors
|
||||
|
||||
function update_script() {
|
||||
header_info
|
||||
check_container_storage
|
||||
check_container_resources
|
||||
if [[ ! -f /lib/systemd/system/jitsi-videobridge2.service ]]; then
|
||||
msg_error "No ${APP} Installation Found!"
|
||||
header_info
|
||||
check_container_storage
|
||||
check_container_resources
|
||||
|
||||
# Check if installation is present | -f for file, -d for folder
|
||||
if [[ ! -f /lib/systemd/system/freepbx.service ]]; then
|
||||
msg_error "No ${APP} Installation Found!"
|
||||
exit
|
||||
fi
|
||||
msg_error "Currently we don't provide an update function for this ${APP}."
|
||||
exit
|
||||
fi
|
||||
msg_info "Updating Jitsi-Meet LXC"
|
||||
$STD apt-get update
|
||||
$STD apt-get upgrade -y
|
||||
msg_ok "Updated Jitsi-Meet LXC"
|
||||
exit
|
||||
}
|
||||
|
||||
start
|
||||
@ -41,4 +40,4 @@ 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}https://${IP}${CL}"
|
||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}${CL}"
|
@ -1,101 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVED/raw/main/garmin-grafana/misc/build.func)
|
||||
# Copyright (c) 2021-2025 community-scripts ORG
|
||||
# Author: aliaksei135
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
# Source: https://github.com/arpanghosh8453/garmin-grafana
|
||||
|
||||
APP="garmin-grafana"
|
||||
var_tags="${var_tags:-sports;visualization}"
|
||||
var_cpu="${var_cpu:-2}"
|
||||
var_ram="${var_ram:-2048}"
|
||||
var_disk="${var_disk:-8}"
|
||||
var_os="${var_os:-debian}"
|
||||
var_version="${var_version:-12}"
|
||||
var_unprivileged="${var_unprivileged:-1}"
|
||||
|
||||
header_info "$APP"
|
||||
variables
|
||||
color
|
||||
catch_errors
|
||||
|
||||
# this only updates garmin-grafana, not influxdb or grafana, which are upgraded with apt
|
||||
function update_script() {
|
||||
header_info
|
||||
check_container_storage
|
||||
check_container_resources
|
||||
|
||||
if [[ ! -d /opt/garmin-grafana/ ]]; then
|
||||
msg_error "No ${APP} Installation Found!"
|
||||
exit
|
||||
fi
|
||||
|
||||
RELEASE=$(curl -fsSL https://api.github.com/repos/arpanghosh8453/garmin-grafana/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
|
||||
if [[ ! -d /opt/garmin-grafana/ ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]] || [[ ! -f /opt/${APP}_version.txt ]]; then
|
||||
msg_info "Stopping $APP"
|
||||
systemctl stop garmin-grafana
|
||||
systemctl stop grafana-server
|
||||
systemctl stop influxdb
|
||||
msg_ok "Stopped $APP"
|
||||
|
||||
if [[ ! -f /opt/garmin-grafana/.env ]]; then
|
||||
msg_error "No .env file found in /opt/garmin-grafana/.env"
|
||||
exit
|
||||
fi
|
||||
source /opt/garmin-grafana/.env
|
||||
if [[ -z "${INFLUXDB_USER}" || -z "${INFLUXDB_PASSWORD}" || -z "${INFLUXDB_NAME}" ]]; then
|
||||
msg_error "INFLUXDB_USER, INFLUXDB_PASSWORD, or INFLUXDB_NAME not set in .env file"
|
||||
exit
|
||||
fi
|
||||
|
||||
msg_info "Creating Backup"
|
||||
tar -czf "/opt/${APP}_backup_$(date +%F).tar.gz" /opt/garmin-grafana/.garminconnect /opt/garmin-grafana/.env
|
||||
mv /opt/garmin-grafana/ /opt/garmin-grafana-backup/
|
||||
msg_ok "Backup Created"
|
||||
|
||||
msg_info "Updating $APP to v${RELEASE}"
|
||||
curl -fsSL -o "${RELEASE}.zip" "https://github.com/arpanghosh8453/garmin-grafana/archive/refs/tags/${RELEASE}.zip"
|
||||
unzip -q "${RELEASE}.zip"
|
||||
mv "garmin-grafana-${RELEASE}/" "/opt/garmin-grafana"
|
||||
rm -f "${RELEASE}.zip"
|
||||
$STD uv sync --locked --project /opt/garmin-grafana/
|
||||
# shellcheck disable=SC2016
|
||||
sed -i 's/\${DS_GARMIN_STATS}/garmin_influxdb/g' /opt/garmin-grafana/Grafana_Dashboard/Garmin-Grafana-Dashboard.json
|
||||
sed -i 's/influxdb:8086/localhost:8086/' /opt/garmin-grafana/Grafana_Datasource/influxdb.yaml
|
||||
sed -i "s/influxdb_user/${INFLUXDB_USER}/" /opt/garmin-grafana/Grafana_Datasource/influxdb.yaml
|
||||
sed -i "s/influxdb_secret_password/${INFLUXDB_PASSWORD}/" /opt/garmin-grafana/Grafana_Datasource/influxdb.yaml
|
||||
sed -i "s/GarminStats/${INFLUXDB_NAME}/" /opt/garmin-grafana/Grafana_Datasource/influxdb.yaml
|
||||
# Copy across grafana data
|
||||
cp -r /opt/garmin-grafana/Grafana_Datasource/* /etc/grafana/provisioning/datasources
|
||||
cp -r /opt/garmin-grafana/Grafana_Dashboard/* /etc/grafana/provisioning/dashboards
|
||||
# Copy back the env and token files
|
||||
cp /opt/garmin-grafana-backup/.env /opt/garmin-grafana/.env
|
||||
cp -r /opt/garmin-grafana-backup/.garminconnect /opt/garmin-grafana/.garminconnect
|
||||
msg_ok "Updated $APP to v${RELEASE}"
|
||||
|
||||
msg_info "Starting $APP"
|
||||
systemctl start garmin-grafana
|
||||
systemctl start grafana-server
|
||||
systemctl start influxdb
|
||||
msg_ok "Started $APP"
|
||||
|
||||
msg_info "Cleaning Up"
|
||||
rm -rf /opt/garmin-grafana-backup
|
||||
msg_ok "Cleanup Completed"
|
||||
|
||||
echo "${RELEASE}" >/opt/${APP}_version.txt
|
||||
msg_ok "Update Successful"
|
||||
else
|
||||
msg_ok "No update required. ${APP} is already at v${RELEASE}"
|
||||
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}"
|
@ -1,71 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVED/main/misc/build.func)
|
||||
# Copyright (c) 2021-2025 community-scripts ORG
|
||||
# Author: CrazyWolf13
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
# Source: https://github.com/arunavo4/gitea-mirror
|
||||
|
||||
APP="gitea-mirror"
|
||||
var_tags="${var_tags:-arr;dashboard}"
|
||||
var_cpu="${var_cpu:-2}"
|
||||
var_ram="${var_ram:-1024}"
|
||||
var_disk="${var_disk:-5}"
|
||||
var_os="${var_os:-debian}"
|
||||
var_version="${var_version:-12}"
|
||||
var_unprivileged="${var_unprivileged:-1}"
|
||||
|
||||
header_info "$APP"
|
||||
|
||||
variables
|
||||
color
|
||||
catch_errors
|
||||
|
||||
function update_script() {
|
||||
header_info
|
||||
check_container_storage
|
||||
check_container_resources
|
||||
if [[ ! -d /opt/gite-mirror ]]; then
|
||||
msg_error "No ${APP} Installation Found!"
|
||||
exit
|
||||
fi
|
||||
RELEASE=$(curl -fsSL https://api.github.com/repos/arunavo4/gitea-mirror/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
||||
if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
|
||||
|
||||
msg_info "Stopping Services (Patience)"
|
||||
systemctl stop gitea-mirror
|
||||
msg_ok "Services Stopped"
|
||||
|
||||
msg_info "Backup Data"
|
||||
mkdir -p /opt/homarr-data-backup
|
||||
cp /opt/homarr/.env /opt/homarr-data-backup/.env
|
||||
msg_ok "Backup Data"
|
||||
|
||||
msg_info "Installing Bun"
|
||||
export BUN_INSTALL=/opt/bun
|
||||
curl -fsSL https://bun.sh/install | bash
|
||||
ln -sf /opt/bun/bin/bun /usr/local/bin/bun
|
||||
ln -sf /opt/bun/bin/bun /usr/local/bin/bunx
|
||||
msg_ok "Installed Bun"
|
||||
|
||||
msg_info "Updating and rebuilding ${APP} to v${RELEASE} (Patience)"
|
||||
apt install -y git
|
||||
rm -rf /opt/homarr
|
||||
fetch_and_deploy_gh_release "arunavo4/gitea-mirror"
|
||||
cd /opt/gitea-mirror
|
||||
bun install
|
||||
bun run build
|
||||
bun run manage-db init
|
||||
else
|
||||
msg_ok "No update required. ${APP} is already at v${RELEASE}"
|
||||
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}:4321${CL}"
|
6
ct/headers/alpine-bitmagnet
Normal file
6
ct/headers/alpine-bitmagnet
Normal file
@ -0,0 +1,6 @@
|
||||
___ __ _ __ _ __ __
|
||||
/ | / /___ (_)___ ___ / /_ (_) /_____ ___ ____ _____ _____ ___ / /_
|
||||
/ /| | / / __ \/ / __ \/ _ \______/ __ \/ / __/ __ `__ \/ __ `/ __ `/ __ \/ _ \/ __/
|
||||
/ ___ |/ / /_/ / / / / / __/_____/ /_/ / / /_/ / / / / / /_/ / /_/ / / / / __/ /_
|
||||
/_/ |_/_/ .___/_/_/ /_/\___/ /_.___/_/\__/_/ /_/ /_/\__,_/\__, /_/ /_/\___/\__/
|
||||
/_/ /____/
|
@ -1,6 +0,0 @@
|
||||
__ _ __
|
||||
____ _/ /___ (_)___ ___ / /_ ____ ____ ___ ____ ___________
|
||||
/ __ `/ / __ \/ / __ \/ _ \______/ __ \/ __ \/ __ `__ \/ __ `/ ___/ ___/
|
||||
/ /_/ / / /_/ / / / / / __/_____/ / / / /_/ / / / / / / /_/ / / / /
|
||||
\__,_/_/ .___/_/_/ /_/\___/ /_/ /_/\____/_/ /_/ /_/\__,_/_/ /_/
|
||||
/_/
|
6
ct/headers/ampache
Normal file
6
ct/headers/ampache
Normal file
@ -0,0 +1,6 @@
|
||||
___ __
|
||||
/ | ____ ___ ____ ____ ______/ /_ ___
|
||||
/ /| | / __ `__ \/ __ \/ __ `/ ___/ __ \/ _ \
|
||||
/ ___ |/ / / / / / /_/ / /_/ / /__/ / / / __/
|
||||
/_/ |_/_/ /_/ /_/ .___/\__,_/\___/_/ /_/\___/
|
||||
/_/
|
@ -1,6 +0,0 @@
|
||||
___
|
||||
/ | _________ ___ _______
|
||||
/ /| | / ___/ __ `/ / / / ___/
|
||||
/ ___ |/ / / /_/ / /_/ (__ )
|
||||
/_/ |_/_/ \__, /\__,_/____/
|
||||
/____/
|
@ -1,6 +1,6 @@
|
||||
____ __ ____ __ __
|
||||
/ __ )____ _/ /_ __ __ / __ )__ ______/ /___/ /_ __
|
||||
/ __ / __ `/ __ \/ / / / / __ / / / / __ / __ / / / /
|
||||
/ /_/ / /_/ / /_/ / /_/ / / /_/ / /_/ / /_/ / /_/ / /_/ /
|
||||
/_____/\__,_/_.___/\__, / /_____/\__,_/\__,_/\__,_/\__, /
|
||||
/____/ /____/
|
||||
____ __ ____ __ __
|
||||
/ __ )____ _/ /_ __ __/ __ )__ ______/ /___/ /_ __
|
||||
/ __ / __ `/ __ \/ / / / __ / / / / __ / __ / / / /
|
||||
/ /_/ / /_/ / /_/ / /_/ / /_/ / /_/ / /_/ / /_/ / /_/ /
|
||||
/_____/\__,_/_.___/\__, /_____/\__,_/\__,_/\__,_/\__, /
|
||||
/____/ /____/
|
||||
|
6
ct/headers/bitmagnet
Normal file
6
ct/headers/bitmagnet
Normal file
@ -0,0 +1,6 @@
|
||||
____ _ __ __
|
||||
/ __ )(_) /_____ ___ ____ _____ _____ ___ / /_
|
||||
/ __ / / __/ __ `__ \/ __ `/ __ `/ __ \/ _ \/ __/
|
||||
/ /_/ / / /_/ / / / / / /_/ / /_/ / / / / __/ /_
|
||||
/_____/_/\__/_/ /_/ /_/\__,_/\__, /_/ /_/\___/\__/
|
||||
/____/
|
@ -1,6 +0,0 @@
|
||||
______ __ _ __
|
||||
/ ____/___ ____ _ _____ _____/ /| |/ /
|
||||
/ / / __ \/ __ \ | / / _ \/ ___/ __/ /
|
||||
/ /___/ /_/ / / / / |/ / __/ / / /_/ |
|
||||
\____/\____/_/ /_/|___/\___/_/ \__/_/|_|
|
||||
|
6
ct/headers/freepbx
Normal file
6
ct/headers/freepbx
Normal file
@ -0,0 +1,6 @@
|
||||
______ ____ ____ _ __
|
||||
/ ____/_______ ___ / __ \/ __ ) |/ /
|
||||
/ /_ / ___/ _ \/ _ \/ /_/ / __ | /
|
||||
/ __/ / / / __/ __/ ____/ /_/ / |
|
||||
/_/ /_/ \___/\___/_/ /_____/_/|_|
|
||||
|
@ -1,6 +0,0 @@
|
||||
_ ____
|
||||
____ _____ __________ ___ (_)___ ____ __________ _/ __/___ _____ ____ _
|
||||
/ __ `/ __ `/ ___/ __ `__ \/ / __ \______/ __ `/ ___/ __ `/ /_/ __ `/ __ \/ __ `/
|
||||
/ /_/ / /_/ / / / / / / / / / / / /_____/ /_/ / / / /_/ / __/ /_/ / / / / /_/ /
|
||||
\__, /\__,_/_/ /_/ /_/ /_/_/_/ /_/ \__, /_/ \__,_/_/ \__,_/_/ /_/\__,_/
|
||||
/____/ /____/
|
6
ct/headers/ghostfolio
Normal file
6
ct/headers/ghostfolio
Normal file
@ -0,0 +1,6 @@
|
||||
________ __ ____ ___
|
||||
/ ____/ /_ ____ _____/ /_/ __/___ / (_)___
|
||||
/ / __/ __ \/ __ \/ ___/ __/ /_/ __ \/ / / __ \
|
||||
/ /_/ / / / / /_/ (__ ) /_/ __/ /_/ / / / /_/ /
|
||||
\____/_/ /_/\____/____/\__/_/ \____/_/_/\____/
|
||||
|
@ -1,6 +0,0 @@
|
||||
_ __ _
|
||||
____ _(_) /____ ____ _ ____ ___ (_)_____________ _____
|
||||
/ __ `/ / __/ _ \/ __ `/_____/ __ `__ \/ / ___/ ___/ __ \/ ___/
|
||||
/ /_/ / / /_/ __/ /_/ /_____/ / / / / / / / / / / /_/ / /
|
||||
\__, /_/\__/\___/\__,_/ /_/ /_/ /_/_/_/ /_/ \____/_/
|
||||
/____/
|
6
ct/headers/hoodik
Normal file
6
ct/headers/hoodik
Normal file
@ -0,0 +1,6 @@
|
||||
__ __ ___ __
|
||||
/ / / /___ ____ ____/ (_) /__
|
||||
/ /_/ / __ \/ __ \/ __ / / //_/
|
||||
/ __ / /_/ / /_/ / /_/ / / ,<
|
||||
/_/ /_/\____/\____/\__,_/_/_/|_|
|
||||
|
@ -1,6 +0,0 @@
|
||||
___ __ _ __ ___ __
|
||||
/ (_) /______(_) / |/ /__ ___ / /_
|
||||
__ / / / __/ ___/ /_____/ /|_/ / _ \/ _ \/ __/
|
||||
/ /_/ / / /_(__ ) /_____/ / / / __/ __/ /_
|
||||
\____/_/\__/____/_/ /_/ /_/\___/\___/\__/
|
||||
|
@ -1,6 +0,0 @@
|
||||
__ __
|
||||
/ //_/___ __________ ___
|
||||
/ ,< / __ `/ ___/ __ `__ \
|
||||
/ /| / /_/ (__ ) / / / / /
|
||||
/_/ |_\__,_/____/_/ /_/ /_/
|
||||
|
6
ct/headers/koel
Normal file
6
ct/headers/koel
Normal file
@ -0,0 +1,6 @@
|
||||
__ __ __
|
||||
/ //_/___ ___ / /
|
||||
/ ,< / __ \/ _ \/ /
|
||||
/ /| / /_/ / __/ /
|
||||
/_/ |_\____/\___/_/
|
||||
|
@ -1,6 +0,0 @@
|
||||
__ _ __ ___ _ _____
|
||||
/ / __ _______(_)___ ____ / |/ /_ _______(_)____ / ___/___ ______ _____ _____
|
||||
/ / / / / / ___/ / __ \/ __ \ / /|_/ / / / / ___/ / ___/ \__ \/ _ \/ ___/ | / / _ \/ ___/
|
||||
/ /___/ /_/ / / / / /_/ / / / / / / / / /_/ (__ ) / /__ ___/ / __/ / | |/ / __/ /
|
||||
/_____/\__, /_/ /_/\____/_/ /_/ /_/ /_/\__,_/____/_/\___/ /____/\___/_/ |___/\___/_/
|
||||
/____/
|
6
ct/headers/maxun
Normal file
6
ct/headers/maxun
Normal file
@ -0,0 +1,6 @@
|
||||
__ ___
|
||||
/ |/ /___ __ ____ ______
|
||||
/ /|_/ / __ `/ |/_/ / / / __ \
|
||||
/ / / / /_/ /> </ /_/ / / / /
|
||||
/_/ /_/\__,_/_/|_|\__,_/_/ /_/
|
||||
|
6
ct/headers/netbootxyz
Normal file
6
ct/headers/netbootxyz
Normal file
@ -0,0 +1,6 @@
|
||||
__ __ __
|
||||
____ ___ / /_/ /_ ____ ____ / /_ _ ____ ______
|
||||
/ __ \/ _ \/ __/ __ \/ __ \/ __ \/ __/ | |/_/ / / /_ /
|
||||
/ / / / __/ /_/ /_/ / /_/ / /_/ / /__ _> </ /_/ / / /_
|
||||
/_/ /_/\___/\__/_.___/\____/\____/\__(_)_/|_|\__, / /___/
|
||||
/____/
|
6
ct/headers/odoo
Normal file
6
ct/headers/odoo
Normal file
@ -0,0 +1,6 @@
|
||||
____ __
|
||||
/ __ \____/ /___ ____
|
||||
/ / / / __ / __ \/ __ \
|
||||
/ /_/ / /_/ / /_/ / /_/ /
|
||||
\____/\__,_/\____/\____/
|
||||
|
@ -1,6 +0,0 @@
|
||||
____ _ __ __ __ ______
|
||||
/ __ \____ ___ ____ | | / /__ / /_ / / / / _/
|
||||
/ / / / __ \/ _ \/ __ \ | | /| / / _ \/ __ \/ / / // /
|
||||
/ /_/ / /_/ / __/ / / / | |/ |/ / __/ /_/ / /_/ // /
|
||||
\____/ .___/\___/_/ /_/ |__/|__/\___/_.___/\____/___/
|
||||
/_/
|
6
ct/headers/pixelfed
Normal file
6
ct/headers/pixelfed
Normal file
@ -0,0 +1,6 @@
|
||||
____ _ ______ __
|
||||
/ __ \(_) _____ / / __/__ ____/ /
|
||||
/ /_/ / / |/_/ _ \/ / /_/ _ \/ __ /
|
||||
/ ____/ /> </ __/ / __/ __/ /_/ /
|
||||
/_/ /_/_/|_|\___/_/_/ \___/\__,_/
|
||||
|
@ -1,6 +0,0 @@
|
||||
____ __
|
||||
/ __ \__ __/ /_______
|
||||
/ /_/ / / / / / ___/ _ \
|
||||
/ ____/ /_/ / (__ ) __/
|
||||
/_/ \__,_/_/____/\___/
|
||||
|
6
ct/headers/rclone
Normal file
6
ct/headers/rclone
Normal file
@ -0,0 +1,6 @@
|
||||
____ __
|
||||
/ __ \_____/ /___ ____ ___
|
||||
/ /_/ / ___/ / __ \/ __ \/ _ \
|
||||
/ _, _/ /__/ / /_/ / / / / __/
|
||||
/_/ |_|\___/_/\____/_/ /_/\___/
|
||||
|
6
ct/headers/roundcubemail
Normal file
6
ct/headers/roundcubemail
Normal file
@ -0,0 +1,6 @@
|
||||
____ __ __ _ __
|
||||
/ __ \____ __ ______ ____/ /______ __/ /_ ___ ____ ___ ____ _(_) /
|
||||
/ /_/ / __ \/ / / / __ \/ __ / ___/ / / / __ \/ _ \/ __ `__ \/ __ `/ / /
|
||||
/ _, _/ /_/ / /_/ / / / / /_/ / /__/ /_/ / /_/ / __/ / / / / / /_/ / / /
|
||||
/_/ |_|\____/\__,_/_/ /_/\__,_/\___/\__,_/_.___/\___/_/ /_/ /_/\__,_/_/_/
|
||||
|
@ -1,6 +0,0 @@
|
||||
_____ _ __ _ ________
|
||||
/ ___/___ ____ _____| |/ // | / / ____/
|
||||
\__ \/ _ \/ __ `/ ___/ // |/ / / __
|
||||
___/ / __/ /_/ / / / |/ /| / /_/ /
|
||||
/____/\___/\__,_/_/ /_/|_/_/ |_/\____/
|
||||
|
6
ct/headers/squirrelserversmanager
Normal file
6
ct/headers/squirrelserversmanager
Normal file
@ -0,0 +1,6 @@
|
||||
_____ _ __ _____ __ ___
|
||||
/ ___/____ ___ __(_)____________ / / / ___/___ ______ _____ __________ / |/ /___ _____ ____ _____ ____ _____
|
||||
\__ \/ __ `/ / / / / ___/ ___/ _ \/ / \__ \/ _ \/ ___/ | / / _ \/ ___/ ___/ / /|_/ / __ `/ __ \/ __ `/ __ `/ _ \/ ___/
|
||||
___/ / /_/ / /_/ / / / / / / __/ / ___/ / __/ / | |/ / __/ / (__ ) / / / / /_/ / / / / /_/ / /_/ / __/ /
|
||||
/____/\__, /\__,_/_/_/ /_/ \___/_/ /____/\___/_/ |___/\___/_/ /____/ /_/ /_/\__,_/_/ /_/\__,_/\__, /\___/_/
|
||||
/_/ /____/
|
@ -1,5 +1,5 @@
|
||||
#!/usr/bin/env bash
|
||||
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVED/main/misc/build.func)
|
||||
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
|
||||
# Copyright (c) 2021-2025 tteck
|
||||
# Author: tteck (tteckster) | Co-Author: MickLesk (Canbiz) | Co-Author: CrazyWolf13
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
@ -124,9 +124,7 @@ EOF
|
||||
fetch_and_deploy_gh_release "homarr-labs/homarr"
|
||||
mv /opt/homarr-data-backup/.env /opt/homarr/.env
|
||||
cd /opt/homarr
|
||||
echo "test2"
|
||||
export NODE_ENV=""
|
||||
$STD pnpm install --recursive --frozen-lockfile --shamefully-hoist
|
||||
$STD pnpm install --config.allowBuildScripts=true
|
||||
$STD pnpm build
|
||||
cp /opt/homarr/apps/nextjs/next.config.ts .
|
||||
cp /opt/homarr/apps/nextjs/package.json .
|
||||
|
74
ct/immich.sh
74
ct/immich.sh
@ -7,7 +7,7 @@ source <(curl -s https://git.community-scripts.org/community-scripts/ProxmoxVED/
|
||||
|
||||
APP="immich"
|
||||
var_tags="${var_tags:-photos}"
|
||||
var_disk="${var_disk:-20}"
|
||||
var_disk="${var_disk:-12}"
|
||||
var_cpu="${var_cpu:-4}"
|
||||
var_ram="${var_ram:-4096}"
|
||||
var_os="${var_os:-debian}"
|
||||
@ -46,13 +46,13 @@ function update_script() {
|
||||
rm ~/Dockerfile
|
||||
fi
|
||||
if [[ -f ~/.immich_library_revisions ]]; then
|
||||
libraries=("libjxl" "libheif" "libraw" "imagemagick" "libvips")
|
||||
readarray -d '' NEW_REVISIONS < <(for library in "${libraries[@]}"; do
|
||||
echo "$library: $(curl -fsSL https://raw.githubusercontent.com/immich-app/base-images/refs/heads/main/server/sources/"$library".json | jq -cr '.revision' -)"
|
||||
done)
|
||||
UPDATED_REVISIONS="$(comm -13 <(sort ~/.immich_library_revisions) <(echo -n "${NEW_REVISIONS[@]}" | sort))"
|
||||
if [[ "$UPDATED_REVISIONS" ]]; then
|
||||
readarray -t NAMES < <(echo "$UPDATED_REVISIONS" | awk -F ':' '{print $1}')
|
||||
curl -fsSLO https://raw.githubusercontent.com/immich-app/base-images/refs/heads/main/server/bin/build-lock.json
|
||||
jq -cr '.sources[].revision' ./build-lock.json >~/.new_revisions
|
||||
readarray -t UPDATED_REVISIONS < <(comm -13 <(sort ~/.immich_library_revisions) <(sort ~/.new_revisions))
|
||||
if [[ "${#UPDATED_REVISIONS[@]}" -gt 0 ]]; then
|
||||
readarray -t NAMES < <(for revision in "${UPDATED_REVISIONS[@]}"; do
|
||||
jq -cr --arg jq_revision "$revision" '.sources[] | select(.revision == $jq_revision).name' ./build-lock.json
|
||||
done)
|
||||
rm -rf "$SOURCE_DIR"
|
||||
mkdir -p "$SOURCE_DIR"
|
||||
cd "$BASE_DIR"
|
||||
@ -64,13 +64,13 @@ function update_script() {
|
||||
SOURCE=${SOURCE_DIR}/libjxl
|
||||
JPEGLI_LIBJPEG_LIBRARY_SOVERSION="62"
|
||||
JPEGLI_LIBJPEG_LIBRARY_VERSION="62.3.0"
|
||||
: "${LIBJXL_REVISION:=$(jq -cr '.revision' $BASE_DIR/server/sources/libjxl.json)}"
|
||||
: "${LIBJXL_REVISION:=$(jq -cr '.sources[] | select(.name == "libjxl").revision' $BASE_DIR/server/bin/build-lock.json)}"
|
||||
$STD git clone https://github.com/libjxl/libjxl.git "$SOURCE"
|
||||
cd "$SOURCE"
|
||||
$STD git reset --hard "$LIBJXL_REVISION"
|
||||
$STD git submodule update --init --recursive --depth 1 --recommend-shallow
|
||||
$STD git apply "$BASE_DIR"/server/sources/libjxl-patches/jpegli-empty-dht-marker.patch
|
||||
$STD git apply "$BASE_DIR"/server/sources/libjxl-patches/jpegli-icc-warning.patch
|
||||
$STD git apply "$BASE_DIR"/server/bin/patches/jpegli-empty-dht-marker.patch
|
||||
$STD git apply "$BASE_DIR"/server/bin/patches/jpegli-icc-warning.patch
|
||||
mkdir build
|
||||
cd build
|
||||
$STD cmake \
|
||||
@ -102,7 +102,7 @@ function update_script() {
|
||||
if [[ "$name" == "libheif" ]]; then
|
||||
msg_info "Recompiling libheif"
|
||||
SOURCE=${SOURCE_DIR}/libheif
|
||||
: "${LIBHEIF_REVISION:=$(jq -cr '.revision' $BASE_DIR/server/sources/libheif.json)}"
|
||||
: "${LIBHEIF_REVISION:=$(jq -cr '.sources[] | select(.name == "libheif").revision' $BASE_DIR/server/bin/build-lock.json)}"
|
||||
$STD git clone https://github.com/strukturag/libheif.git "$SOURCE"
|
||||
cd "$SOURCE"
|
||||
$STD git reset --hard "$LIBHEIF_REVISION"
|
||||
@ -128,7 +128,7 @@ function update_script() {
|
||||
if [[ "$name" == "libraw" ]]; then
|
||||
msg_info "Recompiling libraw"
|
||||
SOURCE=${SOURCE_DIR}/libraw
|
||||
: "${LIBRAW_REVISION:=$(jq -cr '.revision' $BASE_DIR/server/sources/libraw.json)}"
|
||||
: "${LIBRAW_REVISION:=$(jq -cr '.sources[] | select(.name == "libraw").revision' $BASE_DIR/server/bin/build-lock.json)}"
|
||||
$STD git clone https://github.com/libraw/libraw.git "$SOURCE"
|
||||
cd "$SOURCE"
|
||||
$STD git reset --hard "$LIBRAW_REVISION"
|
||||
@ -144,7 +144,7 @@ function update_script() {
|
||||
if [[ "$name" == "imagemagick" ]]; then
|
||||
msg_info "Recompiling ImageMagick"
|
||||
SOURCE=$SOURCE_DIR/imagemagick
|
||||
: "${IMAGEMAGICK_REVISION:=$(jq -cr '.revision' $BASE_DIR/server/sources/imagemagick.json)}"
|
||||
: "${IMAGEMAGICK_REVISION:=$(jq -cr '.sources[] | select(.name == "imagemagick").revision' $BASE_DIR/server/bin/build-lock.json)}"
|
||||
$STD git clone https://github.com/ImageMagick/ImageMagick.git "$SOURCE"
|
||||
cd "$SOURCE"
|
||||
$STD git reset --hard "$IMAGEMAGICK_REVISION"
|
||||
@ -159,7 +159,7 @@ function update_script() {
|
||||
if [[ "$name" == "libvips" ]]; then
|
||||
msg_info "Recompiling libvips"
|
||||
SOURCE=$SOURCE_DIR/libvips
|
||||
: "${LIBVIPS_REVISION:=$(jq -cr '.revision' $BASE_DIR/server/sources/libvips.json)}"
|
||||
: "${LIBVIPS_REVISION:=$(jq -cr '.sources[] | select(.name == "libvips").revision' $BASE_DIR/server/bin/build-lock.json)}"
|
||||
$STD git clone https://github.com/libvips/libvips.git "$SOURCE"
|
||||
cd "$SOURCE"
|
||||
$STD git reset --hard "$LIBVIPS_REVISION"
|
||||
@ -172,9 +172,10 @@ function update_script() {
|
||||
msg_ok "Recompiled libvips"
|
||||
fi
|
||||
done
|
||||
echo -n "${NEW_REVISIONS[@]}" >~/.immich_library_revisions
|
||||
mv ~/.new_revisions ~/.immich_library_revisions
|
||||
msg_ok "Image-processing libraries compiled"
|
||||
fi
|
||||
rm ~/build-lock.json
|
||||
fi
|
||||
RELEASE=$(curl -s https://api.github.com/repos/immich-app/immich/releases?per_page=1 | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
||||
if [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]] || [[ ! -f /opt/${APP}_version.txt ]]; then
|
||||
@ -182,44 +183,8 @@ function update_script() {
|
||||
systemctl stop immich-web
|
||||
systemctl stop immich-ml
|
||||
msg_ok "Stopped ${APP}"
|
||||
if [[ "$(cat /opt/${APP}_version.txt)" < "1.133.0" ]]; then
|
||||
msg_info "Upgrading to the VectorChord PostgreSQL extension"
|
||||
NUMBER="$(
|
||||
sed -n '2p' <(
|
||||
sudo -u postgres psql -A -d immich <<EOF
|
||||
SELECT atttypmod as dimsize
|
||||
FROM pg_attribute f
|
||||
JOIN pg_class c ON c.oid = f.attrelid
|
||||
WHERE c.relkind = 'r'::char
|
||||
AND f.attnum > 0
|
||||
AND c.relname = 'smart_search'::text
|
||||
AND f.attname = 'embedding'::text;
|
||||
EOF
|
||||
)
|
||||
)"
|
||||
$STD sudo -u postgres psql -d immich <<EOF
|
||||
DROP INDEX IF EXISTS clip_index;
|
||||
DROP INDEX IF EXISTS face_index;
|
||||
ALTER TABLE smart_search ALTER COLUMN embedding SET DATA TYPE real[];
|
||||
ALTER TABLE face_search ALTER COLUMN embedding SET DATA TYPE real[];
|
||||
EOF
|
||||
$STD apt-get update
|
||||
$STD apt-get install postgresql-16-pgvector -y
|
||||
curl -fsSL https://github.com/tensorchord/VectorChord/releases/download/0.3.0/postgresql-16-vchord_0.3.0-1_amd64.deb -o vchord.deb
|
||||
$STD dpkg -i vchord.deb
|
||||
rm vchord.deb
|
||||
sed -i "s|vectors.so|vchord.so|" /etc/postgresql/16/main/postgresql.conf
|
||||
systemctl restart postgresql.service
|
||||
$STD sudo -u postgres psql -d immich <<EOF
|
||||
CREATE EXTENSION IF NOT EXISTS vchord CASCADE;
|
||||
ALTER TABLE smart_search ALTER COLUMN embedding SET DATA TYPE vector($NUMBER);
|
||||
ALTER TABLE face_search ALTER COLUMN embedding SET DATA TYPE vector(512);
|
||||
EOF
|
||||
$STD apt purge vectors-pg16 -y
|
||||
msg_ok "Database upgrade complete"
|
||||
fi
|
||||
INSTALL_DIR="/opt/${APP}"
|
||||
UPLOAD_DIR="$(sed -n '/IMMICH_MEDIA_LOCATION/s/[^=]*=//p' /opt/immich/.env)"
|
||||
UPLOAD_DIR="${INSTALL_DIR}/upload"
|
||||
SRC_DIR="${INSTALL_DIR}/source"
|
||||
APP_DIR="${INSTALL_DIR}/app"
|
||||
ML_DIR="${APP_DIR}/machine-learning"
|
||||
@ -248,6 +213,7 @@ EOF
|
||||
cp -a server/{node_modules,dist,bin,resources,package.json,package-lock.json,start*.sh} "$APP_DIR"/
|
||||
cp -a web/build "$APP_DIR"/www
|
||||
cp LICENSE "$APP_DIR"
|
||||
cp "$BASE_DIR"/server/bin/build-lock.json "$APP_DIR"
|
||||
msg_ok "Updated ${APP} web and microservices"
|
||||
|
||||
cd "$SRC_DIR"/machine-learning
|
||||
@ -291,8 +257,6 @@ EOF
|
||||
$STD npm i -g @immich/cli
|
||||
msg_ok "Updated Immich CLI"
|
||||
|
||||
sed -i "s|pgvecto.rs|vectorchord|" /opt/"${APP}"/.env
|
||||
|
||||
chown -R immich:immich "$INSTALL_DIR"
|
||||
echo "$RELEASE" >/opt/"${APP}"_version.txt
|
||||
msg_ok "Updated ${APP} to v${RELEASE}"
|
||||
|
46
ct/kasm.sh
46
ct/kasm.sh
@ -1,46 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVED/main/misc/build.func)
|
||||
# Copyright (c) 2021-2025 community-scripts ORG
|
||||
# Author: Omar Minaya
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
# Source: https://www.kasmweb.com/docs/latest/index.html
|
||||
|
||||
APP="Kasm"
|
||||
var_tags="${var_tags:-os}"
|
||||
var_cpu="${var_cpu:-2}"
|
||||
var_ram="${var_ram:-4192}"
|
||||
var_disk="${var_disk:-30}"
|
||||
var_os="${var_os:-debian}"
|
||||
var_version="${var_version:-12}"
|
||||
var_unprivileged="${var_unprivileged:-1}"
|
||||
var_fuse="${var_fuse:-yes}"
|
||||
var_tun="${var_tun:-yes}"
|
||||
|
||||
header_info "$APP"
|
||||
variables
|
||||
color
|
||||
catch_errors
|
||||
|
||||
function update_script() {
|
||||
header_info
|
||||
check_container_storage
|
||||
check_container_resources
|
||||
if [[ ! -d /var ]]; then
|
||||
msg_error "No ${APP} Installation Found!"
|
||||
exit
|
||||
fi
|
||||
msg_info "Updating $APP LXC"
|
||||
$STD apt-get update
|
||||
$STD apt-get -y upgrade
|
||||
msg_ok "Updated $APP LXC"
|
||||
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}https://${IP}${CL}"
|
@ -38,7 +38,7 @@ function update_script() {
|
||||
|
||||
start
|
||||
build_container
|
||||
desiption
|
||||
description
|
||||
|
||||
msg_ok "Completed Successfully!\n"
|
||||
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
||||
|
@ -1,61 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVED/refs/heads/main/misc/build.func)
|
||||
# Copyright (c) 2021-2025 community-scripts ORG
|
||||
# Author: Omar Minaya
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
# Source: https://lyrion.org/getting-started/
|
||||
|
||||
APP="Lyrion Music Server"
|
||||
var_tags="${var_tags:-media}"
|
||||
var_cpu="${var_cpu:-1}"
|
||||
var_ram="${var_ram:-1024}"
|
||||
var_disk="${var_disk:-3}"
|
||||
var_os="${var_os:-debian}"
|
||||
var_version="${var_version:-12}"
|
||||
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 /lib/systemd/system/lyrionmusicserver.service ]]; then
|
||||
msg_error "No ${APP} Installation Found!"
|
||||
exit
|
||||
fi
|
||||
|
||||
DEB_URL=$(curl -s 'https://lyrion.org/getting-started/' | grep -oP '<a\s[^>]*href="\K[^"]*amd64\.deb(?="[^>]*>)' | head -n 1)
|
||||
RELEASE=$(echo "$DEB_URL" | grep -oP 'lyrionmusicserver_\K[0-9.]+(?=_amd64\.deb)')
|
||||
DEB_FILE="/tmp/lyrionmusicserver_${RELEASE}_amd64.deb"
|
||||
if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
|
||||
msg_info "Updating $APP to ${RELEASE}"
|
||||
curl -fsSL -o "$DEB_FILE" "$DEB_URL"
|
||||
$STD apt install "$DEB_FILE" -y
|
||||
systemctl restart lyrion
|
||||
echo "${RELEASE}" >/opt/${APP}_version.txt
|
||||
msg_ok "Updated $APP to ${RELEASE}"
|
||||
|
||||
msg_info "Cleaning up"
|
||||
$STD rm -f "$DEB_FILE"
|
||||
$STD apt-get -y autoremove
|
||||
$STD apt-get -y autoclean
|
||||
msg_ok "Cleaned"
|
||||
else
|
||||
msg_ok "$APP is already up to date (${RELEASE})"
|
||||
fi
|
||||
}
|
||||
|
||||
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 the web interface at:${CL}"
|
||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:9000${CL}"
|
||||
echo -e "${INFO}${YW} Check logs for setup details: ~/lyrion-install.log${CL}"
|
@ -1,73 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVED/main/misc/build.func)
|
||||
# Copyright (c) 2021-2025 tteck
|
||||
# Author: havardthom
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
# Source: https://openwebui.com/
|
||||
|
||||
APP="Open WebUI"
|
||||
var_tags="${var_tags:-ai;interface}"
|
||||
var_cpu="${var_cpu:-4}"
|
||||
var_ram="${var_ram:-8192}"
|
||||
var_disk="${var_disk:-25}"
|
||||
var_os="${var_os:-debian}"
|
||||
var_version="${var_version:-12}"
|
||||
var_unprivileged="${var_unprivileged:-1}"
|
||||
|
||||
header_info "$APP"
|
||||
variables
|
||||
color
|
||||
catch_errors
|
||||
|
||||
function update_script() {
|
||||
header_info
|
||||
check_container_storage
|
||||
check_container_resources
|
||||
if [[ ! -d /opt/open-webui ]]; then
|
||||
msg_error "No ${APP} Installation Found!"
|
||||
exit
|
||||
fi
|
||||
|
||||
if [ -x "/usr/bin/ollama" ]; then
|
||||
msg_info "Updating Ollama"
|
||||
OLLAMA_VERSION=$(ollama -v | awk '{print $NF}')
|
||||
RELEASE=$(curl -s https://api.github.com/repos/ollama/ollama/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4)}')
|
||||
if [ "$OLLAMA_VERSION" != "$RELEASE" ]; then
|
||||
curl -fsSLO https://ollama.com/download/ollama-linux-amd64.tgz
|
||||
tar -C /usr -xzf ollama-linux-amd64.tgz
|
||||
rm -rf ollama-linux-amd64.tgz
|
||||
msg_ok "Ollama updated to version $RELEASE"
|
||||
else
|
||||
msg_ok "Ollama is already up to date."
|
||||
fi
|
||||
fi
|
||||
|
||||
msg_info "Updating ${APP} (Patience)"
|
||||
systemctl stop open-webui.service
|
||||
mkdir -p /opt/openwebui-backup
|
||||
cp -rf /opt/openwebui/backend/data /opt/openwebui-backup
|
||||
cp /opt/openwebui/.env /opt
|
||||
rm -rf /opt/openwebui
|
||||
fetch_and_deploy_gh_release "open-webui/open-webui"
|
||||
cd /opt/openwebui
|
||||
$STD npm install
|
||||
export NODE_OPTIONS="--max-old-space-size=3584"
|
||||
sed -i "s/git rev-parse HEAD/openssl rand -hex 20/g" /opt/openwebui/svelte.config.js
|
||||
$STD npm run build
|
||||
cd ./backend
|
||||
$STD pip install -r requirements.txt -U
|
||||
cp -rf /opt/openwebui-backup/* /opt/openwebui/backend
|
||||
mv /opt/.env /opt/openwebui/
|
||||
systemctl start open-webui.service
|
||||
msg_ok "Updated Successfully"
|
||||
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}:8080${CL}"
|
79
ct/pulse.sh
79
ct/pulse.sh
@ -1,79 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVED/main/misc/build.func)
|
||||
# Copyright (c) 2021-2025 community-scripts ORG
|
||||
# Author: rcourtman
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVED/raw/main/LICENSE
|
||||
# Source: https://github.com/rcourtman/Pulse
|
||||
|
||||
APP="Pulse"
|
||||
var_tags="monitoring;proxmox"
|
||||
var_cpu="1"
|
||||
var_ram="1024"
|
||||
var_disk="4"
|
||||
var_os="debian"
|
||||
var_version="12"
|
||||
var_unprivileged="1"
|
||||
|
||||
header_info "$APP"
|
||||
variables
|
||||
color
|
||||
catch_errors
|
||||
|
||||
function update_script() {
|
||||
header_info
|
||||
check_container_storage
|
||||
check_container_resources
|
||||
if [[ ! -d /opt/pulse-proxmox ]]; then
|
||||
msg_error "No ${APP} Installation Found!"
|
||||
exit
|
||||
fi
|
||||
RELEASE=$(curl -fsSL https://api.github.com/repos/rcourtman/Pulse/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
||||
if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
|
||||
msg_info "Stopping ${APP}"
|
||||
systemctl stop pulse-monitor
|
||||
msg_ok "Stopped ${APP}"
|
||||
|
||||
msg_info "Updating Pulse"
|
||||
if [[ -f /opt/pulse-proxmox/.env ]]; then
|
||||
cp /opt/pulse-proxmox/.env /tmp/.env.backup.pulse
|
||||
fi
|
||||
temp_file=$(mktemp)
|
||||
mkdir -p /opt/pulse-proxmox
|
||||
rm -rf /opt/pulse-proxmox/*
|
||||
curl -fsSL "https://github.com/rcourtman/Pulse/archive/refs/tags/v${RELEASE}.tar.gz" -o "$temp_file"
|
||||
tar zxf "$temp_file" --strip-components=1 -C /opt/pulse-proxmox
|
||||
if [[ -f /tmp/.env.backup.pulse ]]; then
|
||||
mv /tmp/.env.backup.pulse /opt/pulse-proxmox/.env
|
||||
fi
|
||||
cd /opt/pulse-proxmox
|
||||
$STD npm install --unsafe-perm
|
||||
cd /opt/pulse-proxmox/server
|
||||
$STD npm install --unsafe-perm
|
||||
cd /opt/pulse-proxmox
|
||||
$STD npm run build:css
|
||||
echo "${RELEASE}" >/opt/${APP}_version.txt
|
||||
msg_ok "Updated Pulse to ${RELEASE}"
|
||||
|
||||
msg_info "Setting permissions for /opt/pulse-proxmox..."
|
||||
chown -R pulse:pulse "/opt/pulse-proxmox"
|
||||
find "/opt/pulse-proxmox" -type d -exec chmod 755 {} \;
|
||||
find "/opt/pulse-proxmox" -type f -exec chmod 644 {} \;
|
||||
chmod 600 /opt/pulse-proxmox/.env
|
||||
msg_ok "Set permissions."
|
||||
|
||||
msg_info "Starting ${APP}"
|
||||
systemctl start pulse-monitor
|
||||
msg_ok "Started ${APP}"
|
||||
else
|
||||
msg_ok "No update required. ${APP} is already at ${RELEASE}."
|
||||
fi
|
||||
}
|
||||
|
||||
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}(:your_port)${CL}"
|
65
ct/rclone.sh
Normal file
65
ct/rclone.sh
Normal file
@ -0,0 +1,65 @@
|
||||
#!/usr/bin/env bash
|
||||
source <(curl -s https://git.community-scripts.org/community-scripts/ProxmoxVED/raw/branch/main/misc/build.func)
|
||||
# Copyright (c) 2021-2025 community-scripts ORG
|
||||
# Author: Slaviša Arežina (tremor021)
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVED/raw/main/LICENSE
|
||||
# Source: https://github.com/rclone/rclone
|
||||
|
||||
APP="Rclone"
|
||||
var_tags="${var_tags:-os}"
|
||||
var_cpu="${var_cpu:-1}"
|
||||
var_ram="${var_ram:-512}"
|
||||
var_disk="${var_disk:-2}"
|
||||
var_os="${var_os:-debian}"
|
||||
var_version="${var_version:-12}"
|
||||
var_unprivileged="${var_unprivileged:-1}"
|
||||
|
||||
header_info "$APP"
|
||||
variables
|
||||
color
|
||||
catch_errors
|
||||
|
||||
function update_script() {
|
||||
header_info
|
||||
check_container_storage
|
||||
check_container_resources
|
||||
if [[ ! -d /opt/rclone ]]; then
|
||||
msg_error "No ${APP} Installation Found!"
|
||||
exit
|
||||
fi
|
||||
RELEASE=$(curl -s https://api.github.com/repos/rclone/rclone/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
||||
if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
|
||||
msg_info "Stopping Service"
|
||||
systemctl stop rclone-web
|
||||
msg_ok "Stopped Service"
|
||||
|
||||
msg_info "Updating ${APP} to v${RELEASE}"
|
||||
temp_file=$(mktemp)
|
||||
rm -rf /opt/rclone/*
|
||||
curl -fsSL "https://github.com/rclone/rclone/releases/download/v${RELEASE}/rclone-v${RELEASE}-linux-amd64.zip" -o "$temp_file"
|
||||
$STD unzip -j "$temp_file" '*/**' -d /opt/rclone
|
||||
echo "${RELEASE}" >/opt/${APP}_version.txt
|
||||
msg_ok "Updated $APP to v${RELEASE}"
|
||||
|
||||
msg_info "Starting Service"
|
||||
systemctl start rclone-web
|
||||
msg_ok "Started Service"
|
||||
|
||||
msg_info "Cleaning up"
|
||||
rm -f "$temp_file"
|
||||
msg_ok "Cleaned"
|
||||
msg_ok "Updated Successfully"
|
||||
else
|
||||
msg_ok "No update required. ${APP} is already at v${RELEASE}"
|
||||
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}"
|
@ -1,42 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVED/main/misc/build.func)
|
||||
# Copyright (c) 2021-2025 community-scripts ORG
|
||||
# Author: MickLesk (Canbiz)
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
# Source: https://github.com/searxng/searxng
|
||||
|
||||
APP="SearXNG"
|
||||
var_tags="${var_tags:-search}"
|
||||
var_cpu="${var_cpu:-2}"
|
||||
var_ram="${var_ram:-2048}"
|
||||
var_disk="${var_disk:-7}"
|
||||
var_os="${var_os:-debian}"
|
||||
var_version="${var_version:-12}"
|
||||
var_unprivileged="${var_unprivileged:-1}"
|
||||
|
||||
header_info "$APP"
|
||||
variables
|
||||
color
|
||||
catch_errors
|
||||
|
||||
function update_script() {
|
||||
header_info
|
||||
check_container_storage
|
||||
check_container_resources
|
||||
if [[ ! -d /usr/local/searxng/searxng-src ]]; then
|
||||
msg_error "No ${APP} Installation Found!"
|
||||
exit
|
||||
fi
|
||||
if cd /usr/local/searxng/searxng-src && git pull | grep -q 'Already up to date'; then
|
||||
msg_ok "There is currently no update available."
|
||||
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}:8888${CL}"
|
@ -11,7 +11,7 @@
|
||||
"interface_port": null,
|
||||
"documentation": "https://allstarlink.github.io/",
|
||||
"website": "https://www.allstarlink.org/",
|
||||
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/allstar-link.webp",
|
||||
"logo": "https://raw.githubusercontent.com/AllStarLink/ASL3-Manual/blob/main/docs/assets/allstar-logo-small.png",
|
||||
"config_path": "",
|
||||
"description": "AllStarLink is a network of Amateur Radio repeaters, remote base stations and hot spots accessible to each other via Voice over Internet Protocol.",
|
||||
"install_methods": [
|
||||
|
@ -1,35 +0,0 @@
|
||||
{
|
||||
"name": "Argus",
|
||||
"slug": "argus",
|
||||
"categories": [
|
||||
11
|
||||
],
|
||||
"date_created": "2025-05-19",
|
||||
"type": "ct",
|
||||
"updateable": true,
|
||||
"privileged": false,
|
||||
"interface_port": 3000,
|
||||
"documentation": "https://release-argus.io/docs/overview/",
|
||||
"website": "https://release-argus.io/",
|
||||
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/argus.webp",
|
||||
"config_path": "/opt/argus/config.yml",
|
||||
"description": "Argus will query websites at a user defined interval for new software releases and then trigger Gotify/Slack/Other notification(s) and/or WebHook(s) when one has been found. For example, you could set it to monitor the Argus repo (release-argus/argus). This will query the GitHub API and track the tag_name variable. When this variable changes from what it was on a previous query, a GitHub-style WebHook could be sent that triggers something (like AWX) to update Argus on your server.",
|
||||
"install_methods": [
|
||||
{
|
||||
"type": "default",
|
||||
"script": "ct/argus.sh",
|
||||
"resources": {
|
||||
"cpu": 1,
|
||||
"ram": 256,
|
||||
"hdd": 3,
|
||||
"os": "debian",
|
||||
"version": "12"
|
||||
}
|
||||
}
|
||||
],
|
||||
"default_credentials": {
|
||||
"username": null,
|
||||
"password": null
|
||||
},
|
||||
"notes": []
|
||||
}
|
@ -1,40 +0,0 @@
|
||||
{
|
||||
"name": "Baby Buddy",
|
||||
"slug": "babybuddy",
|
||||
"categories": [
|
||||
23
|
||||
],
|
||||
"date_created": "2025-05-16",
|
||||
"type": "ct",
|
||||
"updateable": true,
|
||||
"privileged": false,
|
||||
"interface_port": 80,
|
||||
"documentation": "https://docs.baby-buddy.net/",
|
||||
"website": "https://github.com/babybuddy/babybuddy",
|
||||
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/baby-buddy.webp",
|
||||
"config_path": "/opt/babybuddy/babybuddy/production.py",
|
||||
"description": "Baby Buddy is an open-source web application designed to assist caregivers in tracking various aspects of a baby's daily routine, including sleep, feedings, diaper changes, tummy time, and more. By recording this data, caregivers can better understand and anticipate their baby's needs, reducing guesswork in daily care. The application offers a user-friendly dashboard for data entry and visualization, supports multiple users, and provides features like timers and reminders. Additionally, Baby Buddy can be integrated with platforms like Home Assistant and Grafana for enhanced functionality.",
|
||||
"install_methods": [
|
||||
{
|
||||
"type": "default",
|
||||
"script": "ct/babybuddy.sh",
|
||||
"resources": {
|
||||
"cpu": 2,
|
||||
"ram": 2048,
|
||||
"hdd": 5,
|
||||
"os": "debian",
|
||||
"version": "12"
|
||||
}
|
||||
}
|
||||
],
|
||||
"default_credentials": {
|
||||
"username": "admin",
|
||||
"password": "admin"
|
||||
},
|
||||
"notes": [
|
||||
{
|
||||
"text": "for private SSL setup visit: `https://github.com/babybuddy/babybuddy/blob/master/docs/setup/ssl.md`",
|
||||
"type": "info"
|
||||
}
|
||||
]
|
||||
}
|
@ -1,40 +1,40 @@
|
||||
{
|
||||
"name": "Backrest",
|
||||
"slug": "backrest",
|
||||
"categories": [
|
||||
7
|
||||
],
|
||||
"date_created": "2025-05-11",
|
||||
"type": "ct",
|
||||
"updateable": true,
|
||||
"privileged": false,
|
||||
"interface_port": 9898,
|
||||
"documentation": "https://garethgeorge.github.io/backrest/introduction/getting-started",
|
||||
"website": "https://garethgeorge.github.io/backrest",
|
||||
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/backrest.webp",
|
||||
"config_path": "/opt/backrest/config/config.json",
|
||||
"description": "Backrest is a web-accessible backup solution built on top of restic and providing a WebUI which wraps the restic CLI and makes it easy to create repos, browse snapshots, and restore files. Additionally, Backrest can run in the background and take an opinionated approach to scheduling snapshots and orchestrating repo health operations.",
|
||||
"install_methods": [
|
||||
{
|
||||
"type": "default",
|
||||
"script": "ct/backrest.sh",
|
||||
"resources": {
|
||||
"cpu": 1,
|
||||
"ram": 512,
|
||||
"hdd": 8,
|
||||
"os": "debian",
|
||||
"version": "12"
|
||||
}
|
||||
}
|
||||
],
|
||||
"default_credentials": {
|
||||
"username": null,
|
||||
"password": null
|
||||
},
|
||||
"notes": [
|
||||
{
|
||||
"type": "info",
|
||||
"text": "`cat ~/.ssh/id_ed25519.pub` to view ssh public key. This key is used to authenticate with sftp targets. You can add this key on the sftp server."
|
||||
}
|
||||
]
|
||||
}
|
||||
"name": "Backrest",
|
||||
"slug": "backrest",
|
||||
"categories": [
|
||||
7
|
||||
],
|
||||
"date_created": "2025-05-11",
|
||||
"type": "ct",
|
||||
"updateable": true,
|
||||
"privileged": false,
|
||||
"interface_port": 9898,
|
||||
"documentation": "https://garethgeorge.github.io/backrest/introduction/getting-started",
|
||||
"website": "https://garethgeorge.github.io/backrest",
|
||||
"logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/backrest-light.svg",
|
||||
"config_path": "/opt/backrest/config/config.json",
|
||||
"description": "Backrest is a web-accessible backup solution built on top of restic and providing a WebUI which wraps the restic CLI and makes it easy to create repos, browse snapshots, and restore files. Additionally, Backrest can run in the background and take an opinionated approach to scheduling snapshots and orchestrating repo health operations.",
|
||||
"install_methods": [
|
||||
{
|
||||
"type": "default",
|
||||
"script": "ct/backrest.sh",
|
||||
"resources": {
|
||||
"cpu": 1,
|
||||
"ram": 512,
|
||||
"hdd": 8,
|
||||
"os": "debian",
|
||||
"version": "12"
|
||||
}
|
||||
}
|
||||
],
|
||||
"default_credentials": {
|
||||
"username": null,
|
||||
"password": null
|
||||
},
|
||||
"notes": [
|
||||
{
|
||||
"type": "info",
|
||||
"text": "`cat ~/.ssh/id_ed25519.pub` to view ssh public key. This key is used to authenticate with sftp targets. You can add this key on the sftp server."
|
||||
}
|
||||
]
|
||||
}
|
51
frontend/public/json/bitmagnet.json
Normal file
51
frontend/public/json/bitmagnet.json
Normal file
@ -0,0 +1,51 @@
|
||||
{
|
||||
"name": "Bitmagnet",
|
||||
"slug": "bitmagnet",
|
||||
"categories": [
|
||||
11
|
||||
],
|
||||
"date_created": "2025-05-13",
|
||||
"type": "ct",
|
||||
"updateable": true,
|
||||
"privileged": false,
|
||||
"interface_port": 3333,
|
||||
"documentation": "https://bitmagnet.io/setup.html",
|
||||
"website": "https://bitmagnet.io/",
|
||||
"logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/webp/bitmagnet.webp",
|
||||
"config_path": "`/opt/bitmagnet/config.yml` or `/opt/bitmagnet/.env`",
|
||||
"description": "A self-hosted BitTorrent indexer, DHT crawler, content classifier and torrent search engine with web UI, GraphQL API and Servarr stack integration.",
|
||||
"install_methods": [
|
||||
{
|
||||
"type": "default",
|
||||
"script": "ct/bitmagnet.sh",
|
||||
"resources": {
|
||||
"cpu": 1,
|
||||
"ram": 512,
|
||||
"hdd": 4,
|
||||
"os": "debian",
|
||||
"version": "12"
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "alpine",
|
||||
"script": "ct/alpine-bitmagnet.sh",
|
||||
"resources": {
|
||||
"cpu": 1,
|
||||
"ram": 256,
|
||||
"hdd": 3,
|
||||
"os": "alpine",
|
||||
"version": "3.21"
|
||||
}
|
||||
}
|
||||
],
|
||||
"default_credentials": {
|
||||
"username": null,
|
||||
"password": null
|
||||
},
|
||||
"notes": [
|
||||
{
|
||||
"text": "During installation you will be asked to enter your TMDB API key, if you wanna use it. Make sure you have it ready.",
|
||||
"type": "info"
|
||||
}
|
||||
]
|
||||
}
|
@ -12,7 +12,7 @@
|
||||
"documentation": "https://github.com/favonia/cloudflare-ddns/blob/main/README.markdown",
|
||||
"config_path": "/etc/systemd/system/cloudflare-ddns.service",
|
||||
"website": "https://github.com/favonia/cloudflare-ddns",
|
||||
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/cloudflare.webp",
|
||||
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/svg/cloudflare.svg",
|
||||
"description": "A feature-rich and robust Cloudflare DDNS updater with a small footprint. The program will detect your machine’s public IP addresses and update DNS records using the Cloudflare API",
|
||||
"install_methods": [
|
||||
{
|
||||
@ -41,4 +41,4 @@
|
||||
"type": "info"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
@ -1,40 +0,0 @@
|
||||
{
|
||||
"name": "ConvertX",
|
||||
"slug": "convertx",
|
||||
"categories": [
|
||||
9
|
||||
],
|
||||
"date_created": "2025-05-22",
|
||||
"type": "ct",
|
||||
"updateable": true,
|
||||
"privileged": false,
|
||||
"config_path": "/opt/convertx/.env",
|
||||
"interface_port": 3000,
|
||||
"documentation": "https://github.com/C4illin/ConvertX",
|
||||
"website": "https://github.com/C4illin/ConvertX",
|
||||
"logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/convertx.svg",
|
||||
"description": "ConvertX is a self-hosted online file converter supporting over 1000 formats, including images, audio, video, documents, and more, powered by FFmpeg, GraphicsMagick, and other libraries.",
|
||||
"install_methods": [
|
||||
{
|
||||
"type": "default",
|
||||
"script": "ct/convertx.sh",
|
||||
"resources": {
|
||||
"cpu": 2,
|
||||
"ram": 4096,
|
||||
"hdd": 20,
|
||||
"os": "Debian",
|
||||
"version": "12"
|
||||
}
|
||||
}
|
||||
],
|
||||
"default_credentials": {
|
||||
"username": null,
|
||||
"password": null
|
||||
},
|
||||
"notes": [
|
||||
{
|
||||
"text": "Complete setup via the web interface at http://<container-ip>:3000. Create and secure the admin account immediately.",
|
||||
"type": "info"
|
||||
}
|
||||
]
|
||||
}
|
36
frontend/public/json/freepbx.json
Normal file
36
frontend/public/json/freepbx.json
Normal file
@ -0,0 +1,36 @@
|
||||
{
|
||||
"name": "FreePBX",
|
||||
"slug": "freepbx",
|
||||
"categories": [
|
||||
0
|
||||
],
|
||||
"date_created": "2025-03-10",
|
||||
"type": "ct",
|
||||
"updateable": false,
|
||||
"privileged": false,
|
||||
"interface_port": 80,
|
||||
"documentation": "https://sangomakb.atlassian.net/wiki/spaces/FP/overview?homepageId=8454359",
|
||||
"website": "https://www.freepbx.org/",
|
||||
"logo": "https://avatars.githubusercontent.com/u/696423?s=200&v=4",
|
||||
"config_path": "",
|
||||
"description": "FreePBX is a web-based open-source graphical user interface that manages Asterisk, a voice over IP and telephony server.",
|
||||
"install_methods": [
|
||||
{
|
||||
"type": "default",
|
||||
"script": "ct/freepbx.sh",
|
||||
"resources": {
|
||||
"cpu": 1,
|
||||
"ram": 1024,
|
||||
"hdd": 20,
|
||||
"os": "debian",
|
||||
"version": "12"
|
||||
}
|
||||
}
|
||||
],
|
||||
"default_credentials": {
|
||||
"username": null,
|
||||
"password": null
|
||||
},
|
||||
"notes": []
|
||||
}
|
||||
|
@ -1,44 +0,0 @@
|
||||
{
|
||||
"name": "garmin-grafana",
|
||||
"slug": "garmin-grafana",
|
||||
"categories": [
|
||||
24
|
||||
],
|
||||
"date_created": "2025-05-08",
|
||||
"type": "ct",
|
||||
"updateable": true,
|
||||
"privileged": false,
|
||||
"interface_port": 3000,
|
||||
"documentation": "https://github.com/arpanghosh8453/garmin-grafana",
|
||||
"config_path": "",
|
||||
"website": "https://github.com/arpanghosh8453/garmin-grafana",
|
||||
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/garmin-grafana.webp",
|
||||
"description": "A docker container to fetch data from Garmin servers and store the data in a local influxdb database for appealing visualization with Grafana.",
|
||||
"install_methods": [
|
||||
{
|
||||
"type": "default",
|
||||
"script": "ct/garmin-grafana.sh",
|
||||
"resources": {
|
||||
"cpu": 2,
|
||||
"ram": 2,
|
||||
"hdd": 8,
|
||||
"os": "Debian",
|
||||
"version": "12"
|
||||
}
|
||||
}
|
||||
],
|
||||
"default_credentials": {
|
||||
"username": null,
|
||||
"password": null
|
||||
},
|
||||
"notes": [
|
||||
{
|
||||
"text": "Show login and database credentials: `cat ~/.garmin-grafana.creds`",
|
||||
"type": "info"
|
||||
},
|
||||
{
|
||||
"text": "`garmin-grafana` only imports the past 7 days by default. To import historical data, use the `~/bulk-import.sh` script after installation.",
|
||||
"type": "info"
|
||||
}
|
||||
]
|
||||
}
|
35
frontend/public/json/homarr.json
Normal file
35
frontend/public/json/homarr.json
Normal file
@ -0,0 +1,35 @@
|
||||
{
|
||||
"name": "Homarr",
|
||||
"slug": "homarr",
|
||||
"categories": [
|
||||
10
|
||||
],
|
||||
"date_created": "2025-05-08",
|
||||
"type": "ct",
|
||||
"updateable": true,
|
||||
"privileged": false,
|
||||
"interface_port": 7575,
|
||||
"documentation": null,
|
||||
"website": "https://homarr.dev/",
|
||||
"logo": "https://raw.githubusercontent.com/loganmarchione/homelab-svg-assets/main/assets/homarr.svg",
|
||||
"config_path": "/opt/homarr/.env",
|
||||
"description": "Homarr is a sleek, modern dashboard that puts all of your apps and services at your fingertips.",
|
||||
"install_methods": [
|
||||
{
|
||||
"type": "default",
|
||||
"script": "ct/homarr.sh",
|
||||
"resources": {
|
||||
"cpu": 2,
|
||||
"ram": 4096,
|
||||
"hdd": 8,
|
||||
"os": "debian",
|
||||
"version": "12"
|
||||
}
|
||||
}
|
||||
],
|
||||
"default_credentials": {
|
||||
"username": null,
|
||||
"password": null
|
||||
},
|
||||
"notes": []
|
||||
}
|
@ -11,7 +11,7 @@
|
||||
"interface_port": 2283,
|
||||
"documentation": "https://immich.app/docs/overview/introduction",
|
||||
"website": "https://immich.app",
|
||||
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/immich.webp",
|
||||
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/png/immich.png",
|
||||
"config_path": "/opt/immich/.env",
|
||||
"description": "High performance self-hosted photo and video management solution.",
|
||||
"install_methods": [
|
||||
@ -21,7 +21,7 @@
|
||||
"resources": {
|
||||
"cpu": 4,
|
||||
"ram": 4096,
|
||||
"hdd": 20,
|
||||
"hdd": 12,
|
||||
"os": "Debian",
|
||||
"version": "12"
|
||||
}
|
||||
@ -33,16 +33,9 @@
|
||||
},
|
||||
"notes": [
|
||||
{
|
||||
"text": "During installation, HW-accelerated machine-learning (with OpenVINO) is an available option. This also allows for HW-accelerated transcoding, but it must be enabled in Video Transcoding Settings",
|
||||
"type": "info"
|
||||
},
|
||||
{
|
||||
"text": "If using OpenVINO HW machine-learning, increase RAM because OpenVINO is memory-intensive",
|
||||
"type": "info"
|
||||
},
|
||||
{
|
||||
"text": "To change upload location, edit 'IMMICH_MEDIA_LOCATION' in `/opt/immich/.env`",
|
||||
"text": "During installation, HW-accelerated machine-learning is an available option. This also allows for HW-accelerated transcoding, but it must be enabled in Video Transcoding Settings",
|
||||
"type": "info"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
|
@ -1,35 +0,0 @@
|
||||
{
|
||||
"name": "jitsi-meet",
|
||||
"slug": "jitsi-meet",
|
||||
"categories": [
|
||||
18
|
||||
],
|
||||
"date_created": "2025-05-06",
|
||||
"type": "ct",
|
||||
"updateable": true,
|
||||
"privileged": false,
|
||||
"interface_port": 443,
|
||||
"documentation": "https://jitsi.github.io/handbook/docs/intro",
|
||||
"website": "https://jitsi.org/jitsi-meet/",
|
||||
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/jitsi-meet.webp",
|
||||
"config_path": "/etc/jitsi/meet/[your-hostname]-config.js",
|
||||
"description": "Go ahead, video chat with the whole team. In fact, invite everyone you know. Jitsi Meet is a fully encrypted, 100% open source video conferencing solution that you can use all day, every day, for free — with no account needed.",
|
||||
"install_methods": [
|
||||
{
|
||||
"type": "default",
|
||||
"script": "ct/jitsi-meet.sh",
|
||||
"resources": {
|
||||
"cpu": 2,
|
||||
"ram": 4096,
|
||||
"hdd": 20,
|
||||
"os": "debian",
|
||||
"version": "12"
|
||||
}
|
||||
}
|
||||
],
|
||||
"default_credentials": {
|
||||
"username": null,
|
||||
"password": null
|
||||
},
|
||||
"notes": []
|
||||
}
|
@ -11,7 +11,7 @@
|
||||
"interface_port": 80,
|
||||
"documentation": "https://www.jumpserver.com/docs",
|
||||
"website": "https://www.jumpserver.com/",
|
||||
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/jumpserver.webp",
|
||||
"logo": "https://raw.githubusercontent.com/jumpserver/jumpserver/refs/heads/dev/apps/static/img/logo.png",
|
||||
"config_path": "",
|
||||
"description": "JumpServer is an open-source Privileged Access Management (PAM) tool that provides DevOps and IT teams with on-demand and secure access to SSH, RDP, Kubernetes, Database and RemoteApp endpoints through a web browser.",
|
||||
"install_methods": [
|
||||
|
@ -1,44 +0,0 @@
|
||||
{
|
||||
"name": "Kasm",
|
||||
"slug": "kasm",
|
||||
"categories": [
|
||||
9
|
||||
],
|
||||
"date_created": "2025-03-24",
|
||||
"type": "ct",
|
||||
"updateable": false,
|
||||
"privileged": true,
|
||||
"config_path": "",
|
||||
"interface_port": 443,
|
||||
"documentation": "https://www.kasmweb.com/docs/",
|
||||
"website": "https://www.kasmweb.com/",
|
||||
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/kasm-workspaces.webp",
|
||||
"description": "Kasm Workspaces is a container streaming platform that delivers browser-based access to desktops, applications, and web services with enhanced security and scalability.",
|
||||
"install_methods": [
|
||||
{
|
||||
"type": "default",
|
||||
"script": "ct/kasm.sh",
|
||||
"resources": {
|
||||
"cpu": 2,
|
||||
"ram": 4096,
|
||||
"hdd": 50,
|
||||
"os": "Debian",
|
||||
"version": "12"
|
||||
}
|
||||
}
|
||||
],
|
||||
"default_credentials": {
|
||||
"username": null,
|
||||
"password": null
|
||||
},
|
||||
"notes": [
|
||||
{
|
||||
"text": "WARNING: Installation sources scripts outside of Community Scripts repo. Please check the source before installing.",
|
||||
"type": "warning"
|
||||
},
|
||||
{
|
||||
"text": "Show password: `cat ~/kasm.creds`",
|
||||
"type": "info"
|
||||
}
|
||||
]
|
||||
}
|
@ -11,7 +11,7 @@
|
||||
"interface_port": 80,
|
||||
"documentation": "https://docs.librenms.org/",
|
||||
"website": "https://librenms.org/",
|
||||
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/librenms.webp",
|
||||
"logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/librenms.svg",
|
||||
"config_path": "/opt/librenms/config.php and /opt/librenms/.env",
|
||||
"description": "LibreNMS is an open-source, community-driven network monitoring system that provides automatic discovery, alerting, and performance tracking for network devices. It supports a wide range of hardware and integrates with various notification and logging platforms.",
|
||||
"install_methods": [
|
||||
@ -33,3 +33,4 @@
|
||||
},
|
||||
"notes": []
|
||||
}
|
||||
|
||||
|
@ -1,35 +1,35 @@
|
||||
{
|
||||
"name": "Librespeed",
|
||||
"slug": "librespeed",
|
||||
"categories": [
|
||||
4
|
||||
],
|
||||
"date_created": "2025-04-26",
|
||||
"type": "ct",
|
||||
"updateable": true,
|
||||
"privileged": false,
|
||||
"interface_port": 80,
|
||||
"documentation": "https://github.com/librespeed/speedtest/blob/master/doc.md",
|
||||
"config_path": "",
|
||||
"website": "https://librespeed.org",
|
||||
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/librespeed.webp",
|
||||
"description": "No Flash, No Java, No Websocket, No Bullshit. This is a very lightweight speed test implemented in Javascript, using XMLHttpRequest and Web Workers.",
|
||||
"install_methods": [
|
||||
{
|
||||
"type": "default",
|
||||
"script": "ct/librespeed.sh",
|
||||
"resources": {
|
||||
"cpu": 1,
|
||||
"ram": 512,
|
||||
"hdd": 4,
|
||||
"os": "Debian",
|
||||
"version": "12"
|
||||
}
|
||||
}
|
||||
],
|
||||
"default_credentials": {
|
||||
"username": "root",
|
||||
"password": null
|
||||
},
|
||||
"notes": []
|
||||
"name": "Librespeed",
|
||||
"slug": "librespeed",
|
||||
"categories": [
|
||||
4
|
||||
],
|
||||
"date_created": "2025-04-26",
|
||||
"type": "ct",
|
||||
"updateable": true,
|
||||
"privileged": false,
|
||||
"interface_port": 80,
|
||||
"documentation": "https://github.com/librespeed/speedtest/blob/master/doc.md",
|
||||
"config_path": "",
|
||||
"website": "https://librespeed.org",
|
||||
"logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/librespeed.svg",
|
||||
"description": "No Flash, No Java, No Websocket, No Bullshit. This is a very lightweight speed test implemented in Javascript, using XMLHttpRequest and Web Workers.",
|
||||
"install_methods": [
|
||||
{
|
||||
"type": "default",
|
||||
"script": "ct/librespeed.sh",
|
||||
"resources": {
|
||||
"cpu": 1,
|
||||
"ram": 512,
|
||||
"hdd": 4,
|
||||
"os": "Debian",
|
||||
"version": "12"
|
||||
}
|
||||
}
|
||||
],
|
||||
"default_credentials": {
|
||||
"username": "root",
|
||||
"password": null
|
||||
},
|
||||
"notes": []
|
||||
}
|
||||
|
@ -1,35 +0,0 @@
|
||||
{
|
||||
"name": "Lyrion Music Server",
|
||||
"slug": "lyrionmusicserver",
|
||||
"categories": [
|
||||
9
|
||||
],
|
||||
"date_created": "2025-05-21",
|
||||
"type": "ct",
|
||||
"updateable": true,
|
||||
"privileged": false,
|
||||
"config_path": "/etc/default/lyrionmusicserver",
|
||||
"interface_port": 9000,
|
||||
"documentation": "https://lyrion.org/",
|
||||
"website": "https://lyrion.org/",
|
||||
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/lyrion-media-server.webp",
|
||||
"description": "Lyrion Music Server is an open-source server software to stream local music collections, internet radio, and music services to Squeezebox and compatible audio players.",
|
||||
"install_methods": [
|
||||
{
|
||||
"type": "default",
|
||||
"script": "ct/lyrionmusicserver.sh",
|
||||
"resources": {
|
||||
"cpu": 1,
|
||||
"ram": 1024,
|
||||
"hdd": 3,
|
||||
"os": "Debian",
|
||||
"version": "12"
|
||||
}
|
||||
}
|
||||
],
|
||||
"default_credentials": {
|
||||
"username": null,
|
||||
"password": null
|
||||
},
|
||||
"notes": []
|
||||
}
|
@ -1,35 +1,36 @@
|
||||
{
|
||||
"name": "Manyfold",
|
||||
"slug": "manyfold",
|
||||
"categories": [
|
||||
24
|
||||
],
|
||||
"date_created": "2025-03-18",
|
||||
"type": "ct",
|
||||
"updateable": false,
|
||||
"privileged": false,
|
||||
"interface_port": 80,
|
||||
"documentation": "https://manyfold.app/sysadmin/",
|
||||
"website": "https://manyfold.app/",
|
||||
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/manyfold.webp",
|
||||
"config_path": "",
|
||||
"description": "Manyfold is an open source, self-hosted web application for managing a collection of 3d models, particularly focused on 3d printing.",
|
||||
"install_methods": [
|
||||
{
|
||||
"type": "default",
|
||||
"script": "ct/manyfold.sh",
|
||||
"resources": {
|
||||
"cpu": 2,
|
||||
"ram": 1024,
|
||||
"hdd": 15,
|
||||
"os": "debian",
|
||||
"version": "12"
|
||||
}
|
||||
}
|
||||
],
|
||||
"default_credentials": {
|
||||
"username": null,
|
||||
"password": null
|
||||
},
|
||||
"notes": []
|
||||
"name": "Manyfold",
|
||||
"slug": "manyfold",
|
||||
"categories": [
|
||||
24
|
||||
],
|
||||
"date_created": "2025-03-18",
|
||||
"type": "ct",
|
||||
"updateable": false,
|
||||
"privileged": false,
|
||||
"interface_port": 80,
|
||||
"documentation": "https://manyfold.app/sysadmin/",
|
||||
"website": "https://manyfold.app/",
|
||||
"logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/webp/manyfold.webp",
|
||||
"config_path": "",
|
||||
"description": "Manyfold is an open source, self-hosted web application for managing a collection of 3d models, particularly focused on 3d printing.",
|
||||
"install_methods": [
|
||||
{
|
||||
"type": "default",
|
||||
"script": "ct/manyfold.sh",
|
||||
"resources": {
|
||||
"cpu": 2,
|
||||
"ram": 1024,
|
||||
"hdd": 15,
|
||||
"os": "debian",
|
||||
"version": "12"
|
||||
}
|
||||
}
|
||||
],
|
||||
"default_credentials": {
|
||||
"username": null,
|
||||
"password": null
|
||||
},
|
||||
"notes": []
|
||||
}
|
||||
|
||||
|
@ -11,7 +11,7 @@
|
||||
"interface_port": 80,
|
||||
"documentation": "https://github.com/agersant/polaris/blob/master/docs/SETUP.md",
|
||||
"website": "https://github.com/agersant/polaris",
|
||||
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/polaris.webp",
|
||||
"logo": "https://raw.githubusercontent.com/agersant/polaris/refs/heads/master/res/branding/logo/sticker_print.svg",
|
||||
"config_path": "",
|
||||
"description": "Polaris is a self-hosted music streaming server that allows you to enjoy your personal music collection from any computer or mobile device. It is a free and open-source application with no premium version. Polaris is highly performant and responsive, supporting large music libraries with over 100,000 tracks. It features an intuitive user interface and supports various audio formats, including FLAC, MP3, MP4, OGG, and WAV. There is an Android client available through the Google Play Store, F-Droid, or GitHub Releases.",
|
||||
"install_methods": [
|
||||
|
@ -1,40 +0,0 @@
|
||||
{
|
||||
"name": "Pulse",
|
||||
"slug": "pulse",
|
||||
"categories": [
|
||||
9
|
||||
],
|
||||
"date_created": "2025-05-22",
|
||||
"type": "ct",
|
||||
"updateable": true,
|
||||
"privileged": false,
|
||||
"interface_port": 7655,
|
||||
"documentation": null,
|
||||
"website": "https://github.com/rcourtman/Pulse",
|
||||
"logo": "https://raw.githubusercontent.com/rcourtman/Pulse/main/src/public/logos/pulse-logo-256x256.png",
|
||||
"config_path": "/opt/pulse-proxmox/.env",
|
||||
"description": "A lightweight monitoring application for Proxmox VE that displays real-time status for VMs and containers via a simple web interface.",
|
||||
"install_methods": [
|
||||
{
|
||||
"type": "default",
|
||||
"script": "ct/pulse.sh",
|
||||
"resources": {
|
||||
"cpu": 2,
|
||||
"ram": 2048,
|
||||
"hdd": 4,
|
||||
"os": "debian",
|
||||
"version": "12"
|
||||
}
|
||||
}
|
||||
],
|
||||
"default_credentials": {
|
||||
"username": null,
|
||||
"password": null
|
||||
},
|
||||
"notes": [
|
||||
{
|
||||
"text": "Create Proxmox-API-Token first: `https: //github.com/rcourtman/Pulse?tab=readme-ov-file#creating-a-proxmox-api-token`",
|
||||
"type": "Info"
|
||||
}
|
||||
]
|
||||
}
|
@ -1,48 +0,0 @@
|
||||
{
|
||||
"name": "PVE Privilege Converter",
|
||||
"slug": "pve-privilege-converter",
|
||||
"categories": [
|
||||
1
|
||||
],
|
||||
"date_created": "2025-05-22",
|
||||
"type": "pve",
|
||||
"updateable": false,
|
||||
"privileged": false,
|
||||
"interface_port": null,
|
||||
"documentation": "https://github.com/onethree7/proxmox-lxc-privilege-converter",
|
||||
"website": null,
|
||||
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/proxmox.webp",
|
||||
"config_path": "",
|
||||
"description": "This script allows converting Proxmox LXC containers between privileged and unprivileged modes using vzdump backup and restore. It guides you through container selection, backup storage, ID assignment, and privilege flipping via automated restore. Useful for applying changes that require different LXC modes.",
|
||||
"install_methods": [
|
||||
{
|
||||
"type": "default",
|
||||
"script": "tools/pve/pve-privilege-converter.sh",
|
||||
"resources": {
|
||||
"cpu": null,
|
||||
"ram": null,
|
||||
"hdd": null,
|
||||
"os": null,
|
||||
"version": null
|
||||
}
|
||||
}
|
||||
],
|
||||
"default_credentials": {
|
||||
"username": null,
|
||||
"password": null
|
||||
},
|
||||
"notes": [
|
||||
{
|
||||
"text": "Execute this script inside the Proxmox shell as root.",
|
||||
"type": "info"
|
||||
},
|
||||
{
|
||||
"text": "Ensure that the backup and target storage have enough space.",
|
||||
"type": "warning"
|
||||
},
|
||||
{
|
||||
"text": "The container will be recreated with a new ID and desired privilege setting.",
|
||||
"type": "info"
|
||||
}
|
||||
]
|
||||
}
|
44
frontend/public/json/rclone.json
Normal file
44
frontend/public/json/rclone.json
Normal file
@ -0,0 +1,44 @@
|
||||
{
|
||||
"name": "Rclone",
|
||||
"slug": "rclone",
|
||||
"categories": [
|
||||
11
|
||||
],
|
||||
"date_created": "2025-05-06",
|
||||
"type": "ct",
|
||||
"updateable": true,
|
||||
"privileged": false,
|
||||
"interface_port": 3000,
|
||||
"documentation": "https://rclone.org/docs/",
|
||||
"website": "https://rclone.org/",
|
||||
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/svg/rclone.svg",
|
||||
"config_path": "~/.config/rclone/rclone.conf",
|
||||
"description": "Rclone is a command-line program to manage files on cloud storage. It is a feature-rich alternative to cloud vendors' web storage interfaces",
|
||||
"install_methods": [
|
||||
{
|
||||
"type": "default",
|
||||
"script": "ct/rclone.sh",
|
||||
"resources": {
|
||||
"cpu": 1,
|
||||
"ram": 256,
|
||||
"hdd": 1,
|
||||
"os": "debian",
|
||||
"version": "12"
|
||||
}
|
||||
}
|
||||
],
|
||||
"default_credentials": {
|
||||
"username": null,
|
||||
"password": null
|
||||
},
|
||||
"notes": [
|
||||
{
|
||||
"type": "info",
|
||||
"text": "`cat ~/rclone.creds` to view login credentials"
|
||||
},
|
||||
{
|
||||
"type": "info",
|
||||
"text": "`htpasswd -b -B /opt/login.pwd newuser newuserpassword` to add more users."
|
||||
}
|
||||
]
|
||||
}
|
@ -1,459 +1,89 @@
|
||||
[
|
||||
{
|
||||
"name": "pocketbase/pocketbase",
|
||||
"version": "v0.28.2",
|
||||
"date": "2025-05-24T07:59:15Z"
|
||||
"name": "blakeblackshear/frigate",
|
||||
"version": "v0.14.1",
|
||||
"date": "2024-08-29T22:32:51Z"
|
||||
},
|
||||
{
|
||||
"name": "Jackett/Jackett",
|
||||
"version": "v0.22.1945",
|
||||
"date": "2025-05-24T05:50:58Z"
|
||||
},
|
||||
{
|
||||
"name": "traccar/traccar",
|
||||
"version": "v6.7.1",
|
||||
"date": "2025-05-24T04:51:02Z"
|
||||
},
|
||||
{
|
||||
"name": "firefly-iii/firefly-iii",
|
||||
"version": "v6.2.13",
|
||||
"date": "2025-05-24T04:31:52Z"
|
||||
},
|
||||
{
|
||||
"name": "homarr-labs/homarr",
|
||||
"version": "v1.21.0",
|
||||
"date": "2025-05-23T19:17:15Z"
|
||||
},
|
||||
{
|
||||
"name": "immich-app/immich",
|
||||
"version": "v1.133.1",
|
||||
"date": "2025-05-23T18:14:44Z"
|
||||
},
|
||||
{
|
||||
"name": "Threadfin/Threadfin",
|
||||
"version": "1.2.33",
|
||||
"date": "2025-05-23T15:59:05Z"
|
||||
},
|
||||
{
|
||||
"name": "home-assistant/core",
|
||||
"version": "2025.5.3",
|
||||
"date": "2025-05-23T15:10:33Z"
|
||||
},
|
||||
{
|
||||
"name": "docker/compose",
|
||||
"version": "v2.36.2",
|
||||
"date": "2025-05-23T14:21:20Z"
|
||||
},
|
||||
{
|
||||
"name": "zitadel/zitadel",
|
||||
"version": "v3.2.0",
|
||||
"date": "2025-05-23T13:58:07Z"
|
||||
},
|
||||
{
|
||||
"name": "grokability/snipe-it",
|
||||
"version": "v8.1.4",
|
||||
"date": "2025-05-23T12:29:19Z"
|
||||
},
|
||||
{
|
||||
"name": "wazuh/wazuh",
|
||||
"version": "v4.10.2",
|
||||
"date": "2025-05-23T11:56:41Z"
|
||||
"name": "Checkmk/checkmk",
|
||||
"version": "v2.4.0p1-rc1",
|
||||
"date": "2025-05-14T07:54:22Z"
|
||||
},
|
||||
{
|
||||
"name": "nzbgetcom/nzbget",
|
||||
"version": "v25.0",
|
||||
"date": "2025-05-12T09:12:04Z"
|
||||
},
|
||||
{
|
||||
"name": "keycloak/keycloak",
|
||||
"version": "26.0.12",
|
||||
"date": "2025-05-15T14:06:52Z"
|
||||
},
|
||||
{
|
||||
"name": "morpheus65535/bazarr",
|
||||
"version": "v1.5.2",
|
||||
"date": "2025-05-11T16:40:55Z"
|
||||
},
|
||||
{
|
||||
"name": "ollama/ollama",
|
||||
"version": "v0.7.1-rc2",
|
||||
"date": "2025-05-23T01:53:31Z"
|
||||
},
|
||||
{
|
||||
"name": "rogerfar/rdt-client",
|
||||
"version": "v2.0.113",
|
||||
"date": "2025-05-23T01:47:35Z"
|
||||
},
|
||||
{
|
||||
"name": "grafana/grafana",
|
||||
"version": "v11.2.10",
|
||||
"date": "2025-05-22T23:50:45Z"
|
||||
},
|
||||
{
|
||||
"name": "crowdsecurity/crowdsec",
|
||||
"version": "v1.6.8",
|
||||
"date": "2025-03-25T13:33:10Z"
|
||||
},
|
||||
{
|
||||
"name": "MariaDB/server",
|
||||
"version": "mariadb-11.4.7",
|
||||
"date": "2025-05-22T14:22:22Z"
|
||||
},
|
||||
{
|
||||
"name": "neo4j/neo4j",
|
||||
"version": "4.4.44",
|
||||
"date": "2025-05-22T13:58:43Z"
|
||||
},
|
||||
{
|
||||
"name": "apache/cassandra",
|
||||
"version": "4.0.18-tentative",
|
||||
"date": "2025-05-22T11:46:18Z"
|
||||
},
|
||||
{
|
||||
"name": "runtipi/runtipi",
|
||||
"version": "v4.1.1",
|
||||
"date": "2025-05-16T17:37:30Z"
|
||||
},
|
||||
{
|
||||
"name": "0xERR0R/blocky",
|
||||
"version": "v0.26.2",
|
||||
"date": "2025-05-22T05:24:42Z"
|
||||
},
|
||||
{
|
||||
"name": "tobychui/zoraxy",
|
||||
"version": "v3.1.9",
|
||||
"date": "2025-03-01T02:24:33Z"
|
||||
},
|
||||
{
|
||||
"name": "apache/tika",
|
||||
"version": "3.2.0-rc2",
|
||||
"date": "2025-05-21T20:09:07Z"
|
||||
},
|
||||
{
|
||||
"name": "tailscale/tailscale",
|
||||
"version": "v1.84.0",
|
||||
"date": "2025-05-21T19:39:53Z"
|
||||
},
|
||||
{
|
||||
"name": "clusterzx/paperless-ai",
|
||||
"version": "v3.0.4",
|
||||
"date": "2025-05-21T19:03:53Z"
|
||||
},
|
||||
{
|
||||
"name": "mongodb/mongo",
|
||||
"version": "r8.0.10-rc0",
|
||||
"date": "2025-05-21T18:22:25Z"
|
||||
},
|
||||
{
|
||||
"name": "ipfs/kubo",
|
||||
"version": "v0.35.0",
|
||||
"date": "2025-05-21T18:00:32Z"
|
||||
},
|
||||
{
|
||||
"name": "msgbyte/tianji",
|
||||
"version": "v1.20.10",
|
||||
"date": "2025-05-21T17:22:32Z"
|
||||
},
|
||||
{
|
||||
"name": "cross-seed/cross-seed",
|
||||
"version": "v6.12.5",
|
||||
"date": "2025-05-17T02:52:33Z"
|
||||
},
|
||||
{
|
||||
"name": "cockpit-project/cockpit",
|
||||
"version": "339",
|
||||
"date": "2025-05-21T14:49:36Z"
|
||||
},
|
||||
{
|
||||
"name": "mattermost/mattermost",
|
||||
"version": "v9.11.16",
|
||||
"date": "2025-05-21T13:57:13Z"
|
||||
},
|
||||
{
|
||||
"name": "theonedev/onedev",
|
||||
"version": "v11.9.9",
|
||||
"date": "2025-05-21T13:13:31Z"
|
||||
},
|
||||
{
|
||||
"name": "glpi-project/glpi",
|
||||
"version": "10.0.18",
|
||||
"date": "2025-02-12T11:07:02Z"
|
||||
},
|
||||
{
|
||||
"name": "esphome/esphome",
|
||||
"version": "2025.5.0",
|
||||
"date": "2025-05-21T08:32:53Z"
|
||||
},
|
||||
{
|
||||
"name": "syncthing/syncthing",
|
||||
"version": "v1.29.6",
|
||||
"date": "2025-05-06T07:57:02Z"
|
||||
},
|
||||
{
|
||||
"name": "inventree/InvenTree",
|
||||
"version": "0.17.12",
|
||||
"date": "2025-05-21T05:44:55Z"
|
||||
},
|
||||
{
|
||||
"name": "diced/zipline",
|
||||
"version": "v4.1.0",
|
||||
"date": "2025-05-21T04:12:44Z"
|
||||
},
|
||||
{
|
||||
"name": "icereed/paperless-gpt",
|
||||
"version": "v0.19.0",
|
||||
"date": "2025-05-21T03:46:14Z"
|
||||
},
|
||||
{
|
||||
"name": "matze/wastebin",
|
||||
"version": "3.1.0",
|
||||
"date": "2025-05-20T19:20:03Z"
|
||||
},
|
||||
{
|
||||
"name": "MediaBrowser/Emby.Releases",
|
||||
"version": "4.8.11.0",
|
||||
"date": "2025-03-10T06:39:11Z"
|
||||
},
|
||||
{
|
||||
"name": "jenkinsci/jenkins",
|
||||
"version": "jenkins-2.511",
|
||||
"date": "2025-05-20T15:39:17Z"
|
||||
},
|
||||
{
|
||||
"name": "element-hq/synapse",
|
||||
"version": "v1.130.0",
|
||||
"date": "2025-05-20T15:33:54Z"
|
||||
},
|
||||
{
|
||||
"name": "documenso/documenso",
|
||||
"version": "v1.11.1",
|
||||
"date": "2025-05-20T12:37:46Z"
|
||||
},
|
||||
{
|
||||
"name": "Stirling-Tools/Stirling-PDF",
|
||||
"version": "v0.46.2",
|
||||
"date": "2025-05-20T11:21:04Z"
|
||||
},
|
||||
{
|
||||
"name": "zabbix/zabbix",
|
||||
"version": "7.2.7",
|
||||
"date": "2025-05-20T11:00:56Z"
|
||||
},
|
||||
{
|
||||
"name": "Luligu/matterbridge",
|
||||
"version": "3.0.3",
|
||||
"date": "2025-05-20T06:51:42Z"
|
||||
},
|
||||
{
|
||||
"name": "crafty-controller/crafty-4",
|
||||
"version": "v4.4.9",
|
||||
"date": "2025-05-20T00:08:29Z"
|
||||
},
|
||||
{
|
||||
"name": "HabitRPG/habitica",
|
||||
"version": "v5.36.4",
|
||||
"date": "2025-05-19T22:28:11Z"
|
||||
},
|
||||
{
|
||||
"name": "paperless-ngx/paperless-ngx",
|
||||
"version": "v2.16.1",
|
||||
"date": "2025-05-19T21:26:44Z"
|
||||
},
|
||||
{
|
||||
"name": "glanceapp/glance",
|
||||
"version": "v0.8.3",
|
||||
"date": "2025-05-19T20:45:10Z"
|
||||
},
|
||||
{
|
||||
"name": "bunkerity/bunkerweb",
|
||||
"version": "v1.6.1",
|
||||
"date": "2025-03-15T17:29:17Z"
|
||||
},
|
||||
{
|
||||
"name": "Forceu/Gokapi",
|
||||
"version": "v1.9.6",
|
||||
"date": "2024-12-18T14:35:37Z"
|
||||
},
|
||||
{
|
||||
"name": "Checkmk/checkmk",
|
||||
"version": "v2.4.0p2",
|
||||
"date": "2025-05-19T17:06:15Z"
|
||||
},
|
||||
{
|
||||
"name": "n8n-io/n8n",
|
||||
"version": "n8n@1.91.3",
|
||||
"date": "2025-05-08T12:25:10Z"
|
||||
},
|
||||
{
|
||||
"name": "Graylog2/graylog2-server",
|
||||
"version": "6.3.0-beta.1",
|
||||
"date": "2025-05-19T11:23:27Z"
|
||||
},
|
||||
{
|
||||
"name": "open-webui/open-webui",
|
||||
"version": "v0.6.10",
|
||||
"date": "2025-05-19T01:34:37Z"
|
||||
},
|
||||
{
|
||||
"name": "Part-DB/Part-DB-server",
|
||||
"version": "v1.17.1",
|
||||
"date": "2025-05-18T21:06:41Z"
|
||||
},
|
||||
{
|
||||
"name": "sbondCo/Watcharr",
|
||||
"version": "v2.1.0",
|
||||
"date": "2025-05-18T18:20:43Z"
|
||||
},
|
||||
{
|
||||
"name": "YunoHost/yunohost",
|
||||
"version": "debian/12.1.6.1",
|
||||
"date": "2025-05-18T17:01:42Z"
|
||||
},
|
||||
{
|
||||
"name": "kimai/kimai",
|
||||
"version": "2.34.0",
|
||||
"date": "2025-05-18T13:22:17Z"
|
||||
},
|
||||
{
|
||||
"name": "hansmi/prometheus-paperless-exporter",
|
||||
"version": "v0.0.8",
|
||||
"date": "2025-05-18T11:37:31Z"
|
||||
},
|
||||
{
|
||||
"name": "Prowlarr/Prowlarr",
|
||||
"version": "v1.35.1.5034",
|
||||
"date": "2025-04-30T11:02:36Z"
|
||||
},
|
||||
{
|
||||
"name": "Radarr/Radarr",
|
||||
"version": "v5.23.3.9987",
|
||||
"date": "2025-05-17T12:55:29Z"
|
||||
},
|
||||
{
|
||||
"name": "bastienwirtz/homer",
|
||||
"version": "v25.05.2",
|
||||
"date": "2025-05-17T12:53:29Z"
|
||||
},
|
||||
{
|
||||
"name": "BookStackApp/BookStack",
|
||||
"version": "v25.02.5",
|
||||
"date": "2025-05-17T11:24:01Z"
|
||||
},
|
||||
{
|
||||
"name": "Paymenter/Paymenter",
|
||||
"version": "v1.1.1",
|
||||
"date": "2025-05-17T10:10:36Z"
|
||||
},
|
||||
{
|
||||
"name": "evcc-io/evcc",
|
||||
"version": "0.203.6",
|
||||
"date": "2025-05-17T07:30:49Z"
|
||||
},
|
||||
{
|
||||
"name": "prometheus/prometheus",
|
||||
"version": "v0.304.0",
|
||||
"date": "2025-05-17T07:29:09Z"
|
||||
},
|
||||
{
|
||||
"name": "advplyr/audiobookshelf",
|
||||
"version": "v2.23.0",
|
||||
"date": "2025-05-16T22:13:53Z"
|
||||
},
|
||||
{
|
||||
"name": "NodeBB/NodeBB",
|
||||
"version": "v4.4.1",
|
||||
"date": "2025-05-16T16:37:51Z"
|
||||
},
|
||||
{
|
||||
"name": "influxdata/influxdb",
|
||||
"version": "v3.0.3",
|
||||
"date": "2025-05-16T15:41:16Z"
|
||||
},
|
||||
{
|
||||
"name": "wavelog/wavelog",
|
||||
"version": "2.0.4",
|
||||
"date": "2025-05-16T15:09:53Z"
|
||||
},
|
||||
{
|
||||
"name": "emqx/emqx",
|
||||
"version": "e5.10.0-alpha.1",
|
||||
"date": "2025-05-16T13:30:53Z"
|
||||
},
|
||||
{
|
||||
"name": "gotson/komga",
|
||||
"version": "1.21.3",
|
||||
"date": "2025-05-16T04:31:05Z"
|
||||
},
|
||||
{
|
||||
"name": "coder/code-server",
|
||||
"version": "v4.100.2",
|
||||
"date": "2025-05-15T23:02:46Z"
|
||||
},
|
||||
{
|
||||
"name": "goauthentik/authentik",
|
||||
"version": "version/2025.4.1",
|
||||
"date": "2025-05-15T17:48:29Z"
|
||||
},
|
||||
{
|
||||
"name": "cloudflare/cloudflared",
|
||||
"version": "2025.5.0",
|
||||
"date": "2025-05-15T17:09:50Z"
|
||||
},
|
||||
{
|
||||
"name": "VictoriaMetrics/VictoriaMetrics",
|
||||
"version": "pmm-6401-v1.117.1",
|
||||
"date": "2025-05-15T15:45:22Z"
|
||||
},
|
||||
{
|
||||
"name": "ellite/Wallos",
|
||||
"version": "v3.1.1",
|
||||
"date": "2025-05-15T15:17:57Z"
|
||||
},
|
||||
{
|
||||
"name": "zwave-js/zwave-js-ui",
|
||||
"version": "v10.5.1",
|
||||
"date": "2025-05-15T09:59:28Z"
|
||||
},
|
||||
{
|
||||
"name": "FlowiseAI/Flowise",
|
||||
"version": "flowise@3.0.0",
|
||||
"date": "2025-05-15T01:49:47Z"
|
||||
},
|
||||
{
|
||||
"name": "Ombi-app/Ombi",
|
||||
"version": "v4.47.1",
|
||||
"date": "2025-01-05T21:14:23Z"
|
||||
},
|
||||
{
|
||||
"name": "Athou/commafeed",
|
||||
"version": "5.9.0",
|
||||
"date": "2025-05-14T15:29:48Z"
|
||||
},
|
||||
{
|
||||
"name": "juanfont/headscale",
|
||||
"version": "v0.26.0",
|
||||
"date": "2025-05-14T15:12:14Z"
|
||||
},
|
||||
{
|
||||
"name": "motioneye-project/motioneye",
|
||||
"version": "0.42.1",
|
||||
"date": "2020-06-07T07:27:04Z"
|
||||
},
|
||||
{
|
||||
"name": "blakeblackshear/frigate",
|
||||
"version": "v0.14.1",
|
||||
"date": "2024-08-29T22:32:51Z"
|
||||
"name": "Jackett/Jackett",
|
||||
"version": "v0.22.1895",
|
||||
"date": "2025-05-14T05:59:00Z"
|
||||
},
|
||||
{
|
||||
"name": "TandoorRecipes/recipes",
|
||||
"version": "2.0.0-alpha-4",
|
||||
"date": "2025-05-14T05:01:45Z"
|
||||
},
|
||||
{
|
||||
"name": "MediaBrowser/Emby.Releases",
|
||||
"version": "4.8.11.0",
|
||||
"date": "2025-03-10T06:39:11Z"
|
||||
},
|
||||
{
|
||||
"name": "ollama/ollama",
|
||||
"version": "v0.6.9-rc0",
|
||||
"date": "2025-05-10T18:57:30Z"
|
||||
},
|
||||
{
|
||||
"name": "esphome/esphome",
|
||||
"version": "2025.4.2",
|
||||
"date": "2025-05-11T22:18:43Z"
|
||||
},
|
||||
{
|
||||
"name": "cross-seed/cross-seed",
|
||||
"version": "v6.12.4",
|
||||
"date": "2025-05-11T11:41:32Z"
|
||||
},
|
||||
{
|
||||
"name": "firefly-iii/firefly-iii",
|
||||
"version": "v6.2.12",
|
||||
"date": "2025-04-20T19:22:17Z"
|
||||
},
|
||||
{
|
||||
"name": "netbox-community/netbox",
|
||||
"version": "v4.3.1",
|
||||
"date": "2025-05-13T19:45:00Z"
|
||||
},
|
||||
{
|
||||
"name": "glanceapp/glance",
|
||||
"version": "v0.8.1",
|
||||
"date": "2025-05-13T19:42:42Z"
|
||||
},
|
||||
{
|
||||
"name": "pocketbase/pocketbase",
|
||||
"version": "v0.28.1",
|
||||
"date": "2025-05-13T18:45:47Z"
|
||||
},
|
||||
{
|
||||
"name": "jenkinsci/jenkins",
|
||||
"version": "jenkins-2.510",
|
||||
"date": "2025-05-13T18:33:42Z"
|
||||
},
|
||||
{
|
||||
"name": "mongodb/mongo",
|
||||
"version": "r6.0.23",
|
||||
"date": "2025-05-13T18:28:23Z"
|
||||
},
|
||||
{
|
||||
"name": "keycloak/keycloak",
|
||||
"version": "26.2.4",
|
||||
"date": "2025-05-08T09:10:10Z"
|
||||
},
|
||||
{
|
||||
"name": "OctoPrint/OctoPrint",
|
||||
"version": "1.11.1",
|
||||
@ -463,5 +93,405 @@
|
||||
"name": "redis/redis",
|
||||
"version": "8.0.1",
|
||||
"date": "2025-05-13T13:31:53Z"
|
||||
},
|
||||
{
|
||||
"name": "theonedev/onedev",
|
||||
"version": "v11.9.6",
|
||||
"date": "2025-05-13T12:16:17Z"
|
||||
},
|
||||
{
|
||||
"name": "element-hq/synapse",
|
||||
"version": "v1.129.0",
|
||||
"date": "2025-05-06T12:28:54Z"
|
||||
},
|
||||
{
|
||||
"name": "zabbix/zabbix",
|
||||
"version": "7.2.7rc1",
|
||||
"date": "2025-05-13T11:55:32Z"
|
||||
},
|
||||
{
|
||||
"name": "Graylog2/graylog2-server",
|
||||
"version": "6.3.0-alpha.4",
|
||||
"date": "2025-05-13T11:18:29Z"
|
||||
},
|
||||
{
|
||||
"name": "zitadel/zitadel",
|
||||
"version": "v2.65.9",
|
||||
"date": "2025-05-13T05:14:39Z"
|
||||
},
|
||||
{
|
||||
"name": "go-gitea/gitea",
|
||||
"version": "v1.23.8",
|
||||
"date": "2025-05-12T22:40:50Z"
|
||||
},
|
||||
{
|
||||
"name": "leiweibau/Pi.Alert",
|
||||
"version": "v2025-05-11",
|
||||
"date": "2025-05-12T19:14:57Z"
|
||||
},
|
||||
{
|
||||
"name": "duplicati/duplicati",
|
||||
"version": "v2.1.0.118-2.1.0.118_canary_2025-05-12",
|
||||
"date": "2025-05-12T18:50:44Z"
|
||||
},
|
||||
{
|
||||
"name": "runtipi/runtipi",
|
||||
"version": "v4.1.0",
|
||||
"date": "2025-05-12T07:13:15Z"
|
||||
},
|
||||
{
|
||||
"name": "coder/code-server",
|
||||
"version": "v4.100.0",
|
||||
"date": "2025-05-12T18:23:47Z"
|
||||
},
|
||||
{
|
||||
"name": "neo4j/neo4j",
|
||||
"version": "4.4.43",
|
||||
"date": "2025-05-12T15:33:17Z"
|
||||
},
|
||||
{
|
||||
"name": "usememos/memos",
|
||||
"version": "v0.24.3",
|
||||
"date": "2025-05-12T15:23:21Z"
|
||||
},
|
||||
{
|
||||
"name": "NodeBB/NodeBB",
|
||||
"version": "v2.8.18",
|
||||
"date": "2025-05-12T15:08:09Z"
|
||||
},
|
||||
{
|
||||
"name": "n8n-io/n8n",
|
||||
"version": "n8n@1.91.3",
|
||||
"date": "2025-05-08T12:25:10Z"
|
||||
},
|
||||
{
|
||||
"name": "Paymenter/Paymenter",
|
||||
"version": "v1.1.0",
|
||||
"date": "2025-05-12T14:40:27Z"
|
||||
},
|
||||
{
|
||||
"name": "VictoriaMetrics/VictoriaMetrics",
|
||||
"version": "pmm-6401-v1.117.0",
|
||||
"date": "2025-05-12T13:24:20Z"
|
||||
},
|
||||
{
|
||||
"name": "apache/tika",
|
||||
"version": "3.2.0-rc1",
|
||||
"date": "2025-05-12T13:06:47Z"
|
||||
},
|
||||
{
|
||||
"name": "mattermost/mattermost",
|
||||
"version": "v10.7.2",
|
||||
"date": "2025-05-12T10:42:32Z"
|
||||
},
|
||||
{
|
||||
"name": "dgtlmoon/changedetection.io",
|
||||
"version": "0.49.17",
|
||||
"date": "2025-05-12T08:48:30Z"
|
||||
},
|
||||
{
|
||||
"name": "stackblitz-labs/bolt.diy",
|
||||
"version": "1.0.0",
|
||||
"date": "2025-05-12T07:39:23Z"
|
||||
},
|
||||
{
|
||||
"name": "umami-software/umami",
|
||||
"version": "v2.18.1",
|
||||
"date": "2025-05-12T07:16:12Z"
|
||||
},
|
||||
{
|
||||
"name": "outline/outline",
|
||||
"version": "v0.84.0",
|
||||
"date": "2025-05-11T15:50:48Z"
|
||||
},
|
||||
{
|
||||
"name": "Kozea/Radicale",
|
||||
"version": "v3.5.3",
|
||||
"date": "2025-05-11T15:17:13Z"
|
||||
},
|
||||
{
|
||||
"name": "Prowlarr/Prowlarr",
|
||||
"version": "v1.35.1.5034",
|
||||
"date": "2025-04-30T11:02:36Z"
|
||||
},
|
||||
{
|
||||
"name": "authelia/authelia",
|
||||
"version": "v4.39.3",
|
||||
"date": "2025-05-11T11:12:15Z"
|
||||
},
|
||||
{
|
||||
"name": "Radarr/Radarr",
|
||||
"version": "v5.22.4.9896",
|
||||
"date": "2025-04-23T18:51:12Z"
|
||||
},
|
||||
{
|
||||
"name": "owncast/owncast",
|
||||
"version": "v0.2.3",
|
||||
"date": "2025-05-10T21:14:45Z"
|
||||
},
|
||||
{
|
||||
"name": "open-webui/open-webui",
|
||||
"version": "v0.6.9",
|
||||
"date": "2025-05-10T19:05:02Z"
|
||||
},
|
||||
{
|
||||
"name": "Stirling-Tools/Stirling-PDF",
|
||||
"version": "v0.46.1",
|
||||
"date": "2025-05-10T15:39:10Z"
|
||||
},
|
||||
{
|
||||
"name": "juanfont/headscale",
|
||||
"version": "v0.25.1",
|
||||
"date": "2025-02-25T17:30:48Z"
|
||||
},
|
||||
{
|
||||
"name": "pelican-dev/wings",
|
||||
"version": "v1.0.0-beta13",
|
||||
"date": "2025-05-09T23:14:41Z"
|
||||
},
|
||||
{
|
||||
"name": "pelican-dev/panel",
|
||||
"version": "v1.0.0-beta21",
|
||||
"date": "2025-05-09T23:14:23Z"
|
||||
},
|
||||
{
|
||||
"name": "homarr-labs/homarr",
|
||||
"version": "v1.19.1",
|
||||
"date": "2025-05-09T19:15:10Z"
|
||||
},
|
||||
{
|
||||
"name": "home-assistant/core",
|
||||
"version": "2025.5.1",
|
||||
"date": "2025-05-09T15:05:54Z"
|
||||
},
|
||||
{
|
||||
"name": "crowdsecurity/crowdsec",
|
||||
"version": "v1.6.8",
|
||||
"date": "2025-03-25T13:33:10Z"
|
||||
},
|
||||
{
|
||||
"name": "pocket-id/pocket-id",
|
||||
"version": "v0.53.0",
|
||||
"date": "2025-05-08T19:56:55Z"
|
||||
},
|
||||
{
|
||||
"name": "ellite/Wallos",
|
||||
"version": "v3.1.0",
|
||||
"date": "2025-05-08T15:33:17Z"
|
||||
},
|
||||
{
|
||||
"name": "BookStackApp/BookStack",
|
||||
"version": "v25.02.4",
|
||||
"date": "2025-05-08T15:03:17Z"
|
||||
},
|
||||
{
|
||||
"name": "wazuh/wazuh",
|
||||
"version": "v4.12.0",
|
||||
"date": "2025-05-08T13:27:46Z"
|
||||
},
|
||||
{
|
||||
"name": "apache/tomcat",
|
||||
"version": "10.1.41",
|
||||
"date": "2025-05-08T12:45:44Z"
|
||||
},
|
||||
{
|
||||
"name": "zwave-js/zwave-js-ui",
|
||||
"version": "v10.4.2",
|
||||
"date": "2025-05-08T08:11:27Z"
|
||||
},
|
||||
{
|
||||
"name": "semaphoreui/semaphore",
|
||||
"version": "v2.14.10",
|
||||
"date": "2025-05-07T20:23:29Z"
|
||||
},
|
||||
{
|
||||
"name": "readeck/readeck",
|
||||
"version": "0.18.2",
|
||||
"date": "2025-05-07T19:22:22Z"
|
||||
},
|
||||
{
|
||||
"name": "HabitRPG/habitica",
|
||||
"version": "v5.36.3",
|
||||
"date": "2025-05-07T17:22:07Z"
|
||||
},
|
||||
{
|
||||
"name": "ipfs/kubo",
|
||||
"version": "v0.34.1",
|
||||
"date": "2025-03-25T18:11:12Z"
|
||||
},
|
||||
{
|
||||
"name": "donaldzou/WGDashboard",
|
||||
"version": "v4.2.3",
|
||||
"date": "2025-05-07T15:35:04Z"
|
||||
},
|
||||
{
|
||||
"name": "stonith404/pingvin-share",
|
||||
"version": "v1.12.0",
|
||||
"date": "2025-05-07T14:12:11Z"
|
||||
},
|
||||
{
|
||||
"name": "Brandawg93/PeaNUT",
|
||||
"version": "v5.7.5",
|
||||
"date": "2025-05-07T14:01:45Z"
|
||||
},
|
||||
{
|
||||
"name": "glpi-project/glpi",
|
||||
"version": "10.0.18",
|
||||
"date": "2025-02-12T11:07:02Z"
|
||||
},
|
||||
{
|
||||
"name": "ZoeyVid/NPMplus",
|
||||
"version": "2025-05-07-r1",
|
||||
"date": "2025-05-07T12:18:42Z"
|
||||
},
|
||||
{
|
||||
"name": "docker/compose",
|
||||
"version": "v2.36.0",
|
||||
"date": "2025-05-07T11:54:14Z"
|
||||
},
|
||||
{
|
||||
"name": "openobserve/openobserve",
|
||||
"version": "v0.14.7",
|
||||
"date": "2025-05-07T11:32:23Z"
|
||||
},
|
||||
{
|
||||
"name": "grokability/snipe-it",
|
||||
"version": "v8.1.3",
|
||||
"date": "2025-05-07T11:09:21Z"
|
||||
},
|
||||
{
|
||||
"name": "cockpit-project/cockpit",
|
||||
"version": "338",
|
||||
"date": "2025-05-07T10:43:29Z"
|
||||
},
|
||||
{
|
||||
"name": "jupyter/notebook",
|
||||
"version": "@jupyter-notebook/ui-components@7.5.0-alpha.0",
|
||||
"date": "2025-05-07T09:12:08Z"
|
||||
},
|
||||
{
|
||||
"name": "influxdata/influxdb",
|
||||
"version": "v1.12.1rc0",
|
||||
"date": "2025-05-06T20:56:30Z"
|
||||
},
|
||||
{
|
||||
"name": "Athou/commafeed",
|
||||
"version": "5.8.0",
|
||||
"date": "2025-05-06T18:33:07Z"
|
||||
},
|
||||
{
|
||||
"name": "sysadminsmedia/homebox",
|
||||
"version": "v0.19.0",
|
||||
"date": "2025-05-06T18:05:42Z"
|
||||
},
|
||||
{
|
||||
"name": "MariaDB/server",
|
||||
"version": "mariadb-11.4.6",
|
||||
"date": "2025-05-06T15:30:49Z"
|
||||
},
|
||||
{
|
||||
"name": "bluenviron/mediamtx",
|
||||
"version": "v1.12.2",
|
||||
"date": "2025-05-06T15:30:10Z"
|
||||
},
|
||||
{
|
||||
"name": "AdguardTeam/AdGuardHome",
|
||||
"version": "v0.107.61",
|
||||
"date": "2025-04-22T12:42:26Z"
|
||||
},
|
||||
{
|
||||
"name": "Luligu/matterbridge",
|
||||
"version": "3.0.1",
|
||||
"date": "2025-05-06T10:24:43Z"
|
||||
},
|
||||
{
|
||||
"name": "syncthing/syncthing",
|
||||
"version": "v1.29.6",
|
||||
"date": "2025-05-06T07:57:02Z"
|
||||
},
|
||||
{
|
||||
"name": "linkwarden/linkwarden",
|
||||
"version": "v2.10.2",
|
||||
"date": "2025-05-06T03:12:53Z"
|
||||
},
|
||||
{
|
||||
"name": "fallenbagel/jellyseerr",
|
||||
"version": "preview-tvdb",
|
||||
"date": "2025-05-06T01:32:52Z"
|
||||
},
|
||||
{
|
||||
"name": "autobrr/autobrr",
|
||||
"version": "v1.62.0",
|
||||
"date": "2025-05-05T20:35:18Z"
|
||||
},
|
||||
{
|
||||
"name": "postgres/postgres",
|
||||
"version": "REL_13_21",
|
||||
"date": "2025-05-05T20:34:49Z"
|
||||
},
|
||||
{
|
||||
"name": "msgbyte/tianji",
|
||||
"version": "v1.20.9",
|
||||
"date": "2025-05-05T19:24:09Z"
|
||||
},
|
||||
{
|
||||
"name": "grafana/grafana",
|
||||
"version": "v12.0.0",
|
||||
"date": "2025-05-05T18:28:19Z"
|
||||
},
|
||||
{
|
||||
"name": "apache/couchdb",
|
||||
"version": "3.5.0",
|
||||
"date": "2025-05-05T16:28:24Z"
|
||||
},
|
||||
{
|
||||
"name": "icereed/paperless-gpt",
|
||||
"version": "v0.18.0",
|
||||
"date": "2025-05-05T15:34:40Z"
|
||||
},
|
||||
{
|
||||
"name": "traefik/traefik",
|
||||
"version": "v3.4.0",
|
||||
"date": "2025-05-05T13:59:23Z"
|
||||
},
|
||||
{
|
||||
"name": "evcc-io/evcc",
|
||||
"version": "0.203.5",
|
||||
"date": "2025-05-05T06:41:02Z"
|
||||
},
|
||||
{
|
||||
"name": "moghtech/komodo",
|
||||
"version": "v1.17.5",
|
||||
"date": "2025-05-04T22:17:06Z"
|
||||
},
|
||||
{
|
||||
"name": "YunoHost/yunohost",
|
||||
"version": "debian/12.0.16",
|
||||
"date": "2025-05-04T22:06:15Z"
|
||||
},
|
||||
{
|
||||
"name": "Lidarr/Lidarr",
|
||||
"version": "v2.11.2.4629",
|
||||
"date": "2025-04-28T11:59:37Z"
|
||||
},
|
||||
{
|
||||
"name": "Readarr/Readarr",
|
||||
"version": "v2.0.0.4645",
|
||||
"date": "2017-03-07T18:56:06Z"
|
||||
},
|
||||
{
|
||||
"name": "bastienwirtz/homer",
|
||||
"version": "v25.05.1",
|
||||
"date": "2025-05-04T12:17:00Z"
|
||||
},
|
||||
{
|
||||
"name": "FreshRSS/FreshRSS",
|
||||
"version": "1.26.2",
|
||||
"date": "2025-05-03T20:23:27Z"
|
||||
},
|
||||
{
|
||||
"name": "prometheus-pve/prometheus-pve-exporter",
|
||||
"version": "v3.5.4",
|
||||
"date": "2025-05-02T13:42:06Z"
|
||||
}
|
||||
]
|
||||
|
85
install/alpine-bitmagnet-install.sh
Normal file
85
install/alpine-bitmagnet-install.sh
Normal file
@ -0,0 +1,85 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Copyright (c) 2021-2025 community-scripts ORG
|
||||
# Author: Slaviša Arežina (tremor021)
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
# Source: https://github.com/bitmagnet-io/bitmagnet
|
||||
|
||||
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
|
||||
color
|
||||
verb_ip6
|
||||
catch_errors
|
||||
setting_up_container
|
||||
network_check
|
||||
update_os
|
||||
|
||||
msg_info "Installing dependencies"
|
||||
$STD apk add --no-cache \
|
||||
gcc \
|
||||
musl-dev \
|
||||
git \
|
||||
iproute2-ss \
|
||||
sudo
|
||||
$STD apk add --no-cache --repository=https://dl-cdn.alpinelinux.org/alpine/edge/community go
|
||||
msg_ok "Installed dependencies"
|
||||
|
||||
msg_info "Installing PostgreSQL"
|
||||
$STD apk add --no-cache \
|
||||
postgresql16 \
|
||||
postgresql16-contrib \
|
||||
postgresql16-openrc
|
||||
$STD rc-update add postgresql
|
||||
$STD rc-service postgresql start
|
||||
msg_ok "Installed PostreSQL"
|
||||
|
||||
RELEASE=$(curl -s https://api.github.com/repos/bitmagnet-io/bitmagnet/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
||||
|
||||
msg_info "Installing bitmagnet v${RELEASE}"
|
||||
mkdir -p /opt/bitmagnet
|
||||
temp_file=$(mktemp)
|
||||
curl -fsSL "https://github.com/bitmagnet-io/bitmagnet/archive/refs/tags/v${RELEASE}.tar.gz" -o "$temp_file"
|
||||
tar zxf "$temp_file" --strip-components=1 -C /opt/bitmagnet
|
||||
cd /opt/bitmagnet
|
||||
VREL=v$RELEASE
|
||||
$STD go build -ldflags "-s -w -X github.com/bitmagnet-io/bitmagnet/internal/version.GitTag=$VREL"
|
||||
chmod +x bitmagnet
|
||||
$STD su - postgres -c "psql -c 'CREATE DATABASE bitmagnet;'"
|
||||
echo "${RELEASE}" >/opt/bitmagnet_version.txt
|
||||
msg_ok "Installed bitmagnet v${RELEASE}"
|
||||
|
||||
read -rp "${TAB3}Enter your TMDB API key if you have one: " tmdbapikey
|
||||
|
||||
msg_info "Enabling bitmagnet Service"
|
||||
cat <<EOF >/etc/init.d/bitmagnet
|
||||
#!/sbin/openrc-run
|
||||
description="bitmagnet Service"
|
||||
directory="/opt/bitmagnet"
|
||||
command="/opt/bitmagnet/bitmagnet"
|
||||
command_args="worker run --all"
|
||||
command_background="true"
|
||||
command_user="root"
|
||||
pidfile="/var/run/bitmagnet.pid"
|
||||
|
||||
depend() {
|
||||
use net
|
||||
}
|
||||
|
||||
start_pre() {
|
||||
export TMDB_API_KEY="$tmdbapikey"
|
||||
}
|
||||
EOF
|
||||
chmod +x /etc/init.d/bitmagnet
|
||||
$STD rc-update add bitmagnet default
|
||||
msg_ok "Enabled bitmagnet Service"
|
||||
|
||||
msg_info "Starting bitmagnet"
|
||||
$STD service bitmagnet start
|
||||
msg_ok "Started bitmagnet"
|
||||
|
||||
motd_ssh
|
||||
customize
|
||||
|
||||
msg_info "Cleaning up"
|
||||
rm -f "$temp_file"
|
||||
$STD apk cache clean
|
||||
msg_ok "Cleaned"
|
@ -1,105 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Copyright (c) 2021-2025 community-scripts ORG
|
||||
# Author: MickLesk (Canbiz)
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
# Source: https://github.com/homarr-labs/homarr
|
||||
|
||||
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
|
||||
color
|
||||
verb_ip6
|
||||
catch_errors
|
||||
setting_up_container
|
||||
network_check
|
||||
update_os
|
||||
|
||||
msg_info "Installing Dependencies"
|
||||
$STD apk add --no-cache \
|
||||
redis \
|
||||
nginx \
|
||||
ca-certificates \
|
||||
openssl \
|
||||
jq \
|
||||
make \
|
||||
g++ \
|
||||
gettext \
|
||||
libstdc++ \
|
||||
libgcc \
|
||||
python3 \
|
||||
py3-pip
|
||||
msg_ok "Installed Dependencies"
|
||||
|
||||
NODE_VERSION=$(curl -s https://raw.githubusercontent.com/homarr-labs/homarr/dev/package.json | jq -r '.engines.node | split(">=")[1] | split(".")[0]')
|
||||
NODE_MODULE="pnpm@$(curl -s https://raw.githubusercontent.com/homarr-labs/homarr/dev/package.json | jq -r '.packageManager | split("@")[1]')"
|
||||
install_node_and_modules
|
||||
fetch_and_deploy_gh_release "homarr-labs/homarr"
|
||||
|
||||
msg_info "Installing Homarr"
|
||||
mkdir -p /opt/homarr_db
|
||||
touch /opt/homarr_db/db.sqlite
|
||||
SECRET_ENCRYPTION_KEY="$(openssl rand -hex 32)"
|
||||
cd /opt/homarr
|
||||
cat <<EOF >/opt/homarr/.env
|
||||
DB_DRIVER='better-sqlite3'
|
||||
DB_DIALECT='sqlite'
|
||||
SECRET_ENCRYPTION_KEY='${SECRET_ENCRYPTION_KEY}'
|
||||
DB_URL='/opt/homarr_db/db.sqlite'
|
||||
TURBO_TELEMETRY_DISABLED=1
|
||||
AUTH_PROVIDERS='credentials'
|
||||
NODE_ENV='production'
|
||||
EOF
|
||||
|
||||
$STD pnpm install
|
||||
$STD pnpm build
|
||||
msg_ok "Installed Homarr"
|
||||
|
||||
msg_info "Copying build and config files"
|
||||
cp /opt/homarr/apps/nextjs/next.config.ts .
|
||||
cp /opt/homarr/apps/nextjs/package.json .
|
||||
cp -r /opt/homarr/packages/db/migrations /opt/homarr_db/migrations
|
||||
cp -r /opt/homarr/apps/nextjs/.next/standalone/* /opt/homarr
|
||||
mkdir -p /appdata/redis
|
||||
cp /opt/homarr/packages/redis/redis.conf /opt/homarr/redis.conf
|
||||
mkdir -p /etc/nginx/templates
|
||||
cp /opt/homarr/nginx.conf /etc/nginx/templates/nginx.conf
|
||||
mkdir -p /opt/homarr/apps/cli
|
||||
cp /opt/homarr/packages/cli/cli.cjs /opt/homarr/apps/cli/cli.cjs
|
||||
echo -e '#!/bin/sh\ncd /opt/homarr/apps/cli && node ./cli.cjs "$@"' >/usr/bin/homarr
|
||||
chmod +x /usr/bin/homarr
|
||||
mkdir -p /opt/homarr/build
|
||||
cp ./node_modules/better-sqlite3/build/Release/better_sqlite3.node ./build/better_sqlite3.node
|
||||
echo "${RELEASE}" >"/opt/${APPLICATION}_version.txt"
|
||||
msg_ok "Finished copying"
|
||||
|
||||
msg_info "Creating run script"
|
||||
cat <<'EOF' >/opt/run_homarr.sh
|
||||
#!/bin/sh
|
||||
set -a
|
||||
. /opt/homarr/.env
|
||||
set +a
|
||||
export DB_DIALECT='sqlite'
|
||||
export AUTH_SECRET=$(openssl rand -base64 32)
|
||||
node /opt/homarr_db/migrations/$DB_DIALECT/migrate.cjs /opt/homarr_db/migrations/$DB_DIALECT
|
||||
for dir in $(find /opt/homarr_db/migrations/migrations -mindepth 1 -maxdepth 1 -type d); do
|
||||
dirname=$(basename "$dir")
|
||||
mkdir -p "/opt/homarr_db/migrations/$dirname"
|
||||
cp -r "$dir"/* "/opt/homarr_db/migrations/$dirname/" 2>/dev/null || true
|
||||
done
|
||||
export HOSTNAME=$(ip route get 1.1.1.1 | awk '/src/ { print $7 }')
|
||||
envsubst '${HOSTNAME}' < /etc/nginx/templates/nginx.conf > /etc/nginx/nginx.conf
|
||||
nginx -g 'daemon off;' &
|
||||
redis-server /opt/homarr/redis.conf &
|
||||
node apps/tasks/tasks.cjs &
|
||||
node apps/websocket/wssServer.cjs &
|
||||
node apps/nextjs/server.js & PID=$!
|
||||
wait $PID
|
||||
EOF
|
||||
chmod +x /opt/run_homarr.sh
|
||||
msg_ok "Created run script"
|
||||
|
||||
motd_ssh
|
||||
customize
|
||||
|
||||
msg_info "Cleaning up"
|
||||
rm -rf /opt/v${RELEASE}.zip
|
||||
msg_ok "Cleaned"
|
@ -1,100 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Copyright (c) 2021-2025 community-scripts ORG
|
||||
# Author: MickLesk (CanbiZ)
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVED/raw/main/LICENSE
|
||||
# Source: https://release-argus.io/
|
||||
|
||||
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
|
||||
color
|
||||
verb_ip6
|
||||
catch_errors
|
||||
setting_up_container
|
||||
network_check
|
||||
update_os
|
||||
|
||||
msg_info "Installing Dependencies"
|
||||
$STD apt-get install -y \
|
||||
jq
|
||||
msg_ok "Installed Dependencies"
|
||||
|
||||
msg_info "Setup Argus"
|
||||
RELEASE=$(curl -fsSL https://api.github.com/repos/release-argus/Argus/releases/latest | jq -r .tag_name | sed 's/^v//')
|
||||
mkdir -p /opt/argus
|
||||
curl -fsSL "https://github.com/release-argus/Argus/releases/download/${RELEASE}/Argus-${RELEASE}.linux-amd64" -o /opt/argus/Argus
|
||||
chmod +x /opt/argus/Argus
|
||||
msg_ok "Setup Argus"
|
||||
|
||||
msg_info "Setup Argus Config"
|
||||
cat <<EOF >/opt/argus/config.yml
|
||||
settings:
|
||||
log:
|
||||
level: INFO
|
||||
timestamps: false
|
||||
data:
|
||||
database_file: data/argus.db
|
||||
web:
|
||||
listen_host: 0.0.0.0
|
||||
listen_port: 8080
|
||||
route_prefix: /
|
||||
|
||||
defaults:
|
||||
service:
|
||||
options:
|
||||
interval: 30m
|
||||
semantic_versioning: true
|
||||
latest_version:
|
||||
allow_invalid_certs: false
|
||||
use_prerelease: false
|
||||
dashboard:
|
||||
auto_approve: true
|
||||
webhook:
|
||||
desired_status_code: 201
|
||||
|
||||
service:
|
||||
release-argus/argus:
|
||||
latest_version:
|
||||
type: github
|
||||
url: release-argus/argus
|
||||
dashboard:
|
||||
icon: https://raw.githubusercontent.com/release-argus/Argus/master/web/ui/react-app/public/favicon.svg
|
||||
icon_link_to: https://release-argus.io
|
||||
web_url: https://github.com/release-argus/Argus/blob/master/CHANGELOG.md
|
||||
|
||||
community-scripts/ProxmoxVE:
|
||||
latest_version:
|
||||
type: github
|
||||
url: community-scripts/ProxmoxVE
|
||||
use_prerelease: false
|
||||
dashboard:
|
||||
icon: https://raw.githubusercontent.com/community-scripts/ProxmoxVE/refs/heads/main/misc/images/logo.png
|
||||
icon_link_to: https://helper-scripts.com/
|
||||
web_url: https://github.com/community-scripts/ProxmoxVE/releases
|
||||
EOF
|
||||
echo "${RELEASE}" >/opt/${APPLICATION}_version.txt
|
||||
msg_ok "Setup Config"
|
||||
|
||||
msg_info "Creating Service"
|
||||
cat <<EOF >/etc/systemd/system/argus.service
|
||||
[Unit]
|
||||
Description=Argus
|
||||
After=network.target
|
||||
[Service]
|
||||
Type=simple
|
||||
WorkingDirectory=/opt/argus
|
||||
ExecStart=/opt/argus/Argus
|
||||
Restart=on-failure
|
||||
RestartSec=5
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
EOF
|
||||
systemctl enable -q --now argus
|
||||
msg_ok "Created Service"
|
||||
|
||||
motd_ssh
|
||||
customize
|
||||
|
||||
msg_info "Cleaning up"
|
||||
$STD apt-get -y autoremove
|
||||
$STD apt-get -y autoclean
|
||||
msg_ok "Cleaned"
|
@ -1,9 +1,9 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Copyright (c) 2021-2025 community-scripts ORG
|
||||
# Copyright (c) 2021-2024 community-scripts ORG
|
||||
# Author: MickLesk (CanbiZ)
|
||||
# License: MIT | http
|
||||
# Source: https://github.com/babybuddy/babybuddy
|
||||
# License: MIT | htt
|
||||
# Source: https://github.com/AnalogJ/scrutiny
|
||||
|
||||
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
|
||||
color
|
||||
@ -13,6 +13,7 @@ setting_up_container
|
||||
network_check
|
||||
update_os
|
||||
|
||||
# Installiere benötigte Pakete
|
||||
msg_info "Installing Dependencies"
|
||||
$STD apt-get install -y \
|
||||
uwsgi \
|
||||
@ -20,22 +21,31 @@ $STD apt-get install -y \
|
||||
libopenjp2-7-dev \
|
||||
libpq-dev \
|
||||
nginx \
|
||||
python3
|
||||
python3 \
|
||||
python3-venv \
|
||||
python3-pip
|
||||
msg_ok "Installed Dependencies"
|
||||
|
||||
setup_uv
|
||||
|
||||
msg_info "Installing Babybuddy"
|
||||
cd /opt
|
||||
RELEASE=$(curl -fsSL https://api.github.com/repos/babybuddy/babybuddy/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
||||
temp_file=$(mktemp)
|
||||
mkdir -p /opt/{babybuddy,data}
|
||||
curl -fsSL "https://github.com/babybuddy/babybuddy/archive/refs/tags/v${RELEASE}.tar.gz" -o "$temp_file"
|
||||
tar zxf "$temp_file" --strip-components=1 -C /opt/babybuddy
|
||||
wget -q "https://github.com/babybuddy/babybuddy/archive/refs/tags/v${RELEASE}.zip"
|
||||
unzip -q v${RELEASE}.zip
|
||||
mv babybuddy-${RELEASE} /opt/babybuddy
|
||||
rm "v${RELEASE}.zip"
|
||||
cd /opt/babybuddy
|
||||
$STD uv venv .venv
|
||||
$STD source .venv/bin/activate
|
||||
$STD uv pip install -r requirements.txt
|
||||
$STD pip install -U pip wheel pipenv
|
||||
export PIPENV_VENV_IN_PROJECT=1
|
||||
export PIPENV_IGNORE_VIRTUALENVS=1
|
||||
export PIPENV_VERBOSITY=-1
|
||||
$STD pipenv install
|
||||
#$STD pipenv shell
|
||||
cp babybuddy/settings/production.example.py babybuddy/settings/production.py
|
||||
touch /opt/babybuddy/data/db.sqlite3
|
||||
chown -R www-data:www-data /opt/babybuddy/data
|
||||
chmod 640 /opt/babybuddy/data/db.sqlite3
|
||||
chmod 750 /opt/babybuddy/data
|
||||
|
||||
SECRET_KEY=$(openssl rand -base64 32 | tr -dc 'a-zA-Z0-9' | cut -c1-32)
|
||||
ALLOWED_HOSTS=$(hostname -I | tr ' ' ',' | sed 's/,$//')",127.0.0.1,localhost"
|
||||
sed -i \
|
||||
@ -44,14 +54,38 @@ sed -i \
|
||||
babybuddy/settings/production.py
|
||||
|
||||
export DJANGO_SETTINGS_MODULE=babybuddy.settings.production
|
||||
$STD python manage.py migrate
|
||||
chown -R www-data:www-data /opt/data
|
||||
chmod 640 /opt/data/db.sqlite3
|
||||
chmod 750 /opt/data
|
||||
msg_ok "Installed Babybuddy"
|
||||
python manage.py migrate
|
||||
|
||||
# Berechtigungen setzen
|
||||
chown -R www-data:www-data /opt/babybuddy/data
|
||||
chmod 640 /opt/babybuddy/data/db.sqlite3
|
||||
chmod 750 /opt/babybuddy/data
|
||||
msg_ok "Installed BabyBuddy WebApp"
|
||||
|
||||
# Django Admin Setup
|
||||
DJANGO_ADMIN_USER=admin
|
||||
DJANGO_ADMIN_PASS=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | cut -c1-13)
|
||||
python manage.py shell <<EOF
|
||||
from django.contrib.auth import get_user_model
|
||||
User = get_user_model()
|
||||
if not User.objects.filter(username='$DJANGO_ADMIN_USER').exists():
|
||||
u = User.objects.create_user('$DJANGO_ADMIN_USER', password='$DJANGO_ADMIN_PASS')
|
||||
u.is_superuser = True
|
||||
u.is_staff = True
|
||||
u.save()
|
||||
EOF
|
||||
|
||||
{
|
||||
echo ""
|
||||
echo "Django-Credentials"
|
||||
echo "Django Admin User: $DJANGO_ADMIN_USER"
|
||||
echo "Django Admin Password: $DJANGO_ADMIN_PASS"
|
||||
} >>~/babybuddy.creds
|
||||
msg_ok "Setup Django Admin"
|
||||
|
||||
# uWSGI konfigurieren
|
||||
msg_info "Configuring uWSGI"
|
||||
cat <<EOF >/etc/uwsgi/apps-available/babybuddy.ini
|
||||
sudo bash -c "cat > /etc/uwsgi/apps-available/babybuddy.ini" <<EOF
|
||||
[uwsgi]
|
||||
plugins = python3
|
||||
project = babybuddy
|
||||
@ -62,15 +96,12 @@ module = %(project).wsgi:application
|
||||
env = DJANGO_SETTINGS_MODULE=%(project).settings.production
|
||||
master = True
|
||||
vacuum = True
|
||||
socket = /var/run/uwsgi/app/babybuddy/socket
|
||||
chmod-socket = 660
|
||||
uid = www-data
|
||||
gid = www-data
|
||||
EOF
|
||||
ln -sf /etc/uwsgi/apps-available/babybuddy.ini /etc/uwsgi/apps-enabled/babybuddy.ini
|
||||
service uwsgi restart
|
||||
msg_ok "Configured uWSGI"
|
||||
|
||||
sudo ln -sf /etc/uwsgi/apps-available/babybuddy.ini /etc/uwsgi/apps-enabled/babybuddy.ini
|
||||
sudo service uwsgi restart
|
||||
|
||||
# NGINX konfigurieren
|
||||
msg_info "Configuring NGINX"
|
||||
cat <<EOF >/etc/nginx/sites-available/babybuddy
|
||||
upstream babybuddy {
|
||||
@ -87,22 +118,16 @@ server {
|
||||
}
|
||||
|
||||
location /media {
|
||||
alias /opt/data/media;
|
||||
alias /opt/babybuddy/media;
|
||||
}
|
||||
}
|
||||
EOF
|
||||
|
||||
ln -sf /etc/nginx/sites-available/babybuddy /etc/nginx/sites-enabled/babybuddy
|
||||
rm /etc/nginx/sites-enabled/default
|
||||
systemctl enable -q --now nginx
|
||||
service nginx reload
|
||||
msg_ok "Configured NGINX"
|
||||
|
||||
motd_ssh
|
||||
customize
|
||||
service nginx restart
|
||||
|
||||
# Bereinigung
|
||||
msg_info "Cleaning up"
|
||||
rm -f "$temp_file"
|
||||
$STD apt-get -y autoremove
|
||||
$STD apt-get -y autoclean
|
||||
msg_ok "Cleaned"
|
||||
|
@ -21,8 +21,7 @@ $STD apt-get install -y \
|
||||
redis-server \
|
||||
npm \
|
||||
nginx \
|
||||
lsb-release \
|
||||
libvips
|
||||
lsb-release
|
||||
msg_ok "Installed Dependencies"
|
||||
|
||||
msg_info "Adding PHP8.4 Repository"
|
||||
@ -32,15 +31,12 @@ $STD sh -c 'echo "deb [signed-by=/usr/share/keyrings/deb.sury.org-php.gpg] https
|
||||
$STD apt-get update
|
||||
msg_ok "Added PHP8.4 Repository"
|
||||
|
||||
msg_info "Installing / configuring PHP"
|
||||
msg_info "Installing PHP"
|
||||
$STD apt-get remove -y php8.2*
|
||||
$STD apt-get install -y \
|
||||
php8.4 \
|
||||
php8.4-{ffi,opcache,redis,zip,pdo-sqlite,bcmath,pdo,curl,dom,fpm}
|
||||
PHPVER=$(php -r 'echo PHP_MAJOR_VERSION . "." . PHP_MINOR_VERSION . "\n";')
|
||||
sed -i.bak -E 's/^\s*;?\s*ffi\.enable\s*=.*/ffi.enable=true/' /etc/php/${PHPVER}/fpm/php.ini
|
||||
$STD systemctl reload php${PHPVER}-fpm
|
||||
msg_info "Installed / configured PHP"
|
||||
msg_info "Installed PHP"
|
||||
|
||||
msg_info "Installing MeiliSearch"
|
||||
cd /opt
|
||||
@ -78,8 +74,7 @@ systemctl enable -q --now meilisearch
|
||||
msg_ok "Created Service MeiliSearch"
|
||||
|
||||
msg_info "Installing Bar Assistant"
|
||||
# RELEASE_BARASSISTANT=$(curl -s https://api.github.com/repos/karlomikus/bar-assistant/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
||||
RELEASE_BARASSISTANT="5.3.0"
|
||||
RELEASE_BARASSISTANT=$(curl -s https://api.github.com/repos/karlomikus/bar-assistant/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
||||
cd /opt
|
||||
curl -fsSL "https://github.com/karlomikus/bar-assistant/archive/refs/tags/v${RELEASE_BARASSISTANT}.zip" -o barassistant.zip
|
||||
unzip -q barassistant.zip
|
||||
@ -105,7 +100,6 @@ $STD php artisan scout:sync-index-settings
|
||||
$STD php artisan config:cache
|
||||
$STD php artisan route:cache
|
||||
$STD php artisan event:cache
|
||||
mkdir /opt/bar-assistant/storage/bar-assistant/uploads/temp
|
||||
chown -R www-data:www-data /opt/bar-assistant
|
||||
echo "${RELEASE_BARASSISTANT}" >/opt/${APPLICATION}_version.txt
|
||||
msg_ok "Installed Bar Assistant"
|
||||
|
78
install/bitmagnet-install.sh
Normal file
78
install/bitmagnet-install.sh
Normal file
@ -0,0 +1,78 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Copyright (c) 2021-2025 community-scripts ORG
|
||||
# Author: Slaviša Arežina (tremor021)
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
# Source: https://github.com/bitmagnet-io/bitmagnet
|
||||
|
||||
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
|
||||
color
|
||||
verb_ip6
|
||||
catch_errors
|
||||
setting_up_container
|
||||
network_check
|
||||
update_os
|
||||
|
||||
msg_info "Installing Dependencies"
|
||||
$STD apt-get install -y \
|
||||
iproute2 \
|
||||
gcc \
|
||||
musl-dev
|
||||
msg_ok "Installed Dependencies"
|
||||
|
||||
PG_VERSION="16" install_postgresql
|
||||
install_go
|
||||
RELEASE=$(curl -fsSL https://api.github.com/repos/bitmagnet-io/bitmagnet/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
||||
|
||||
msg_info "Installing bitmagnet v${RELEASE}"
|
||||
mkdir -p /opt/bitmagnet
|
||||
temp_file=$(mktemp)
|
||||
curl -fsSL "https://github.com/bitmagnet-io/bitmagnet/archive/refs/tags/v${RELEASE}.tar.gz" -o "$temp_file"
|
||||
tar zxf "$temp_file" --strip-components=1 -C /opt/bitmagnet
|
||||
cd /opt/bitmagnet
|
||||
VREL=v$RELEASE
|
||||
$STD go build -ldflags "-s -w -X github.com/bitmagnet-io/bitmagnet/internal/version.GitTag=$VREL"
|
||||
chmod +x bitmagnet
|
||||
POSTGRES_PASSWORD=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | head -c13)
|
||||
$STD sudo -u postgres psql -c "ALTER USER postgres WITH PASSWORD '$POSTGRES_PASSWORD';"
|
||||
$STD sudo -u postgres psql -c "CREATE DATABASE bitmagnet;"
|
||||
{
|
||||
echo "PostgreSQL Credentials"
|
||||
echo ""
|
||||
echo "postgres user password: $POSTGRES_PASSWORD"
|
||||
} >>~/postgres.creds
|
||||
echo "${RELEASE}" >/opt/bitmagnet_version.txt
|
||||
msg_ok "Installed bitmagnet v${RELEASE}"
|
||||
|
||||
read -r -p "${TAB3}Enter your TMDB API key if you have one: " tmdbapikey
|
||||
|
||||
msg_info "Creating Service"
|
||||
cat <<EOF >/etc/systemd/system/bitmagnet-web.service
|
||||
[Unit]
|
||||
Description=bitmagnet Web GUI
|
||||
After=network-online.target
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
User=root
|
||||
WorkingDirectory=/opt/bitmagnet
|
||||
ExecStart=/opt/bitmagnet/bitmagnet worker run --all
|
||||
Environment=POSTGRES_HOST=localhost
|
||||
Environment=POSTGRES_PASSWORD=$POSTGRES_PASSWORD
|
||||
Environment=TMDB_API_KEY=$tmdbapikey
|
||||
Restart=on-failure
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
EOF
|
||||
systemctl enable -q --now bitmagnet-web
|
||||
msg_ok "Created Service"
|
||||
|
||||
motd_ssh
|
||||
customize
|
||||
|
||||
msg_info "Cleaning up"
|
||||
rm -f "$temp_file"
|
||||
$STD apt-get -y autoremove
|
||||
$STD apt-get -y autoclean
|
||||
msg_ok "Cleaned"
|
@ -13,7 +13,21 @@ setting_up_container
|
||||
network_check
|
||||
update_os
|
||||
|
||||
msg_info "Installing dependencies"
|
||||
install_go
|
||||
msg_ok "Installed dependencies"
|
||||
|
||||
# msg_info "Installing Go"
|
||||
# GO_VERSION=$(curl -s https://go.dev/VERSION?m=text | grep -m1 '^go')
|
||||
# GO_TARBALL="${GO_VERSION}.linux-amd64.tar.gz"
|
||||
# GO_URL="https://go.dev/dl/${GO_TARBALL}"
|
||||
# INSTALL_DIR="/usr/bin"
|
||||
# rm -rf "${INSTALL_DIR}/go"
|
||||
# curl -LO "$GO_URL"
|
||||
# tar -C "$INSTALL_DIR" -xzf "$GO_TARBALL"
|
||||
# echo 'export PATH=$PATH:/usr/bin/go/bin' >>~/.bashrc
|
||||
# source ~/.bashrc
|
||||
# msg_ok "Installed Go"
|
||||
|
||||
msg_info "Configure Application"
|
||||
var_cf_api_token="default"
|
||||
@ -24,33 +38,33 @@ read -rp "Enter the domains separated with a comma (*.example.org,www.example.or
|
||||
|
||||
var_cf_proxied="false"
|
||||
while true; do
|
||||
read -rp "Proxied? (y/n): " answer
|
||||
case "$answer" in
|
||||
[Yy]*)
|
||||
var_cf_proxied="true"
|
||||
break
|
||||
;;
|
||||
[Nn]*)
|
||||
var_cf_proxied="false"
|
||||
break
|
||||
;;
|
||||
*) echo "Please answer y or n." ;;
|
||||
esac
|
||||
read -rp "Proxied? (y/n): " answer
|
||||
case "$answer" in
|
||||
[Yy]*)
|
||||
var_cf_proxied="true"
|
||||
break
|
||||
;;
|
||||
[Nn]*)
|
||||
var_cf_proxied="false"
|
||||
break
|
||||
;;
|
||||
*) echo "Please answer y or n." ;;
|
||||
esac
|
||||
done
|
||||
var_cf_ip6_provider="none"
|
||||
while true; do
|
||||
read -rp "Enable IPv6 support? (y/n): " answer
|
||||
case "$answer" in
|
||||
[Yy]*)
|
||||
var_cf_ip6_provider="auto"
|
||||
break
|
||||
;;
|
||||
[Nn]*)
|
||||
var_cf_ip6_provider="none"
|
||||
break
|
||||
;;
|
||||
*) echo "Please answer y or n." ;;
|
||||
esac
|
||||
read -rp "Enable IPv6 support? (y/n): " answer
|
||||
case "$answer" in
|
||||
[Yy]*)
|
||||
var_cf_ip6_provider="auto"
|
||||
break
|
||||
;;
|
||||
[Nn]*)
|
||||
var_cf_ip6_provider="none"
|
||||
break
|
||||
;;
|
||||
*) echo "Please answer y or n." ;;
|
||||
esac
|
||||
done
|
||||
msg_ok "Configured Application"
|
||||
|
||||
@ -84,4 +98,5 @@ customize
|
||||
msg_info "Cleaning up"
|
||||
$STD apt-get -y autoremove
|
||||
$STD apt-get -y autoclean
|
||||
#rm -f "$GO_TARBALL"
|
||||
msg_ok "Cleaned"
|
||||
|
@ -1,77 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Copyright (c) 2021-2025 community-scripts ORG
|
||||
# Author: Omar Minaya
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
# Source: https://github.com/C4illin/ConvertX
|
||||
|
||||
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
|
||||
color
|
||||
verb_ip6
|
||||
catch_errors
|
||||
setting_up_container
|
||||
network_check
|
||||
update_os
|
||||
|
||||
msg_info "Installing Dependencies"
|
||||
$STD apt-get install -y \
|
||||
ffmpeg \
|
||||
jq
|
||||
msg_ok "Installed Dependencies"
|
||||
|
||||
msg_info "Installing ConvertX"
|
||||
curl -fsSL "https://bun.sh/install" | bash
|
||||
ln -sf /root/.bun/bin/bun /usr/local/bin/bun
|
||||
mkdir -p /opt/convertx
|
||||
|
||||
RELEASE=$(curl -fsSL https://api.github.com/repos/C4illin/ConvertX/releases/latest | jq -r .tag_name | sed 's/^v//')
|
||||
curl -fsSL -o "/opt/convertx/ConvertX-${RELEASE}.tar.gz" "https://github.com/C4illin/ConvertX/archive/refs/tags/v${RELEASE}.tar.gz"
|
||||
tar --strip-components=1 -xf "/opt/convertx/ConvertX-${RELEASE}.tar.gz" -C /opt/convertx
|
||||
cd /opt/convertx
|
||||
mkdir -p data
|
||||
bun install
|
||||
|
||||
JWT_SECRET=$(openssl rand -base64 32 | tr -dc 'a-zA-Z0-9' | head -c 32)
|
||||
cat <<EOF >/opt/convertx/.env
|
||||
JWT_SECRET=$JWT_SECRET
|
||||
HTTP_ALLOWED=true
|
||||
PORT=3000
|
||||
EOF
|
||||
msg_ok "Installed ConvertX"
|
||||
|
||||
msg_info "Creating Services"
|
||||
cat <<EOF >/etc/systemd/system/convertx.service
|
||||
[Unit]
|
||||
Description=ConvertX File Converter
|
||||
After=network.target
|
||||
|
||||
[Service]
|
||||
Type=exec
|
||||
WorkingDirectory=/opt/convertx
|
||||
EnvironmentFile=/opt/convertx/.env
|
||||
ExecStart=/root/.bun/bin/bun dev
|
||||
Restart=always
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
EOF
|
||||
systemctl enable -q --now convertx
|
||||
msg_ok "Service Created"
|
||||
|
||||
msg_info "Waiting for SQLite database"
|
||||
for ((COUNT=0; COUNT<60; COUNT++)); do
|
||||
[ -f "/opt/convertx/data/mydb.sqlite" ] && { systemctl restart convertx; exit 0; }
|
||||
sleep 0.5
|
||||
done
|
||||
msg_error "Timed out waiting for database!"
|
||||
exit 1
|
||||
msg_ok "Database created"
|
||||
|
||||
motd_ssh
|
||||
customize
|
||||
|
||||
msg_info "Cleaning up"
|
||||
$STD rm -f /opt/convertx/ConvertX-${RELEASE}.tar.gz
|
||||
$STD apt-get -y autoremove
|
||||
$STD apt-get -y autoclean
|
||||
msg_ok "Cleaned"
|
@ -13,12 +13,9 @@ setting_up_container
|
||||
network_check
|
||||
update_os
|
||||
|
||||
msg_info "Installing Dependencies"
|
||||
#$STD apt-get install -y gnup
|
||||
msg_ok "Installed Dependencies"
|
||||
|
||||
#PHP_VERSION=8.2 PHP_FPM=YES install_php
|
||||
#install_composer
|
||||
# msg_info "Installing Dependencies"
|
||||
# $STD apt-get install -y gnupg2
|
||||
# msg_ok "Installed Dependencies"
|
||||
|
||||
# Example Setting for Test
|
||||
#NODE_MODULE="pnpm@10.1,yarn"
|
||||
@ -26,18 +23,76 @@ msg_ok "Installed Dependencies"
|
||||
#msg_ok "Get Release $RELEASE"
|
||||
#NODE_VERSION="22" NODE_MODULE="yarn" install_node_and_modules
|
||||
|
||||
PG_VERSION="16" install_postgresql
|
||||
#PG_VERSION="15"
|
||||
#MARIADB_VERSION="11.8"
|
||||
#MYSQL_VERSION="8.0"
|
||||
|
||||
#install_postgresql
|
||||
#install_mariadb
|
||||
install_mariadb
|
||||
#install_mysql
|
||||
|
||||
# msg_info "Setup DISTRO env"
|
||||
# DISTRO="$(awk -F'=' '/^VERSION_CODENAME=/{ print $NF }' /etc/os-release)"
|
||||
# msg_ok "Setup DISTRO"
|
||||
|
||||
# echo -e $DISTRO
|
||||
|
||||
# msg_info "Setting up PostgreSQL Repository"
|
||||
# curl -fsSL https://www.postgresql.org/media/keys/ACCC4CF8.asc | gpg --dearmor -o /etc/apt/trusted.gpg.d/postgresql.gpg
|
||||
# echo "deb https://apt.postgresql.org/pub/repos/apt ${DISTRO}-pgdg main" >/etc/apt/sources.list.d/pgdg.list
|
||||
# apt-get update
|
||||
# $STD apt-get install -y postgresql
|
||||
# msg_ok "Set up PostgreSQL Repository"
|
||||
|
||||
# msg_info "Setting up Matrix Server"
|
||||
# curl -fsSL https://packages.matrix.org/debian/matrix-org-archive-keyring.gpg -o /usr/share/keyrings/matrix-org-archive-keyring.gpg
|
||||
# echo "deb [signed-by=/usr/share/keyrings/matrix-org-archive-keyring.gpg] https://packages.matrix.org/debian ${DISTRO} main" >/etc/apt/sources.list.d/matrix-org.list
|
||||
# apt-get update
|
||||
# $STD apt-get install -y matrix-synapse-py3
|
||||
# msg_info "Set up Matrix Server"
|
||||
|
||||
# msg_info "Setup EVCC"
|
||||
# curl -fsSL https://dl.evcc.io/public/evcc/stable/gpg.EAD5D0E07B0EC0FD.key | gpg --dearmor -o /etc/apt/keyrings/evcc-stable.gpg
|
||||
# echo "deb [signed-by=/etc/apt/keyrings/evcc-stable.gpg] https://dl.evcc.io/public/evcc/stable/deb/debian ${DISTRO} main" >/etc/apt/sources.list.d/evcc-stable.list
|
||||
# apt-get update
|
||||
# $STD apt-get install -y evcc
|
||||
# msg_ok "Setup EVCC"
|
||||
|
||||
# msg_info "Setup PHP"
|
||||
# curl -fsSL https://packages.sury.org/php/apt.gpg -o /usr/share/keyrings/deb.sury.org-php.gpg
|
||||
# echo "deb [signed-by=/usr/share/keyrings/deb.sury.org-php.gpg] https://packages.sury.org/php/ ${DISTRO} main" >/etc/apt/sources.list.d/php.list
|
||||
# apt-get update
|
||||
# $STD apt-get install -y php
|
||||
# msg_ok "Setup PHP"
|
||||
|
||||
# msg_info "Adding Adoptium repository"
|
||||
# curl -fsSL https://packages.adoptium.net/artifactory/api/gpg/key/public | gpg --dearmor -o /etc/apt/trusted.gpg.d/adoptium.gpg
|
||||
# echo "deb [arch=amd64 signed-by=/etc/apt/trusted.gpg.d/adoptium.gpg] https://packages.adoptium.net/artifactory/deb ${DISTRO} main" > /etc/apt/sources.list.d/adoptium.list
|
||||
# apt-get update
|
||||
# $STD apt-get install -y temurin-11-jdk
|
||||
# msg_ok "Adoptium installed"
|
||||
|
||||
# msg_info "Adding Nginx repository"
|
||||
# curl -fsSL https://nginx.org/keys/nginx_signing.key | gpg --dearmor -o /usr/share/keyrings/nginx-archive-keyring.gpg
|
||||
# echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] http://nginx.org/packages/debian ${DISTRO} nginx" > /etc/apt/sources.list.d/nginx.list
|
||||
# apt-get update
|
||||
# $STD apt-get install -y nginx=1.26.3*
|
||||
# msg_ok "Nginx installed"
|
||||
|
||||
# msg_info "Adding MongoDB repository"
|
||||
# curl -fsSL https://www.mongodb.org/static/pgp/server-7.0.asc | gpg --dearmor -o /usr/share/keyrings/mongodb-server-7.0.gpg
|
||||
# echo "deb [signed-by=/usr/share/keyrings/mongodb-server-7.0.gpg] http://repo.mongodb.org/apt/debian ${DISTRO}/mongodb-org/7.0 main" > /etc/apt/sources.list.d/mongodb-org-7.0.list
|
||||
# apt-get update
|
||||
# $STD apt-get install -y mongodb-org
|
||||
# msg_ok "MongoDB installed"
|
||||
|
||||
# msg_info "Adding SFTPGo repository"
|
||||
# curl -fsSL https://ftp.osuosl.org/pub/sftpgo/apt/gpg.key | gpg --dearmor -o /usr/share/keyrings/sftpgo-archive-keyring.gpg
|
||||
# echo "deb [signed-by=/usr/share/keyrings/sftpgo-archive-keyring.gpg] https://ftp.osuosl.org/pub/sftpgo/apt ${DISTRO} main" > /etc/apt/sources.list.d/sftpgo.list
|
||||
# apt-get update
|
||||
# $STD apt-get install -y sftpgo
|
||||
# msg_ok "SFTPGo installed"
|
||||
|
||||
motd_ssh
|
||||
customize
|
||||
|
||||
@ -45,12 +100,3 @@ msg_info "Cleaning up"
|
||||
$STD apt-get -y autoremove
|
||||
$STD apt-get -y autoclean
|
||||
msg_ok "Cleaned"
|
||||
|
||||
# read -p "Remove this script? <y/N> " prompt
|
||||
# if [[ "${prompt,,}" =~ ^(y|yes)$ ]]; then
|
||||
# pct stop "$CTID"
|
||||
# pct remove "$CTID"
|
||||
# msg_ok "Removed this script"
|
||||
# else
|
||||
# msg_warn "Did not remove this script"
|
||||
# fi
|
||||
|
28
install/freepbx-install.sh
Normal file
28
install/freepbx-install.sh
Normal file
@ -0,0 +1,28 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Copyright (c) 2021-2025 community-scripts ORG
|
||||
# Author: Arian Nasr (arian-nasr)
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVED/raw/main/LICENSE
|
||||
# Source: https://www.freepbx.org/
|
||||
|
||||
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
|
||||
color
|
||||
verb_ip6
|
||||
catch_errors
|
||||
setting_up_container
|
||||
network_check
|
||||
update_os
|
||||
|
||||
msg_info "Installing FreePBX"
|
||||
cd /tmp
|
||||
wget https://github.com/FreePBX/sng_freepbx_debian_install/raw/master/sng_freepbx_debian_install.sh -O /tmp/sng_freepbx_debian_install.sh
|
||||
bash /tmp/sng_freepbx_debian_install.sh
|
||||
msg_ok "Installed FreePBX"
|
||||
|
||||
motd_ssh
|
||||
customize
|
||||
|
||||
msg_info "Cleaning up"
|
||||
$STD apt-get -y autoremove
|
||||
$STD apt-get -y autoclean
|
||||
msg_ok "Cleaned"
|
@ -1,211 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Copyright (c) 2021-2025 community-scripts ORG
|
||||
# Author: aliaksei135
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
# Source: https://github.com/arpanghosh8453/garmin-grafana
|
||||
|
||||
# Import Functions und Setup
|
||||
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
|
||||
color
|
||||
verb_ip6
|
||||
catch_errors
|
||||
setting_up_container
|
||||
network_check
|
||||
update_os
|
||||
|
||||
# Installing Dependencies
|
||||
msg_info "Installing Dependencies"
|
||||
$STD apt-get install -y \
|
||||
apt-transport-https \
|
||||
software-properties-common \
|
||||
lsb-base \
|
||||
lsb-release \
|
||||
python3 \
|
||||
python3-requests \
|
||||
python3-dotenv
|
||||
setup_uv
|
||||
msg_ok "Installed Dependencies"
|
||||
|
||||
msg_info "Setting up InfluxDB Repository"
|
||||
curl -fsSL "https://repos.influxdata.com/influxdata-archive_compat.key" | gpg --dearmor >/etc/apt/trusted.gpg.d/influxdata-archive_compat.gpg
|
||||
echo "deb [signed-by=/etc/apt/trusted.gpg.d/influxdata-archive_compat.gpg] https://repos.influxdata.com/debian stable main" >/etc/apt/sources.list.d/influxdata.list
|
||||
msg_ok "Set up InfluxDB Repository"
|
||||
|
||||
# garmin-grafana recommends influxdb v1
|
||||
# this install chronograf, which is the UI for influxdb. this might be overkill?
|
||||
msg_info "Installing InfluxDB"
|
||||
$STD apt-get update
|
||||
$STD apt-get install -y influxdb
|
||||
curl -fsSL "https://dl.influxdata.com/chronograf/releases/chronograf_1.10.7_amd64.deb" -o "$(basename "https://dl.influxdata.com/chronograf/releases/chronograf_1.10.7_amd64.deb")"
|
||||
$STD dpkg -i chronograf_1.10.7_amd64.deb
|
||||
msg_ok "Installed InfluxDB"
|
||||
|
||||
msg_info "Setting up InfluxDB"
|
||||
$STD sed -i 's/# index-version = "inmem"/index-version = "tsi1"/' /etc/influxdb/influxdb.conf
|
||||
|
||||
INFLUXDB_USER="garmin_grafana_user"
|
||||
INFLUXDB_PASSWORD=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | cut -c1-13)
|
||||
INFLUXDB_NAME="GarminStats"
|
||||
$STD influx -execute "CREATE DATABASE ${INFLUXDB_NAME}"
|
||||
$STD influx -execute "CREATE USER ${INFLUXDB_USER} WITH PASSWORD '${INFLUXDB_PASSWORD}'"
|
||||
$STD influx -execute "GRANT ALL ON ${INFLUXDB_NAME} TO ${INFLUXDB_USER}"
|
||||
# Start the service
|
||||
$STD systemctl enable --now influxdb
|
||||
msg_ok "Set up InfluxDB"
|
||||
|
||||
msg_info "Setting up Grafana Repository"
|
||||
curl -fsSL "https://apt.grafana.com/gpg.key" -o "/usr/share/keyrings/grafana.key"
|
||||
sh -c 'echo "deb [signed-by=/usr/share/keyrings/grafana.key] https://apt.grafana.com stable main" > /etc/apt/sources.list.d/grafana.list'
|
||||
msg_ok "Set up Grafana Repository"
|
||||
|
||||
msg_info "Installing Grafana"
|
||||
$STD apt-get update
|
||||
$STD apt-get install -y grafana
|
||||
systemctl start grafana-server
|
||||
systemctl daemon-reload
|
||||
systemctl enable --now -q grafana-server.service
|
||||
# This avoids the "database is locked" error when running the grafana-cli
|
||||
sleep 20
|
||||
msg_ok "Installed Grafana"
|
||||
|
||||
msg_info "Setting up Grafana"
|
||||
GRAFANA_USER="admin"
|
||||
GRAFANA_PASS=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | cut -c1-13)
|
||||
$STD grafana-cli admin reset-admin-password "${GRAFANA_PASS}"
|
||||
$STD grafana-cli plugins install marcusolsson-hourly-heatmap-panel
|
||||
$STD systemctl restart grafana-server
|
||||
# Output credentials to file
|
||||
{
|
||||
echo "Grafana Credentials"
|
||||
echo "Grafana User: ${GRAFANA_USER}"
|
||||
echo "Grafana Password: ${GRAFANA_PASS}"
|
||||
} >>~/garmin-grafana.creds
|
||||
msg_ok "Set up Grafana"
|
||||
|
||||
# Setup App
|
||||
msg_info "Installing garmin-grafana"
|
||||
RELEASE=$(curl -fsSL https://api.github.com/repos/arpanghosh8453/garmin-grafana/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
|
||||
curl -fsSL -o "${RELEASE}.zip" "https://github.com/arpanghosh8453/garmin-grafana/archive/refs/tags/${RELEASE}.zip"
|
||||
unzip -q "${RELEASE}.zip"
|
||||
# Remove the v prefix to RELEASE if it exists
|
||||
if [[ "${RELEASE}" == v* ]]; then
|
||||
RELEASE="${RELEASE:1}"
|
||||
fi
|
||||
mv "garmin-grafana-${RELEASE}/" "/opt/garmin-grafana"
|
||||
mkdir -p /opt/garmin-grafana/.garminconnect
|
||||
$STD uv sync --locked --project /opt/garmin-grafana/
|
||||
# Setup grafana provisioning configs
|
||||
# shellcheck disable=SC2016
|
||||
sed -i 's/\${DS_GARMIN_STATS}/garmin_influxdb/g' /opt/garmin-grafana/Grafana_Dashboard/Garmin-Grafana-Dashboard.json
|
||||
sed -i 's/influxdb:8086/localhost:8086/' /opt/garmin-grafana/Grafana_Datasource/influxdb.yaml
|
||||
sed -i "s/influxdb_user/${INFLUXDB_USER}/" /opt/garmin-grafana/Grafana_Datasource/influxdb.yaml
|
||||
sed -i "s/influxdb_secret_password/${INFLUXDB_PASSWORD}/" /opt/garmin-grafana/Grafana_Datasource/influxdb.yaml
|
||||
sed -i "s/GarminStats/${INFLUXDB_NAME}/" /opt/garmin-grafana/Grafana_Datasource/influxdb.yaml
|
||||
# Copy across grafana data
|
||||
cp -r /opt/garmin-grafana/Grafana_Datasource/* /etc/grafana/provisioning/datasources
|
||||
cp -r /opt/garmin-grafana/Grafana_Dashboard/* /etc/grafana/provisioning/dashboards
|
||||
echo "${RELEASE}" >"/opt/garmin-grafana_version.txt"
|
||||
msg_ok "Installed garmin-grafana"
|
||||
|
||||
msg_info "Setting up garmin-grafana"
|
||||
# Check if using Chinese garmin servers
|
||||
read -rp "Are you using Garmin in mainland China? (y/N): " prompt
|
||||
if [[ "${prompt,,}" =~ ^(y|yes|Y)$ ]]; then
|
||||
GARMIN_CN="True"
|
||||
else
|
||||
GARMIN_CN="False"
|
||||
fi
|
||||
|
||||
cat <<EOF >/opt/garmin-grafana/.env
|
||||
INFLUXDB_HOST=localhost
|
||||
INFLUXDB_PORT=8086
|
||||
INFLUXDB_ENDPOINT_IS_HTTP=True
|
||||
INFLUXDB_USERNAME=${INFLUXDB_USER}
|
||||
INFLUXDB_PASSWORD=${INFLUXDB_PASSWORD}
|
||||
INFLUXDB_DATABASE=${INFLUXDB_NAME}
|
||||
GARMIN_IS_CN=${GARMIN_CN}
|
||||
TOKEN_DIR=/opt/garmin-grafana/.garminconnect
|
||||
EOF
|
||||
|
||||
# garmin-grafana usually prompts the user for email and password (and MFA) on first run,
|
||||
# then stores a refreshable token. We try to avoid storing user credentials in the env vars
|
||||
if [ -z "$(ls -A /opt/garmin-grafana/.garminconnect)" ]; then
|
||||
read -r -p "Please enter your Garmin Connect Email: " GARMIN_EMAIL
|
||||
read -r -p "Please enter your Garmin Connect Password (this is used to generate a token and NOT stored): " GARMIN_PASSWORD
|
||||
read -r -p "Please enter your MFA Code (if applicable, leave blank if not): " GARMIN_MFA
|
||||
# Run the script once to prompt for credential
|
||||
msg_info "Creating Garmin credentials, this will timeout in 60 seconds"
|
||||
timeout 60s uv run --env-file /opt/garmin-grafana/.env --project /opt/garmin-grafana/ /opt/garmin-grafana/src/garmin_grafana/garmin_fetch.py <<EOF
|
||||
${GARMIN_EMAIL}
|
||||
${GARMIN_PASSWORD}
|
||||
${GARMIN_MFA}
|
||||
EOF
|
||||
unset GARMIN_EMAIL
|
||||
unset GARMIN_PASSWORD
|
||||
unset GARMIN_MFA
|
||||
# Check if there is anything in the token dir now
|
||||
if [ -z "$(ls -A /opt/garmin-grafana/.garminconnect)" ]; then
|
||||
msg_error "Failed to create a token"
|
||||
exit
|
||||
fi
|
||||
fi
|
||||
|
||||
$STD systemctl restart grafana-server
|
||||
|
||||
# Add a script to make the manual bulk data import easier
|
||||
cat <<EOF >~/bulk-import.sh
|
||||
#!/usr/bin/env bash
|
||||
if [[ -z \$1 ]]; then
|
||||
echo "Usage: \$0 <start_date> <end_date>"
|
||||
echo "Example: \$0 2023-01-01 2023-01-31"
|
||||
echo "Date format: YYYY-MM-DD"
|
||||
echo "This will import data from the start_date to the end_date (inclusive)"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
START_DATE="\$1"
|
||||
if [[ -z \$2 ]]; then
|
||||
END_DATE="\$(date +%Y-%m-%d)"
|
||||
echo "No end date provided, using today as end date: \${END_DATE}"
|
||||
else
|
||||
END_DATE="\$2"
|
||||
fi
|
||||
|
||||
# Stop the service if running
|
||||
systemctl stop garmin-grafana
|
||||
|
||||
MANUAL_START_DATE="\${START_DATE}" MANUAL_END_DATE="\${END_DATE}" uv run --env-file /opt/garmin-grafana/.env --project /opt/garmin-grafana/ /opt/garmin-grafana/src/garmin_grafana/garmin_fetch.py
|
||||
|
||||
# Restart the service
|
||||
systemctl start garmin-grafana
|
||||
EOF
|
||||
chmod +x ~/bulk-import.sh
|
||||
msg_ok "Set up garmin-grafana"
|
||||
|
||||
msg_info "Creating Service"
|
||||
cat <<EOF >/etc/systemd/system/garmin-grafana.service
|
||||
[Unit]
|
||||
Description=garmin-grafana Service
|
||||
After=network.target
|
||||
|
||||
[Service]
|
||||
ExecStart=uv run --project /opt/garmin-grafana/ /opt/garmin-grafana/src/garmin_grafana/garmin_fetch.py
|
||||
Restart=always
|
||||
EnvironmentFile=/opt/garmin-grafana/.env
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
EOF
|
||||
systemctl enable -q --now garmin-grafana
|
||||
msg_ok "Created Service"
|
||||
|
||||
motd_ssh
|
||||
customize
|
||||
|
||||
# Cleanup
|
||||
msg_info "Cleaning up"
|
||||
rm -f "${RELEASE}".zip
|
||||
$STD apt-get -y autoremove
|
||||
$STD apt-get -y autoclean
|
||||
msg_ok "Cleaned"
|
@ -1,70 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Copyright (c) 2021-2025 community-scripts ORG
|
||||
# Author: CrazyWolf13
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
# Source: https://github.com/arunavo4/gitea-mirror
|
||||
|
||||
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
|
||||
color
|
||||
verb_ip6
|
||||
catch_errors
|
||||
setting_up_container
|
||||
network_check
|
||||
update_os
|
||||
|
||||
msg_info "Installing dependencies"
|
||||
$STD apt-get install -y
|
||||
build-essential \
|
||||
openssl \
|
||||
sqlite3 \
|
||||
unzip
|
||||
msg_ok "Installed Dependencies"
|
||||
|
||||
msg_info "Installing Bun"
|
||||
export BUN_INSTALL=/opt/bun
|
||||
curl -fsSL https://bun.sh/install | bash
|
||||
ln -sf /opt/bun/bin/bun /usr/local/bin/bun
|
||||
ln -sf /opt/bun/bin/bun /usr/local/bin/bunx
|
||||
msg_ok "Installed Bun"
|
||||
|
||||
fetch_and_deploy_gh_release "arunavo4/gitea-mirror"
|
||||
|
||||
msg_info "Installing Gite-Mirror"
|
||||
cd /opt/gitea-mirror
|
||||
bun install
|
||||
bun run build
|
||||
mkdir -p /opt/gitea-mirror-data/
|
||||
bun run manage-db init
|
||||
msg_ok "Installed Gitea-Mirror"
|
||||
|
||||
msg_info "Creating Services"
|
||||
JWT_SECRET=$(openssl rand -hex 32)
|
||||
cat <<EOF >/etc/systemd/system/homarr.service
|
||||
[Unit]
|
||||
Description=Gitea Mirror
|
||||
After=network.target
|
||||
[Service]
|
||||
Type=simple
|
||||
WorkingDirectory=/opt/gitea-mirror
|
||||
ExecStart=/usr/local/bin/bun dist/server/entry.mjs
|
||||
Restart=on-failure
|
||||
RestartSec=10
|
||||
Environment=NODE_ENV=production
|
||||
Environment=HOST=0.0.0.0
|
||||
Environment=PORT=4321
|
||||
Environment=DATABASE_URL=file:/opt/gitea-mirror-data/gitea-mirror.db
|
||||
Environment=JWT_SECRET=${JWT_SECRET}
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
EOF
|
||||
systemctl enable -q --now gite-mirror
|
||||
msg_ok "Created Service"
|
||||
|
||||
motd_ssh
|
||||
customize
|
||||
|
||||
msg_info "Cleaning up"
|
||||
$STD apt-get -y autoremove
|
||||
$STD apt-get -y autoclean
|
||||
msg_ok "Cleaned"
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user