qwen_2.5_model / scripts /openwa.sh
Muhammad Noman
Deploy OpenWA to Hugging Face Spaces
46252cd
Raw
History Blame Contribute Delete
5.32 kB
#!/bin/bash
# OpenWA Smart Orchestration Script
# Reads .env and activates appropriate Docker profiles
set -e
# Colors
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
# Script directory
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PROJECT_DIR="$(dirname "$SCRIPT_DIR")"
# Log functions
log_info() { echo -e "${BLUE}${NC} $1"; }
log_success() { echo -e "${GREEN}${NC} $1"; }
log_warn() { echo -e "${YELLOW}${NC} $1"; }
log_error() { echo -e "${RED}${NC} $1"; }
# Load environment variables
load_env() {
if [ -f "$PROJECT_DIR/.env" ]; then
log_info "Loading .env file..."
set -a
source "$PROJECT_DIR/.env"
set +a
else
log_warn ".env file not found, using defaults"
fi
}
# Determine which profiles to activate
get_profiles() {
local profiles=""
# Dashboard is bundled into the openwa-api image and served by NestJS on the API port —
# no separate container/profile needed. Put your own TLS proxy in front if required.
# PostgreSQL (built-in)
if [ "${DATABASE_TYPE:-sqlite}" = "postgres" ] && [ "${POSTGRES_BUILTIN:-false}" = "true" ]; then
profiles="$profiles --profile postgres"
log_info "PostgreSQL: built-in container"
elif [ "${DATABASE_TYPE:-sqlite}" = "postgres" ]; then
log_info "PostgreSQL: external (${DATABASE_HOST:-localhost}:${DATABASE_PORT:-5432})"
else
log_info "Database: SQLite"
fi
# Redis (built-in)
if [ "${REDIS_ENABLED:-false}" = "true" ] && [ "${REDIS_BUILTIN:-false}" = "true" ]; then
profiles="$profiles --profile redis"
log_info "Redis: built-in container"
elif [ "${REDIS_ENABLED:-false}" = "true" ]; then
log_info "Redis: external (${REDIS_HOST:-localhost}:${REDIS_PORT:-6379})"
else
log_info "Redis: disabled"
fi
# MinIO (built-in S3)
if [ "${STORAGE_TYPE:-local}" = "s3" ] && [ "${MINIO_BUILTIN:-false}" = "true" ]; then
profiles="$profiles --profile minio"
log_info "Storage: built-in MinIO"
elif [ "${STORAGE_TYPE:-local}" = "s3" ]; then
log_info "Storage: external S3 (${S3_ENDPOINT})"
else
log_info "Storage: local filesystem"
fi
# Engine type
log_info "Engine: ${ENGINE_TYPE:-whatsapp-web.js}"
echo "$profiles"
}
# Validate engine type
validate_engine() {
local engine="${ENGINE_TYPE:-whatsapp-web.js}"
local valid_engines=("whatsapp-web.js" "baileys")
for valid in "${valid_engines[@]}"; do
if [ "$engine" = "$valid" ]; then
return 0
fi
done
log_error "Invalid ENGINE_TYPE: $engine"
log_error "Valid options: ${valid_engines[*]}"
exit 1
}
# Start OpenWA
cmd_start() {
log_info "Starting OpenWA..."
load_env
validate_engine
local profiles=$(get_profiles)
echo ""
log_info "Activating profiles:$profiles"
echo ""
cd "$PROJECT_DIR"
docker compose $profiles up -d
echo ""
log_success "OpenWA started successfully!"
echo ""
log_info "Dashboard & API: http://localhost:${API_PORT:-2785}"
}
# Stop OpenWA
cmd_stop() {
log_info "Stopping OpenWA..."
cd "$PROJECT_DIR"
docker compose --profile full down
log_success "OpenWA stopped"
}
# Restart OpenWA
cmd_restart() {
cmd_stop
cmd_start
}
# Show status
cmd_status() {
log_info "OpenWA container status:"
echo ""
cd "$PROJECT_DIR"
docker compose ps --format "table {{.Name}}\t{{.Status}}\t{{.Ports}}"
}
# Show logs
cmd_logs() {
local service="${1:-openwa-api}"
local lines="${2:-100}"
cd "$PROJECT_DIR"
docker compose logs -f --tail="$lines" "$service"
}
# Build images
cmd_build() {
log_info "Building OpenWA images..."
load_env
local profiles=$(get_profiles)
cd "$PROJECT_DIR"
docker compose $profiles build
log_success "Build complete"
}
# Update (pull + build + restart)
cmd_update() {
log_info "Updating OpenWA..."
cd "$PROJECT_DIR"
git pull
cmd_build
cmd_restart
log_success "Update complete"
}
# Show help
cmd_help() {
echo ""
echo "OpenWA Smart Orchestration Script"
echo ""
echo "Usage: $0 <command> [options]"
echo ""
echo "Commands:"
echo " start Start OpenWA with auto-detected profiles"
echo " stop Stop all OpenWA containers"
echo " restart Restart OpenWA"
echo " status Show container status"
echo " logs Show logs (default: openwa-api)"
echo " build Build Docker images"
echo " update Pull latest code and restart"
echo " help Show this help"
echo ""
echo "Profile activation is automatic based on .env:"
echo " POSTGRES_BUILTIN=true → activates postgres profile"
echo " REDIS_BUILTIN=true → activates redis profile"
echo " MINIO_BUILTIN=true → activates minio profile"
echo ""
}
# Main
case "${1:-help}" in
start) cmd_start ;;
stop) cmd_stop ;;
restart) cmd_restart ;;
status) cmd_status ;;
logs) cmd_logs "${2:-}" "${3:-}" ;;
build) cmd_build ;;
update) cmd_update ;;
help) cmd_help ;;
*)
log_error "Unknown command: $1"
cmd_help
exit 1
;;
esac