Ameliore le deploiement Proxmox derriere un reverse proxy

This commit is contained in:
2026-04-14 20:49:22 +02:00
parent d36da7c993
commit d7b743606a
3 changed files with 126 additions and 9 deletions

View File

@@ -22,6 +22,7 @@ Options principales:
--local Execute directement sur l'hote Proxmox local
--ctid CTID du LXC a mettre a jour
--hostname Nom du LXC si le CTID n'est pas fourni (defaut: chesscubing-web)
--disk-gb Taille disque cible du LXC en Go si un agrandissement est necessaire
--repo-url Depot Git principal a deployer
--branch Branche Git a deployer (defaut: main)
--ethan-repo-url Depot Git de l'application Ethan
@@ -54,6 +55,7 @@ LOCAL_MODE="0"
CTID=""
LXC_HOSTNAME="chesscubing-web"
TARGET_DISK_GB=""
REPO_URL="https://git.jeannerot.fr/christophe/chesscubing.git"
REPO_BRANCH="main"
ETHAN_REPO_URL="https://git.jeannerot.fr/Mineloulou/Chesscubing.git"
@@ -95,6 +97,10 @@ while [[ $# -gt 0 ]]; do
LXC_HOSTNAME="${2:-}"
shift 2
;;
--disk-gb)
TARGET_DISK_GB="${2:-}"
shift 2
;;
--repo-url)
REPO_URL="${2:-}"
shift 2
@@ -174,12 +180,60 @@ public_base_url="$9"
web_port="${10}"
keycloak_admin_user="${11}"
keycloak_admin_password="${12}"
target_disk_gb="${13}"
die() {
printf 'Erreur: %s\n' "$*" >&2
exit 1
}
size_to_mb() {
local raw="${1^^}"
case "$raw" in
*T) echo $(( ${raw%T} * 1024 * 1024 )) ;;
*G) echo $(( ${raw%G} * 1024 )) ;;
*M) echo $(( ${raw%M} )) ;;
*K) echo $(( ${raw%K} / 1024 )) ;;
*) echo "$raw" ;;
esac
}
get_current_rootfs_mb() {
local size
size="$(pct config "$ctid" | awk -F'[:,=]' '/^rootfs:/ { for (i = 1; i <= NF; i++) { if ($i == "size") { print $(i + 1); exit } } }')"
[[ -n "$size" ]] || return 1
size_to_mb "$size"
}
ensure_rootfs_capacity() {
local requested_gb="$1"
local current_mb
local requested_mb
local delta_mb
local delta_gb
local current_gb
[[ -n "$requested_gb" ]] || return 0
[[ "$requested_gb" =~ ^[0-9]+$ ]] || die "La valeur de --disk-gb doit etre un entier en Go."
current_mb="$(get_current_rootfs_mb)" || die "Impossible de lire la taille actuelle du disque rootfs du LXC."
requested_mb=$(( requested_gb * 1024 ))
if (( current_mb >= requested_mb )); then
return 0
fi
delta_mb=$(( requested_mb - current_mb ))
delta_gb=$(( (delta_mb + 1023) / 1024 ))
current_gb=$(( (current_mb + 1023) / 1024 ))
printf 'Agrandissement du disque rootfs du LXC: %sG -> %sG (+%sG).\n' "$current_gb" "$requested_gb" "$delta_gb"
pct resize "$ctid" rootfs "+${delta_gb}G" >/dev/null
}
find_ctid_by_hostname() {
local wanted="$1"
local candidate=""
@@ -214,6 +268,8 @@ if [[ -n "$detected_hostname" ]]; then
lxc_hostname="$detected_hostname"
fi
ensure_rootfs_capacity "$target_disk_gb"
if pct status "$ctid" | grep -q "running"; then
pct stop "$ctid"
fi
@@ -482,11 +538,38 @@ disable_legacy_nginx() {
systemctl disable --now nginx >/dev/null 2>&1 || true
}
prepare_disk_space() {
cd \"\$deploy_dir\"
docker compose down || true
docker system prune -af || true
apt-get clean || true
rm -rf /var/lib/apt/lists/* || true
}
ensure_free_space_mb() {
local required_mb=\"\$1\"
local available_mb
available_mb=\"\$(df -Pm / | awk 'NR == 2 { print \$4 }')\"
if [[ -z \"\$available_mb\" ]]; then
echo \"Impossible de mesurer l'espace disque libre dans le LXC.\" >&2
exit 1
fi
if (( available_mb < required_mb )); then
echo \"Espace disque insuffisant dans le LXC: \${available_mb} Mo libres, \${required_mb} Mo recommandes avant la reconstruction Docker.\" >&2
echo \"Relance le script avec --disk-gb 16 ou une valeur plus elevee si besoin.\" >&2
exit 1
fi
}
deploy_stack() {
cp \"\$env_file\" \"\$deploy_dir/.env\"
prepare_disk_space
ensure_free_space_mb 6144
cd \"\$deploy_dir\"
docker compose down || true
docker compose up -d --build
docker compose ps
}
@@ -531,7 +614,8 @@ if [[ "$LOCAL_MODE" == "1" ]]; then
"$PUBLIC_BASE_URL" \
"$WEB_PORT" \
"$KEYCLOAK_ADMIN_USER" \
"$KEYCLOAK_ADMIN_PASSWORD"
"$KEYCLOAK_ADMIN_PASSWORD" \
"$TARGET_DISK_GB"
exit 0
fi
@@ -567,4 +651,5 @@ sshpass -p "$PROXMOX_PASSWORD" \
"$PUBLIC_BASE_URL" \
"$WEB_PORT" \
"$KEYCLOAK_ADMIN_USER" \
"$KEYCLOAK_ADMIN_PASSWORD" < "$payload_script"
"$KEYCLOAK_ADMIN_PASSWORD" \
"$TARGET_DISK_GB" < "$payload_script"