-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathdeploy.sh
More file actions
executable file
·235 lines (199 loc) · 5.57 KB
/
deploy.sh
File metadata and controls
executable file
·235 lines (199 loc) · 5.57 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
231
232
233
234
#!/bin/bash
# Rubicon Trading Bot Deployment Script
# This script automates the deployment process
set -e
# Colors for output
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
# Configuration
APP_NAME="buybot"
APP_DIR="/home/dev/opt/BuyBot"
IMAGE_NAME="ghcr.io/brianeliondev/buybot:latest"
# Functions
log_info() {
echo -e "${BLUE}[INFO]${NC} $1"
}
log_success() {
echo -e "${GREEN}[SUCCESS]${NC} $1"
}
log_warning() {
echo -e "${YELLOW}[WARNING]${NC} $1"
}
log_error() {
echo -e "${RED}[ERROR]${NC} $1"
}
check_docker() {
log_info "Checking Docker installation..."
if ! command -v docker &> /dev/null; then
log_error "Docker is not installed. Please install Docker first."
exit 1
fi
if ! docker compose version &> /dev/null; then
log_error "Docker Compose is not available. Please install Docker Compose first."
exit 1
fi
log_success "Docker and Docker Compose are installed"
}
check_environment() {
log_info "Checking environment file..."
if [ ! -f "${APP_DIR}/.env" ]; then
log_warning "Environment file not found at ${APP_DIR}/.env"
log_info "Please create the environment file with your configuration"
log_info "You can copy from example.env and update with your values"
exit 1
fi
log_success "Environment file found"
}
create_directories() {
log_info "Ensuring application directories exist..."
mkdir -p "${APP_DIR}/logs"
# Set permissions for container to write logs
sudo chmod 777 "${APP_DIR}/logs"
log_success "Directories ready"
}
deploy_application() {
log_info "Deploying application..."
# Pull latest image
log_info "Pulling latest Docker image..."
docker pull ${IMAGE_NAME}
# Stop and remove existing containers using docker compose
log_info "Stopping existing containers..."
cd ${APP_DIR}
docker compose -f docker-compose.yml down || true
# Wait for port to be released
log_info "Waiting for port 8080 to be released..."
while netstat -tuln | grep -q :8080; do
echo "Port 8080 still in use, waiting..."
sleep 2
done
# Start new container using docker compose
log_info "Starting new container..."
docker compose -f docker-compose.yml up -d
log_success "Application deployed successfully"
}
verify_deployment() {
log_info "Verifying deployment..."
# Wait for container to start
sleep 10
# Check if container is running using docker compose
cd ${APP_DIR}
if docker compose -f docker-compose.yml ps | grep -q "Up"; then
log_success "Container is running"
else
log_error "Container is not running"
docker compose -f docker-compose.yml logs
exit 1
fi
# Check health endpoint
if curl -f http://localhost:8080/health > /dev/null 2>&1; then
log_success "Health check passed"
else
log_warning "Health check failed, but container is running"
fi
# Show container status
log_info "Container status:"
docker compose -f docker-compose.yml ps
}
show_logs() {
log_info "Showing recent logs..."
cd ${APP_DIR}
docker compose -f docker-compose.yml logs --tail 50
}
show_access_info() {
log_success "Deployment completed successfully!"
echo ""
log_info "Access Information:"
echo " - Application: http://$(hostname -I | awk '{print $1}'):8080"
echo " - Health Check: http://$(hostname -I | awk '{print $1}'):8080/health"
echo ""
log_info "Log Files Location:"
echo " - ${APP_DIR}/logs/"
echo ""
log_info "Useful Commands:"
echo " - View logs: docker compose -f docker-compose.yml logs -f"
echo " - Restart: docker compose -f docker-compose.yml restart"
echo " - Stop: docker compose -f docker-compose.yml down"
echo " - Update: ./deploy.sh update"
}
# Main deployment function
deploy() {
log_info "Starting Rubicon Trading Bot deployment..."
check_docker
create_directories
check_environment
deploy_application
verify_deployment
show_access_info
}
# Update function
update() {
log_info "Updating Rubicon Trading Bot..."
check_docker
check_environment
deploy_application
verify_deployment
show_access_info
}
# Logs function
logs() {
show_logs
}
# Status function
status() {
log_info "Checking application status..."
cd ${APP_DIR}
if docker compose -f docker-compose.yml ps | grep -q "Up"; then
log_success "Application is running"
docker compose -f docker-compose.yml ps
echo ""
log_info "Health check:"
curl -s http://localhost:8080/health | python3 -m json.tool 2>/dev/null || echo "Health check failed"
else
log_error "Application is not running"
fi
}
# Help function
help() {
echo "Rubicon Trading Bot Deployment Script"
echo ""
echo "Usage: $0 [COMMAND]"
echo ""
echo "Commands:"
echo " deploy Deploy the application (default)"
echo " update Update the application"
echo " logs Show application logs"
echo " status Show application status"
echo " help Show this help message"
echo ""
echo "Examples:"
echo " $0 deploy"
echo " $0 update"
echo " $0 logs"
echo " $0 status"
}
# Main script logic
case "${1:-deploy}" in
deploy)
deploy
;;
update)
update
;;
logs)
logs
;;
status)
status
;;
help|--help|-h)
help
;;
*)
log_error "Unknown command: $1"
help
exit 1
;;
esac