73 lines
2.3 KiB
Bash
73 lines
2.3 KiB
Bash
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
PKG_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)" # version root
|
|
|
|
PROJECT_NAME="argus-sys"
|
|
|
|
log() { echo -e "\033[0;34m[INSTALL]\033[0m $*"; }
|
|
err() { echo -e "\033[0;31m[ERROR ]\033[0m $*" >&2; }
|
|
|
|
require() { command -v "$1" >/dev/null 2>&1 || { err "missing command: $1"; exit 1; }; }
|
|
|
|
require docker
|
|
if docker compose version >/dev/null 2>&1; then COMPOSE=(docker compose); else require docker-compose; COMPOSE=(docker-compose); fi
|
|
|
|
ENV_FILE="$PKG_ROOT/compose/.env"
|
|
ENV_TEMPLATE="$PKG_ROOT/compose/.env.example"
|
|
|
|
find_free_port() {
|
|
local prefer="$1"; local start=${2:-20000}; local max=${3:-65000};
|
|
if ! ss -ltnH 2>/dev/null | awk -v pat=":"$prefer"$" '$4 ~ pat{f=1} END{exit f?0:1}'; then echo "$prefer"; return; fi
|
|
for ((p=start; p<=max; p++)); do
|
|
if ! ss -ltnH 2>/dev/null | awk -v pat=":"$p"$" '$4 ~ pat{f=1} END{exit f?0:1}'; then echo "$p"; return; fi
|
|
done
|
|
return 1
|
|
}
|
|
|
|
prepare_env() {
|
|
if [[ -f "$ENV_FILE" ]]; then log ".env exists, keep as-is"; return; fi
|
|
[[ -f "$ENV_TEMPLATE" ]] || { err "missing $ENV_TEMPLATE"; exit 1; }
|
|
cp "$ENV_TEMPLATE" "$ENV_FILE"
|
|
# auto-assign ports if busy
|
|
for key in MASTER_PORT ES_HTTP_PORT KIBANA_PORT NODE_A_PORT NODE_B_PORT PROMETHEUS_PORT GRAFANA_PORT ALERTMANAGER_PORT \
|
|
WEB_PROXY_PORT_8080 WEB_PROXY_PORT_8081 WEB_PROXY_PORT_8082 WEB_PROXY_PORT_8083 WEB_PROXY_PORT_8084 WEB_PROXY_PORT_8085 \
|
|
FTP_PORT FTP_DATA_PORT; do
|
|
val=$(grep -E "^${key}=" "$ENV_FILE" | tail -1 | cut -d= -f2)
|
|
new=$(find_free_port "$val") || true
|
|
if [[ -n "${new:-}" && "$new" != "$val" ]]; then
|
|
sed -i "s/^${key}=.*/${key}=${new}/" "$ENV_FILE"
|
|
log "port ${key} busy -> ${new}"
|
|
fi
|
|
done
|
|
}
|
|
|
|
load_images() {
|
|
local tar="$PKG_ROOT/images/all-images.tar.gz"
|
|
[[ -f "$tar" ]] || { err "missing images tar: $tar"; exit 1; }
|
|
log "loading images from $(basename "$tar") (may take minutes)"
|
|
gunzip -c "$tar" | docker load >/dev/null
|
|
}
|
|
|
|
bring_up() {
|
|
log "starting services via compose"
|
|
(cd "$PKG_ROOT/compose" && "${COMPOSE[@]}" -p "$PROJECT_NAME" up -d)
|
|
}
|
|
|
|
selfcheck() {
|
|
log "running selfcheck"
|
|
bash "$PKG_ROOT/scripts/server-selfcheck.sh" || { err "selfcheck failed"; exit 1; }
|
|
}
|
|
|
|
main() {
|
|
prepare_env
|
|
load_images
|
|
bring_up
|
|
selfcheck
|
|
log "install completed. See logs in $PKG_ROOT/logs/"
|
|
}
|
|
|
|
main "$@"
|
|
|