proxmox: Selbsthosting-Set (Dialog-Suite + Einzelskripte) + 2 Artikel
Geführter Installer proxmox/install.sh: erst Vorhaben wählen (Komplettes Büro / 365+Synology ersetzen / nur Website / einzeln), dann werden die nötigen LXCs der Reihe nach gebaut. Jeder Dienst ist auch als eigenständiges, einzeln curlbares Skript verfügbar: - proxmox/nextcloud-lxc.sh Nextcloud AIO (ersetzt 365/Synology) - proxmox/empty-lxc.sh leerer Docker-LXC als Geruest - proxmox/git-compose-lxc.sh beliebiges Git-Repo (RAPPORT/DOSSIER) - (OPENBUREAU: bestehendes cms/proxmox/create-openbureau-lxc.sh) Gemeinsames Muster: unprivilegierter Debian-12-LXC mit nesting+keyctl, Docker via get.docker.com, Dienst als Container/Compose. proxmox/README.md dokumentiert beide Wege. Dazu zwei Bibliotheksbeitraege (Hochparterre-Ton): - server-im-eigenen-haus.md — das Warum/Ziel - proxmox-schritt-fuer-schritt.md — die Anleitung mit curl-Befehlen Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
Executable
+74
@@ -0,0 +1,74 @@
|
||||
#!/usr/bin/env bash
|
||||
#
|
||||
# Leerer, Docker-tauglicher LXC für Proxmox VE — das Gerüst für eigene Dienste.
|
||||
#
|
||||
# AUF DEM PROXMOX-HOST, als root:
|
||||
# bash <(curl -fsSL https://git.kgva.ch/karim/OPENBUREAU/raw/branch/main/proxmox/empty-lxc.sh) [name] [disk_gb] [ram_mb]
|
||||
#
|
||||
# Beispiel: … empty-lxc.sh dateien 200 8192
|
||||
#
|
||||
set -euo pipefail
|
||||
|
||||
############################# gemeinsamer Kopf #############################
|
||||
SSH_PUBKEY_FILE="${SSH_PUBKEY_FILE:-$HOME/.ssh/id_ed25519.pub}"
|
||||
ROOTFS_STORAGE="${ROOTFS_STORAGE:-local-lvm}"
|
||||
TEMPLATE_STORAGE="${TEMPLATE_STORAGE:-local}"
|
||||
BRIDGE="${BRIDGE:-vmbr0}"
|
||||
|
||||
say() { echo -e "\n\033[1;36m▸ $*\033[0m"; }
|
||||
ok() { echo -e "\033[1;32m✓ $*\033[0m"; }
|
||||
warn() { echo -e "\033[1;33m! $*\033[0m" >&2; }
|
||||
die() { echo -e "\033[1;31m✗ $*\033[0m" >&2; exit 1; }
|
||||
|
||||
[ "$(id -u)" -eq 0 ] || die "Bitte als root auf dem Proxmox-Host ausführen."
|
||||
command -v pct >/dev/null || die "pct nicht gefunden — läuft das wirklich auf Proxmox VE?"
|
||||
|
||||
ensure_template() {
|
||||
[ -n "${TEMPLATE_REF:-}" ] && return 0
|
||||
pveam update >/dev/null 2>&1 || true
|
||||
local tpl
|
||||
tpl="$(pveam available --section system | awk '/debian-12-standard/{print $2}' | sort -V | tail -1)"
|
||||
[ -n "$tpl" ] || die "Kein debian-12-Template verfügbar."
|
||||
pveam list "$TEMPLATE_STORAGE" | grep -q "$tpl" || { say "Lade Template $tpl…"; pveam download "$TEMPLATE_STORAGE" "$tpl" >/dev/null; }
|
||||
TEMPLATE_REF="${TEMPLATE_STORAGE}:vztmpl/${tpl}"
|
||||
}
|
||||
|
||||
# create_lxc <name> <disk_gb> <ram_mb> [cores] — setzt $CTID
|
||||
create_lxc() {
|
||||
local name="$1" disk="$2" ram="$3" cores="${4:-2}" ctid
|
||||
ensure_template
|
||||
ctid="$(pvesh get /cluster/nextid)"
|
||||
local args=(
|
||||
"$ctid" "$TEMPLATE_REF" --hostname "$name"
|
||||
--cores "$cores" --memory "$ram" --swap 1024
|
||||
--rootfs "${ROOTFS_STORAGE}:${disk}"
|
||||
--net0 "name=eth0,bridge=${BRIDGE},ip=dhcp"
|
||||
--unprivileged 1 --features "nesting=1,keyctl=1" --onboot 1
|
||||
)
|
||||
[ -f "$SSH_PUBKEY_FILE" ] && args+=(--ssh-public-keys "$SSH_PUBKEY_FILE")
|
||||
say "Erstelle LXC $ctid ($name) — ${cores} Kerne, ${ram} MB RAM, ${disk} GB…"
|
||||
pct create "${args[@]}" >/dev/null
|
||||
pct start "$ctid"; sleep 5
|
||||
CTID="$ctid"
|
||||
}
|
||||
|
||||
install_docker() {
|
||||
say "Installiere Docker in $1…"
|
||||
pct exec "$1" -- bash -euo pipefail -c '
|
||||
export DEBIAN_FRONTEND=noninteractive
|
||||
apt-get update -qq
|
||||
apt-get install -y -qq ca-certificates curl git openssl >/dev/null
|
||||
curl -fsSL https://get.docker.com | sh >/dev/null
|
||||
systemctl enable --now docker
|
||||
'
|
||||
}
|
||||
|
||||
ip_of() { pct exec "$1" -- hostname -I 2>/dev/null | awk '{print $1}'; }
|
||||
|
||||
################################# Dienst #################################
|
||||
NAME="${1:-docker}"; DISK="${2:-20}"; RAM="${3:-4096}"
|
||||
|
||||
create_lxc "$NAME" "$DISK" "$RAM"
|
||||
install_docker "$CTID"
|
||||
ok "Leerer Docker-LXC $CTID ($NAME) läuft unter $(ip_of "$CTID")."
|
||||
echo " Hinein: pct enter $CTID"
|
||||
Reference in New Issue
Block a user