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