107 lines
3.3 KiB
Bash
Executable File
107 lines
3.3 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
# Simple ASR Server startup script for systemd
|
|
# This script loads environment variables from .env file and starts the server
|
|
|
|
set -e
|
|
|
|
# Get the directory where this script is located
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
APP_DIR="${SCRIPT_DIR}"
|
|
|
|
# Set ROCm environment variables if ROCm is available
|
|
if [ -d "/opt/rocm" ]; then
|
|
export ROCM_PATH=${ROCM_PATH:-"/opt/rocm"}
|
|
export PATH="${ROCM_PATH}/bin:${PATH}"
|
|
export LD_LIBRARY_PATH="${ROCM_PATH}/lib:${LD_LIBRARY_PATH:-}"
|
|
# Set HIP_VISIBLE_DEVICES to use all available GPUs
|
|
export HIP_VISIBLE_DEVICES=${HIP_VISIBLE_DEVICES:-"0"}
|
|
echo "ROCm detected, configured environment variables"
|
|
fi
|
|
|
|
# Function to generate a secure API key
|
|
generate_api_key() {
|
|
if command -v openssl >/dev/null 2>&1; then
|
|
openssl rand -hex 32
|
|
else
|
|
echo ""
|
|
fi
|
|
}
|
|
|
|
# Load environment variables from .env file if it exists
|
|
if [ -f "${APP_DIR}/.env" ]; then
|
|
echo "Loading environment variables from ${APP_DIR}/.env"
|
|
set -a # automatically export all variables
|
|
source "${APP_DIR}/.env"
|
|
set +a
|
|
else
|
|
echo "Warning: .env file not found at ${APP_DIR}/.env"
|
|
echo "Using default environment variables"
|
|
fi
|
|
|
|
# Set default values if not provided in .env
|
|
export HOST=${HOST:-"0.0.0.0"}
|
|
export PORT=${PORT:-9854}
|
|
export DEFAULT_MODEL=${DEFAULT_MODEL:-"turbo"}
|
|
export MODEL_DEVICE=${MODEL_DEVICE:-"cuda"}
|
|
export MODEL_DOWNLOAD_ROOT=${MODEL_DOWNLOAD_ROOT:-"${APP_DIR}/models"}
|
|
export KEYS_FILE=${KEYS_FILE:-"${APP_DIR}/data/keys.txt"}
|
|
export LOG_LEVEL=${LOG_LEVEL:-"info"}
|
|
|
|
# Create necessary directories
|
|
mkdir -p "${MODEL_DOWNLOAD_ROOT}"
|
|
mkdir -p "$(dirname "${KEYS_FILE}")"
|
|
|
|
# Check if keys file exists, create with generated key if not
|
|
if [ ! -f "${KEYS_FILE}" ]; then
|
|
echo "Creating default keys file..."
|
|
|
|
# Try to generate a secure key with openssl
|
|
GENERATED_KEY=$(generate_api_key)
|
|
|
|
if [ -n "${GENERATED_KEY}" ]; then
|
|
echo "${GENERATED_KEY}" > "${KEYS_FILE}"
|
|
echo "Generated secure API key using openssl: ${GENERATED_KEY}"
|
|
echo "Created keys file at: ${KEYS_FILE}"
|
|
else
|
|
echo "WARNING: openssl not found! Cannot generate secure API key."
|
|
echo "Please manually add API keys to ${KEYS_FILE}"
|
|
echo "Each key should be 64 hex characters (32 bytes) on a separate line."
|
|
echo "Example key format: 0000000000000000000000000000000000000000000000000000000000000000"
|
|
echo ""
|
|
echo "Creating empty keys file - you must add keys manually before starting the server."
|
|
touch "${KEYS_FILE}"
|
|
fi
|
|
fi
|
|
|
|
# Check if virtual environment exists, create if not
|
|
VENV_DIR="${APP_DIR}/venv"
|
|
if [ ! -d "${VENV_DIR}" ]; then
|
|
echo "Creating virtual environment..."
|
|
python3 -m venv "${VENV_DIR}"
|
|
fi
|
|
|
|
# Activate virtual environment
|
|
echo "Activating virtual environment..."
|
|
source "${VENV_DIR}/bin/activate"
|
|
|
|
# Install/upgrade dependencies
|
|
echo "Installing/upgrading dependencies..."
|
|
pip install --upgrade pip
|
|
pip install -r "${APP_DIR}/requirements.txt"
|
|
|
|
# Change to app directory
|
|
cd "${APP_DIR}"
|
|
|
|
echo "Starting Simple ASR Server..."
|
|
echo "Host: ${HOST}"
|
|
echo "Port: ${PORT}"
|
|
echo "Default Model: ${DEFAULT_MODEL}"
|
|
echo "Model Device: ${MODEL_DEVICE}"
|
|
echo "Model Download Root: ${MODEL_DOWNLOAD_ROOT}"
|
|
echo "Keys File: ${KEYS_FILE}"
|
|
echo "Log Level: ${LOG_LEVEL}"
|
|
|
|
# Start the server
|
|
exec python app.py
|