-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathvalidate_env_linode.sh
More file actions
executable file
·230 lines (201 loc) · 6.56 KB
/
Copy pathvalidate_env_linode.sh
File metadata and controls
executable file
·230 lines (201 loc) · 6.56 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
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
#!/bin/bash
###############################################################################
# NASDAQ Stock Agent - Environment Validation Script (Linode)
#
# This script validates that all required environment variables are set
# before starting the application on Linode.
#
# Exit codes:
# 0 - All required variables are valid
# 1 - One or more required variables are missing or invalid
#
# Usage:
# ./validate_env_linode.sh [path_to_env_file]
###############################################################################
# Colors for output
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color
# Default .env file location
ENV_FILE="${1:-/opt/nasdaq-agent/.env}"
# Validation status
VALIDATION_FAILED=0
# Required environment variables
REQUIRED_VARS=(
"ANTHROPIC_API_KEY"
"ANTHROPIC_MODEL"
"HOST"
"PORT"
)
# Optional but recommended variables
RECOMMENDED_VARS=(
"APP_NAME"
"APP_VERSION"
"DEBUG"
)
# NEST-specific variables (required if NEST_ENABLED=true)
NEST_VARS=(
"NEST_PORT"
"NEST_PUBLIC_URL"
"NEST_REGISTRY_URL"
"NEST_AGENT_ID"
"NEST_AGENT_NAME"
)
echo "========================================="
echo "Environment Validation (Linode)"
echo "========================================="
echo "Checking: $ENV_FILE"
echo ""
# Check if .env file exists
if [ ! -f "$ENV_FILE" ]; then
echo -e "${RED}✗ Environment file not found: $ENV_FILE${NC}"
echo ""
echo "Please create a .env file with required configuration."
echo "You can copy .env.example as a starting point:"
echo " cp .env.example $ENV_FILE"
exit 1
fi
# Load environment variables
set -a
source "$ENV_FILE"
set +a
echo "Validating required variables..."
echo ""
# Check required variables
for var in "${REQUIRED_VARS[@]}"; do
value="${!var}"
if [ -z "$value" ]; then
echo -e "${RED}✗ $var is not set${NC}"
VALIDATION_FAILED=1
elif [ "$value" == "your_anthropic_api_key_here" ] || [ "$value" == "YOUR_VALUE_HERE" ]; then
echo -e "${RED}✗ $var contains placeholder value${NC}"
VALIDATION_FAILED=1
else
# Mask sensitive values
if [[ "$var" == *"KEY"* ]] || [[ "$var" == *"SECRET"* ]]; then
masked_value="${value:0:8}..."
echo -e "${GREEN}✓ $var is set${NC} (${masked_value})"
else
echo -e "${GREEN}✓ $var is set${NC} ($value)"
fi
fi
done
echo ""
echo "Checking recommended variables..."
echo ""
# Check recommended variables
for var in "${RECOMMENDED_VARS[@]}"; do
value="${!var}"
if [ -z "$value" ]; then
echo -e "${YELLOW}⚠ $var is not set (using default)${NC}"
else
echo -e "${GREEN}✓ $var is set${NC} ($value)"
fi
done
# Check NEST configuration if enabled
if [ "$NEST_ENABLED" == "true" ]; then
echo ""
echo "NEST is enabled, checking NEST variables..."
echo ""
for var in "${NEST_VARS[@]}"; do
value="${!var}"
if [ -z "$value" ]; then
echo -e "${RED}✗ $var is not set (required when NEST_ENABLED=true)${NC}"
VALIDATION_FAILED=1
elif [ "$value" == "YOUR_PUBLIC_IP" ] || [[ "$value" == *"YOUR_LINODE_IP"* ]] || [[ "$value" == *"YOUR_"* ]]; then
echo -e "${RED}✗ $var contains placeholder value${NC}"
VALIDATION_FAILED=1
else
echo -e "${GREEN}✓ $var is set${NC} ($value)"
fi
done
fi
# Validate specific values
echo ""
echo "Validating configuration values..."
echo ""
# Validate PORT
if [ -n "$PORT" ]; then
if ! [[ "$PORT" =~ ^[0-9]+$ ]] || [ "$PORT" -lt 1 ] || [ "$PORT" -gt 65535 ]; then
echo -e "${RED}✗ PORT must be a number between 1 and 65535${NC}"
VALIDATION_FAILED=1
else
echo -e "${GREEN}✓ PORT is valid${NC}"
fi
fi
# Validate NEST_PORT if NEST is enabled
if [ "$NEST_ENABLED" == "true" ] && [ -n "$NEST_PORT" ]; then
if ! [[ "$NEST_PORT" =~ ^[0-9]+$ ]] || [ "$NEST_PORT" -lt 1 ] || [ "$NEST_PORT" -gt 65535 ]; then
echo -e "${RED}✗ NEST_PORT must be a number between 1 and 65535${NC}"
VALIDATION_FAILED=1
else
echo -e "${GREEN}✓ NEST_PORT is valid${NC}"
fi
fi
# Validate HOST
if [ -n "$HOST" ]; then
if [ "$HOST" != "0.0.0.0" ] && [ "$HOST" != "127.0.0.1" ] && [ "$HOST" != "localhost" ]; then
echo -e "${YELLOW}⚠ HOST is set to $HOST (typically should be 0.0.0.0 for Linode)${NC}"
else
echo -e "${GREEN}✓ HOST is valid${NC}"
fi
fi
# Validate ANTHROPIC_MODEL
if [ -n "$ANTHROPIC_MODEL" ]; then
if [[ "$ANTHROPIC_MODEL" == claude-* ]]; then
echo -e "${GREEN}✓ ANTHROPIC_MODEL format is valid${NC}"
else
echo -e "${YELLOW}⚠ ANTHROPIC_MODEL should start with 'claude-'${NC}"
fi
fi
# Linode-specific checks
echo ""
echo "Linode-specific checks..."
echo ""
# Check if UFW is installed and active
if command -v ufw &> /dev/null; then
UFW_STATUS=$(sudo ufw status 2>/dev/null | head -n1)
if [[ "$UFW_STATUS" == *"active"* ]]; then
echo -e "${GREEN}✓ UFW firewall is active${NC}"
# Check if required ports are allowed
if sudo ufw status | grep -q "8000"; then
echo -e "${GREEN}✓ Port 8000 is allowed in UFW${NC}"
else
echo -e "${YELLOW}⚠ Port 8000 may not be allowed in UFW${NC}"
fi
if [ "$NEST_ENABLED" == "true" ]; then
if sudo ufw status | grep -q "6000"; then
echo -e "${GREEN}✓ Port 6000 is allowed in UFW${NC}"
else
echo -e "${YELLOW}⚠ Port 6000 may not be allowed in UFW (needed for NEST)${NC}"
fi
fi
else
echo -e "${YELLOW}⚠ UFW firewall is not active${NC}"
fi
else
echo -e "${YELLOW}⚠ UFW not found (firewall may not be configured)${NC}"
fi
# Final result
echo ""
echo "========================================="
if [ $VALIDATION_FAILED -eq 0 ]; then
echo -e "${GREEN}✓ Environment validation passed${NC}"
echo "========================================="
echo ""
echo "Your Linode deployment is properly configured!"
exit 0
else
echo -e "${RED}✗ Environment validation failed${NC}"
echo "========================================="
echo ""
echo "Please fix the errors above and try again."
echo "Refer to .env.example for configuration guidance."
echo ""
echo "Linode deployment tips:"
echo "- Ensure NEST_PUBLIC_URL uses your Linode's public IP"
echo "- Check UFW firewall: sudo ufw status"
echo "- Verify ports are open: sudo netstat -tuln | grep -E '8000|6000'"
exit 1
fi