-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathinstall-docker-swarm.sh
More file actions
executable file
·131 lines (101 loc) · 3.6 KB
/
install-docker-swarm.sh
File metadata and controls
executable file
·131 lines (101 loc) · 3.6 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
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
#!/bin/bash
# =============================
# CONFIGURATION
# =============================
HOSTS=("ocas" "ocas01" "ocas02" "ocas03" "ocas04" "ocas05")
USER="mwotila"
MANAGER="${HOSTS[0]}"
# =============================
# INSTALL ARM64-COMPATIBLE DOCKER
# =============================
install_docker() {
ssh -o StrictHostKeyChecking=no "$USER@$host" << EOF
set -e
echo "[*] Removing old Docker packages..."
for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do
sudo apt-get remove -y \$pkg || true
done
echo "[*] Updating apt and installing dependencies..."
sudo apt-get update -y
sudo apt-get install -y ca-certificates curl gnupg
echo "[*] Adding Docker GPG key..."
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg \
-o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
echo "[*] Adding Docker repository..."
echo "deb [arch=\$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] \
https://download.docker.com/linux/ubuntu \
\$(. /etc/os-release && echo \${UBUNTU_CODENAME:-\$VERSION_CODENAME}) stable" \
| sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
echo "[*] Updating package index..."
sudo apt-get update -y
echo "[*] Installing Docker CE..."
sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
echo "[*] Enabling Docker service..."
sudo systemctl enable --now docker
echo "[*] Adding user to docker group..."
sudo usermod -aG docker $USER || true
echo "[✓] Docker CE installed successfully on $(hostname)."
EOF
}
create_directories() {
ssh -o StrictHostKeyChecking=no "$USER@$1" << EOF
set -e
# Create per-node directory for node_exporter
echo "[*] Creating /var/lib/node_exporter on $(hostname)..."
sudo mkdir -p /var/lib/node_exporter
sudo chmod 755 /var/lib/node_exporter
EOF
}
# =============================
# STEP 1: Install Docker on all nodes
# =============================
echo "=== Installing Docker on all hosts ==="
for host in "${HOSTS[@]}"; do
echo ">>> $host"
install_docker "$host"
done
echo ""
# =============================
# STEP 2: Detect local private IP
# =============================
MANAGER_IP=$(ssh -o StrictHostKeyChecking=no "$USER@$MANAGER" \
"hostname -I | tr ' ' '\n' | grep '^10\.' | head -n 1")
echo "Manager private IP detected: $MANAGER_IP"
# =============================
# STEP 3: Initialize Swarm
# =============================
echo "=== Initializing Docker Swarm on $MANAGER ==="
ssh -t -o StrictHostKeyChecking=no "$USER@$MANAGER" \
"docker swarm init --advertise-addr $MANAGER_IP"
WORKER_TOKEN=$(ssh -o StrictHostKeyChecking=no "$USER@$MANAGER" \
"docker swarm join-token -q worker")
echo "Worker token: $WORKER_TOKEN"
# =============================
# STEP 4: Join workers
# =============================
echo "=== Joining workers to swarm ==="
for host in "${HOSTS[@]:1}"; do
echo ">>> Joining $host ..."
ssh -t -o StrictHostKeyChecking=no "$USER@$host" \
"docker swarm join --token $WORKER_TOKEN $MANAGER_IP:2377"
done
echo ""
echo "=============================="
echo " Docker Swarm Cluster Ready! "
echo "=============================="
echo "Manager: $MANAGER ($MANAGER_IP)"
echo "Workers:"
printf "%s\n" "${HOSTS[@]:1}"
echo "=============================="
echo "=== Creating required directories on all nodes ==="
for host in "${HOSTS[@]}"; do
echo ">>> $host"
create_directories "$host"
done
echo "=== Creating /var/mongodb on manager ==="
ssh -o StrictHostKeyChecking=no "$USER@$MANAGER" << EOF
sudo mkdir -p /var/mongodb
sudo chmod 755 /var/mongodb
EOF