#!/usr/bin/env bash # # Docker Compose Startup Script for Audio Transcription # # Usage: ./deploy/deploy.sh [OPTIONS] # # Options: # --profile Docker compose profile # --detach Run in detached mode # --down Stop and remove containers # --logs Show logs # --help Show this help message # # Required: Set environment variables in deploy/.env file or export them before running. # See ../.env.example (module root) for the full list of variables. # set -euo pipefail SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" # Load .env file ONLY from deploy/ directory if [[ -f "$SCRIPT_DIR/.env" ]]; then echo "Loading environment from: $SCRIPT_DIR/.env" set -a source "$SCRIPT_DIR/.env" set +a fi PROFILE="" DETACH="" ACTION="up" show_help() { sed -n '2,18p' "$0" | sed 's/^# //' | sed 's/^#//' exit 0 } check_required_var() { local var_name="$1" if [[ -z "${!var_name:-}" ]]; then echo "ERROR: Required environment variable $var_name is not set" echo "Set it in deploy/.env file or export it before running this script" exit 1 fi } while [[ $# -gt 0 ]]; do case $1 in --profile) PROFILE="$2" shift 2 ;; --detach|-d) DETACH="-d" shift ;; --down) ACTION="down" shift ;; --logs) ACTION="logs" shift ;; --help|-h) show_help ;; *) echo "Unknown option: $1" echo "Use --help for usage information" exit 1 ;; esac done # Require profile when bringing up if [[ -z "$PROFILE" && "$ACTION" == "up" ]]; then echo "ERROR: --profile is required" echo "Options: api, api-nginx" exit 1 fi # Fail-fast required vars check_required_var "AUDIO_MODEL" check_required_var "AUDIO_DEVICE" check_required_var "AUDIO_CACHE_DIR" cd "$SCRIPT_DIR" case $ACTION in up) echo "Starting Audio Transcription API with profile: $PROFILE" echo " Model: $AUDIO_MODEL" echo " Device: $AUDIO_DEVICE" echo " Compute type: ${AUDIO_COMPUTE_TYPE:-int8}" echo " Cache dir: $AUDIO_CACHE_DIR" echo "" # shellcheck disable=SC2086 exec docker compose --profile "$PROFILE" up $DETACH ;; down) if [[ -z "$PROFILE" ]]; then echo "ERROR: --profile is required with --down" exit 1 fi echo "Stopping Audio Transcription containers..." exec docker compose --profile "$PROFILE" down ;; logs) if [[ -z "$PROFILE" ]]; then echo "ERROR: --profile is required with --logs" exit 1 fi exec docker compose --profile "$PROFILE" logs -f ;; esac