Ви не можете вибрати більше 25 тем Теми мають розпочинатися з літери або цифри, можуть містити дефіси (-) і не повинні перевищувати 35 символів.
 
 
 
 

105 рядки
2.7 KiB

  1. #!/usr/bin/env bash
  2. set -euo pipefail
  3. IMAGE_URL="${IMAGE_URL:-https://oa-edu-1259243469.cos.ap-chengdu.myqcloud.com/public/file/oa_sfu_docker/yzx-oa-sfu_0.1.0-live_linux-amd64.tar}"
  4. IMAGE_TAR="${IMAGE_TAR:-yzx-oa-sfu_0.1.0-live_linux-amd64.tar}"
  5. IMAGE_NAME="${SFU_IMAGE:-yzx-oa-sfu:0.1.0-live}"
  6. CONTAINER_NAME="${CONTAINER_NAME:-yzx-oa-sfu}"
  7. INSTALL_DIR="${INSTALL_DIR:-/opt/yzx_oa_sfu}"
  8. SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
  9. get_env() {
  10. local key="$1"
  11. local default_value="$2"
  12. local line value
  13. line="$(grep -E "^${key}=" .env | tail -n 1 || true)"
  14. value="${line#*=}"
  15. value="${value%$'\r'}"
  16. value="${value#\'}"
  17. value="${value%\'}"
  18. value="${value#\"}"
  19. value="${value%\"}"
  20. if [ -n "$value" ]; then
  21. printf "%s" "$value"
  22. else
  23. printf "%s" "$default_value"
  24. fi
  25. }
  26. download_image() {
  27. if [ -f "$IMAGE_TAR" ]; then
  28. echo "Image tar already exists: $IMAGE_TAR"
  29. return
  30. fi
  31. echo "Downloading image tar:"
  32. echo " $IMAGE_URL"
  33. if command -v curl >/dev/null 2>&1; then
  34. curl -fL --retry 3 --retry-delay 3 -o "$IMAGE_TAR" "$IMAGE_URL"
  35. elif command -v wget >/dev/null 2>&1; then
  36. wget -O "$IMAGE_TAR" "$IMAGE_URL"
  37. else
  38. echo "Missing curl/wget. Please install one of them or upload $IMAGE_TAR manually." >&2
  39. exit 1
  40. fi
  41. }
  42. if ! command -v docker >/dev/null 2>&1; then
  43. echo "Docker is not installed or not in PATH." >&2
  44. exit 1
  45. fi
  46. mkdir -p "$INSTALL_DIR"
  47. cd "$INSTALL_DIR"
  48. if [ ! -f ".env" ]; then
  49. if [ -f "$SCRIPT_DIR/.env" ]; then
  50. cp "$SCRIPT_DIR/.env" .env
  51. echo "Created $INSTALL_DIR/.env from deploy/.env."
  52. echo "Please review .env before production use."
  53. else
  54. echo "Missing .env. Put deploy/.env next to this script or create $INSTALL_DIR/.env." >&2
  55. exit 1
  56. fi
  57. fi
  58. download_image
  59. echo "Loading Docker image..."
  60. docker load -i "$IMAGE_TAR"
  61. PORT="$(get_env PORT 4443)"
  62. RTC_MIN_PORT="$(get_env MEDIASOUP_RTC_MIN_PORT 40000)"
  63. RTC_MAX_PORT="$(get_env MEDIASOUP_RTC_MAX_PORT 40100)"
  64. echo "Restarting container: $CONTAINER_NAME"
  65. docker rm -f "$CONTAINER_NAME" 2>/dev/null || true
  66. docker run -d \
  67. --name "$CONTAINER_NAME" \
  68. --restart unless-stopped \
  69. --security-opt seccomp=unconfined \
  70. --env-file .env \
  71. -p "${PORT}:${PORT}/tcp" \
  72. -p "${RTC_MIN_PORT}-${RTC_MAX_PORT}:${RTC_MIN_PORT}-${RTC_MAX_PORT}/udp" \
  73. -p "${RTC_MIN_PORT}-${RTC_MAX_PORT}:${RTC_MIN_PORT}-${RTC_MAX_PORT}/tcp" \
  74. "$IMAGE_NAME"
  75. echo
  76. docker ps --filter "name=${CONTAINER_NAME}"
  77. echo
  78. echo "Health check:"
  79. if command -v curl >/dev/null 2>&1; then
  80. curl -fsS "http://127.0.0.1:${PORT}/healthz" || true
  81. echo
  82. else
  83. echo "curl not found; run: curl http://127.0.0.1:${PORT}/healthz"
  84. fi
  85. echo
  86. echo "Done. Logs:"
  87. echo " docker logs -f $CONTAINER_NAME"