Compare commits

..

23 Commits

Author SHA1 Message Date
e8efb9e435 Aktualisieren von qbittorrent-exporter.sh 2025-12-18 17:18:09 +01:00
9bd87ddd38 Aktualisieren von qbittorrent-exporter.sh 2025-12-18 17:10:55 +01:00
f7dad51d98 Add qbittorrent-exporter (addon) 2025-12-17 20:40:52 +00:00
6d26dc2043 Update CHANGELOG.md (#10088)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-12-17 15:35:51 +00:00
6bdeddee37 Fix release binary package fetching (#10055) 2025-12-17 16:35:32 +01:00
25baf6c809 Update CHANGELOG.md (#10087)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-12-17 15:35:21 +00:00
f42a7becf5 Update CHANGELOG.md (#10086)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-12-17 15:35:07 +00:00
acdb3b5908 Fixes (#10056) 2025-12-17 16:34:53 +01:00
cb13f5de3c Update CHANGELOG.md (#10085)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-12-17 15:34:43 +00:00
c4afe3349b Refactor (#10057) 2025-12-17 16:34:36 +01:00
dcc4b316a9 Refactor (#10058) 2025-12-17 16:34:24 +01:00
7a7c9f9a22 Refactor (#10059) 2025-12-17 16:34:09 +01:00
c1c223ea45 Update CHANGELOG.md (#10084)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-12-17 15:31:59 +00:00
b3629b47da Refactor (#10060) 2025-12-17 16:31:39 +01:00
82cdcf7bfe Update CHANGELOG.md (#10083)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-12-17 15:31:30 +00:00
a823241d96 Refactor: Reactive-Resume (#10062)
* Refactor

* Update
2025-12-17 16:31:17 +01:00
e64c07e44c Update CHANGELOG.md (#10082)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-12-17 15:31:07 +00:00
21f7914294 Fixes (#10064) 2025-12-17 16:30:56 +01:00
30056854c9 Refactor (#10065) 2025-12-17 16:30:41 +01:00
15a061f976 Update CHANGELOG.md (#10081)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-12-17 15:28:12 +00:00
b279888e96 Update CHANGELOG.md (#10080)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-12-17 15:27:51 +00:00
c9dd003445 Fixes (#10066) 2025-12-17 16:27:40 +01:00
39821677f0 Refactor (#10069) 2025-12-17 16:27:16 +01:00
25 changed files with 433 additions and 229 deletions

View File

@ -18,6 +18,7 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit
- #### 🐞 Bug Fixes
- Semaphore: Fix release binary package fetching [@tremor021](https://github.com/tremor021) ([#10055](https://github.com/community-scripts/ProxmoxVE/pull/10055))
- update github repo for endurain [@johanngrobe](https://github.com/johanngrobe) ([#10074](https://github.com/community-scripts/ProxmoxVE/pull/10074))
- #### ✨ New Features
@ -25,6 +26,19 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit
- use setup_hwaccel for robust hardware acceleration [@MickLesk](https://github.com/MickLesk) ([#10054](https://github.com/community-scripts/ProxmoxVE/pull/10054))
- add hardware acceleration support for 17 additional apps [@MickLesk](https://github.com/MickLesk) ([#10061](https://github.com/community-scripts/ProxmoxVE/pull/10061))
- #### 🔧 Refactor
- Telegraf: Small refactor [@tremor021](https://github.com/tremor021) ([#10056](https://github.com/community-scripts/ProxmoxVE/pull/10056))
- Refactor: Salt [@tremor021](https://github.com/tremor021) ([#10057](https://github.com/community-scripts/ProxmoxVE/pull/10057))
- Refactor: Resilio Sync [@tremor021](https://github.com/tremor021) ([#10058](https://github.com/community-scripts/ProxmoxVE/pull/10058))
- Refactor: Reitti [@tremor021](https://github.com/tremor021) ([#10059](https://github.com/community-scripts/ProxmoxVE/pull/10059))
- Refactor: Redis [@tremor021](https://github.com/tremor021) ([#10060](https://github.com/community-scripts/ProxmoxVE/pull/10060))
- Refactor: Reactive-Resume [@tremor021](https://github.com/tremor021) ([#10062](https://github.com/community-scripts/ProxmoxVE/pull/10062))
- Refactor: RDTClient [@tremor021](https://github.com/tremor021) ([#10064](https://github.com/community-scripts/ProxmoxVE/pull/10064))
- Refactor: RabbitMQ [@tremor021](https://github.com/tremor021) ([#10065](https://github.com/community-scripts/ProxmoxVE/pull/10065))
- Qdrant: Code cleanup [@tremor021](https://github.com/tremor021) ([#10066](https://github.com/community-scripts/ProxmoxVE/pull/10066))
- Refactor: Pterodactyl Wings [@tremor021](https://github.com/tremor021) ([#10069](https://github.com/community-scripts/ProxmoxVE/pull/10069))
## 2025-12-16
### 🆕 New Scripts

View File

@ -23,29 +23,23 @@ function update_script() {
header_info
check_container_storage
check_container_resources
if [[ ! -f /usr/local/bin/wings ]]; then
if [[ ! -x /usr/local/bin/wings ]]; then
msg_error "No ${APP} Installation Found!"
exit
fi
RELEASE=$(curl -fsSL https://api.github.com/repos/pterodactyl/wings/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
if check_for_gh_release "wings" "pterodactyl/wings"; then
msg_info "Stopping Service"
systemctl stop wings
msg_ok "Stopped Service"
msg_info "Updating ${APP} to v${RELEASE}"
rm /usr/local/bin/wings
curl -fsSL "https://github.com/pterodactyl/wings/releases/download/v${RELEASE}/wings_linux_amd64" -o "/usr/local/bin/wings"
chmod u+x /usr/local/bin/wings
echo "${RELEASE}" >/opt/${APP}_version.txt
msg_ok "Updated $APP to v${RELEASE}"
fetch_and_deploy_gh_release "wings" "pterodactyl/wings" "singlefile" "latest" "/usr/local/bin" "wings_linux_amd64"
msg_info "Starting Service"
systemctl start wings
msg_ok "Started Service"
msg_ok "Updated successfully!"
else
msg_ok "No update required. ${APP} is already at v${RELEASE}"
fi
exit
}

View File

@ -29,16 +29,11 @@ function update_script() {
fi
if grep -q "dl.cloudsmith.io" /etc/apt/sources.list.d/rabbitmq.list; then
rm -f /etc/apt/sources.list.d/rabbitmq.list
cat <<EOF >/etc/apt/sources.list.d/rabbitmq.list
## Modern Erlang/OTP releases
deb [arch=amd64 signed-by=/usr/share/keyrings/com.rabbitmq.team.gpg] https://deb1.rabbitmq.com/rabbitmq-erlang/debian/trixie trixie main
deb [arch=amd64 signed-by=/usr/share/keyrings/com.rabbitmq.team.gpg] https://deb2.rabbitmq.com/rabbitmq-erlang/debian/trixie trixie main
## Provides modern RabbitMQ releases
deb [arch=amd64 signed-by=/usr/share/keyrings/com.rabbitmq.team.gpg] https://deb1.rabbitmq.com/rabbitmq-server/debian/trixie trixie main
deb [arch=amd64 signed-by=/usr/share/keyrings/com.rabbitmq.team.gpg] https://deb2.rabbitmq.com/rabbitmq-server/debian/trixie trixie main
EOF
$STD apt update
setup_deb822_repo \
"rabbitmq" \
"https://keys.openpgp.org/vks/v1/by-fingerprint/0A9AF2115F4687BD29803A206B73A36E6026DFCA" \
"https://deb1.rabbitmq.com/rabbitmq-server/debian/trixie" \
"trixie"
fi
msg_info "Stopping Service"

View File

@ -41,7 +41,7 @@ function update_script() {
cp -R /opt/rdtc-backup/appsettings.json /opt/rdtc/
if dpkg-query -W dotnet-sdk-8.0 >/dev/null 2>&1; then
$STD apt remove --purge -y dotnet-sdk-8.0
$STD apt install -y dotnet-sdk-9.0
$STD apt install -y aspnetcore-runtime-9.0
fi
rm -rf /opt/rdtc-backup

View File

@ -33,12 +33,11 @@ function update_script() {
systemctl stop Reactive-Resume
msg_ok "Stopped services"
cp /opt/"$APP"/.env /opt/rxresume.env
cp /opt/Reactive-Resume/.env /opt/rxresume.env
fetch_and_deploy_gh_release "Reactive-Resume" "lazy-media/Reactive-Resume" "tarball" "latest" "/opt/Reactive-Resume"
msg_info "Updating $APP"
cd /opt/"$APP"
msg_info "Updating Reactive-Resume"
cd /opt/Reactive-Resume
export PUPPETEER_SKIP_DOWNLOAD="true"
export NEXT_TELEMETRY_DISABLED=1
export CI="true"
@ -46,8 +45,8 @@ function update_script() {
$STD pnpm install --frozen-lockfile
$STD pnpm run build
$STD pnpm run prisma:generate
mv /opt/rxresume.env /opt/"$APP"/.env
msg_ok "Updated $APP"
mv /opt/rxresume.env /opt/Reactive-Resume/.env
msg_ok "Updated Reactive-Resume"
msg_info "Updating Minio"
systemctl stop minio

View File

@ -27,9 +27,10 @@ function update_script() {
msg_error "No ${APP} Installation Found!"
exit
fi
msg_info "Updating $APP LXC"
$STD apt update
$STD apt -y upgrade
$STD apt upgrade -y
msg_ok "Updated $APP LXC"
msg_ok "Updated successfully!"
exit

View File

@ -27,9 +27,9 @@ function update_script() {
msg_error "No ${APP} Installation Found!"
exit
fi
msg_info "Updating ${APP} LXC"
msg_info "Updating Resilio Sync"
$STD apt update
$STD apt -y upgrade
$STD apt upgrade -y
msg_ok "Updated successfully!"
exit
}

View File

@ -29,16 +29,14 @@ function update_script() {
exit
fi
RELEASE=$(curl -fsSL https://api.github.com/repos/saltstack/salt/releases/latest | jq -r .tag_name | sed 's/^v//')
if [[ ! -f /~.salt ]] || [[ "${RELEASE}" != "$(cat /~.salt)" ]]; then
msg_info "Updating $APP to ${RELEASE}"
RELEASE=$(get_latest_github_release "saltstack/salt")
if check_for_gh_release "salt" "saltstack/salt"; then
msg_info "Updating Salt"
sed -i "s/^\(Pin: version \).*/\1${RELEASE}/" /etc/apt/preferences.d/salt-pin-1001
$STD apt update
$STD apt upgrade -y
echo "${RELEASE}" >/~.salt
msg_ok "Updated successfully!"
else
msg_ok "${APP} is already up to date (${RELEASE})"
fi
exit
}

View File

@ -33,7 +33,7 @@ function update_script() {
systemctl stop semaphore
msg_ok "Stopped Service"
fetch_and_deploy_gh_release "semaphore" "semaphoreui/semaphore" "binary"
fetch_and_deploy_gh_release "semaphore" "semaphoreui/semaphore" "binary" "latest" "/opt/semaphore" "semaphore_*_linux_amd64.deb"
msg_info "Starting Service"
systemctl start semaphore

View File

@ -34,7 +34,7 @@ function update_script() {
msg_info "Updating Telegraf"
$STD apt update
$STD apt upgrade telegraf -y
$STD apt upgrade -y telegraf
msg_ok "Updated Telegraf"
msg_info "Starting Service"

View File

@ -12,7 +12,7 @@
"documentation": "https://pterodactyl.io/wings/1.0/installing.html",
"website": "https://pterodactyl.io",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/pterodactyl.webp",
"config_path": "",
"config_path": "/etc/pterodactyl/config.yml",
"description": "Pterodactyl Wings is Pterodactyl's server control plane, built for the rapidly changing gaming industry and designed to be highly performant and secure. Wings provides an HTTP API allowing you to interface directly with running server instances, fetch server logs, generate backups, and control all aspects of the server lifecycle.",
"install_methods": [
{

View File

@ -0,0 +1,46 @@
{
"name": "qbittorrent Exporter",
"slug": "qbittorrent-exporter",
"categories": [
9
],
"date_created": "2025-11-21",
"type": "addon",
"updateable": true,
"privileged": false,
"interface_port": 8090,
"documentation": "https://github.com/martabal/qbittorrent-exporter",
"website": "https://github.com/martabal/qbittorrent-exporter",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/qbittorrent.webp",
"config_path": "/opt/qbittorrent-exporter.env",
"description": "A fast and lightweight prometheus exporter for qBittorrent ",
"install_methods": [
{
"type": "default",
"script": "tools/addon/qbittorrent-exporter.sh",
"resources": {
"cpu": null,
"ram": null,
"hdd": null,
"os": null,
"version": null
}
},
{
"type": "alpine",
"script": "tools/addon/qbittorrent-exporter.sh",
"resources": {
"cpu": null,
"ram": null,
"hdd": null,
"os": null,
"version": null
}
}
],
"default_credentials": {
"username": null,
"password": null
},
"notes": []
}

View File

@ -21,13 +21,8 @@ $STD sh <(curl -fsSL https://get.docker.com)
systemctl enable -q --now docker
msg_ok "Installed Docker"
msg_info "Installing Pterodactyl Wings"
RELEASE=$(curl -fsSL https://api.github.com/repos/pterodactyl/wings/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
curl -fsSL "https://github.com/pterodactyl/wings/releases/download/v${RELEASE}/wings_linux_amd64" -o "/usr/local/bin/wings"
chmod u+x /usr/local/bin/wings
fetch_and_deploy_gh_release "wings" "pterodactyl/wings" "singlefile" "latest" "/usr/local/bin" "wings_linux_amd64"
mkdir -p /etc/pterodactyl
echo "${RELEASE}" >/opt/${APPLICATION}_version.txt
msg_ok "Installed Pterodactyl Wings"
msg_info "Creating Service"
cat <<EOF >/etc/systemd/system/wings.service

View File

@ -16,13 +16,12 @@ update_os
fetch_and_deploy_gh_release "qdrant" "qdrant/qdrant" "binary" "latest" "/usr/bin/qdrant"
msg_info "Creating Qdrant Configuration"
mkdir -p /var/lib/qdrant/storage
mkdir -p /var/lib/qdrant/snapshots
mkdir -p /etc/qdrant
mkdir -p /var/lib/qdrant/{storage,snapshots}
chown -R root:root /var/lib/qdrant
chmod -R 755 /var/lib/qdrant
cat >/etc/qdrant/config.yaml <<EOF
cat <<EOF >/etc/qdrant/config.yaml
log_level: INFO
storage:
@ -38,7 +37,7 @@ EOF
msg_ok "Created Qdrant Configuration"
msg_info "Creating Qdrant Service"
cat >/etc/systemd/system/qdrant.service <<EOF
cat <<EOF >/etc/systemd/system/qdrant.service
[Unit]
Description=Qdrant Vector Search Engine
After=network-online.target

View File

@ -15,51 +15,34 @@ network_check
update_os
msg_info "Installing Dependencies"
$STD apt install -y \
lsb-release \
apt-transport-https \
make
$STD apt install -y apt-transport-https
msg_ok "Installed Dependencies"
msg_info "Adding RabbitMQ signing key"
curl -fsSL "https://keys.openpgp.org/vks/v1/by-fingerprint/0A9AF2115F4687BD29803A206B73A36E6026DFCA" | gpg --dearmor >/usr/share/keyrings/com.rabbitmq.team.gpg
msg_ok "Signing keys added"
setup_deb822_repo \
"rabbitmq" \
"https://keys.openpgp.org/vks/v1/by-fingerprint/0A9AF2115F4687BD29803A206B73A36E6026DFCA" \
"https://deb1.rabbitmq.com/rabbitmq-server/debian/trixie" \
"trixie"
msg_info "Adding RabbitMQ repository"
cat <<EOF >/etc/apt/sources.list.d/rabbitmq.list
## Modern Erlang/OTP releases
deb [arch=amd64 signed-by=/usr/share/keyrings/com.rabbitmq.team.gpg] https://deb1.rabbitmq.com/rabbitmq-erlang/debian/bookworm bookworm main
deb [arch=amd64 signed-by=/usr/share/keyrings/com.rabbitmq.team.gpg] https://deb2.rabbitmq.com/rabbitmq-erlang/debian/bookworm bookworm main
msg_info "Setting up RabbitMQ"
$STD apt install -y \
erlang-base erlang-asn1 erlang-crypto erlang-eldap erlang-ftp \
erlang-inets erlang-mnesia erlang-os-mon erlang-parsetools \
erlang-public-key erlang-runtime-tools erlang-snmp erlang-ssl \
erlang-syntax-tools erlang-tftp erlang-tools erlang-xmerl
$STD apt install -y --fix-missing rabbitmq-server
msg_ok "Setup RabbitMQ "
## Provides modern RabbitMQ releases
deb [arch=amd64 signed-by=/usr/share/keyrings/com.rabbitmq.team.gpg] https://deb1.rabbitmq.com/rabbitmq-server/debian/bookworm bookworm main
deb [arch=amd64 signed-by=/usr/share/keyrings/com.rabbitmq.team.gpg] https://deb2.rabbitmq.com/rabbitmq-server/debian/bookworm bookworm main
EOF
msg_ok "RabbitMQ repository added"
msg_info "Updating package list"
$STD apt update -y
msg_ok "Package list updated"
msg_info "Installing Erlang & RabbitMQ server"
$STD apt install -y erlang-base \
erlang-asn1 erlang-crypto erlang-eldap erlang-ftp erlang-inets \
erlang-mnesia erlang-os-mon erlang-parsetools erlang-public-key \
erlang-runtime-tools erlang-snmp erlang-ssl \
erlang-syntax-tools erlang-tftp erlang-tools erlang-xmerl \
rabbitmq-server
msg_ok "RabbitMQ server installed"
msg_info "Starting RabbitMQ service"
msg_info "Starting Service"
systemctl enable -q --now rabbitmq-server
msg_ok "RabbitMQ service started"
msg_ok "Started Service"
msg_info "Enabling RabbitMQ management plugin"
msg_info "Enabling RabbitMQ Management Plugin"
$STD rabbitmq-plugins enable rabbitmq_management
$STD rabbitmqctl enable_feature_flag all
msg_ok "RabbitMQ management plugin enabled"
msg_ok "Enabled RabbitMQ Management Plugin"
msg_info "Create User"
msg_info "Creating User"
$STD rabbitmqctl add_user proxmox proxmox
$STD rabbitmqctl set_user_tags proxmox administrator
$STD rabbitmqctl set_permissions -p / proxmox ".*" ".*" ".*"

View File

@ -13,20 +13,21 @@ setting_up_container
network_check
update_os
msg_info "Installing ASP.NET Core Runtime"
curl -fsSL "https://packages.microsoft.com/config/debian/12/packages-microsoft-prod.deb" -o packages-microsoft-prod.deb
$STD dpkg -i packages-microsoft-prod.deb
$STD apt update
$STD apt install -y dotnet-sdk-9.0
msg_ok "Installed ASP.NET Core Runtime"
msg_info "Installing Dependencies"
setup_deb822_repo \
"microsoft" \
"https://packages.microsoft.com/keys/microsoft-2025.asc" \
"https://packages.microsoft.com/debian/13/prod/" \
"trixie"
$STD apt install -y aspnetcore-runtime-9.0
msg_ok "Installed Dependencies"
fetch_and_deploy_gh_release "rdt-client" "rogerfar/rdt-client" "prebuild" "latest" "/opt/rdtc" "RealDebridClient.zip"
msg_info "Configuring rdtclient"
msg_info "Setting up rdtclient"
cd /opt/rdtc
mkdir -p data/{db,downloads}
sed -i 's#/data/db/#/opt/rdtc&#g' /opt/rdtc/appsettings.json
rm -f ~/packages-microsoft-prod.deb
msg_ok "Configured rdtclient"
msg_info "Creating Service"
@ -43,7 +44,7 @@ User=root
[Install]
WantedBy=multi-user.target
EOF
$STD systemctl enable -q --now rdtc
systemctl enable -q --now rdtc
msg_ok "Created Service"
motd_ssh

View File

@ -19,30 +19,19 @@ curl -fsSL https://dl.min.io/server/minio/release/linux-amd64/minio.deb -o minio
$STD dpkg -i minio.deb
msg_ok "Installed Dependencies"
import_local_ip
PG_VERSION="16" setup_postgresql
NODE_VERSION="22" NODE_MODULE="pnpm@latest" setup_nodejs
msg_info "Setting up Database"
DB_USER="rxresume"
DB_NAME="rxresume"
DB_PASS=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | head -c13)
$STD sudo -u postgres psql -c "CREATE USER $DB_USER WITH ENCRYPTED PASSWORD '$DB_PASS';"
$STD sudo -u postgres psql -c "CREATE DATABASE $DB_NAME WITH OWNER $DB_USER ENCODING 'UTF8' TEMPLATE template0;"
$STD sudo -u postgres psql -c "GRANT ALL PRIVILEGES ON DATABASE $DB_NAME to $DB_USER;"
$STD sudo -u postgres psql -c "ALTER USER $DB_USER WITH SUPERUSER;"
msg_ok "Set up Database"
PG_DB_NAME="rxresume" PG_DB_USER="rxresume" PG_DB_GRANT_SUPERUSER="true" setup_postgresql_db
NODE_VERSION="24" NODE_MODULE="pnpm@latest" setup_nodejs
fetch_and_deploy_gh_release "Reactive-Resume" "lazy-media/Reactive-Resume"
msg_info "Setting up Reactive-Resume"
MINIO_PASS=$(openssl rand -base64 48)
ACCESS_TOKEN=$(openssl rand -base64 48)
REFRESH_TOKEN=$(openssl rand -base64 48)
CHROME_TOKEN=$(openssl rand -hex 32)
LOCAL_IP=$(hostname -I | awk '{print $1}')
TAG=$(curl -fsSL https://api.github.com/repos/browserless/browserless/tags?per_page=1 | grep "name" | awk '{print substr($2, 3, length($2)-4) }')
fetch_and_deploy_gh_release "Reactive-Resume" "lazy-media/Reactive-Resume"
msg_info "Installing $APPLICATION"
cd /opt/"$APPLICATION"
cd /opt/Reactive-Resume
export CI="true"
export PUPPETEER_SKIP_DOWNLOAD="true"
export NODE_ENV="production"
@ -50,7 +39,7 @@ export NEXT_TELEMETRY_DISABLED=1
$STD pnpm install --frozen-lockfile
$STD pnpm run build
$STD pnpm run prisma:generate
msg_ok "Installed $APPLICATION"
msg_ok "Setup Reactive-Resume"
msg_info "Installing Browserless (Patience)"
cd /tmp
@ -76,13 +65,14 @@ MINIO_ROOT_PASSWORD="${MINIO_PASS}"
MINIO_VOLUMES=/opt/minio
MINIO_OPTS="--address :9000 --console-address 127.0.0.1:9001"
EOF
cat <<EOF >/opt/"$APPLICATION"/.env
cat <<EOF >/opt/Reactive-Resume/.env
NODE_ENV=production
PORT=3000
# for use behind a reverse proxy, use your FQDN for PUBLIC_URL and STORAGE_URL
PUBLIC_URL=http://${LOCAL_IP}:3000
STORAGE_URL=http://${LOCAL_IP}:9000/rxresume
DATABASE_URL=postgresql://${DB_USER}:${DB_PASS}@localhost:5432/${DB_NAME}?schema=public
DATABASE_URL=postgresql://${PG_DB_USER}:${PG_DB_PASS}@localhost:5432/${PG_DB_NAME}?schema=public
ACCESS_TOKEN_SECRET=${ACCESS_TOKEN}
REFRESH_TOKEN_SECRET=${REFRESH_TOKEN}
CHROME_PORT=8080
@ -110,19 +100,13 @@ STORAGE_SKIP_BUCKET_CHECK=false
# GOOGLE_CLIENT_SECRET=
# GOOGLE_CALLBACK_URL=http://localhost:5173/api/auth/google/callback
EOF
cat <<EOF >/opt/browserless/.env
DEBUG=browserless*,-**:verbose
HOST=localhost
PORT=8080
TOKEN=${CHROME_TOKEN}
EOF
{
echo "${APPLICATION} Credentials"
echo "Database User: $DB_USER"
echo "Database Password: $DB_PASS"
echo "Database Name: $DB_NAME"
echo "Minio Root Password: ${MINIO_PASS}"
} >>~/"$APPLICATION".creds
rm -f /tmp/v"$TAG".zip
rm -f /tmp/minio.deb
msg_ok "Configured applications"
@ -137,15 +121,15 @@ WorkingDirectory=/usr/local/bin
EnvironmentFile=/opt/minio/.env
EOF
cat <<EOF >/etc/systemd/system/"$APPLICATION".service
cat <<EOF >/etc/systemd/system/Reactive-Resume.service
[Unit]
Description=${APPLICATION} Service
Description=Reactive-Resume Service
After=network.target postgresql.service minio.service
Wants=postgresql.service minio.service
[Service]
WorkingDirectory=/opt/${APPLICATION}
EnvironmentFile=/opt/${APPLICATION}/.env
WorkingDirectory=/opt/Reactive-Resume
EnvironmentFile=/opt/Reactive-Resume/.env
ExecStart=/usr/bin/pnpm run start
Restart=always
@ -156,7 +140,7 @@ EOF
cat <<EOF >/etc/systemd/system/browserless.service
[Unit]
Description=Browserless service
After=network.target ${APPLICATION}.service
After=network.target Reactive-Resume.service
[Service]
WorkingDirectory=/opt/browserless
@ -168,7 +152,7 @@ Restart=unless-stopped
WantedBy=multi-user.target
EOF
systemctl daemon-reload
systemctl enable -q --now minio.service "$APPLICATION".service browserless.service
systemctl enable -q --now minio.service Reactive-Resume.service browserless.service
msg_ok "Created Services"
motd_ssh

View File

@ -14,25 +14,22 @@ network_check
update_os
msg_info "Installing Dependencies"
$STD apt install -y \
apt-transport-https \
lsb-release
$STD apt install -y apt-transport-https
msg_ok "Installed Dependencies"
msg_info "Installing Redis"
curl -fsSL "https://packages.redis.io/gpg" | gpg --dearmor >/usr/share/keyrings/redis-archive-keyring.gpg
cat <<EOF >/etc/apt/sources.list.d/redis.sources
Types: deb
URIs: https://packages.redis.io/deb
Suites: $(lsb_release -cs)
Components: main
Signed-By: /usr/share/keyrings/redis-archive-keyring.gpg
EOF
$STD apt update
msg_info "Setting up Redis Repository"
setup_deb822_repo \
"redis" \
"https://packages.redis.io/gpg" \
"https://packages.redis.io/deb" \
"trixie"
msg_ok "Setup Redis Repository"
msg_info "Setting up Redis"
$STD apt install -y redis
sed -i 's/^bind .*/bind 0.0.0.0/' /etc/redis/redis.conf
systemctl enable -q --now redis-server
msg_ok "Installed Redis"
msg_ok "Setup Redis"
motd_ssh
customize

View File

@ -23,25 +23,7 @@ msg_ok "Installed Dependencies"
JAVA_VERSION="24" setup_java
PG_VERSION="17" PG_MODULES="postgis" setup_postgresql
msg_info "Setting up PostgreSQL"
DB_NAME="reitti_db"
DB_USER="reitti"
DB_PASS="$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | cut -c1-13)"
$STD sudo -u postgres psql -c "CREATE ROLE $DB_USER WITH LOGIN PASSWORD '$DB_PASS';"
$STD sudo -u postgres psql -c "CREATE DATABASE $DB_NAME WITH OWNER $DB_USER ENCODING 'UTF8' TEMPLATE template0;"
$STD sudo -u postgres psql -c "ALTER ROLE $DB_USER SET client_encoding TO 'utf8';"
$STD sudo -u postgres psql -c "ALTER ROLE $DB_USER SET default_transaction_isolation TO 'read committed';"
$STD sudo -u postgres psql -c "ALTER ROLE $DB_USER SET timezone TO 'UTC';"
$STD sudo -u postgres psql -d "$DB_NAME" -c "CREATE EXTENSION IF NOT EXISTS postgis;"
$STD sudo -u postgres psql -d "$DB_NAME" -c "CREATE EXTENSION IF NOT EXISTS postgis_topology;"
{
echo "Reitti Credentials"
echo "Database Name: $DB_NAME"
echo "Database User: $DB_USER"
echo "Database Password: $DB_PASS"
} >>~/reitti.creds
msg_ok "PostgreSQL Setup Completed"
PG_DB_NAME="reitti_db" PG_DB_USER="reitti" setup_postgresql_db
msg_info "Configuring RabbitMQ"
RABBIT_USER="reitti"
@ -71,9 +53,9 @@ cat <<EOF >/opt/reitti/application.properties
reitti.server.advertise-uri=http://127.0.0.1:8080
# PostgreSQL Database Connection
spring.datasource.url=jdbc:postgresql://127.0.0.1:5432/$DB_NAME
spring.datasource.username=$DB_USER
spring.datasource.password=$DB_PASS
spring.datasource.url=jdbc:postgresql://127.0.0.1:5432/$PG_DB_NAME
spring.datasource.username=$PG_DB_USER
spring.datasource.password=$PG_DB_PASS
spring.datasource.driver-class-name=org.postgresql.Driver
# Flyway Database Migrations
@ -132,7 +114,7 @@ Restart=on-failure
WantedBy=multi-user.target
EOF
cat <<'EOF' >/etc/systemd/system/photon.service
cat <<EOF >/etc/systemd/system/photon.service
[Unit]
Description=Photon Geocoding Service (Germany, OpenSearch)
After=network.target

View File

@ -14,16 +14,13 @@ network_check
update_os
msg_info "Setting up Resilio Sync Repository"
curl -fsSL "https://linux-packages.resilio.com/resilio-sync/key.asc" >/usr/share/keyrings/resilio-sync-archive-keyring.asc
cat <<EOF >/etc/apt/sources.list.d/resilio-sync.sources
Types: deb
URIs: http://linux-packages.resilio.com/resilio-sync/deb
Suites: resilio-sync
Components: non-free
Signed-By: /usr/share/keyrings/resilio-sync-archive-keyring.asc
EOF
$STD apt update
msg_ok "Resilio Sync Repository Setup"
setup_deb822_repo \
"resilio" \
"https://linux-packages.resilio.com/resilio-sync/key.asc" \
"http://linux-packages.resilio.com/resilio-sync/deb" \
"resilio-sync" \
"non-free"
msg_ok "Setup Resilio Sync Repository"
msg_info "Installing Resilio Sync"
$STD apt install -y resilio-sync

View File

@ -13,19 +13,16 @@ setting_up_container
network_check
update_os
msg_info "Installing Dependencies"
$STD apt install -y jq
msg_ok "Installed Dependencies"
msg_info "Setup Salt Repo"
mkdir -p /etc/apt/keyrings
curl -fsSL https://packages.broadcom.com/artifactory/api/security/keypair/SaltProjectKey/public -o /etc/apt/keyrings/salt-archive-keyring.pgp
curl -fsSL https://github.com/saltstack/salt-install-guide/releases/latest/download/salt.sources -o /etc/apt/sources.list.d/salt.sources
$STD apt update
msg_info "Setting up Salt Repo"
setup_deb822_repo \
"salt" \
"https://packages.broadcom.com/artifactory/api/security/keypair/SaltProjectKey/public" \
"https://packages.broadcom.com/artifactory/saltproject-deb" \
"stable"
msg_ok "Setup Salt Repo"
msg_info "Installing Salt"
RELEASE=$(curl -fsSL https://api.github.com/repos/saltstack/salt/releases/latest | jq -r .tag_name | sed 's/^v//')
RELEASE=$(get_latest_github_release "saltstack/salt")
cat <<EOF >/etc/apt/preferences.d/salt-pin-1001
Package: salt-*
Pin: version ${RELEASE}

View File

@ -15,22 +15,15 @@ update_os
msg_info "Installing Dependencies"
$STD apt install -y git
setup_deb822_repo \
"ansible" \
"https://keyserver.ubuntu.com/pks/lookup?fingerprint=on&op=get&search=0x6125E2A8C77F2818FB7BD15B93C4A3FD7BB9C367" \
"http://ppa.launchpad.net/ansible/ansible/ubuntu" \
"jammy"
$STD apt install -y ansible
msg_ok "Installed Dependencies"
msg_info "Setting up Ansible"
curl -fsSL "https://keyserver.ubuntu.com/pks/lookup?fingerprint=on&op=get&search=0x6125E2A8C77F2818FB7BD15B93C4A3FD7BB9C367" | gpg --dearmor -o /usr/share/keyrings/ansible-archive-keyring.gpg
cat <<EOF >/etc/apt/sources.list.d/ansible.sources
Types: deb
URIs: http://ppa.launchpad.net/ansible/ansible/ubuntu
Suites: jammy
Components: main
Signed-By: /usr/share/keyrings/ansible-archive-keyring.gpg
EOF
$STD apt update
$STD apt install -y ansible
msg_ok "Set up Ansible"
fetch_and_deploy_gh_release "semaphore" "semaphoreui/semaphore" "binary"
fetch_and_deploy_gh_release "semaphore" "semaphoreui/semaphore" "binary" "latest" "/opt/semaphore" "semaphore_*_linux_amd64.deb"
msg_info "Configuring Semaphore"
mkdir -p /opt/semaphore
@ -70,7 +63,6 @@ RestartSec=10s
[Install]
WantedBy=multi-user.target
EOF
systemctl enable -q --now semaphore
msg_ok "Created Service"

View File

@ -71,8 +71,6 @@ SESSION_LIFETIME=120
SPEEDTEST_SCHEDULE="0 */6 * * *"
SPEEDTEST_SERVERS=
SPEEDTEST_EXTERNAL_IP_URL=https://ipecho.net/plain
SPEEDTEST_INTERNET_CHECK_HOSTNAME=1.1.1.1
PRUNE_RESULTS_OLDER_THAN=0
DISPLAY_TIMEZONE=${TIMEZONE}

View File

@ -13,27 +13,17 @@ setting_up_container
network_check
update_os
msg_info "Adding Telegraf key and repository"
curl -fsSL -O https://repos.influxdata.com/influxdata-archive.key
gpg --show-keys --with-fingerprint --with-colons ./influxdata-archive.key 2>&1 |
grep -q '^fpr:\+24C975CBA61A024EE1B631787C3D57159FC2F927:$' &&
cat influxdata-archive.key |
gpg --dearmor |
tee /etc/apt/keyrings/influxdata-archive.gpg >/dev/null
cat <<EOF | sudo tee /etc/apt/sources.list.d/influxdata.sources >/dev/null
Types: deb
URIs: https://repos.influxdata.com/debian
Suites: stable
Components: main
Signed-By: /etc/apt/keyrings/influxdata-archive.gpg
EOF
msg_ok "Added Telegraf Repository"
msg_info "Setting up Telegraf repository"
setup_deb822_repo \
"telegraf" \
"https://repos.influxdata.com/influxdata-archive.key" \
"https://repos.influxdata.com/debian" \
"stable"
msg_ok "Setup Telegraf Repository"
msg_info "Installing Telegraf"
$STD apt update
$STD apt install telegraf -y
rm /influxdata-archive.key
msg_ok "Installed Telegraf"
msg_info "Setting up Telegraf"
$STD apt install -y telegraf
msg_ok "Setup Telegraf"
motd_ssh
customize

View File

@ -0,0 +1,242 @@
#!/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/martabal/qbittorrent-exporter
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/core.func)
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/tools.func)
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/error_handler.func)
# Enable error handling
set -Eeuo pipefail
trap 'error_handler' ERR
load_functions
# ==============================================================================
# CONFIGURATION
# ==============================================================================
VERBOSE=${var_verbose:-no}
APP="qbittorrent-exporter"
APP_TYPE="tools"
INSTALL_PATH="/opt/qbittorrent-exporter"
CONFIG_PATH="/opt/qbittorrent-exporter.env"
header_info
ensure_usr_local_bin_persist
# ==============================================================================
# OS DETECTION
# ==============================================================================
if [[ -f "/etc/alpine-release" ]]; then
OS="Alpine"
SERVICE_PATH="/etc/init.d/qbittorrent-exporter"
elif grep -qE 'ID=debian|ID=ubuntu' /etc/os-release; then
OS="Debian"
SERVICE_PATH="/etc/systemd/system/qbittorrent-exporter.service"
else
echo -e "${CROSS} Unsupported OS detected. Exiting."
exit 1
fi
# ==============================================================================
# UNINSTALL
# ==============================================================================
function uninstall() {
msg_info "Uninstalling qBittorrent-Exporter"
if [[ "$OS" == "Alpine" ]]; then
rc-service qbittorrent-exporter stop &>/dev/null
rc-update del qbittorrent-exporter &>/dev/null
rm -f "$SERVICE_PATH"
else
systemctl disable -q --now qbittorrent-exporter
rm -f "$SERVICE_PATH"
fi
rm -rf "$INSTALL_PATH" "$CONFIG_PATH"
rm -f "/usr/local/bin/update_qbittorrent-exporter"
rm -f "$HOME/.qbittorrent-exporter"
msg_ok "qBittorrent-Exporter has been uninstalled"
}
# ==============================================================================
# UPDATE
# ==============================================================================
function update() {
if check_for_gh_release "qbittorrent-exporter" "martabal/qbittorrent-exporter"; then
msg_info "Stopping service"
if [[ "$OS" == "Alpine" ]]; then
rc-service qbittorrent-exporter stop &>/dev/null
else
systemctl stop qbittorrent-exporter
fi
msg_ok "Stopped service"
fetch_and_deploy_gh_release "qbittorrent-exporter" "martabal/qbittorrent-exporter" "tarball" "latest"
setup_go
msg_info "Building qBittorrent-Exporter"
cd /opt/qbittorrent-exporter
$STD /usr/local/bin/go build -o ./qbittorrent-exporter
msg_ok "Built qBittorrent-Exporter"
msg_info "Starting service"
if [[ "$OS" == "Alpine" ]]; then
rc-service qbittorrent-exporter start &>/dev/null
else
systemctl start qbittorrent-exporter
fi
msg_ok "Started service"
msg_ok "Updated successfully"
exit
fi
}
# ==============================================================================
# INSTALL
# ==============================================================================
function install() {
read -erp "Enter URL of qBittorrent, example: (http://127.0.0.1:8080): " QBITTORRENT_BASE_URL
read -erp "Enter qBittorrent username: " QBITTORRENT_USERNAME
read -rsp "Enter qBittorrent password: " QBITTORRENT_PASSWORD
printf "\n"
fetch_and_deploy_gh_release "qbittorrent-exporter" "martabal/qbittorrent-exporter" "tarball" "latest"
setup_go
msg_info "Building qBittorrent-Exporter on ${OS}"
cd /opt/qbittorrent-exporter
$STD /usr/local/bin/go build -o ./qbittorrent-exporter
msg_ok "Built qBittorrent-Exporter"
msg_info "Creating configuration"
cat <<EOF >"$CONFIG_PATH"
# https://github.com/martabal/qbittorrent-exporter?tab=readme-ov-file#parameters
QBITTORRENT_BASE_URL="${QBITTORRENT_BASE_URL}"
QBITTORRENT_USERNAME="${QBITTORRENT_USERNAME}"
QBITTORRENT_PASSWORD="${QBITTORRENT_PASSWORD}"
EOF
msg_ok "Created configuration"
msg_info "Creating service"
if [[ "$OS" == "Debian" ]]; then
cat <<EOF >"$SERVICE_PATH"
[Unit]
Description=qbittorrent-exporter
After=network.target
[Service]
User=root
WorkingDirectory=/opt/qbittorrent-exporter
EnvironmentFile=$CONFIG_PATH
ExecStart=/opt/qbittorrent-exporter/qbittorrent-exporter
Restart=always
[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload
systemctl enable -q --now qbittorrent-exporter
else
cat <<EOF >"$SERVICE_PATH"
#!/sbin/openrc-run
name="qbittorrent-exporter"
description="qBittorrent Exporter for Prometheus"
command="${INSTALL_PATH}/qbittorrent-exporter"
command_background=true
directory="/opt/qbittorrent-exporter"
pidfile="/run/\${RC_SVCNAME}.pid"
output_log="/var/log/qbittorrent-exporter.log"
error_log="/var/log/qbittorrent-exporter.log"
depend() {
need net
after firewall
}
start_pre() {
if [ -f "$CONFIG_PATH" ]; then
export \$(grep -v '^#' $CONFIG_PATH | xargs)
fi
}
EOF
chmod +x "$SERVICE_PATH"
$STD rc-update add qbittorrent-exporter default
$STD rc-service qbittorrent-exporter start
fi
msg_ok "Created and started service"
# Create update script
msg_info "Creating update script"
ensure_usr_local_bin_persist
cat <<'UPDATEEOF' >/usr/local/bin/update_qbittorrent-exporter
#!/usr/bin/env bash
# qbittorrent-exporter Update Script
type=update bash -c "$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/tools/addon/qbittorrent-exporter.sh)"
UPDATEEOF
chmod +x /usr/local/bin/update_qbittorrent-exporter
msg_ok "Created update script (/usr/local/bin/update_qbittorrent-exporter)"
echo ""
msg_ok "qBittorrent-Exporter installed successfully"
msg_ok "Metrics: ${BL}http://${LOCAL_IP}:8090/metrics${CL}"
msg_ok "Config: ${BL}${CONFIG_PATH}${CL}"
}
# ==============================================================================
# MAIN
# ==============================================================================
header_info
ensure_usr_local_bin_persist
import_local_ip
# Handle type=update (called from update script)
if [[ "${type:-}" == "update" ]]; then
if [[ -d "$INSTALL_PATH" && -f "$INSTALL_PATH/qbittorrent-exporter" ]]; then
update
else
msg_error "qBittorrent-Exporter is not installed. Nothing to update."
exit 1
fi
exit 0
fi
# Check if already installed
if [[ -d "$INSTALL_PATH" && -f "$INSTALL_PATH/qbittorrent-exporter" ]]; then
msg_warn "qBittorrent-Exporter is already installed."
echo ""
echo -n "${TAB}Uninstall qBittorrent-Exporter? (y/N): "
read -r uninstall_prompt
if [[ "${uninstall_prompt,,}" =~ ^(y|yes)$ ]]; then
uninstall
exit 0
fi
echo -n "${TAB}Update qBittorrent-Exporter? (y/N): "
read -r update_prompt
if [[ "${update_prompt,,}" =~ ^(y|yes)$ ]]; then
update
exit 0
fi
msg_warn "No action selected. Exiting."
exit 0
fi
# Fresh installation
msg_warn "qBittorrent-Exporter is not installed."
echo ""
echo -e "${TAB}${INFO} This will install:"
echo -e "${TAB} - qBittorrent Exporter (Go binary)"
echo -e "${TAB} - Systemd/OpenRC service"
echo ""
echo -n "${TAB}Install qBittorrent-Exporter? (y/N): "
read -r install_prompt
if [[ "${install_prompt,,}" =~ ^(y|yes)$ ]]; then
install
else
msg_warn "Installation cancelled. Exiting."
exit 0
fi