edelweism/ipfs/setup.sh
2026-04-01 12:07:25 +07:00

63 lines
2.8 KiB
Bash

#!/bin/bash
IP_HOST="192.168.1.132"
WEBUI_CAR="ipfs-webui-v4.12.0.car"
WEBUI_URL="https://github.com/ipfs/ipfs-webui/releases/download/v4.12.0/ipfs-webui@v4.12.0.car"
WEBUI_CID="bafybeihxglpcfyarpm7apn7xpezbuoqgk3l5chyk7w4gvrjwk45rqohlmm"
if [ ! -f "$WEBUI_CAR" ]; then
echo "[+] WebUI CAR x_x"
wget -O "$WEBUI_CAR" "$WEBUI_URL" || { echo "[!] Gagal download WebUI! Cek koneksi internet."; exit 1; }
fi
docker compose down 2>/dev/null
sudo rm -f ipfs_node1_data/repo.lock ipfs_node2_data/repo.lock
mkdir -p ipfs_node1_staging ipfs_node1_data ipfs_node2_staging ipfs_node2_data
if [ ! -f "swarm.key" ]; then
echo "[+] Generating swarm.key..."
echo -e "/key/swarm/psk/1.0.0/\n/base16/\n$(openssl rand -hex 32)" > swarm.key
fi
sudo chown -R 1000:1000 ipfs_node1_data ipfs_node1_staging ipfs_node2_data ipfs_node2_staging swarm.key
chmod 600 swarm.key
REPOS=("ipfs_node1_data" "ipfs_node2_data")
for REPO in "${REPOS[@]}"; do
echo "[*] Patching config di $REPO..."
if [ ! -f "$REPO/config" ]; then
sudo docker run --rm -v "$(pwd)/$REPO":/data/ipfs ipfs/kubo:latest init --profile=server
fi
sudo docker run --rm -v "$(pwd)/$REPO":/data/ipfs ipfs/kubo:latest config --json AutoConf.Enabled false
sudo docker run --rm -v "$(pwd)/$REPO":/data/ipfs ipfs/kubo:latest config --json Bootstrap '[]'
sudo docker run --rm -v "$(pwd)/$REPO":/data/ipfs ipfs/kubo:latest config --json Routing.Type '"dhtserver"'
sudo docker run --rm -v "$(pwd)/$REPO":/data/ipfs ipfs/kubo:latest config --json API.HTTPHeaders.Access-Control-Allow-Origin "[\"http://$IP_HOST:8080\", \"http://$IP_HOST:8081\", \"http://localhost:8080\", \"http://127.0.0.1:8080\"]"
sudo docker run --rm -v "$(pwd)/$REPO":/data/ipfs ipfs/kubo:latest config --json API.HTTPHeaders.Access-Control-Allow-Methods '["PUT", "POST", "GET"]'
sudo docker run --rm -v "$(pwd)/$REPO":/data/ipfs ipfs/kubo:latest config Addresses.API /ip4/0.0.0.0/tcp/5001
done
echo "[*] Docker Compose Up..."
docker compose up -d
sleep 10
echo "[*] Peering nodes..."
ADDR_NODE1=$(docker exec ipfs_node1 ipfs id | grep -o '/ip4/172[^"]*' | head -n 1)
if [ ! -z "$ADDR_NODE1" ]; then
docker exec ipfs_node2 ipfs swarm connect "$ADDR_NODE1"
docker exec ipfs_node2 ipfs bootstrap add "$ADDR_NODE1"
echo "[+] Peering success!"
fi
echo "[+] Injecting WebUI ke Node 1..."
cp "$WEBUI_CAR" ipfs_node1_staging/
docker exec ipfs_node1 ipfs dag import "/export/$WEBUI_CAR"
docker exec ipfs_node1 ipfs pin add "$WEBUI_CID"
echo "--------------------------------------------------------"
echo "DONE! Private Net is ready."
echo "Dashboard: http://$IP_HOST:8080/ipfs/$WEBUI_CID/"
echo "API Port: 5001 (Node 1) | 5002 (Node 2)"
echo "Gateway: 8080 (Node 1) | 8081 (Node 2)"
echo "--------------------------------------------------------"