4ce4204b6c
CI / Lint (push) Failing after 2s
CI / Build (push) Has been skipped
SDK CI / PHP SDK (push) Failing after 1s
Split PHP SDK / PHP SDK tests (push) Failing after 1s
CI / Test (push) Failing after 1s
CI / Dashboard (push) Failing after 0s
SDK CI / JavaScript SDK (push) Failing after 0s
SDK CI / Python SDK (push) Failing after 2s
SDK CI / Java SDK (push) Failing after 1s
Split PHP SDK / Mirror sdk/php -> rmyndharis/openwa-php (push) Has been skipped
CI / Test (PostgreSQL migrations) (push) Failing after 7m47s
CI / Docker Build (push) Has been skipped
206 lines
5.2 KiB
Bash
Executable File
206 lines
5.2 KiB
Bash
Executable File
#!/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
|