WalleGriffkinder commited on
Commit
9fd72e5
·
verified ·
1 Parent(s): c217e66

Upload 4 files

Browse files
Files changed (4) hide show
  1. Dockerfile +4 -2
  2. package.json +5 -3
  3. server.mjs +12 -0
  4. start.sh +40 -6
Dockerfile CHANGED
@@ -3,12 +3,13 @@ FROM divideprojects/docker-telegram-bot-api:latest
3
  ENV TELEGRAM_API_ID=$TELEGRAM_API_ID
4
  ENV TELEGRAM_API_HASH=$TELEGRAM_API_HASH
5
  ENV TELEGRAM_LOCAL=true
 
6
 
7
  # Устанавливаем Node.js с помощью Alpine package manager
8
  RUN apk add --no-cache nodejs npm
9
 
10
  # Также устанавливаем необходимые утилиты
11
- RUN apk add --no-cache wget tar gzip findutils coreutils
12
 
13
  # Создаем директорию для данных и даем права
14
  RUN mkdir -p /var/lib/telegram-bot-api && \
@@ -16,13 +17,14 @@ RUN mkdir -p /var/lib/telegram-bot-api && \
16
 
17
  # Создаем директорию для скрипта статистики
18
  WORKDIR /app
19
- COPY package.json stats-reporter.js ./
20
 
21
  # Устанавливаем зависимости
22
  RUN npm install
23
 
24
  # Для Hugging Face нужен порт 7860
25
  EXPOSE 7860
 
26
 
27
  # Запускаем и telegram-bot-api, и скрипт статистики
28
  COPY start.sh /
 
3
  ENV TELEGRAM_API_ID=$TELEGRAM_API_ID
4
  ENV TELEGRAM_API_HASH=$TELEGRAM_API_HASH
5
  ENV TELEGRAM_LOCAL=true
6
+ ENV EXPRESS_PORT=15782
7
 
8
  # Устанавливаем Node.js с помощью Alpine package manager
9
  RUN apk add --no-cache nodejs npm
10
 
11
  # Также устанавливаем необходимые утилиты
12
+ RUN apk add --no-cache wget tar gzip findutils coreutils openssh-client
13
 
14
  # Создаем директорию для данных и даем права
15
  RUN mkdir -p /var/lib/telegram-bot-api && \
 
17
 
18
  # Создаем директорию для скрипта статистики
19
  WORKDIR /app
20
+ COPY package.json stats-reporter.js server.mjs ./
21
 
22
  # Устанавливаем зависимости
23
  RUN npm install
24
 
25
  # Для Hugging Face нужен порт 7860
26
  EXPOSE 7860
27
+ EXPOSE ${EXPRESS_PORT}
28
 
29
  # Запускаем и telegram-bot-api, и скрипт статистики
30
  COPY start.sh /
