Files
OPENBUREAU/proxmox/nextcloud-lxc.sh
T
karim b67b24a53c 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>
2026-06-03 01:20:43 +02:00

94 lines
3.4 KiB
Bash
Executable File

#!/usr/bin/env bash
#
# Nextcloud (All-in-One) als eigener LXC für Proxmox VE.
# Dateien, Kalender, Kontakte, Office in einem verwalteten Container —
# ersetzt OneDrive / Synology-Drive + Office 365.
#
# AUF DEM PROXMOX-HOST, als root:
# bash <(curl -fsSL https://git.kgva.ch/karim/OPENBUREAU/raw/branch/main/proxmox/nextcloud-lxc.sh) [disk_gb] [ram_mb]
#
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() {
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 #################################
# Grosszügig dimensioniert — hier leben die Bürodaten.
DISK="${1:-500}"; RAM="${2:-8192}"
create_lxc nextcloud "$DISK" "$RAM"
install_docker "$CTID"
say "Starte Nextcloud All-in-One (mastercontainer)…"
pct exec "$CTID" -- bash -euo pipefail -c '
docker run -d --name nextcloud-aio-mastercontainer --restart always \
-p 8080:8080 -e APACHE_PORT=11000 \
-v nextcloud_aio_mastercontainer:/mnt/docker-aio-config \
-v /var/run/docker.sock:/var/run/docker.sock:ro \
nextcloud/all-in-one:latest >/dev/null
'
IP="$(ip_of "$CTID")"
ok "Nextcloud-LXC $CTID läuft."
cat <<EOF
Einrichtung im Browser: https://${IP}:8080
Dort Admin-Passwort + Domain setzen — Nextcloud startet dann die übrigen
Container (Datenbank, Office, Talk …) selbst.
Ohne eigene Domain ist das vorerst nur im LAN erreichbar. Für den Zugriff
von aussen einen Reverse-Proxy davorsetzen.
EOF