Upload 4 files
Browse files- Dockerfile +4 -2
- package.json +5 -3
- server.mjs +12 -0
- 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 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 12 |
|
| 13 |
# Настраиваем перехват сигналов
|
| 14 |
-
trap "
|
|
|
|
|
|
|
|
|
|
| 15 |
|
| 16 |
-
|
| 17 |
wait $TELEGRAM_PID
|
| 18 |
-
|
| 19 |
-
|
| 20 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 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
|