-
Notifications
You must be signed in to change notification settings - Fork 71
Expand file tree
/
Copy pathinstall.sh
More file actions
89 lines (78 loc) · 4.12 KB
/
install.sh
File metadata and controls
89 lines (78 loc) · 4.12 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
#!/usr/bin/env bash
# =============================================================================
# HomeLab Stack — Installer
# =============================================================================
set -euo pipefail
IFS=$'\n\t'
RED='\033[0;31m'; GREEN='\033[0;32m'; YELLOW='\033[1;33m'
BLUE='\033[0;34m'; BOLD='\033[1m'; NC='\033[0m'
log_info() { echo -e "${GREEN}[INFO]${NC} $*"; }
log_warn() { echo -e "${YELLOW}[WARN]${NC} $*"; }
log_error() { echo -e "${RED}[ERROR]${NC} $*" >&2; }
log_step() { echo -e "\n${BLUE}${BOLD}==> $*${NC}"; }
cleanup() {
if [[ $? -ne 0 ]]; then
log_error "Installation failed. Check logs at ~/.homelab/install.log"
fi
}
trap cleanup EXIT
# ---------------------------------------------------------------------------
# Banner
# ---------------------------------------------------------------------------
echo -e ""
echo -e "${BOLD} ██╗ ██╗ ██████╗ ███╗ ███╗███████╗██╗ █████╗ ██████╗ ${NC}"
echo -e "${BOLD} ██║ ██║██╔═══██╗████╗ ████║██╔════╝██║ ██╔══██╗██╔══██╗${NC}"
echo -e "${BOLD} ███████║██║ ██║██╔████╔██║█████╗ ██║ ███████║██████╔╝${NC}"
echo -e "${BOLD} ██╔══██║██║ ██║██║╚██╔╝██║██╔══╝ ██║ ██╔══██║██╔══██╗${NC}"
echo -e "${BOLD} ██║ ██║╚██████╔╝██║ ╚═╝ ██║███████╗███████╗██║ ██║██████╔╝${NC}"
echo -e "${BOLD} ╚═╝ ╚═╝ ╚═════╝ ╚═╝ ╚═╝╚══════╝╚══════╝╚═╝ ╚═╝╚═════╝ ${NC}"
echo -e "${BOLD} S T A C K v1.0.0${NC}"
echo -e ""
# ---------------------------------------------------------------------------
# Step 1: Check dependencies
# ---------------------------------------------------------------------------
log_step "Checking dependencies"
bash "$(dirname "$0")/scripts/check-deps.sh"
# ---------------------------------------------------------------------------
# Step 2: CN network detection
# ---------------------------------------------------------------------------
log_step "Network environment detection"
bash "$(dirname "$0")/scripts/check-deps.sh" --network-check
# ---------------------------------------------------------------------------
# Step 3: Setup environment
# ---------------------------------------------------------------------------
log_step "Environment configuration"
if [[ ! -f .env ]]; then
bash "$(dirname "$0")/scripts/setup-env.sh"
else
log_warn ".env already exists, skipping setup. Remove it to reconfigure."
fi
# ---------------------------------------------------------------------------
# Step 4: Create data directories
# ---------------------------------------------------------------------------
log_step "Creating data directories"
mkdir -p \
data/traefik/certs \
data/portainer \
data/prometheus \
data/grafana \
data/loki \
data/authentik/media \
data/nextcloud \
data/gitea \
data/vaultwarden
chmod 600 config/traefik/acme.json 2>/dev/null || touch config/traefik/acme.json && chmod 600 config/traefik/acme.json
# ---------------------------------------------------------------------------
# Step 5: Launch base infrastructure
# ---------------------------------------------------------------------------
log_step "Launching base infrastructure"
docker compose -f docker-compose.base.yml up -d
log_info ""
log_info "${GREEN}${BOLD}✓ Base infrastructure is up!${NC}"
log_info ""
log_info "Next steps:"
log_info " ./scripts/stack-manager.sh start sso # Set up SSO first (recommended)"
log_info " ./scripts/stack-manager.sh start monitoring # Launch monitoring"
log_info " ./scripts/stack-manager.sh list # See all available stacks"
log_info ""
log_info "Documentation: docs/getting-started.md"