Refactor OCI image handling in oci-deploy.sh
This commit is contained in:
parent
dae69a6690
commit
3f490abff1
@ -5,8 +5,8 @@
|
|||||||
# Source: https://www.proxmox.com/
|
# Source: https://www.proxmox.com/
|
||||||
|
|
||||||
function header_info {
|
function header_info {
|
||||||
clear
|
clear
|
||||||
cat <<"EOF"
|
cat <<"EOF"
|
||||||
____ ________ ______ __ _
|
____ ________ ______ __ _
|
||||||
/ __ \/ ____/ / / ____/___ ____ / /_____ _(_)___ ___ _____
|
/ __ \/ ____/ / / ____/___ ____ / /_____ _(_)___ ___ _____
|
||||||
/ / / / / / / / / / __ \/ __ \/ __/ __ `/ / __ \/ _ \/ ___/
|
/ / / / / / / / / / __ \/ __ \/ __/ __ `/ / __ \/ _ \/ ___/
|
||||||
@ -30,18 +30,18 @@ APP="OCI-Container"
|
|||||||
header_info
|
header_info
|
||||||
|
|
||||||
function msg_info() {
|
function msg_info() {
|
||||||
local msg="$1"
|
local msg="$1"
|
||||||
echo -e "${INFO} ${YW}${msg}...${CL}"
|
echo -e "${INFO} ${YW}${msg}...${CL}"
|
||||||
}
|
}
|
||||||
|
|
||||||
function msg_ok() {
|
function msg_ok() {
|
||||||
local msg="$1"
|
local msg="$1"
|
||||||
echo -e "${CM} ${GN}${msg}${CL}"
|
echo -e "${CM} ${GN}${msg}${CL}"
|
||||||
}
|
}
|
||||||
|
|
||||||
function msg_error() {
|
function msg_error() {
|
||||||
local msg="$1"
|
local msg="$1"
|
||||||
echo -e "${CROSS} ${RD}${msg}${CL}"
|
echo -e "${CROSS} ${RD}${msg}${CL}"
|
||||||
}
|
}
|
||||||
|
|
||||||
# Check Proxmox version
|
# Check Proxmox version
|
||||||
@ -87,23 +87,26 @@ if [[ -z "${OCI_IMAGE:-}" ]]; then
|
|||||||
echo -e " ${BL}6)${CL} Custom image"
|
echo -e " ${BL}6)${CL} Custom image"
|
||||||
echo -e "${YW}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${CL}"
|
echo -e "${YW}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${CL}"
|
||||||
echo ""
|
echo ""
|
||||||
|
|
||||||
read -r -p "Select option (1-6): " IMAGE_CHOICE
|
read -r -p "Select option (1-6): " IMAGE_CHOICE
|
||||||
|
|
||||||
case $IMAGE_CHOICE in
|
case $IMAGE_CHOICE in
|
||||||
1) OCI_IMAGE="nginx:alpine" ;;
|
1) OCI_IMAGE="nginx:alpine" ;;
|
||||||
2) OCI_IMAGE="postgres:16-alpine" ;;
|
2) OCI_IMAGE="postgres:16-alpine" ;;
|
||||||
3) OCI_IMAGE="redis:alpine" ;;
|
3) OCI_IMAGE="redis:alpine" ;;
|
||||||
4) OCI_IMAGE="mariadb:latest" ;;
|
4) OCI_IMAGE="mariadb:latest" ;;
|
||||||
5) OCI_IMAGE="ghcr.io/linkwarden/linkwarden:latest" ;;
|
5) OCI_IMAGE="ghcr.io/linkwarden/linkwarden:latest" ;;
|
||||||
6)
|
6)
|
||||||
read -r -p "Enter OCI image (e.g., ghcr.io/user/repo:tag): " OCI_IMAGE
|
read -r -p "Enter OCI image (e.g., ghcr.io/user/repo:tag): " OCI_IMAGE
|
||||||
[[ -z "$OCI_IMAGE" ]] && { msg_error "No image specified"; exit 1; }
|
[[ -z "$OCI_IMAGE" ]] && {
|
||||||
;;
|
msg_error "No image specified"
|
||||||
*)
|
|
||||||
msg_error "Invalid choice"
|
|
||||||
exit 1
|
exit 1
|
||||||
;;
|
}
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
msg_error "Invalid choice"
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
esac
|
esac
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@ -168,55 +171,55 @@ fi
|
|||||||
declare -a ENV_VARS=()
|
declare -a ENV_VARS=()
|
||||||
|
|
||||||
case "$OCI_IMAGE" in
|
case "$OCI_IMAGE" in
|
||||||
postgres*|postgresql*)
|
postgres* | postgresql*)
|
||||||
|
echo ""
|
||||||
|
msg_info "PostgreSQL requires environment variables"
|
||||||
|
read -r -p "PostgreSQL password: " -s PG_PASS
|
||||||
|
echo ""
|
||||||
|
ENV_VARS+=("POSTGRES_PASSWORD=$PG_PASS")
|
||||||
|
|
||||||
|
read -r -p "Create database (optional): " PG_DB
|
||||||
|
[[ -n "$PG_DB" ]] && ENV_VARS+=("POSTGRES_DB=$PG_DB")
|
||||||
|
|
||||||
|
read -r -p "PostgreSQL user (optional): " PG_USER
|
||||||
|
[[ -n "$PG_USER" ]] && ENV_VARS+=("POSTGRES_USER=$PG_USER")
|
||||||
|
;;
|
||||||
|
|
||||||
|
mariadb* | mysql*)
|
||||||
|
echo ""
|
||||||
|
msg_info "MariaDB/MySQL requires environment variables"
|
||||||
|
read -r -p "Root password: " -s MYSQL_PASS
|
||||||
|
echo ""
|
||||||
|
ENV_VARS+=("MYSQL_ROOT_PASSWORD=$MYSQL_PASS")
|
||||||
|
|
||||||
|
read -r -p "Create database (optional): " MYSQL_DB
|
||||||
|
[[ -n "$MYSQL_DB" ]] && ENV_VARS+=("MYSQL_DATABASE=$MYSQL_DB")
|
||||||
|
|
||||||
|
read -r -p "Create user (optional): " MYSQL_USER
|
||||||
|
if [[ -n "$MYSQL_USER" ]]; then
|
||||||
|
ENV_VARS+=("MYSQL_USER=$MYSQL_USER")
|
||||||
|
read -r -p "User password: " -s MYSQL_USER_PASS
|
||||||
echo ""
|
echo ""
|
||||||
msg_info "PostgreSQL requires environment variables"
|
ENV_VARS+=("MYSQL_PASSWORD=$MYSQL_USER_PASS")
|
||||||
read -r -p "PostgreSQL password: " -s PG_PASS
|
fi
|
||||||
echo ""
|
;;
|
||||||
ENV_VARS+=("POSTGRES_PASSWORD=$PG_PASS")
|
|
||||||
|
*linkwarden*)
|
||||||
read -r -p "Create database (optional): " PG_DB
|
echo ""
|
||||||
[[ -n "$PG_DB" ]] && ENV_VARS+=("POSTGRES_DB=$PG_DB")
|
msg_info "Linkwarden configuration"
|
||||||
|
read -r -p "NEXTAUTH_SECRET (press Enter to generate): " NEXTAUTH_SECRET
|
||||||
read -r -p "PostgreSQL user (optional): " PG_USER
|
if [[ -z "$NEXTAUTH_SECRET" ]]; then
|
||||||
[[ -n "$PG_USER" ]] && ENV_VARS+=("POSTGRES_USER=$PG_USER")
|
NEXTAUTH_SECRET=$(openssl rand -base64 32)
|
||||||
;;
|
fi
|
||||||
|
ENV_VARS+=("NEXTAUTH_SECRET=$NEXTAUTH_SECRET")
|
||||||
mariadb*|mysql*)
|
|
||||||
echo ""
|
read -r -p "NEXTAUTH_URL [http://localhost:3000]: " NEXTAUTH_URL
|
||||||
msg_info "MariaDB/MySQL requires environment variables"
|
NEXTAUTH_URL=${NEXTAUTH_URL:-http://localhost:3000}
|
||||||
read -r -p "Root password: " -s MYSQL_PASS
|
ENV_VARS+=("NEXTAUTH_URL=$NEXTAUTH_URL")
|
||||||
echo ""
|
|
||||||
ENV_VARS+=("MYSQL_ROOT_PASSWORD=$MYSQL_PASS")
|
read -r -p "DATABASE_URL (PostgreSQL connection string): " DATABASE_URL
|
||||||
|
[[ -n "$DATABASE_URL" ]] && ENV_VARS+=("DATABASE_URL=$DATABASE_URL")
|
||||||
read -r -p "Create database (optional): " MYSQL_DB
|
;;
|
||||||
[[ -n "$MYSQL_DB" ]] && ENV_VARS+=("MYSQL_DATABASE=$MYSQL_DB")
|
|
||||||
|
|
||||||
read -r -p "Create user (optional): " MYSQL_USER
|
|
||||||
if [[ -n "$MYSQL_USER" ]]; then
|
|
||||||
ENV_VARS+=("MYSQL_USER=$MYSQL_USER")
|
|
||||||
read -r -p "User password: " -s MYSQL_USER_PASS
|
|
||||||
echo ""
|
|
||||||
ENV_VARS+=("MYSQL_PASSWORD=$MYSQL_USER_PASS")
|
|
||||||
fi
|
|
||||||
;;
|
|
||||||
|
|
||||||
*linkwarden*)
|
|
||||||
echo ""
|
|
||||||
msg_info "Linkwarden configuration"
|
|
||||||
read -r -p "NEXTAUTH_SECRET (press Enter to generate): " NEXTAUTH_SECRET
|
|
||||||
if [[ -z "$NEXTAUTH_SECRET" ]]; then
|
|
||||||
NEXTAUTH_SECRET=$(openssl rand -base64 32)
|
|
||||||
fi
|
|
||||||
ENV_VARS+=("NEXTAUTH_SECRET=$NEXTAUTH_SECRET")
|
|
||||||
|
|
||||||
read -r -p "NEXTAUTH_URL [http://localhost:3000]: " NEXTAUTH_URL
|
|
||||||
NEXTAUTH_URL=${NEXTAUTH_URL:-http://localhost:3000}
|
|
||||||
ENV_VARS+=("NEXTAUTH_URL=$NEXTAUTH_URL")
|
|
||||||
|
|
||||||
read -r -p "DATABASE_URL (PostgreSQL connection string): " DATABASE_URL
|
|
||||||
[[ -n "$DATABASE_URL" ]] && ENV_VARS+=("DATABASE_URL=$DATABASE_URL")
|
|
||||||
;;
|
|
||||||
esac
|
esac
|
||||||
|
|
||||||
# Additional env vars
|
# Additional env vars
|
||||||
@ -271,11 +274,12 @@ fi
|
|||||||
# Create container
|
# Create container
|
||||||
msg_info "Creating container $VMID"
|
msg_info "Creating container $VMID"
|
||||||
|
|
||||||
PCT_CMD="pct create $VMID --ostemplate oci://$FULL_IMAGE"
|
# Build pct create command
|
||||||
|
PCT_CMD="pct create $VMID"
|
||||||
PCT_CMD+=" --hostname $CT_NAME"
|
PCT_CMD+=" --hostname $CT_NAME"
|
||||||
PCT_CMD+=" --cores $CORES"
|
PCT_CMD+=" --cores $CORES"
|
||||||
PCT_CMD+=" --memory $MEMORY"
|
PCT_CMD+=" --memory $MEMORY"
|
||||||
PCT_CMD+=" --rootfs ${STORAGE}:${DISK}"
|
PCT_CMD+=" --rootfs ${STORAGE}:${DISK},oci=${FULL_IMAGE}"
|
||||||
PCT_CMD+=" --unprivileged $UNPRIVILEGED"
|
PCT_CMD+=" --unprivileged $UNPRIVILEGED"
|
||||||
|
|
||||||
if [[ "$IP_MODE" == "static" && -n "$STATIC_IP" ]]; then
|
if [[ "$IP_MODE" == "static" && -n "$STATIC_IP" ]]; then
|
||||||
@ -310,11 +314,11 @@ if [[ "$START_AFTER" == "yes" ]]; then
|
|||||||
msg_info "Starting container"
|
msg_info "Starting container"
|
||||||
if pct start "$VMID" 2>&1; then
|
if pct start "$VMID" 2>&1; then
|
||||||
msg_ok "Container started"
|
msg_ok "Container started"
|
||||||
|
|
||||||
# Wait for network
|
# Wait for network
|
||||||
sleep 3
|
sleep 3
|
||||||
CT_IP=$(pct exec "$VMID" -- hostname -I 2>/dev/null | awk '{print $1}' || echo "N/A")
|
CT_IP=$(pct exec "$VMID" -- hostname -I 2>/dev/null | awk '{print $1}' || echo "N/A")
|
||||||
|
|
||||||
echo ""
|
echo ""
|
||||||
echo -e "${GN}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${CL}"
|
echo -e "${GN}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${CL}"
|
||||||
echo -e "${BL}Container Information:${CL}"
|
echo -e "${BL}Container Information:${CL}"
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user