Skip to content

Instantly share code, notes, and snippets.

@kianurivzzz
Created January 15, 2025 15:44
Show Gist options
  • Save kianurivzzz/d257a110b65d1f8bfa19dc514fe8a313 to your computer and use it in GitHub Desktop.
Save kianurivzzz/d257a110b65d1f8bfa19dc514fe8a313 to your computer and use it in GitHub Desktop.
При разработке мини-приложения в Telegram нужен публичный HTTPS-доступ к локально-запущенному фронтенду. Эти скрипты автоматизируют создание безопасного туннеля с HTTPS при помощи Cloudflared и значительно ускоряют разработку. Файл с расширением .sh для Linux и macOS, а с .bat для Windows
@echo off
setlocal EnableDelayedExpansion
:: Проверяем наличие cloudflared
where cloudflared >nul 2>nul
if %ERRORLEVEL% neq 0 (
echo Error: cloudflared не установлен
echo Скачайте cloudflared с https://github.com/cloudflare/cloudflared/releases
exit /b 1
)
echo 🚀 Запуск туннеля для Telegram Mini App...
:: Запускает туннель и сохраняет вывод
start /b cloudflared tunnel --url http://localhost:5173 > tunnel_url.txt 2>&1
set TUNNEL_PID=%ERRORLEVEL%
echo ⏳ Ожидание создания туннеля...
:: Ожидает и ищет URL туннеля
set MAX_ATTEMPTS=30
set ATTEMPT=1
:WAIT_LOOP
if %ATTEMPT% gtr %MAX_ATTEMPTS% (
echo ❌ Ошибка: Не удалось получить URL туннеля
taskkill /PID %TUNNEL_PID% /F >nul 2>&1
del tunnel_url.txt
exit /b 1
)
findstr "https://.*trycloudflare.com" tunnel_url.txt >nul
if %ERRORLEVEL% equ 0 (
for /f "tokens=*" %%a in ('findstr /r "https://.*trycloudflare.com" tunnel_url.txt') do set TUNNEL_URL=%%a
goto :FOUND_URL
)
timeout /t 1 /nobreak >nul
set /a ATTEMPT+=1
goto :WAIT_LOOP
:FOUND_URL
:: Очищает URL от лишних символов
set TUNNEL_URL=!TUNNEL_URL:*https=https!
for /f "tokens=1 delims= " %%a in ("!TUNNEL_URL!") do set TUNNEL_URL=%%a
del tunnel_url.txt
echo ✅ Туннель создан успешно!
echo 📱 URL для Telegram Mini App: !TUNNEL_URL!
:: Обновляет конфигурацию в .env
if exist ".env.development" (
powershell -Command "(Get-Content .env.development) -replace 'VITE_TELEGRAM_WEBAPP_URL=.*', 'VITE_TELEGRAM_WEBAPP_URL=!TUNNEL_URL!' | Set-Content .env.development"
echo 📝 Обновлен .env.development
)
echo.
echo ℹ️ Используйте этот URL в BotFather для настройки webapp_url
echo ⚡️ Туннель активен и готов к разработке
echo 🛑 Нажмите Ctrl+C для завершения
:: Ожидаем Ctrl+C
:WAIT
timeout /t 1 /nobreak >nul
goto :WAIT
#!/bin/bash
# Функция для получения URL туннеля
get_tunnel_url() {
local log_file=$1
local max_attempts=30
local attempt=1
while [ $attempt -le $max_attempts ]; do
if grep -q "https://.*trycloudflare.com" "$log_file"; then
echo $(grep -m 1 "https://.*trycloudflare.com" "$log_file" | grep -o 'https://[^[:space:]]*')
return 0
fi
sleep 1
attempt=$((attempt + 1))
done
return 1
}
# Проверка установки на компухтере cloudflared
if ! command -v cloudflared &> /dev/null; then
echo "Error: cloudflared не установлен"
echo "Установите через brew: brew install cloudflared"
exit 1
fi
echo "🚀 Запуск туннеля для Telegram Mini App..."
# Запуск туннеля, порт 5173 - стандартный порт Vite
cloudflared tunnel --url http://localhost:5173 > tunnel_url.txt 2>&1 &
TUNNEL_PID=$!
echo "⏳ Ожидание создания туннеля..."
# Получает URL туннеля
TUNNEL_URL=$(get_tunnel_url tunnel_url.txt)
if [ -z "$TUNNEL_URL" ]; then
echo "❌ Ошибка: Не удалось получить URL туннеля"
kill $TUNNEL_PID
rm tunnel_url.txt
exit 1
fi
# Удаляет временный файл
rm tunnel_url.txt
echo "✅ Туннель создан успешно!"
echo "📱 URL для Telegram Mini App: $TUNNEL_URL"
# Обновляет переменную в .env
if [ -f ".env.development" ]; then
sed -i '' "s|VITE_TELEGRAM_WEBAPP_URL=.*|VITE_TELEGRAM_WEBAPP_URL=${TUNNEL_URL}|" .env.development
echo "📝 Обновлен .env.development"
fi
echo ""
echo "ℹ️ Используйте этот URL в BotFather для настройки webapp_url"
echo "⚡️ Туннель активен и готов к разработке"
echo "🛑 Нажмите Ctrl+C для завершения"
# Ожидает Ctrl+C
trap "echo '🔄 Завершение туннеля...'; kill $TUNNEL_PID" SIGINT SIGTERM
wait $TUNNEL_PID
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment