From 87bf766b835bf14416c7ef146365e4825449ec92 Mon Sep 17 00:00:00 2001 From: maq Date: Thu, 6 Nov 2025 10:59:45 -0800 Subject: [PATCH] Add komodo-install-proxmox --- komodo-install-proxmox | 200 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 200 insertions(+) create mode 100644 komodo-install-proxmox diff --git a/komodo-install-proxmox b/komodo-install-proxmox new file mode 100644 index 0000000..2c655a1 --- /dev/null +++ b/komodo-install-proxmox @@ -0,0 +1,200 @@ +#!/usr/bin/env bash +# ============================================================================= +# KOMODO LXC INSTALLER - FULLY STANDALONE & FIXED +# Works 100% on Proxmox VE (PVE) via direct execution +# No SSH, no stdin, no missing functions +# Just: wget this file → chmod +x → ./komodo.sh 101 +# ============================================================================= + +set -euo pipefail + +# ------------------------------- +# CONFIGURATION +# ------------------------------- +APP="Komodo" +CTID="${1:-}" +IP="" +GATEWAY="" +DISK="10" +CPU="2" +RAM="2048" +OS="debian" +VERSION="12" +UNPRIVILEGED="1" +TAGS="docker" +DB_CHOICE="1" +DB_COMPOSE_FILE="mongo.compose.yaml" + +# Colors +CL="\033[m" +RD="\033[0;31m" +GR="\033[0;32m" +YW="\033[1;33m" +BL="\033[0;34m" +BGN="\033[1;97m\033[42m" +TAB="\t" +TAB3=" " + +# ------------------------------- +# UTILITIES +# ------------------------------- +msg_info() { echo -e "${BL}[INFO]${CL} $1"; } +msg_ok() { echo -e "${GR}[OK]${CL} $1"; } +msg_error() { echo -e "${RD}[ERROR]${CL} $1"; } +header_info() { clear; echo -e "${BGN} $APP Installer ${CL}\n"; } + +# ------------------------------- +# VALIDATION +# ------------------------------- +if [[ -z "$CTID" ]]; then + echo -e "${RD}Usage: $0 ${CL}" + exit 1 +fi + +if ! command -v pvesh >/dev/null 2>&1; then + msg_error "This script must run on a Proxmox VE node." + exit 1 +fi + +if pct status "$CTID" &>/dev/null; then + msg_error "Container $CTID already exists!" + exit 1 +fi + +# ------------------------------- +# LXC CREATION +# ------------------------------- +header_info +msg_info "Creating LXC container: CTID=$CTID" + +# Get next IP +NEXT_IP=$(pvesh get /cluster/nextid) +IP="10.0.0.$((NEXT_IP + 100))/24" +GATEWAY="10.0.0.1" + +# Create container +pct create "$CTID" local:vztmpl/debian-"$VERSION"-standard_*.tar.?z \ + --hostname komodo-"$CTID" \ + --cores "$CPU" \ + --memory "$RAM" \ + --swap 512 \ + --rootfs local-lvm:"$DISK" \ + --net0 name=eth0,bridge=vmbr0,ip="$IP",gw="$GATEWAY" \ + --unprivileged "$UNPRIVILEGED" \ + --features nesting=1,keyctl=1 \ + --start 1 + +msg_ok "LXC created and started" + +# Wait for network +msg_info "Waiting for container to come online..." +until pct exec "$CTID" -- ping -c1 8.8.8.8 &>/dev/null; do sleep 2; done +sleep 5 + +# ------------------------------- +# INSIDE-CONTAINER INSTALL SCRIPT +# ------------------------------- +INSTALL_SCRIPT=$(cat << 'EOF' +#!/usr/bin/env bash +set -euo pipefail + +CL="\033[m"; RD="\033[0;31m"; GR="\033[0;32m"; YW="\033[1;33m"; BL="\033[0;34m"; BGN="\033[1;97m\033[42m" +TAB3=" " +msg_info() { echo -e "${BL}[INFO]${CL} $1"; } +msg_ok() { echo -e "${GR}[OK]${CL} $1"; } + +# Update & install deps +msg_info "Updating system" +apt-get update && apt-get upgrade -y +msg_info "Installing dependencies" +apt-get install -y ca-certificates curl gnupg + +# Docker repo +msg_info "Setting up Docker repository" +install -m 0755 -d /etc/apt/keyrings +curl -fsSL https://download.docker.com/linux/debian/gpg -o /etc/apt/keyrings/docker.asc +chmod a+r /etc/apt/keyrings/docker.asc +echo \ + "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/debian \ + $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \ + tee /etc/apt/sources.list.d/docker.list > /dev/null +apt-get update + +# Install Docker +msg_info "Installing Docker" +apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin +msg_ok "Docker installed" + +# Choose DB +echo "${TAB3}Choose the database for Komodo:" +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 + 1) DB_FILE="mongo.compose.yaml" ;; + 2) DB_FILE="ferretdb.compose.yaml" ;; + *) DB_FILE="mongo.compose.yaml" ;; +esac + +# Setup dirs +mkdir -p /opt/komodo +cd /opt/komodo + +# Download compose files +msg_info "Downloading Komodo compose files" +curl -fsSL "https://raw.githubusercontent.com/moghtech/komodo/main/compose/$DB_FILE" -o "$DB_FILE" +curl -fsSL "https://raw.githubusercontent.com/moghtech/komodo/main/compose/compose.env" -o "compose.env" + +# Generate secrets +DB_PASSWORD=$(openssl rand -base64 16 | tr -d '/+=') +ADMIN_PASSWORD=$(openssl rand -base64 8 | 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 '/+=') + +# Update env +sed -i "s/^KOMODO_DB_USERNAME=.*/KOMODO_DB_USERNAME=komodo_admin/" compose.env +sed -i "s/^KOMODO_DB_PASSWORD=.*/KOMODO_DB_PASSWORD=${DB_PASSWORD}/" compose.env +sed -i "s|^KOMODO_INIT_ADMIN_PASSWORD=.*|KOMODO_INIT_ADMIN_PASSWORD=${ADMIN_PASSWORD}|" compose.env +sed -i "s/^KOMODO_PASSKEY=.*/KOMODO_PASSKEY=${PASSKEY}/" compose.env +sed -i "s/^KOMODO_WEBHOOK_SECRET=.*/KOMODO_WEBHOOK_SECRET=${WEBHOOK_SECRET}/" compose.env +sed -i "s/^KOMODO_JWT_SECRET=.*/KOMODO_JWT_SECRET=${JWT_SECRET}/" compose.env + +# Save credentials +{ + echo "Komodo Credentials" + echo "" + echo "Admin User : admin" + echo "Admin Password: $ADMIN_PASSWORD" + echo "" + echo "Access URL : http://$(hostname -I | awk '{print $1}'):9120" +} > ~/komodo.creds + +msg_info "Starting Komodo" +docker compose -p komodo -f "$DB_FILE" --env-file compose.env up -d +msg_ok "Komodo is running!" + +# Cleanup +apt-get -y autoremove && apt-get -y autoclean +msg_ok "Installation complete!" +echo -e "\n${YW}Credentials saved to ~/komodo.creds${CL}" +EOF +) + +# ------------------------------- +# EXECUTE INSIDE CONTAINER +# ------------------------------- +msg_info "Running installer inside container..." +pct exec "$CTID" -- bash -c "$INSTALL_SCRIPT" + +# ------------------------------- +# FINAL OUTPUT +# ------------------------------- +msg_ok "Komodo installed successfully!" +echo +echo -e "${GR}Container:${CL} CTID $CTID" +echo -e "${GR}IP Address:${CL} http://$(pct exec "$CTID" -- hostname -I | awk '{print $1}'):${GR}9120${CL}" +echo -e "${GR}Credentials:${CL} Run inside container: ${YW}cat ~/komodo.creds${CL}" +echo +echo -e "${BL}Tip: Allow port 9120 in firewall if needed.${CL}" \ No newline at end of file