Add komodo-install-proxmox
This commit is contained in:
200
komodo-install-proxmox
Normal file
200
komodo-install-proxmox
Normal file
@@ -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 <CTID>${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}"
|
||||
Reference in New Issue
Block a user