128 lines
3.8 KiB
Bash
128 lines
3.8 KiB
Bash
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
NODE_MAJOR_REQUIRED=22
|
|
NODESOURCE_SETUP_URL="https://deb.nodesource.com/setup_${NODE_MAJOR_REQUIRED}.x"
|
|
MIN_DISK_MB=2048
|
|
MIN_MEMORY_MB=768
|
|
|
|
SCRIPT_DIR="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)"
|
|
REPO_ROOT="$(cd -- "${SCRIPT_DIR}/.." && pwd)"
|
|
|
|
if [[ "${1:-}" != "--run" ]]; then
|
|
echo "Dieses Setup-Script macht ohne explizites --run nichts."
|
|
echo
|
|
echo "So startest du es bewusst:"
|
|
echo " bash scripts/install-local-dependencies.sh --run"
|
|
echo
|
|
echo "Es installiert nur Webapp-Abhaengigkeiten, keine DB und kein Docker."
|
|
exit 0
|
|
fi
|
|
|
|
if [[ ! -f "${REPO_ROOT}/package.json" ]]; then
|
|
echo "Repo-Root nicht gefunden. Erwartet: ${REPO_ROOT}/package.json"
|
|
exit 1
|
|
fi
|
|
|
|
if ! command -v apt-get >/dev/null 2>&1; then
|
|
echo "Dieses Setup-Script unterstuetzt aktuell Debian/Ubuntu mit apt-get."
|
|
exit 1
|
|
fi
|
|
|
|
SUDO=()
|
|
if [[ "${EUID}" -ne 0 ]]; then
|
|
if ! command -v sudo >/dev/null 2>&1; then
|
|
echo "Bitte als root ausfuehren oder sudo installieren."
|
|
exit 1
|
|
fi
|
|
SUDO=(sudo)
|
|
fi
|
|
|
|
run_apt() {
|
|
if [[ "${#SUDO[@]}" -gt 0 ]]; then
|
|
"${SUDO[@]}" env DEBIAN_FRONTEND=noninteractive apt-get "$@"
|
|
else
|
|
DEBIAN_FRONTEND=noninteractive apt-get "$@"
|
|
fi
|
|
}
|
|
|
|
run_as_root_preserve_env() {
|
|
if [[ "${#SUDO[@]}" -gt 0 ]]; then
|
|
"${SUDO[@]}" -E "$@"
|
|
else
|
|
"$@"
|
|
fi
|
|
}
|
|
|
|
node_major() {
|
|
node -p 'Number(process.versions.node.split(".")[0])' 2>/dev/null || echo 0
|
|
}
|
|
|
|
available_memory_mb() {
|
|
awk '/MemAvailable:/ { print int($2 / 1024) }' /proc/meminfo 2>/dev/null || echo 0
|
|
}
|
|
|
|
available_disk_mb() {
|
|
df -Pm "${REPO_ROOT}" | awk 'NR == 2 { print $4 }'
|
|
}
|
|
|
|
if [[ "${SKIP_RESOURCE_CHECK:-false}" != "true" ]]; then
|
|
AVAILABLE_DISK_MB="$(available_disk_mb)"
|
|
AVAILABLE_MEMORY_MB="$(available_memory_mb)"
|
|
|
|
if [[ "${AVAILABLE_DISK_MB}" -lt "${MIN_DISK_MB}" ]]; then
|
|
echo "Zu wenig freier Speicherplatz fuer npm-Abhaengigkeiten."
|
|
echo "Frei: ${AVAILABLE_DISK_MB} MB, benoetigt empfohlen: mindestens ${MIN_DISK_MB} MB."
|
|
echo "Falls du das bewusst trotzdem starten willst: SKIP_RESOURCE_CHECK=true bash scripts/install-local-dependencies.sh --run"
|
|
exit 1
|
|
fi
|
|
|
|
if [[ "${AVAILABLE_MEMORY_MB}" -gt 0 && "${AVAILABLE_MEMORY_MB}" -lt "${MIN_MEMORY_MB}" ]]; then
|
|
echo "Zu wenig freier Arbeitsspeicher fuer eine stabile npm-Installation."
|
|
echo "Frei: ${AVAILABLE_MEMORY_MB} MB, benoetigt empfohlen: mindestens ${MIN_MEMORY_MB} MB."
|
|
echo "Falls Swap vorhanden ist und du das bewusst trotzdem starten willst: SKIP_RESOURCE_CHECK=true bash scripts/install-local-dependencies.sh --run"
|
|
exit 1
|
|
fi
|
|
fi
|
|
|
|
echo "Installiere Basiswerkzeuge fuer die lokale Webapp..."
|
|
run_apt update
|
|
run_apt install -y ca-certificates curl gnupg git bash build-essential
|
|
|
|
CURRENT_NODE_MAJOR="$(node_major)"
|
|
if [[ "${CURRENT_NODE_MAJOR}" -lt "${NODE_MAJOR_REQUIRED}" ]]; then
|
|
echo "Installiere Node.js ${NODE_MAJOR_REQUIRED}.x ueber NodeSource..."
|
|
TMP_SETUP="$(mktemp)"
|
|
curl -fsSL "${NODESOURCE_SETUP_URL}" -o "${TMP_SETUP}"
|
|
run_as_root_preserve_env bash "${TMP_SETUP}"
|
|
rm -f "${TMP_SETUP}"
|
|
run_apt install -y nodejs
|
|
else
|
|
echo "Node.js $(node --version) ist bereits kompatibel."
|
|
fi
|
|
|
|
CURRENT_NODE_MAJOR="$(node_major)"
|
|
if [[ "${CURRENT_NODE_MAJOR}" -lt "${NODE_MAJOR_REQUIRED}" ]]; then
|
|
echo "Node.js >= ${NODE_MAJOR_REQUIRED} wird benoetigt, aktiv ist aber: $(node --version 2>/dev/null || echo nicht installiert)"
|
|
exit 1
|
|
fi
|
|
|
|
if ! command -v npm >/dev/null 2>&1; then
|
|
echo "npm wurde nicht gefunden. Bitte Node.js/npm Installation pruefen."
|
|
exit 1
|
|
fi
|
|
|
|
echo "Installiere npm-Abhaengigkeiten im Repo..."
|
|
cd "${REPO_ROOT}"
|
|
if [[ -f package-lock.json ]]; then
|
|
npm ci --include=dev
|
|
else
|
|
npm install --include=dev
|
|
fi
|
|
|
|
chmod +x "${REPO_ROOT}/scripts/start-local.sh"
|
|
|
|
echo
|
|
echo "Fertig. Zum Starten noch DATABASE_URL setzen und dann ausfuehren:"
|
|
echo " npm run serve:local"
|