package.json CHANGED
@@ -1,14 +1,16 @@
1
  {
2
  "name": "telegram-bot-api-stats-reporter",
3
  "version": "1.0.0",
4
- "description": "Reports statistics about Telegram Bot API to GitHub Gists",
5
  "main": "stats-reporter.js",
6
  "type": "module",
7
  "scripts": {
8
- "start": "node stats-reporter.js"
 
9
  },
10
  "dependencies": {
11
- "node-fetch": "^3.3.2"
 
12
  },
13
  "engines": {
14
  "node": ">=16"
 
1
  {
2
  "name": "telegram-bot-api-stats-reporter",
3
  "version": "1.0.0",
4
+ "description": "Reports statistics about Telegram Bot API to GitHub Gists and runs an Express server",
5
  "main": "stats-reporter.js",
6
  "type": "module",
7
  "scripts": {
8
+ "start": "node stats-reporter.js",
9
+ "start-server": "node server.mjs"
10
  },
11
  "dependencies": {
12
+ "node-fetch": "^3.3.2",
13
+ "express": "^4.18.2"
14
  },
15
  "engines": {
16
  "node": ">=16"
server.mjs ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import express from 'express';
2
+
3
+ const app = express();
4
+ const port = process.env.EXPRESS_PORT || 15782;
5
+
6
+ app.get('/', (req, res) => {
7
+ res.send('Hello World from Express on Alpine!');
8
+ });
9
+
10
+ app.listen(port, '0.0.0.0', () => {
11
+ console.log(`[${new Date().toISOString()}] Express server listening on port ${port}`);
12
+ });
start.sh CHANGED
@@ -1,20 +1,54 @@
1
  #!/bin/sh
2
  set -e
3
 
 
 
4
  # Запускаем telegram-bot-api как основной процесс
5
  telegram-bot-api --local --http-port=7860 --dir=/var/lib/telegram-bot-api --temp-dir=/var/lib/telegram-bot-api &
6
  TELEGRAM_PID=$!
 
7
 
8
  # Запускаем скрипт статистики
9
  cd /app
10
  node stats-reporter.js &
11
- NODE_PID=$!
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
12
 
13
  # Настраиваем перехват сигналов
14
- trap "kill $TELEGRAM_PID $NODE_PID; exit" SIGINT SIGTERM
 
 
 
15
 
16
- # Ожидаем завершения основного процесса
17
  wait $TELEGRAM_PID
18
- # Если основной процесс завершился, останавливаем все
19
- kill $NODE_PID
20
- exit
 
 
 
 
 
1
  #!/bin/sh
2
  set -e
3
 
4
+ EXPRESS_PORT_EFFECTIVE=${EXPRESS_PORT:-15782}
5
+
6
  # Запускаем telegram-bot-api как основной процесс
7
  telegram-bot-api --local --http-port=7860 --dir=/var/lib/telegram-bot-api --temp-dir=/var/lib/telegram-bot-api &
8
  TELEGRAM_PID=$!
9
+ echo "[$(date +%Y-%m-%dT%H:%M:%S%Z)] Telegram Bot API started with PID $TELEGRAM_PID on port 7860"
10
 
11
  # Запускаем скрипт статистики
12
  cd /app
13
  node stats-reporter.js &
14
+ NODE_STATS_PID=$!
15
+ echo "[$(date +%Y-%m-%dT%H:%M:%S%Z)] Stats reporter script started with PID $NODE_STATS_PID"
16
+
17
+ node server.mjs &
18
+ NODE_EXPRESS_PID=$!
19
+ echo "[$(date +%Y-%m-%dT%H:%M:%S%Z)] Express server started with PID $NODE_EXPRESS_PID on port $EXPRESS_PORT_EFFECTIVE"
20
+
21
+ echo "[$(date +%Y-%m-%dT%H:%M:%S%Z)] Attempting to start SSH tunnel for port $EXPRESS_PORT_EFFECTIVE via tunnel.us.hostux.net..."
22
+ ssh -o StrictHostKeyChecking=no \
23
+ -o UserKnownHostsFile=/dev/null \
24
+ -o ExitOnForwardFailure=yes \
25
+ -o LogLevel=ERROR \
26
+ -R 80:localhost:$EXPRESS_PORT_EFFECTIVE \
27
+ tunnel.us.hostux.net > /tmp/tunnel.log 2>&1 &
28
+ TUNNEL_PID=$!
29
+ echo "[$(date +%Y-%m-%dT%H:%M:%S%Z)] SSH tunnel process started with PID $TUNNEL_PID. Check /tmp/tunnel.log for URL and status."
30
+
31
+ sleep 10
32
+ echo "[$(date +%Y-%m-%dT%H:%M:%S%Z)] SSH tunnel log (/tmp/tunnel.log) content:"
33
+ if [ -f /tmp/tunnel.log ]; then
34
+ cat /tmp/tunnel.log
35
+ else
36
+ echo "/tmp/tunnel.log not found."
37
+ fi
38
+ echo "[$(date +%Y-%m-%dT%H:%M:%S%Z)] End of SSH tunnel log."
39
 
40
  # Настраиваем перехват сигналов
41
+ trap "echo '[$(date +%Y-%m-%dT%H:%M:%S%Z)] Caught SIGINT/SIGTERM, shutting down...'; \
42
+ kill $TELEGRAM_PID $NODE_STATS_PID $NODE_EXPRESS_PID $TUNNEL_PID 2>/dev/null || true; \
43
+ echo '[$(date +%Y-%m-%dT%H:%M:%S%Z)] Shutdown complete.'; \
44
+ exit 0" SIGINT SIGTERM
45
 
46
+ echo "[$(date +%Y-%m-%dT%H:%M:%S%Z)] Waiting for Telegram Bot API (PID $TELEGRAM_PID) to exit..."
47
  wait $TELEGRAM_PID
48
+ EXIT_CODE=$?
49
+ echo "[$(date +%Y-%m-%dT%H:%M:%S%Z)] Telegram Bot API process (PID $TELEGRAM_PID) exited with code $EXIT_CODE."
50
+
51
+ echo "[$(date +%Y-%m-%dT%H:%M:%S%Z)] Main process exited, ensuring other processes are stopped..."
52
+ kill $NODE_STATS_PID $NODE_EXPRESS_PID $TUNNEL_PID 2>/dev/null || true
53
+ echo "[$(date +%Y-%m-%dT%H:%M:%S%Z)] Script finished."
54
+ exit $EXIT_CODE