nextcloud exporter

This commit is contained in:
Tobias 2025-12-21 19:55:12 +01:00
parent b0b7cb790e
commit e0dd403107
2 changed files with 304 additions and 0 deletions

View File

@ -0,0 +1,46 @@
{
"name": "Nextcloud Exporter",
"slug": "nextcloud-exporter",
"categories": [
9
],
"date_created": "2025-12-17",
"type": "addon",
"updateable": true,
"privileged": false,
"interface_port": 9025,
"documentation": "https://github.com/xperimental/nextcloud-exporter",
"website": "https://github.com/xperimental/nextcloud-exporter",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/nextcloud.webp",
"config_path": "/opt/nextcloud-exporter.env",
"description": "Prometheus exporter for Nextcloud servers. ",
"install_methods": [
{
"type": "default",
"script": "tools/addon/nextcloud-exporter.sh",
"resources": {
"cpu": null,
"ram": null,
"hdd": null,
"os": null,
"version": null
}
},
{
"type": "alpine",
"script": "tools/addon/nextcloud-exporter.sh",
"resources": {
"cpu": null,
"ram": null,
"hdd": null,
"os": null,
"version": null
}
}
],
"default_credentials": {
"username": null,
"password": null
},
"notes": []
}

View File

@ -0,0 +1,258 @@
#!/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/xperimental/nextcloud-exporter
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVED/main/misc/core.func)
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVED/main/misc/tools.func)
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVED/main/misc/build.func)
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVED/main/misc/error_handler.func)
load_functions
# Enable error handling
set -Eeuo pipefail
trap 'error_handler' ERR
# ==============================================================================
# CONFIGURATION
# ==============================================================================
VERBOSE=${var_verbose:-no}
APP="nextcloud-exporter"
APP_TYPE="tools"
INSTALL_PATH="/opt/nextcloud-exporter"
CONFIG_PATH="/opt/nextcloud-exporter.env"
header_info
ensure_usr_local_bin_persist
get_current_ip &>/dev/null
# ==============================================================================
# OS DETECTION
# ==============================================================================
if [[ -f "/etc/alpine-release" ]]; then
OS="Alpine"
SERVICE_PATH="/etc/init.d/nextcloud-exporter"
elif grep -qE 'ID=debian|ID=ubuntu' /etc/os-release; then
OS="Debian"
SERVICE_PATH="/etc/systemd/system/nextcloud-exporter.service"
else
echo -e "${CROSS} Unsupported OS detected. Exiting."
exit 1
fi
# ==============================================================================
# UNINSTALL
# ==============================================================================
function uninstall() {
msg_info "Uninstalling Nextcloud-Exporter"
if [[ "$OS" == "Alpine" ]]; then
rc-service nextcloud-exporter stop &>/dev/null
rc-update del nextcloud-exporter &>/dev/null
rm -f "$SERVICE_PATH"
else
systemctl disable -q --now nextcloud-exporter
rm -f "$SERVICE_PATH"
fi
rm -rf "$INSTALL_PATH" "$CONFIG_PATH"
rm -f "/usr/local/bin/update_nextcloud-exporter"
rm -f "$HOME/.nextcloud-exporter"
msg_ok "Nextcloud-Exporter has been uninstalled"
}
# ==============================================================================
# UPDATE
# ==============================================================================
function update() {
if check_for_gh_release "nextcloud-exporter" "xperimental/nextcloud-exporter"; then
msg_info "Stopping service"
if [[ "$OS" == "Alpine" ]]; then
rc-service nextcloud-exporter stop &>/dev/null
else
systemctl stop nextcloud-exporter
fi
msg_ok "Stopped service"
fetch_and_deploy_gh_release "nextcloud-exporter" "xperimental/nextcloud-exporter" "prebuilt" "latest" "nextcloud-exporter_*_amd64.deb"
setup_go
msg_info "Starting service"
if [[ "$OS" == "Alpine" ]]; then
rc-service nextcloud-exporter start &>/dev/null
else
systemctl start nextcloud-exporter
fi
msg_ok "Started service"
msg_ok "Updated successfully"
exit
fi
}
# ==============================================================================
# INSTALL
# ==============================================================================
function install() {
read -erp "Enter URL of Nextcloud, example: (http://127.0.0.1:8080): " NEXTCLOUD_SERVER
read -erp "Enter Nextcloud auth token (press Enter to use username/password instead): " NEXTCLOUD_AUTH_TOKEN
if [[ -z "$NEXTCLOUD_AUTH_TOKEN" ]]; then
read -erp "Enter Nextcloud username: " NEXTCLOUD_USERNAME
read -rsp "Enter Nextcloud password: " NEXTCLOUD_PASSWORD
printf "\n"
fi
read -erp "Query additional info for apps? [Y/n]: " QUERY_APPS
if [[ "${QUERY_APPS,,}" =~ ^(n|no)$ ]]; then
NEXTCLOUD_INFO_APPS="false"
fi
read -erp "Query update information? [Y/n]: " QUERY_UPDATES
if [[ "${QUERY_UPDATES,,}" =~ ^(n|no)$ ]]; then
NEXTCLOUD_INFO_UPDATE="false"
fi
read -erp "Do you want to skip TLS-Verification (if using a self-signed Certificate on Nextcloud) [y/N]: " SKIP_TLS
if [[ "${SKIP_TLS,,}" =~ ^(y|yes)$ ]]; then
NEXTCLOUD_TLS_SKIP_VERIFY="true"
fi
fetch_and_deploy_gh_release "nextcloud-exporter" "xperimental/nextcloud-exporter" "prebuilt" "latest" "nextcloud-exporter_*_amd64.deb"
setup_go
msg_info "Creating configuration"
cat <<EOF >"$CONFIG_PATH"
# https://github.com/xperimental/nextcloud-exporter
NEXTCLOUD_SERVER="${NEXTCLOUD_SERVER}"
NEXTCLOUD_AUTH_TOKEN="${NEXTCLOUD_AUTH_TOKEN}"
NEXTCLOUD_USERNAME="${NEXTCLOUD_USERNAME}"
NEXTCLOUD_PASSWORD="${NEXTCLOUD_PASSWORD}"
NEXTCLOUD_INFO_UPDATE=${NEXTCLOUD_INFO_UPDATE:-"true"}
NEXTCLOUD_INFO_APPS=${NEXTCLOUD_INFO_APPS:-"true"}
NEXTCLOUD_TLS_SKIP_VERIFY=${NEXTCLOUD_TLS_SKIP_VERIFY:-"false"}
NEXTCLOUD_LISTEN_ADDRESS=":9205"
EOF
msg_ok "Created configuration"
msg_info "Creating service"
if [[ "$OS" == "Debian" ]]; then
cat <<EOF >"$SERVICE_PATH"
[Unit]
Description=nextcloud-exporter
After=network.target
[Service]
User=root
WorkingDirectory=/opt/nextcloud-exporter
EnvironmentFile=$CONFIG_PATH
ExecStart=/opt/nextcloud-exporter/nextcloud-exporter
Restart=always
[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload
systemctl enable -q --now nextcloud-exporter
else
cat <<EOF >"$SERVICE_PATH"
#!/sbin/openrc-run
name="nextcloud-exporter"
description="Nextcloud Exporter for Prometheus"
command="${INSTALL_PATH}/nextcloud-exporter"
command_background=true
directory="/opt/nextcloud-exporter"
pidfile="/run/\${RC_SVCNAME}.pid"
output_log="/var/log/nextcloud-exporter.log"
error_log="/var/log/nextcloud-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 nextcloud-exporter default
$STD rc-service nextcloud-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_nextcloud-exporter
#!/usr/bin/env bash
# nextcloud-exporter Update Script
type=update bash -c "$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVED/main/tools/addon/nextcloud-exporter.sh)"
UPDATEEOF
chmod +x /usr/local/bin/update_nextcloud-exporter
msg_ok "Created update script (/usr/local/bin/update_nextcloud-exporter)"
echo ""
msg_ok "Nextcloud-Exporter installed successfully"
msg_ok "Metrics: ${BL}http://${CURRENT_IP}:9205/metrics${CL}"
msg_ok "Config: ${BL}${CONFIG_PATH}${CL}"
}
# ==============================================================================
# MAIN
# ==============================================================================
header_info
ensure_usr_local_bin_persist
get_current_ip &>/dev/null
# Handle type=update (called from update script)
if [[ "${type:-}" == "update" ]]; then
if [[ -d "$INSTALL_PATH" && -f "$INSTALL_PATH/nextcloud-exporter" ]]; then
update
else
msg_error "Nextcloud-Exporter is not installed. Nothing to update."
exit 1
fi
exit 0
fi
# Check if already installed
if [[ -d "$INSTALL_PATH" && -f "$INSTALL_PATH/nextcloud-exporter" ]]; then
msg_warn "Nextcloud-Exporter is already installed."
echo ""
echo -n "${TAB}Uninstall Nextcloud-Exporter? (y/N): "
read -r uninstall_prompt
if [[ "${uninstall_prompt,,}" =~ ^(y|yes)$ ]]; then
uninstall
exit 0
fi
echo -n "${TAB}Update Nextcloud-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 "Nextcloud-Exporter is not installed."
echo ""
echo -e "${TAB}${INFO} This will install:"
echo -e "${TAB} - Nextcloud Exporter (Go binary)"
echo -e "${TAB} - Systemd/OpenRC service"
echo ""
echo -n "${TAB}Install Nextcloud-Exporter? (y/N): "
read -r install_prompt
if [[ "${install_prompt,,}" =~ ^(y|yes)$ ]]; then
install
else
msg_warn "Installation cancelled. Exiting."
exit 0
fi