WalleGriffkinder commited on
Commit
b2e9dde
·
verified ·
1 Parent(s): d8be3f2

Update start.sh

Browse files
Files changed (1) hide show
  1. start.sh +60 -35
start.sh CHANGED
@@ -1,62 +1,87 @@
1
  #!/bin/sh
2
- set -e
3
 
4
- echo "Script started. Current user: $(whoami), UID: $(id -u)"
5
-
6
- TELEGRAM_MAIN_PORT=7860
7
- TELEGRAM_STATS_PORT=8081
 
 
8
 
 
9
  if [ -z "$TELEGRAM_API_ID" ] || [ -z "$TELEGRAM_API_HASH" ]; then
10
  echo "Ошибка: Переменные окружения TELEGRAM_API_ID и TELEGRAM_API_HASH должны быть установлены."
11
- echo "Пожалуйста, добавьте их в секреты вашего Hugging Face Space."
12
  exit 1
13
  fi
14
 
15
- echo "Запуск Telegram Bot API..."
16
- echo "Основной API будет на порту: ${TELEGRAM_MAIN_PORT}"
17
- echo "Статистика API будет на порту: ${TELEGRAM_STATS_PORT} (внутри контейнера)"
 
 
 
 
 
18
 
 
 
 
19
  telegram-bot-api \
20
  --local \
21
  --http-port=${TELEGRAM_MAIN_PORT} \
22
- --http-stat-port=${TELEGRAM_STATS_PORT} \
23
- --http-stat-ip-address=0.0.0.0 \
24
- --dir=/var/lib/telegram-bot-api \
25
- --temp-dir=/var/lib/telegram-bot-api &
26
 
27
  TELEGRAM_PID=$!
28
  echo "Telegram Bot API запущен с PID: $TELEGRAM_PID"
29
 
30
- sleep 5
31
-
32
- echo "Попытка запустить туннель localhost.run для порта статистики ${TELEGRAM_STATS_PORT}..."
33
 
34
- ssh -v \
35
- -R 80:localhost:${TELEGRAM_STATS_PORT} \
36
- -o StrictHostKeyChecking=no \
37
- -o UserKnownHostsFile=/dev/null \
38
- -o ServerAliveInterval=60 \
39
- -o ExitOnForwardFailure=yes \
40
- nokey@localhost.run &
41
-
42
- TUNNEL_PID=$!
43
- echo "Процесс туннеля (ssh) запущен с PID: $TUNNEL_PID (если успешно)"
44
 
 
45
  cleanup() {
46
  echo "Получен сигнал завершения. Остановка процессов..."
47
- kill $TELEGRAM_PID 2>/dev/null
48
- kill $TUNNEL_PID 2>/dev/null
 
 
 
 
 
 
 
 
 
 
 
49
  wait $TELEGRAM_PID 2>/dev/null
50
- wait $TUNNEL_PID 2>/dev/null
51
  echo "Процессы остановлены."
52
- exit 0
53
  }
54
 
 
55
  trap cleanup SIGINT SIGTERM
56
 
57
- wait $TELEGRAM_PID
 
 
 
 
 
 
 
 
 
 
 
58
 
59
- echo "Telegram Bot API завершился. Остановка туннеля..."
60
- kill $TUNNEL_PID 2>/dev/null
61
- wait $TUNNEL_PID 2>/dev/null
62
- echo "Скрипт завершен."
 
1
  #!/bin/sh
2
+ set -e # Выход при любой ошибке
3
 
4
+ echo "--- Starting services ---"
5
+ CURRENT_USER=$(whoami)
6
+ CURRENT_UID=$(id -u)
7
+ echo "Script running as user: ${CURRENT_USER} (UID: ${CURRENT_UID})"
8
+ echo "HOME directory: ${HOME}"
9
+ echo "Working directory: $(pwd)"
10
 
11
+ # Проверка обязательных переменных для Telegram API
12
  if [ -z "$TELEGRAM_API_ID" ] || [ -z "$TELEGRAM_API_HASH" ]; then
13
  echo "Ошибка: Переменные окружения TELEGRAM_API_ID и TELEGRAM_API_HASH должны быть установлены."
 
14
  exit 1
15
  fi
16
 
