#!/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 "--------------------------------------------------------"