-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathdeploy-blockchain-spaceship.sh
More file actions
208 lines (187 loc) · 7.39 KB
/
deploy-blockchain-spaceship.sh
File metadata and controls
208 lines (187 loc) · 7.39 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
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
#!/bin/bash
################################################################################
# TipsChain Spaceship Blockchain VM Deployment Script
#
# Usage: ./deploy-blockchain.sh [BLOCKCHAIN_VM_IP]
# Example: ./deploy-blockchain.sh 209.74.86.128
#
# This script automates the deployment of Besu blockchain on your Spaceship VM
################################################################################
set -e
# Color codes
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
# Configuration
BLOCKCHAIN_IP="${1:-209.74.86.128}"
BESU_VERSION="23.10.0"
BESU_DIR="/opt/besu"
DATA_DIR="${BESU_DIR}/data"
CONFIG_DIR="${BESU_DIR}/config"
echo -e "${BLUE}╔════════════════════════════════════════════════════════════════╗${NC}"
echo -e "${BLUE}║ TipsChain Blockchain VM Deployment on Spaceship ║${NC}"
echo -e "${BLUE}╚════════════════════════════════════════════════════════════════╝${NC}"
echo ""
echo -e "${YELLOW}Blockchain VM IP: ${BLOCKCHAIN_IP}${NC}"
echo -e "${YELLOW}Besu Version: ${BESU_VERSION}${NC}"
echo ""
# Function to run commands on remote VM
run_on_vm() {
local cmd=$1
echo -e "${BLUE}→${NC} Running: ${cmd}"
ssh -o StrictHostKeyChecking=no root@${BLOCKCHAIN_IP} "${cmd}"
}
# Function to copy files to VM
copy_to_vm() {
local src=$1
local dst=$2
echo -e "${BLUE}→${NC} Copying: ${src} → ${dst}"
scp -r -o StrictHostKeyChecking=no "${src}" root@${BLOCKCHAIN_IP}:"${dst}"
}
# Step 1: Verify SSH Connection
echo -e "${GREEN}Step 1: Verifying SSH Connection${NC}"
if ssh -o ConnectTimeout=5 -o StrictHostKeyChecking=no root@${BLOCKCHAIN_IP} "echo ok" > /dev/null 2>&1; then
echo -e "${GREEN}✓ SSH connection successful${NC}"
else
echo -e "${RED}✗ Cannot connect to ${BLOCKCHAIN_IP}${NC}"
echo "Please verify:"
echo " 1. The IP address is correct"
echo " 2. Your SSH key is configured"
echo " 3. The VM is running and network accessible"
exit 1
fi
# Step 2: Create Directory Structure
echo ""
echo -e "${GREEN}Step 2: Creating Directory Structure${NC}"
run_on_vm "mkdir -p ${CONFIG_DIR} ${DATA_DIR}"
echo -e "${GREEN}✓ Directories created${NC}"
# Step 3: Copy Configuration Files
echo ""
echo -e "${GREEN}Step 3: Copying Configuration Files${NC}"
if [ ! -f "config/genesis.json" ]; then
echo -e "${RED}✗ config/genesis.json not found${NC}"
echo "Please ensure you're running this script from the repository root"
exit 1
fi
copy_to_vm "config/genesis.json" "${CONFIG_DIR}/genesis.json"
copy_to_vm "config/besu.toml" "${CONFIG_DIR}/besu.toml"
echo -e "${GREEN}✓ Configuration files copied${NC}"
# Step 4: Stop Any Existing Besu Container
echo ""
echo -e "${GREEN}Step 4: Cleaning Up Existing Containers${NC}"
run_on_vm "docker stop tipschain-besu 2>/dev/null || true"
run_on_vm "docker rm tipschain-besu 2>/dev/null || true"
echo -e "${GREEN}✓ Cleanup complete${NC}"
# Step 5: Pull Latest Besu Image
echo ""
echo -e "${GREEN}Step 5: Pulling Besu Docker Image${NC}"
run_on_vm "docker pull hyperledger/besu:${BESU_VERSION}"
echo -e "${GREEN}✓ Docker image pulled${NC}"
# Step 6: Start Besu Container
echo ""
echo -e "${GREEN}Step 6: Starting Besu Container${NC}"
run_on_vm "docker run -d \
--name tipschain-besu \
--restart unless-stopped \
-p 8545:8545 \
-p 8546:8546 \
-p 30303:30303 \
-p 30303:30303/udp \
-v ${CONFIG_DIR}:/etc/besu \
-v ${DATA_DIR}:/var/lib/besu \
hyperledger/besu:${BESU_VERSION} \
--config-file=/etc/besu/besu.toml \
--data-path=/var/lib/besu"
echo -e "${GREEN}✓ Container started${NC}"
# Step 7: Wait for Startup
echo ""
echo -e "${YELLOW}Waiting for Besu to start (60 seconds)...${NC}"
sleep 60
# Step 8: Verify RPC is Working
echo ""
echo -e "${GREEN}Step 8: Verifying RPC Endpoint${NC}"
for i in {1..10}; do
if run_on_vm "curl -s http://localhost:8545 -X POST \
-H 'Content-Type: application/json' \
-d '{\"jsonrpc\":\"2.0\",\"method\":\"eth_chainId\",\"params\":[],\"id\":1}' | grep -q '0x4afc1d'"; then
echo -e "${GREEN}✓ RPC endpoint is working${NC}"
echo -e "${GREEN}✓ Chain ID is correct (19251925)${NC}"
break
else
if [ $i -lt 10 ]; then
echo -e "${YELLOW} Attempt $i/10: Still starting...${NC}"
sleep 10
else
echo -e "${RED}✗ RPC endpoint not responding${NC}"
echo "Checking logs..."
run_on_vm "docker logs tipschain-besu | tail -20"
exit 1
fi
fi
done
# Step 9: Show Network Configuration
echo ""
echo -e "${GREEN}Step 9: Network Configuration${NC}"
echo -e "${BLUE}Your Blockchain RPC is now accessible at:${NC}"
echo ""
echo -e " ${YELLOW}External URL (from internet):${NC}"
echo -e " http://${BLOCKCHAIN_IP}:8545"
echo ""
echo -e " ${YELLOW}Internal URL (from other VMs on same VPC):${NC}"
run_on_vm "hostname -I | awk '{print $2}'" | while read PRIVATE_IP; do
echo " http://${PRIVATE_IP}:8545"
done
echo ""
# Step 10: Save Configuration
echo ""
echo -e "${GREEN}Step 10: Saving Configuration${NC}"
cat > SPACESHIP_BLOCKCHAIN_CONFIG.env << EOF
# TipsChain Blockchain Node Configuration
# Generated: $(date)
BLOCKCHAIN_PUBLIC_IP=${BLOCKCHAIN_IP}
BLOCKCHAIN_RPC_URL=http://${BLOCKCHAIN_IP}:8545
BLOCKCHAIN_CHAIN_ID=19251925
BLOCKCHAIN_VERSION=${BESU_VERSION}
BESU_DATA_DIR=${DATA_DIR}
BESU_CONFIG_DIR=${CONFIG_DIR}
# For .env.production on other VMs:
# - Use public URL above for frontend
# - When deploying other services on same Spaceship VPC,
# contact blockchain using private IP (faster, no bandwidth costs)
EOF
echo -e "${GREEN}✓ Config saved to SPACESHIP_BLOCKCHAIN_CONFIG.env${NC}"
# Step 11: Show Deployment Summary
echo ""
echo -e "${BLUE}╔════════════════════════════════════════════════════════════════╗${NC}"
echo -e "${BLUE}║ DEPLOYMENT SUCCESSFUL! ✓ ║${NC}"
echo -e "${BLUE}╚════════════════════════════════════════════════════════════════╝${NC}"
echo ""
echo -e "${GREEN}Your Besu blockchain is running!${NC}"
echo ""
echo -e "${YELLOW}Next Steps:${NC}"
echo ""
echo "1. Deploy smart contracts:"
echo -e " ${BLUE}npm run compile${NC}"
echo -e " ${BLUE}npm run deploy:mainnet${NC}"
echo ""
echo "2. Copy contract addresses to .env.production"
echo ""
echo "3. Deploy other services:"
echo -e " ${BLUE}# Wallet, DEX, and Explorer VMs${NC}"
echo -e " ${BLUE}# Update these IPs in your DNS:${NC}"
echo -e " ${BLUE}tipschain.sbs → [WALLET_VM_IP]${NC}"
echo -e " ${BLUE}dex.tipschain.sbs → [DEX_VM_IP]${NC}"
echo -e " ${BLUE}scan.tipspay.org → [EXPLORER_VM_IP]${NC}"
echo ""
echo "4. Verify the deployment:"
echo -e " ${BLUE}npm run test:rlp${NC}"
echo -e " ${BLUE}npm run test:gassless-swap${NC}"
echo ""
echo -e "${YELLOW}Monitoring:${NC}"
echo -e " ${BLUE}ssh root@${BLOCKCHAIN_IP} 'docker logs -f tipschain-besu'${NC}"
echo ""
echo -e "${YELLOW}Configuration saved to:${NC}"
echo -e " ${BLUE}./SPACESHIP_BLOCKCHAIN_CONFIG.env${NC}"
echo ""