Compare commits

..

3 Commits

Author SHA1 Message Date
CanbiZ
d2f61af129 -
Added copyright, author, and license information.
2025-11-16 09:54:57 +01:00
CanbiZ
47cbdec252 Enhance healthchecks update process with backup and venv
Added backup creation for existing healthchecks installation before updating. Enhanced the update process by recreating the Python virtual environment and installing requirements.
2025-11-16 09:54:03 +01:00
CanbiZ
7f28f12989 Refactor: Healthchecks 2025-11-16 09:51:27 +01:00
10 changed files with 179 additions and 337 deletions

View File

@@ -12,24 +12,13 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit
## 2025-11-16
### 🆕 New Scripts
- Metabase ([#9190](https://github.com/community-scripts/ProxmoxVE/pull/9190))
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- Change backup directory to /opt for paperless-ngx [@ProfDrYoMan](https://github.com/ProfDrYoMan) ([#9195](https://github.com/community-scripts/ProxmoxVE/pull/9195))
- Kimai: remove deprecated admin_lte section [@MickLesk](https://github.com/MickLesk) ([#9182](https://github.com/community-scripts/ProxmoxVE/pull/9182))
- healthchecks: bump python to 3.13 [@MickLesk](https://github.com/MickLesk) ([#9175](https://github.com/community-scripts/ProxmoxVE/pull/9175))
### 🌐 Website
- #### 📝 Script Information
- fixed config_path for donetick [@TazztheMonster](https://github.com/TazztheMonster) ([#9203](https://github.com/community-scripts/ProxmoxVE/pull/9203))
## 2025-11-15
### 🚀 Updated Scripts

View File

@@ -1,6 +0,0 @@
__ ___ __ __
/ |/ /__ / /_____ _/ /_ ____ _________
/ /|_/ / _ \/ __/ __ `/ __ \/ __ `/ ___/ _ \
/ / / / __/ /_/ /_/ / /_/ / /_/ (__ ) __/
/_/ /_/\___/\__/\__,_/_.___/\__,_/____/\___/

View File

@@ -28,26 +28,42 @@ function update_script() {
msg_error "No ${APP} Installation Found!"
exit
fi
if check_for_gh_release "healthchecks" "healthchecks/healthchecks"; then
msg_info "Stopping Services"
systemctl stop healthchecks
msg_ok "Stopped Services"
PYTHON_VERSION="3.13" setup_uv
msg_info "Backing up existing installation"
BACKUP="/opt/healthchecks-backup-$(date +%F-%H%M)"
cp -a /opt/healthchecks "$BACKUP"
msg_ok "Backup created at $BACKUP"
fetch_and_deploy_gh_release "healthchecks" "healthchecks/healthchecks"
msg_info "Updating healthchecks"
cd /opt/healthchecks
mkdir -p /opt/healthchecks/static-collected/
$STD uv pip install wheel gunicorn -r requirements.txt --system
$STD uv run -- python manage.py makemigrations
$STD uv run -- python manage.py migrate --noinput
$STD uv run -- python manage.py collectstatic --noinput
$STD uv run -- python manage.py compress
msg_ok "Updated healthchecks"
if [[ -d venv ]]; then
rm -rf venv
fi
msg_info "Recreating Python venv"
$STD python3 -m venv venv
$STD source venv/bin/activate
$STD pip install --upgrade pip wheel
msg_ok "Created venv"
msg_info "Installing requirements"
$STD pip install gunicorn -r requirements.txt
msg_ok "Installed requirements"
msg_info "Running Django migrations"
$STD python manage.py migrate --noinput
$STD python manage.py collectstatic --noinput
$STD python manage.py compress
msg_ok "Completed Django migrations and static build"
msg_info "Starting Services"
systemctl start healthchecks
systemctl restart caddy
systemctl reload caddy
msg_ok "Started Services"
msg_ok "Updated successfully!"
fi

View File

@@ -1,65 +0,0 @@
#!/usr/bin/env bash
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/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://www.metabase.com/
APP="Metabase"
var_tags="${var_tags:-analytics}"
var_cpu="${var_cpu:-2}"
var_ram="${var_ram:-2048}"
var_disk="${var_disk:-6}"
var_os="${var_os:-debian}"
var_version="${var_version:-13}"
var_unprivileged="${var_unprivileged:-1}"
header_info "$APP"
variables
color
catch_errors
function update_script() {
header_info
check_container_storage
check_container_resources
if [[ ! -d /opt/metabase ]]; then
msg_error "No ${APP} Installation Found!"
exit
fi
if check_for_gh_release "metabase" "metabase/metabase"; then
msg_info "Stopping Service"
systemctl stop metabase
msg_info "Stopped Service"
msg_info "Creating backup"
mv /opt/metabase/.env /opt
msg_ok "Created backup"
msg_info "Updating Metabase"
RELEASE=$(get_latest_github_release "metabase/metabase")
curl -fsSL "https://downloads.metabase.com/v${RELEASE}.x/metabase.jar" -o /opt/metabase/metabase.jar
echo $RELEASE >~/.metabase
msg_ok "Updated Metabase"
msg_info "Restoring backup"
mv /opt/.env /opt/metabase
msg_ok "Restored backup"
msg_info "Starting Service"
systemctl start metabase
msg_ok "Started Service"
msg_ok "Updated successfully!"
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}"

View File

@@ -35,7 +35,7 @@ function update_script() {
if grep -q "uv run" /etc/systemd/system/paperless-webserver.service; then
msg_info "Backing up user data and configuration"
local BACKUP_DIR="/opt/paperless_backup_$$"
local BACKUP_DIR="/tmp/paperless_backup_$$"
mkdir -p "$BACKUP_DIR"
for dir in /opt/paperless/*/; do
dir_name=$(basename "$dir")
@@ -84,7 +84,7 @@ function update_script() {
find /opt/paperless -name "__pycache__" -type d -exec rm -rf {} +
msg_info "Backing up user data and configuration"
local BACKUP_DIR="/opt/paperless_backup_$$"
local BACKUP_DIR="/tmp/paperless_backup_$$"
mkdir -p "$BACKUP_DIR"
for dir in /opt/paperless/*/; do
@@ -122,7 +122,7 @@ function update_script() {
$STD systemctl daemon-reload
msg_info "Backing up user data and configuration"
BACKUP_DIR="/opt/paperless_backup_$$"
BACKUP_DIR="/tmp/paperless_backup_$$"
mkdir -p "$BACKUP_DIR"
for dir in /opt/paperless/*/; do

View File

@@ -10,7 +10,7 @@
"privileged": false,
"interface_port": 2021,
"documentation": "https://docs.donetick.com/getting-started/",
"config_path": "/opt/donetick/config/selfhosted.yaml",
"config_path": "/opt/donetick/config/selfhosted.yml",
"website": "https://donetick.com",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/donetick.webp",
"description": "Donetick an open-source, user-friendly app for managing tasks and chores, featuring customizable options to help you and others stay organized",

View File

@@ -1,35 +0,0 @@
{
"name": "Metabase",
"slug": "metabase",
"categories": [
9
],
"date_created": "2025-11-16",
"type": "ct",
"updateable": true,
"privileged": false,
"interface_port": 3000,
"documentation": "https://www.metabase.com/docs/latest/",
"config_path": "/opt/metabase/.env",
"website": "https://www.metabase.com/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/metabase.webp",
"description": "Metabase is an open-source business intelligence platform. You can use Metabase to ask questions about your data, or embed Metabase in your app to let your customers explore their data on their own.",
"install_methods": [
{
"type": "default",
"script": "ct/metabase.sh",
"resources": {
"cpu": 2,
"ram": 2048,
"hdd": 6,
"os": "Debian",
"version": "13"
}
}
],
"default_credentials": {
"username": null,
"password": null
},
"notes": []
}

View File

@@ -1,124 +1,4 @@
[
{
"name": "Prowlarr/Prowlarr",
"version": "v2.3.0.5236",
"date": "2025-11-16T22:41:22Z"
},
{
"name": "Lidarr/Lidarr",
"version": "v3.1.0.4875",
"date": "2025-11-16T22:40:18Z"
},
{
"name": "jellyfin/jellyfin",
"version": "v10.11.3",
"date": "2025-11-16T22:40:10Z"
},
{
"name": "Radarr/Radarr",
"version": "v6.0.4.10291",
"date": "2025-11-16T22:39:01Z"
},
{
"name": "sysadminsmedia/homebox",
"version": "v0.21.0",
"date": "2025-08-23T18:33:53Z"
},
{
"name": "chrisbenincasa/tunarr",
"version": "v0.22.15",
"date": "2025-11-16T21:30:50Z"
},
{
"name": "TwiN/gatus",
"version": "v5.32.0",
"date": "2025-11-16T21:08:56Z"
},
{
"name": "binwiederhier/ntfy",
"version": "v2.15.0",
"date": "2025-11-16T18:53:49Z"
},
{
"name": "PCJones/UmlautAdaptarr",
"version": "v0.7.4",
"date": "2025-11-16T18:40:32Z"
},
{
"name": "Luligu/matterbridge",
"version": "3.3.8",
"date": "2025-11-16T17:04:37Z"
},
{
"name": "msgbyte/tianji",
"version": "v1.30.11",
"date": "2025-11-16T16:21:04Z"
},
{
"name": "AlexxIT/go2rtc",
"version": "v1.9.12",
"date": "2025-11-16T16:14:55Z"
},
{
"name": "LibreTranslate/LibreTranslate",
"version": "v1.8.0",
"date": "2025-11-16T15:54:50Z"
},
{
"name": "outline/outline",
"version": "v1.1.0",
"date": "2025-11-16T15:07:09Z"
},
{
"name": "bastienwirtz/homer",
"version": "v25.11.1",
"date": "2025-11-16T13:04:21Z"
},
{
"name": "fuma-nama/fumadocs",
"version": "fumadocs-core@16.0.12",
"date": "2025-11-16T12:33:59Z"
},
{
"name": "morpheus65535/bazarr",
"version": "v1.5.3",
"date": "2025-09-20T12:12:33Z"
},
{
"name": "Jackett/Jackett",
"version": "v0.24.314",
"date": "2025-11-16T05:56:46Z"
},
{
"name": "FlowiseAI/Flowise",
"version": "flowise@3.0.11",
"date": "2025-11-16T01:29:06Z"
},
{
"name": "OliveTin/OliveTin",
"version": "3000.4.0",
"date": "2025-11-16T01:02:49Z"
},
{
"name": "hyperion-project/hyperion.ng",
"version": "2.1.1",
"date": "2025-06-14T17:45:06Z"
},
{
"name": "jeedom/core",
"version": "4.4.20",
"date": "2025-11-16T00:27:06Z"
},
{
"name": "steveiliop56/tinyauth",
"version": "v4.0.1",
"date": "2025-10-15T16:53:55Z"
},
{
"name": "BerriAI/litellm",
"version": "v1.80.0.rc.1",
"date": "2025-11-16T00:22:41Z"
},
{
"name": "paperless-ngx/paperless-ngx",
"version": "v2.19.6",
@@ -129,6 +9,11 @@
"version": "preview-test-fix-subscriptions",
"date": "2025-11-15T20:51:48Z"
},
{
"name": "BerriAI/litellm",
"version": "v1.79.3-stable",
"date": "2025-11-15T20:28:05Z"
},
{
"name": "jenkinsci/jenkins",
"version": "jenkins-2.528.2",
@@ -144,11 +29,26 @@
"version": "android/v1.8.2-2",
"date": "2025-11-15T13:18:41Z"
},
{
"name": "Jackett/Jackett",
"version": "v0.24.311",
"date": "2025-11-15T05:55:28Z"
},
{
"name": "cloudreve/cloudreve",
"version": "4.10.1",
"date": "2025-11-15T04:36:48Z"
},
{
"name": "jeedom/core",
"version": "4.4.20",
"date": "2025-11-15T00:27:05Z"
},
{
"name": "steveiliop56/tinyauth",
"version": "v4.0.1",
"date": "2025-10-15T16:53:55Z"
},
{
"name": "henrygd/beszel",
"version": "v0.16.1",
@@ -229,6 +129,11 @@
"version": "v0.16.2",
"date": "2025-11-14T12:05:36Z"
},
{
"name": "outline/outline",
"version": "v1.1.0-0",
"date": "2025-11-14T11:41:10Z"
},
{
"name": "zitadel/zitadel",
"version": "v4.7.0",
@@ -254,6 +159,11 @@
"version": "v4.6.5",
"date": "2025-11-14T06:59:44Z"
},
{
"name": "morpheus65535/bazarr",
"version": "v1.5.3",
"date": "2025-09-20T12:12:33Z"
},
{
"name": "chrisvel/tududi",
"version": "v0.86.1",
@@ -264,6 +174,11 @@
"version": "v4.31.0",
"date": "2025-11-14T00:18:50Z"
},
{
"name": "chrisbenincasa/tunarr",
"version": "v0.22.14",
"date": "2025-11-13T23:16:04Z"
},
{
"name": "ollama/ollama",
"version": "v0.12.11",
@@ -284,6 +199,11 @@
"version": "v0.62.18",
"date": "2025-11-13T19:49:21Z"
},
{
"name": "fuma-nama/fumadocs",
"version": "fumadocs-openapi@10.0.6",
"date": "2025-11-13T16:37:11Z"
},
{
"name": "traefik/traefik",
"version": "v3.6.1",
@@ -369,6 +289,11 @@
"version": "2.600",
"date": "2025-11-12T05:01:55Z"
},
{
"name": "hyperion-project/hyperion.ng",
"version": "2.1.1",
"date": "2025-06-14T17:45:06Z"
},
{
"name": "moghtech/komodo",
"version": "v1.19.5",
@@ -399,6 +324,11 @@
"version": "mattermost-redux@11.1.0",
"date": "2025-11-11T17:15:00Z"
},
{
"name": "msgbyte/tianji",
"version": "v1.30.10",
"date": "2025-11-11T16:26:27Z"
},
{
"name": "netbox-community/netbox",
"version": "v4.4.6",
@@ -429,6 +359,11 @@
"version": "4.9.1.90",
"date": "2025-11-11T01:00:32Z"
},
{
"name": "OliveTin/OliveTin",
"version": "2025.11.11",
"date": "2025-11-11T00:35:03Z"
},
{
"name": "qbittorrent/qBittorrent",
"version": "release-5.1.3",
@@ -504,11 +439,21 @@
"version": "v1.17.2",
"date": "2025-11-08T22:47:58Z"
},
{
"name": "TwiN/gatus",
"version": "v5.31.0",
"date": "2025-11-08T22:18:46Z"
},
{
"name": "hargata/lubelog",
"version": "v1.5.4",
"date": "2025-11-08T16:26:45Z"
},
{
"name": "Luligu/matterbridge",
"version": "3.3.7",
"date": "2025-11-08T15:47:24Z"
},
{
"name": "heiher/hev-socks5-server",
"version": "2.11.1",
@@ -539,6 +484,11 @@
"version": "v3.0.0",
"date": "2025-11-07T06:13:49Z"
},
{
"name": "FlowiseAI/Flowise",
"version": "flowise@3.0.10",
"date": "2025-11-06T23:10:38Z"
},
{
"name": "Ombi-app/Ombi",
"version": "v4.52.0",
@@ -699,6 +649,11 @@
"version": "2.2.1",
"date": "2025-11-03T06:57:15Z"
},
{
"name": "jellyfin/jellyfin",
"version": "v10.11.2",
"date": "2025-11-03T02:29:00Z"
},
{
"name": "maxdorninger/MediaManager",
"version": "v1.9.1",
@@ -764,6 +719,11 @@
"version": "v0.107.69",
"date": "2025-10-30T15:31:50Z"
},
{
"name": "Lidarr/Lidarr",
"version": "v3.0.1.4866",
"date": "2025-10-30T14:29:25Z"
},
{
"name": "danielbrendel/hortusfox-web",
"version": "v5.4",
@@ -814,6 +774,11 @@
"version": "v4.2.0",
"date": "2025-10-27T16:56:40Z"
},
{
"name": "Radarr/Radarr",
"version": "v5.28.0.10274",
"date": "2025-10-06T21:31:07Z"
},
{
"name": "openhab/openhab-core",
"version": "5.1.0.M2",
@@ -829,6 +794,11 @@
"version": "v13.0.2",
"date": "2025-10-26T06:33:05Z"
},
{
"name": "Prowlarr/Prowlarr",
"version": "v2.1.5.5216",
"date": "2025-10-25T19:41:59Z"
},
{
"name": "usememos/memos",
"version": "v0.25.2",
@@ -874,6 +844,11 @@
"version": "v3.2.5-beta",
"date": "2025-10-21T16:49:14Z"
},
{
"name": "AlexxIT/go2rtc",
"version": "v1.9.11",
"date": "2025-10-21T13:21:02Z"
},
{
"name": "influxdata/telegraf",
"version": "v1.36.3",
@@ -1019,6 +994,11 @@
"version": "mysql-cluster-7.6.36",
"date": "2025-10-06T15:19:49Z"
},
{
"name": "bastienwirtz/homer",
"version": "v25.10.1",
"date": "2025-10-06T14:23:20Z"
},
{
"name": "jordan-dalby/ByteStash",
"version": "v1.5.9",
@@ -1174,6 +1154,11 @@
"version": "v0.11.0",
"date": "2025-09-01T16:19:38Z"
},
{
"name": "LibreTranslate/LibreTranslate",
"version": "v1.7.3",
"date": "2025-08-31T15:59:43Z"
},
{
"name": "Forceu/Gokapi",
"version": "v2.1.0",
@@ -1194,6 +1179,11 @@
"version": "0.6.25",
"date": "2025-08-24T08:51:55Z"
},
{
"name": "sysadminsmedia/homebox",
"version": "v0.21.0",
"date": "2025-08-23T18:33:53Z"
},
{
"name": "caddyserver/caddy",
"version": "v2.10.2",
@@ -1249,6 +1239,11 @@
"version": "v1.28.3",
"date": "2025-08-06T12:32:02Z"
},
{
"name": "binwiederhier/ntfy",
"version": "v2.14.0",
"date": "2025-08-05T08:31:35Z"
},
{
"name": "inspircd/inspircd",
"version": "v4.8.0",
@@ -1269,6 +1264,11 @@
"version": "v0.4.5",
"date": "2025-07-29T16:39:18Z"
},
{
"name": "PCJones/UmlautAdaptarr",
"version": "v0.7.3",
"date": "2025-07-22T14:39:54Z"
},
{
"name": "sbondCo/Watcharr",
"version": "v2.1.1",

View File

@@ -1,5 +1,4 @@
#!/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
@@ -16,43 +15,44 @@ update_os
msg_info "Installing Dependencies"
$STD apt install -y \
gcc \
python3 \
python3-dev \
python3-venv \
libpq-dev \
libcurl4-openssl-dev \
libssl-dev \
caddy
mkdir -p ~/.config/pip
cat > ~/.config/pip/pip.conf << EOF
[global]
break-system-packages = true
EOF
msg_ok "Installed Dependencies"
PYTHON_VERSION="3.13" setup_uv
PG_VERSION=16 setup_postgresql
PG_DB_NAME="healthchecks_db" PG_DB_USER="hc_user" PG_DB_PASS=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | cut -c1-13) setup_postgresql_db
msg_info "Setup Database"
DB_NAME=healthchecks_db
DB_USER=hc_user
DB_PASS=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | cut -c1-13)
msg_info "Setup Keys (Admin / Secret)"
SECRET_KEY="$(openssl rand -base64 32 | tr -dc 'a-zA-Z0-9' | cut -c1-32)"
ADMIN_EMAIL="admin@helper-scripts.local"
ADMIN_PASSWORD="$DB_PASS"
$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'"
{
echo "healthchecks-Credentials"
echo "healthchecks Database User: $DB_USER"
echo "healthchecks Database Password: $DB_PASS"
echo "healthchecks Database Name: $DB_NAME"
echo "healthchecks Admin Email: $ADMIN_EMAIL"
echo "healthchecks Admin Password: $ADMIN_PASSWORD"
} >>~/healthchecks.creds
msg_ok "Set up Database"
msg_ok "Set up Keys"
fetch_and_deploy_gh_release "healthchecks" "healthchecks/healthchecks"
msg_info "Setup healthchecks"
msg_info "Installing Healthchecks (venv)"
cd /opt/healthchecks
mkdir -p /opt/healthchecks/static-collected/
$STD uv pip install wheel gunicorn -r requirements.txt --system
python3 -m venv venv
source venv/bin/activate
$STD pip install --upgrade pip wheel
$STD pip install gunicorn -r requirements.txt
msg_ok "Installed Python packages"
LOCAL_IP=$(hostname -I | awk '{print $1}')
cat <<EOF >/opt/healthchecks/hc/local_settings.py
@@ -83,18 +83,19 @@ DATABASES = {
}
EOF
$STD uv run -- python manage.py makemigrations
$STD uv run -- python manage.py migrate --noinput
$STD uv run -- python manage.py collectstatic --noinput
$STD uv run -- python manage.py compress
msg_info "Running Django setup"
$STD python manage.py makemigrations
$STD python manage.py migrate --noinput
$STD python manage.py collectstatic --noinput
$STD python manage.py compress
cat <<EOF | $STD uv run -- python manage.py shell
python <<EOF
from django.contrib.auth import get_user_model
User = get_user_model()
if not User.objects.filter(email="${ADMIN_EMAIL}").exists():
User.objects.create_superuser("${ADMIN_EMAIL}", "${ADMIN_EMAIL}", "${ADMIN_PASSWORD}")
EOF
msg_ok "Installed healthchecks"
msg_ok "Configured Django"
msg_info "Configuring Caddy"
cat <<EOF >/etc/caddy/Caddyfile
@@ -108,7 +109,7 @@ ${LOCAL_IP} {
EOF
msg_ok "Configured Caddy"
msg_info "Creating Service"
msg_info "Creating systemd service"
cat <<EOF >/etc/systemd/system/healthchecks.service
[Unit]
Description=Healthchecks Service
@@ -116,12 +117,13 @@ After=network.target postgresql.service
[Service]
WorkingDirectory=/opt/healthchecks/
ExecStart=/usr/local/bin/uv run -- gunicorn hc.wsgi:application --bind 127.0.0.1:8000
ExecStart=/opt/healthchecks/venv/bin/gunicorn hc.wsgi:application --bind 127.0.0.1:8000
Restart=always
[Install]
WantedBy=multi-user.target
EOF
systemctl enable -q --now healthchecks caddy
systemctl reload caddy
msg_ok "Created Service"

View File

@@ -1,59 +0,0 @@
#!/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://www.metabase.com/
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
color
verb_ip6
catch_errors
setting_up_container
network_check
update_os
JAVA_VERSION="21" setup_java
PG_VERSION="17" setup_postgresql
PG_DB_NAME="metabase_db" PG_DB_USER="metabase" setup_postgresql_db
msg_info "Setting up Metabase"
mkdir -p /opt/metabase
RELEASE=$(get_latest_github_release "metabase/metabase")
curl -fsSL "https://downloads.metabase.com/v${RELEASE}.x/metabase.jar" -o /opt/metabase/metabase.jar
cd /opt/metabase
cat <<EOF >/opt/metabase/.env
MB_DB_TYPE=postgres
MB_DB_DBNAME=$PG_DB_NAME
MB_DB_PORT=5432
MB_DB_USER=$PG_DB_USER
MB_DB_PASS=$PG_DB_PASS
MB_DB_HOST=localhost
EOF
echo $RELEASE >~/.metabase
msg_ok "Setup Metabase"
msg_info "Creating Service"
cat <<EOF >/etc/systemd/system/metabase.service
[Unit]
Description=Metabase Service
After=network.target
[Service]
EnvironmentFile=/opt/metabase/.env
WorkingDirectory=/opt/metabase
ExecStart=/usr/bin/java --add-opens java.base/java.nio=ALL-UNNAMED -jar metabase.jar
Restart=always
SuccessExitStatus=143
TimeoutStopSec=120
[Install]
WantedBy=multi-user.target
EOF
systemctl enable -q --now metabase
msg_ok "Created Service"
motd_ssh
customize
cleanup_lxc