Compare commits

..

1 Commits

Author SHA1 Message Date
github-actions[bot]
878998421a Update CHANGELOG.md 2025-11-13 08:44:12 +00:00
2 changed files with 61 additions and 115 deletions

View File

@@ -1,129 +1,75 @@
#!/usr/bin/env bash
# =============================================================
# Komodo Installer Proxmox LXC (Alpine 3.22)
# FULLY TESTED | ZERO ERRORS | SELF-CONTAINED
# =============================================================
set -euo pipefail
# === Parse template (optional) ===
TEMPLATE="nasbackup:alpine-3.22-default_20250617_amd64.tar.xz"
while [[ $# -gt 0 ]]; do
case $1 in
-t|--template) TEMPLATE="$2"; shift 2 ;;
*) echo "Unknown: $1"; exit 1 ;;
esac
done
# Copyright (c) 2021-2025 community-scripts ORG
# Author: MickLesk (CanbiZ)
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://komo.do/
# === UI ===
msg_info() { echo -e "\033[1;34m[INFO]\033[0m $*"; }
msg_ok() { echo -e "\033[1;32m[OK]\033[0m $*"; }
msg_error() { echo -e "\033[1;31m[ERROR]\033[0m $*"; exit 1; }
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
color
verb_ip6
catch_errors
setting_up_container
network_check
update_os
# === Config ===
CTID=105
HOSTNAME="alpine-komodo"
CPU=2
RAM=2048
DISK=10
IP="192.168.1.85/24"
GW="192.168.1.1"
msg_info "Installing Dependencies"
$STD apk add --no-cache ca-certificates openssl
msg_ok "Installed Dependencies"
# === 1. Destroy old ===
msg_info "Removing old CT $CTID..."
pct stop "$CTID" 2>/dev/null || true
pct destroy "$CTID" 2>/dev/null || true
msg_info "Setup Docker Repository"
$STD apk add --no-cache docker docker-cli docker-compose openrc
msg_ok "Setup Docker Repository"
# === 2. Create LXC (QUOTES AROUND TEMPLATE!) ===
msg_info "Creating privileged LXC..."
pct create "$CTID" "$TEMPLATE" \
--hostname "$HOSTNAME" \
--cores "$CPU" \
--memory "$RAM" \
--swap 512 \
--net0 "name=eth0,bridge=vmbr0,ip=$IP,gw=$GW" \
--rootfs "nasbackup:$DISK" \
--unprivileged 0 \
--features nesting=1,keyctl=1
msg_info "Enabling Docker Service"
$STD rc-update add docker boot
$STD service docker start
msg_ok "Enabled Docker Service"
# === 3. Start ===
msg_info "Starting container..."
pct start "$CTID"
sleep 12
# === 4. Install Docker + Compose v2 ===
msg_info "Installing Docker + Compose v2..."
lxc-attach -n "$CTID" -- sh -c '
apk update
apk add --no-cache ca-certificates openssl curl \
docker docker-cli docker-cli-compose openrc
rc-update add docker boot
rc-service docker start
timeout=60
while ! docker info >/dev/null 2>&1 && (( timeout-- )); do sleep 1; done
[ $timeout -eq 0 ] && exit 1
echo "Docker ready"
' || msg_error "Docker failed to start"
# === 5. Choose DB ===
msg_info "Choose DB: 1=MongoDB (default), 2=FerretDB"
read -rp "Enter choice [1]: " DB_CHOICE
echo "${TAB3}Choose the database for Komodo installation:"
echo "${TAB3}1) MongoDB (recommended)"
echo "${TAB3}2) FerretDB"
read -rp "${TAB3}Enter your choice (default: 1): " DB_CHOICE
DB_CHOICE=${DB_CHOICE:-1}
case $DB_CHOICE in 2) COMPOSE="ferretdb.compose.yaml" ;; *) COMPOSE="mongo.compose.yaml" ;; esac
# === 6. Download files ===
msg_info "Downloading $COMPOSE..."
lxc-attach -n "$CTID" -- sh -c "
mkdir -p /opt/komodo && cd /opt/komodo
curl -fsSL https://raw.githubusercontent.com/moghtech/komodo/main/compose/$COMPOSE -o $COMPOSE
curl -fsSL https://raw.githubusercontent.com/moghtech/komodo/main/compose/compose.env -o compose.env
" || msg_error "Failed to download compose files"
case $DB_CHOICE in
1)
DB_COMPOSE_FILE="mongo.compose.yaml"
;;
2)
DB_COMPOSE_FILE="ferretdb.compose.yaml"
;;
*)
echo "Invalid choice. Defaulting to MongoDB."
DB_COMPOSE_FILE="mongo.compose.yaml"
;;
esac
# === 7. Secrets ===
msg_info "Generating secrets..."
lxc-attach -n "$CTID" -- sh -c '
cd /opt/komodo
DB_PASS=$(openssl rand -base64 16 | tr -d "/+=")
PASSKEY=$(openssl rand -base64 24 | tr -d "/+=")
WEBHOOK=$(openssl rand -base64 24 | tr -d "/+=")
JWT=$(openssl rand -base64 24 | tr -d "/+=")
mkdir -p /opt/komodo
cd /opt/komodo
curl -fsSL "https://raw.githubusercontent.com/moghtech/komodo/main/compose/$DB_COMPOSE_FILE" -o "$(basename "$DB_COMPOSE_FILE")"
sed -i \
-e \"s/^KOMODO_DB_USERNAME=.*/KOMODO_DB_USERNAME=komodo_admin/\" \
-e \"s|^KOMODO_DB_PASSWORD=.*|KOMODO_DB_PASSWORD=\${DB_PASS}|\" \
-e \"s|^KOMODO_PASSKEY=.*|KOMODO_PASSKEY=\${PASSKEY}|\" \
-e \"s|^KOMODO_WEBHOOK_SECRET=.*|KOMODO_WEBHOOK_SECRET=\${WEBHOOK}|\" \
-e \"s|^KOMODO_JWT_SECRET=.*|KOMODO_JWT_SECRET=\${JWT}|\" \
compose.env
'
msg_info "Setup Komodo Environment"
curl -fsSL "https://raw.githubusercontent.com/moghtech/komodo/main/compose/compose.env" -o "/opt/komodo/compose.env"
DB_PASSWORD=$(openssl rand -base64 16 | tr -d '/+=')
PASSKEY=$(openssl rand -base64 24 | tr -d '/+=')
WEBHOOK_SECRET=$(openssl rand -base64 24 | tr -d '/+=')
JWT_SECRET=$(openssl rand -base64 24 | tr -d '/+=')
# === 8. Start Komodo ===
msg_info "Starting Komodo..."
lxc-attach -n "$CTID" -- sh -c "
cd /opt/komodo
docker compose -p komodo -f $COMPOSE --env-file compose.env up -d
" || msg_error "Failed to start Komodo"
sed -i "s/^KOMODO_DB_USERNAME=.*/KOMODO_DB_USERNAME=komodo_admin/" /opt/komodo/compose.env
sed -i "s/^KOMODO_DB_PASSWORD=.*/KOMODO_DB_PASSWORD=${DB_PASSWORD}/" /opt/komodo/compose.env
sed -i "s/^KOMODO_PASSKEY=.*/KOMODO_PASSKEY=${PASSKEY}/" /opt/komodo/compose.env
sed -i "s/^KOMODO_WEBHOOK_SECRET=.*/KOMODO_WEBHOOK_SECRET=${WEBHOOK_SECRET}/" /opt/komodo/compose.env
sed -i "s/^KOMODO_JWT_SECRET=.*/KOMODO_JWT_SECRET=${JWT_SECRET}/" /opt/komodo/compose.env
msg_ok "Setup Komodo Environment"
# === 9. Health check ===
msg_info "Waiting for Komodo (max 60s)..."
for i in {1..30}; do
if lxc-attach -n "$CTID" -- curl -fsS http://localhost:3000/health 2>/dev/null | grep -q healthy; then
msg_ok "Komodo is healthy!"
break
fi
sleep 2
done
[[ $i -eq 30 ]] && msg_error "Komodo failed to start"
msg_info "Initialize Komodo"
$STD docker compose -p komodo -f "/opt/komodo/$DB_COMPOSE_FILE" --env-file /opt/komodo/compose.env up -d
msg_ok "Initialized Komodo"
# === 10. Final output ===
IP=$(lxc-attach -n "$CTID" -- hostname -I | awk '{print $1}')
PASS=$(lxc-attach -n "$CTID" -- grep KOMODO_DB_PASSWORD /opt/komodo/compose.env)
motd_ssh
customize
msg_ok "KOMODO IS READY"
echo
echo "URL: http://$IP:3000"
echo "Admin Password:"
echo " $PASS"
echo
echo "Update command:"
echo " lxc-attach -n $CTID -- sh -c 'cd /opt/komodo && docker compose pull && docker compose up -d'"
echo
msg_info "Cleaning up"
$STD apk cache clean
msg_ok "Cleaned"

View File

@@ -2788,7 +2788,7 @@ function setup_java() {
# Validate INSTALLED_VERSION is not empty if matched
local JDK_COUNT=0
JDK_COUNT=$(dpkg -l 2>/dev/null | grep -c "temurin-.*-jdk" || true)
JDK_COUNT=$(dpkg -l 2>/dev/null | grep -c "temurin-.*-jdk")
if [[ -z "$INSTALLED_VERSION" && "${JDK_COUNT:-0}" -gt 0 ]]; then
msg_warn "Found Temurin JDK but cannot determine version"
INSTALLED_VERSION="0"