Restore comprehensive deploy.sh script for Discord Voice Translator v2
This commit is contained in:
387
deploy.sh
387
deploy.sh
@ -1 +1,386 @@
|
|||||||
docker pull nvidia/cuda:11.8-runtime-ubuntu20.04
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Discord Voice Translator v2 - Deployment Script
|
||||||
|
# Microservices Architecture with GPU-accelerated transcription
|
||||||
|
|
||||||
|
set -e # Exit on any error
|
||||||
|
|
||||||
|
# Colors for output
|
||||||
|
RED='\033[0;31m'
|
||||||
|
GREEN='\033[0;32m'
|
||||||
|
YELLOW='\033[0;33m'
|
||||||
|
BLUE='\033[0;34m'
|
||||||
|
NC='\033[0m' # No Color
|
||||||
|
|
||||||
|
# Configuration
|
||||||
|
COMPOSE_FILE="docker-compose.yml"
|
||||||
|
ENV_FILE=".env"
|
||||||
|
SERVICES=("recorder" "audio-processor" "whisper-service" "translator" "transcriber" "dashboard" "postgres" "redis")
|
||||||
|
GPU_SERVICES=("whisper-service")
|
||||||
|
|
||||||
|
# Function to print colored output
|
||||||
|
print_status() {
|
||||||
|
echo -e "${BLUE}[INFO]${NC} $1"
|
||||||
|
}
|
||||||
|
|
||||||
|
print_success() {
|
||||||
|
echo -e "${GREEN}[SUCCESS]${NC} $1"
|
||||||
|
}
|
||||||
|
|
||||||
|
print_warning() {
|
||||||
|
echo -e "${YELLOW}[WARNING]${NC} $1"
|
||||||
|
}
|
||||||
|
|
||||||
|
print_error() {
|
||||||
|
echo -e "${RED}[ERROR]${NC} $1"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to check if command exists
|
||||||
|
command_exists() {
|
||||||
|
command -v "$1" >/dev/null 2>&1
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to check system requirements
|
||||||
|
check_requirements() {
|
||||||
|
print_status "Checking system requirements..."
|
||||||
|
|
||||||
|
# Check Docker
|
||||||
|
if ! command_exists docker; then
|
||||||
|
print_error "Docker is not installed. Please install Docker first."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Check Docker Compose
|
||||||
|
if ! command_exists docker-compose && ! docker compose version >/dev/null 2>&1; then
|
||||||
|
print_error "Docker Compose is not installed. Please install Docker Compose first."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Check NVIDIA runtime for GPU services
|
||||||
|
if docker info | grep -q "nvidia"; then
|
||||||
|
print_success "NVIDIA Docker runtime detected"
|
||||||
|
else
|
||||||
|
print_warning "NVIDIA Docker runtime not detected. GPU acceleration may not work."
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Check if .env file exists
|
||||||
|
if [[ ! -f "$ENV_FILE" ]]; then
|
||||||
|
print_warning ".env file not found. Using .env.example as template."
|
||||||
|
if [[ -f ".env.example" ]]; then
|
||||||
|
cp .env.example .env
|
||||||
|
print_status "Created .env file from .env.example. Please configure it before running."
|
||||||
|
else
|
||||||
|
print_error ".env.example file not found. Please create environment configuration."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
print_success "System requirements check completed"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to create necessary directories
|
||||||
|
create_directories() {
|
||||||
|
print_status "Creating data directories..."
|
||||||
|
|
||||||
|
directories=(
|
||||||
|
"data/audio/raw"
|
||||||
|
"data/audio/processed"
|
||||||
|
"data/database"
|
||||||
|
"data/redis"
|
||||||
|
"data/logs"
|
||||||
|
"data/models"
|
||||||
|
)
|
||||||
|
|
||||||
|
for dir in "${directories[@]}"; do
|
||||||
|
if [[ ! -d "$dir" ]]; then
|
||||||
|
mkdir -p "$dir"
|
||||||
|
print_status "Created directory: $dir"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
# Set proper permissions
|
||||||
|
chmod -R 755 data/
|
||||||
|
|
||||||
|
print_success "Data directories created"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to pull required Docker images
|
||||||
|
pull_images() {
|
||||||
|
print_status "Pulling Docker images..."
|
||||||
|
|
||||||
|
# Pull NVIDIA CUDA base image for GPU services
|
||||||
|
docker pull nvidia/cuda:11.8-runtime-ubuntu20.04
|
||||||
|
|
||||||
|
# Pull other base images
|
||||||
|
docker pull postgres:15-alpine
|
||||||
|
docker pull redis:7-alpine
|
||||||
|
docker pull nginx:alpine
|
||||||
|
|
||||||
|
# Pull optional admin images
|
||||||
|
docker pull dpage/pgadmin4:latest
|
||||||
|
docker pull rediscommander/redis-commander:latest
|
||||||
|
|
||||||
|
print_success "Docker images pulled"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to build services
|
||||||
|
build_services() {
|
||||||
|
print_status "Building microservices..."
|
||||||
|
|
||||||
|
# Use docker-compose or docker compose based on availability
|
||||||
|
if command_exists docker-compose; then
|
||||||
|
COMPOSE_CMD="docker-compose"
|
||||||
|
else
|
||||||
|
COMPOSE_CMD="docker compose"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Build all services
|
||||||
|
$COMPOSE_CMD build --no-cache
|
||||||
|
|
||||||
|
print_success "Services built successfully"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to start services
|
||||||
|
start_services() {
|
||||||
|
print_status "Starting services..."
|
||||||
|
|
||||||
|
# Use docker-compose or docker compose based on availability
|
||||||
|
if command_exists docker-compose; then
|
||||||
|
COMPOSE_CMD="docker-compose"
|
||||||
|
else
|
||||||
|
COMPOSE_CMD="docker compose"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Start core services first
|
||||||
|
print_status "Starting data services (postgres, redis)..."
|
||||||
|
$COMPOSE_CMD up -d postgres redis
|
||||||
|
|
||||||
|
# Wait for database to be ready
|
||||||
|
print_status "Waiting for database to be ready..."
|
||||||
|
sleep 10
|
||||||
|
|
||||||
|
# Start processing services
|
||||||
|
print_status "Starting processing services..."
|
||||||
|
$COMPOSE_CMD up -d audio-processor whisper-service translator
|
||||||
|
|
||||||
|
# Wait for processing services to be ready
|
||||||
|
print_status "Waiting for processing services to be ready..."
|
||||||
|
sleep 5
|
||||||
|
|
||||||
|
# Start recorder and transcriber
|
||||||
|
print_status "Starting Discord bot services..."
|
||||||
|
$COMPOSE_CMD up -d recorder transcriber
|
||||||
|
|
||||||
|
# Start dashboard
|
||||||
|
print_status "Starting dashboard..."
|
||||||
|
$COMPOSE_CMD up -d dashboard
|
||||||
|
|
||||||
|
print_success "All services started successfully"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to show service status
|
||||||
|
show_status() {
|
||||||
|
print_status "Service Status:"
|
||||||
|
echo "===================="
|
||||||
|
|
||||||
|
# Use docker-compose or docker compose based on availability
|
||||||
|
if command_exists docker-compose; then
|
||||||
|
COMPOSE_CMD="docker-compose"
|
||||||
|
else
|
||||||
|
COMPOSE_CMD="docker compose"
|
||||||
|
fi
|
||||||
|
|
||||||
|
$COMPOSE_CMD ps
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
print_status "Service URLs:"
|
||||||
|
echo "===================="
|
||||||
|
echo "Dashboard: http://localhost:3010"
|
||||||
|
echo "Whisper Service: http://localhost:8001"
|
||||||
|
echo "Translator Service: http://localhost:8002"
|
||||||
|
echo "Database: localhost:5434"
|
||||||
|
echo "Redis: localhost:6379"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
print_status "Optional Admin Interfaces (use --profile admin):"
|
||||||
|
echo "PGAdmin: http://localhost:8085"
|
||||||
|
echo "Redis Commander: http://localhost:8086"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to display help
|
||||||
|
show_help() {
|
||||||
|
echo "Discord Voice Translator v2 - Deployment Script"
|
||||||
|
echo "Usage: $0 [OPTION]"
|
||||||
|
echo ""
|
||||||
|
echo "Options:"
|
||||||
|
echo " start Start all services (default)"
|
||||||
|
echo " stop Stop all services"
|
||||||
|
echo " restart Restart all services"
|
||||||
|
echo " build Build all services"
|
||||||
|
echo " pull Pull Docker images"
|
||||||
|
echo " status Show service status"
|
||||||
|
echo " logs Show logs for all services"
|
||||||
|
echo " logs [service] Show logs for specific service"
|
||||||
|
echo " clean Stop and remove all containers and volumes"
|
||||||
|
echo " admin Start with admin interfaces (PGAdmin, Redis Commander)"
|
||||||
|
echo " proxy Start with nginx proxy"
|
||||||
|
echo " help Show this help message"
|
||||||
|
echo ""
|
||||||
|
echo "Examples:"
|
||||||
|
echo " $0 # Start all services"
|
||||||
|
echo " $0 start # Start all services"
|
||||||
|
echo " $0 admin # Start with admin interfaces"
|
||||||
|
echo " $0 logs whisper-service # Show logs for whisper service"
|
||||||
|
echo " $0 clean # Clean up everything"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to show logs
|
||||||
|
show_logs() {
|
||||||
|
# Use docker-compose or docker compose based on availability
|
||||||
|
if command_exists docker-compose; then
|
||||||
|
COMPOSE_CMD="docker-compose"
|
||||||
|
else
|
||||||
|
COMPOSE_CMD="docker compose"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ -n "$1" ]]; then
|
||||||
|
print_status "Showing logs for service: $1"
|
||||||
|
$COMPOSE_CMD logs -f "$1"
|
||||||
|
else
|
||||||
|
print_status "Showing logs for all services"
|
||||||
|
$COMPOSE_CMD logs -f
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to stop services
|
||||||
|
stop_services() {
|
||||||
|
print_status "Stopping all services..."
|
||||||
|
|
||||||
|
# Use docker-compose or docker compose based on availability
|
||||||
|
if command_exists docker-compose; then
|
||||||
|
COMPOSE_CMD="docker-compose"
|
||||||
|
else
|
||||||
|
COMPOSE_CMD="docker compose"
|
||||||
|
fi
|
||||||
|
|
||||||
|
$COMPOSE_CMD down
|
||||||
|
|
||||||
|
print_success "All services stopped"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to clean up
|
||||||
|
clean_up() {
|
||||||
|
print_warning "This will remove all containers, networks, and volumes. Are you sure? (y/N)"
|
||||||
|
read -r response
|
||||||
|
|
||||||
|
if [[ "$response" =~ ^[Yy]$ ]]; then
|
||||||
|
print_status "Cleaning up containers, networks, and volumes..."
|
||||||
|
|
||||||
|
# Use docker-compose or docker compose based on availability
|
||||||
|
if command_exists docker-compose; then
|
||||||
|
COMPOSE_CMD="docker-compose"
|
||||||
|
else
|
||||||
|
COMPOSE_CMD="docker compose"
|
||||||
|
fi
|
||||||
|
|
||||||
|
$COMPOSE_CMD down -v --remove-orphans
|
||||||
|
|
||||||
|
# Remove all related images
|
||||||
|
docker image prune -f
|
||||||
|
|
||||||
|
print_success "Cleanup completed"
|
||||||
|
else
|
||||||
|
print_status "Cleanup cancelled"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to restart services
|
||||||
|
restart_services() {
|
||||||
|
print_status "Restarting all services..."
|
||||||
|
stop_services
|
||||||
|
sleep 2
|
||||||
|
start_services
|
||||||
|
}
|
||||||
|
|
||||||
|
# Main script logic
|
||||||
|
main() {
|
||||||
|
# Parse command line arguments
|
||||||
|
case "${1:-start}" in
|
||||||
|
"start")
|
||||||
|
check_requirements
|
||||||
|
create_directories
|
||||||
|
pull_images
|
||||||
|
build_services
|
||||||
|
start_services
|
||||||
|
show_status
|
||||||
|
;;
|
||||||
|
"stop")
|
||||||
|
stop_services
|
||||||
|
;;
|
||||||
|
"restart")
|
||||||
|
restart_services
|
||||||
|
show_status
|
||||||
|
;;
|
||||||
|
"build")
|
||||||
|
check_requirements
|
||||||
|
build_services
|
||||||
|
;;
|
||||||
|
"pull")
|
||||||
|
pull_images
|
||||||
|
;;
|
||||||
|
"status")
|
||||||
|
show_status
|
||||||
|
;;
|
||||||
|
"logs")
|
||||||
|
show_logs "$2"
|
||||||
|
;;
|
||||||
|
"clean")
|
||||||
|
clean_up
|
||||||
|
;;
|
||||||
|
"admin")
|
||||||
|
check_requirements
|
||||||
|
create_directories
|
||||||
|
pull_images
|
||||||
|
build_services
|
||||||
|
print_status "Starting with admin interfaces..."
|
||||||
|
|
||||||
|
# Use docker-compose or docker compose based on availability
|
||||||
|
if command_exists docker-compose; then
|
||||||
|
COMPOSE_CMD="docker-compose"
|
||||||
|
else
|
||||||
|
COMPOSE_CMD="docker compose"
|
||||||
|
fi
|
||||||
|
|
||||||
|
$COMPOSE_CMD --profile admin up -d
|
||||||
|
show_status
|
||||||
|
;;
|
||||||
|
"proxy")
|
||||||
|
check_requirements
|
||||||
|
create_directories
|
||||||
|
pull_images
|
||||||
|
build_services
|
||||||
|
print_status "Starting with nginx proxy..."
|
||||||
|
|
||||||
|
# Use docker-compose or docker compose based on availability
|
||||||
|
if command_exists docker-compose; then
|
||||||
|
COMPOSE_CMD="docker-compose"
|
||||||
|
else
|
||||||
|
COMPOSE_CMD="docker compose"
|
||||||
|
fi
|
||||||
|
|
||||||
|
$COMPOSE_CMD --profile proxy up -d
|
||||||
|
show_status
|
||||||
|
;;
|
||||||
|
"help"|"-h"|"--help")
|
||||||
|
show_help
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
print_error "Unknown command: $1"
|
||||||
|
show_help
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
}
|
||||||
|
|
||||||
|
# Run main function
|
||||||
|
main "$@"
|
||||||
|
Reference in New Issue
Block a user