17
+ # Проверка переменных для Gist (предупреждение, если не установлены)
18
+ if [ -z "$GITHUB_USERNAME" ] || [ -z "$GITHUB_TOKEN" ] || [ -z "$ENV_GIST_ID" ]; then
19
+ echo "Внимание: GITHUB_USERNAME, GITHUB_TOKEN или ENV_GIST_ID не установлены. Обновление Gist будет пропущено."
20
+ fi
21
+
22
+ # Порты
23
+ TELEGRAM_MAIN_PORT=7860 # Как указано в app_port в README.md
24
+ # EXPRESS_PORT будет взят из окружения Node.js приложения (по умолчанию 3001)
25
 
26
+ echo "1. Запуск Telegram Bot API на порту ${TELEGRAM_MAIN_PORT}..."
27
+ # Запускаем Telegram Bot API в фоновом режиме
28
+ # Он будет использовать /var/lib/telegram-bot-api, права на которую установлены для appuser
29
  telegram-bot-api \
30
  --local \
31
  --http-port=${TELEGRAM_MAIN_PORT} \
32
+ --http-stat-port=8082 \ # Статистика самого API на неиспользуемом порту, нам она не нужна снаружи
33
+ --http-stat-ip-address=127.0.0.1 \
34
+ --dir=${TELEGRAM_DATA_DIR:-/var/lib/telegram-bot-api} \
35
+ --temp-dir=${TELEGRAM_DATA_DIR:-/var/lib/telegram-bot-api} &
36
 
37
  TELEGRAM_PID=$!
38
  echo "Telegram Bot API запущен с PID: $TELEGRAM_PID"
39
 
40
+ # Небольшая задержка перед запуском Node.js приложения
41
+ sleep 3
 
42
 
43
+ echo "2. Запуск Node.js Express приложения (статистика, файлы, Gist)..."
44
+ # Запускаем Node.js приложение в фоновом режиме
45
+ # Оно само запустит туннель для своего порта
46
+ node server.js &
47
+ NODE_APP_PID=$!
48
+ echo "Node.js приложение запущено с PID: $NODE_APP_PID"
 
 
 
 
49
 
50
+ # Функция для корректного завершения
51
  cleanup() {
52
  echo "Получен сигнал завершения. Остановка процессов..."
53
+ # Убиваем процессы в обратном порядке их запуска
54
+ if kill -0 $NODE_APP_PID 2>/dev/null; then
55
+ echo "Остановка Node.js приложения (PID: $NODE_APP_PID)..."
56
+ kill $NODE_APP_PID
57
+ fi
58
+ if kill -0 $TELEGRAM_PID 2>/dev/null; then
59
+ echo "Остановка Telegram Bot API (PID: $TELEGRAM_PID)..."
60
+ kill $TELEGRAM_PID
61
+ fi
62
+ # SSH туннель запускается и управляется из Node.js, он должен завершиться при завершении Node.js
63
+
64
+ # Ожидаем завершения фоновых процессов
65
+ wait $NODE_APP_PID 2>/dev/null
66
  wait $TELEGRAM_PID 2>/dev/null
 
67
  echo "Процессы остановлены."
68
+ exit 0 # Успешное завершение
69
  }
70
 
71
+ # Перехватываем сигналы SIGINT (Ctrl+C) и SIGTERM
72
  trap cleanup SIGINT SIGTERM
73
 
74
+ # Ожидаем завершения основного процесса (например, Node.js приложения)
75
+ # Если Node.js упадет, то и контейнер должен остановиться.
76
+ # Если Telegram API упадет, Node.js продолжит работать (можно изменить логику, если нужно)
77
+ wait $NODE_APP_PID
78
+ EXIT_CODE=$? # Получаем код выхода Node.js приложения
79
+
80
+ echo "Node.js приложение завершилось с кодом $EXIT_CODE. Завершение работы..."
81
+ # Если Node.js завершился, останавливаем и Telegram API, если он еще работает
82
+ if kill -0 $TELEGRAM_PID 2>/dev/null; then
83
+ kill $TELEGRAM_PID
84
+ wait $TELEGRAM_PID 2>/dev/null
85
+ fi
86
 
87
+ exit $EXIT_CODE # Выходим с кодом завершения Node.js приложения