Комментарии 45
видел такие туторы на ютубе, и как оно реально работает? есть ли какие то ограничения?
Работает прекрасно! Не раз проверено!
У меня почему-то через пару часов начались даунтаймы, сервер правда на fastapi, скрипт уходит в сон и очень не охотно просыпается(
Это странно, т.к это свойство описано в документации, но именно для flask
https://docs.replit.com/hosting/deploying-http-servers
Once deployed, the server will continue to run in the background, even after you close the browser tab. The server will stay awake and active until an hour after its last request, after which it will enter a sleeping stage. A sleeping repl will wake as soon as it receives another request; there is no need to re-run the repl. However, if you make changes to your server, you will need to restart the repl to see those changes reflected in the live version.
На replit в бесплатном аккаунте все проекты публичные. Так что идея хранить там реализацию бота - плохая.
P.S. Стоит все таки убрать токен из кода, потому что сейчас твой токен могут все посмотреть.
Спасибо за замечания! Безопасность, действительно важна!
У меня есть два комментария:
Если реализация бота представляет коммерческую тайну, наверное стоит воспользоваться платными решениями, а не изобретать велосипед
На Replit есть возможность хранить токены в секрете https://docs.replit.com/programming-ide/storing-sensitive-information-environment-variables
не подскажете, как правильно это сделать? никак не выходит.
потом вэбвью не устанавливается и даже через браузер не видит ссылку, хотя и ошибок нет
Скажите пожалуйста, если проект публичный, то другие пользователи могут видеть все файлы проекта? Использую txt-файлы для логов, истории бота и планирую туда писать id-юзеров, которые могут пользоваться ботом. Такое показывать, конечно, не хотелось бы, поэтому задаюсь вопросом как это безопасно реализовать. Может быть хранить эти файлы в облаке, а ссылки на них прятать в "секреты", как и токен бота?
Сорри, что пишу вопрос здесь, но именно сейчас я также в раздумии, как хостить с десяток простецких Телеграм без базы и кринжа и прочую скриптовую живность, обернутую в контейнеры.
Платить за несколько VPS уровня "самый бомжатский" мне надоело. А нормальный виртуальный сервер с сотней ГБ постоянного хранилища и приемлемым 2-4 ГБ ОЗУ ударит по карману вчерашнему студенту (в этом году закончил аспирантуру). Так как я - студент вчерашний, то и Heroku как возможность бесплатно хостить бекенд отпадает.
В отличие от автора статьи, я выбрал способ - хранить на самом дешёвом работающем ноутбуке. Нашёл какой-то задрипанный со свежеустановленным 4 года назад SSD, купил за 2.5К рублей. Буду крутить контейнеры или даже оркестр на нем. SLA будет уровня "мамой клянусь, будет работать!"
Проблема: ноутбук находится в домашней сети за NAT'ом провайдера, айпишник как правило динамический. Есть несколько VPS с белыми статическими адресами.
Вопрос: я вот ни разу не сетевик. Подскажите максимально простейшие решение для организации какого-то прокси или чего-то подобного, чтобы: а) контейнер на ноуте, заэкспозивший порт, к примеру, 35590 для HTTP, был доступен по HTTP GET <статический белый IP от VPS:35590>, то есть как на родную VPS'ку шлёшь запросы; б) чтобы я написал `ssh ip:port`, указав тот же самый расово белый статический айпишник - и попал в SSH-сервер ноутбука.
Загадка Жака Фреско - как? На ответ даётся первая страница любого поисковика, полностью забитая рекламами реверсивного прокси, которым я не очень и доверяю и не понимаю, как их готовить
Для телеграм-бота наличие доступа из вне не актуально же?
А для других скриптов костылей много можно придумать:)
Один из них ngrok- позволяет пробрасывать порты не имея внешнего ip адреса.
Для питона есть библиотека. Ну а дальше, получив ссылку кладем ее в текстовый файл на внешний фтп-сервер, откуда забираем скриптом, который должен подключаться
Можно с помощью ddns
Можно организовать сеть между VPS и ноутом объединив их одной впн'кой, тогда ноуту динамический адрес будет пофиг и внутри сети можно будет обращаться по локальнм ип'кам
hosting render , карты не нужны , фри тир на 750часов в месяц , есть докер.
После 15 мин простоя делает суспенк скрипта пока к нему не постучаться , если не хотите задержек после 1 запроса после простоя - то воспользуйтесь uprobot из статьи
ноутбук находится в домашней сети за NAT'ом провайдера
А это действительно NAT провайдера? Я чаще видел NAT личного WiFi раутера. В них обычно можно открыть несколько портов и отправить их на одно из локальных устройств (по MAC адресу, чтобы не менялся).
Я думаю, что сможете найти реализацию на Яндекс облаке.
Aws/azure дают бесплатные VPS, которых вчерашнему студенту будет за глаза
Для HTTP использую обычно Nginx - все докеры экспозят на локалхост, Nginx их разруливает, плюс заворачивает в HTTPS, в соответствии с именем хоста еще и разный контент отдаёт с одного и того же порта.
Для более сложных протоколов имеет смысл посмотреть haproxy.
Возможно я не прав, но я предпочитаю между сервисами и интернетом держать контролируемую прослойку.
https://cloud.yandex.ru/docs/serverless-containers/
Не смотрели на Yandex Serverless Containers? Возможно, ваши сервисы получится даже бесплатно захостить.
Статический айпи у любого провайдера обычно стоит 100-150 р/мес
Рекомендую обратить внимание на проект TailScale, который позволит иметь доступ даже за NAT.
Если есть VPS, то можно на нее пробрасывать порты через ssh туннель с вашего сервер-ноута. К примеру пробросив 22 порт на 2222 порт vps вы можете подключаться по ssh на 2222 порт vps, а по факту соединение пойдет через туннель на ноут.
Для этого ваш ноут делает ssh-подключение к vps с указанием ключей для проброса обратного туннеля.
https://youtu.be/ey4u7OUAF3c, советую посмотреть это видео, черед cloudflare можно проксировать ( не знаю как это работает), а сам пользуюсь keendns на роутерах keenetic. Если очень надо можно купить на Авито Keenetic start за рублей 900 только для keendns.
есть еще крутая штука, deta.sh. Для ботов топ, и бесплатная.
Есть замечательный бесплатный хостинг alwaysdata, ОЧЕНЬ низкий пинг на сервере Paris1, ещё можно настроить бота на вебхуки, тогда без UptimeRobot, бот будет работать 24/7
Спасибо, я сделал ВК бота и поселил его на Replit. Теперь он не заснет.
Отлично.
Как правильно обсуждалось выше, не забудьте спрятать токен в secrets, т.к. в бесплатном режиме проекты публичные
https://docs.replit.com/programming-ide/storing-sensitive-information-environment-variables
Также есть очень хороший бесплатный хостинг от pythonanywhere.
сделал всё по инструкции, на replit приходят запросы каждые 5 минут, но тем не менее он падает, а uptime показывает что всё работает
совсем не понимаю как это исправить...
Возможно, падает сам скрипт с ботом из-ха какой-то ошибки, а flask продолжает работать. Вы можете проверить работоспособности сервера по ссылке и самостоятельно, тогда станет понятно, где сложность
Тоже столкнулся с такой проблемой. Починил двумя действиями:
Заменил
bot.polling(none_stop=True)
наbot.infinity_polling(none_stop=True)
Как и порекомендовал @Stepan_Burmistrovсделал связку между ответом от flask и работой бота через
bot.get_me()
В итоге мой main.py
выглядит примерно так:
import pip
#pip.main(['install', 'pytelegrambotapi'])
import myBot # тут описана вся работа бота и в конце он запускается в отдельном потоке
from flask import Flask
app = Flask('')
@app.route('/')
def home():
if myBot.bot_check():
return "I'm alive and bot is checked"
else:
print("Problems with bot")
app.run(host='0.0.0.0', port=80)
Запуск самого бота происходит в myBot.py
:
import telebot as tg
import threading
bot = tg.TeleBot(os.getenv("MY_BOT_TOKEN"))
def bot_check():
return bot.get_me()
def bot_runner():
bot.infinity_polling(none_stop=True)
t = threading.Thread(target=bot_runner)
t.start()
В такой конфигурации всё вроде работает стабильно.
Чтобы не засыпало и работало всегда - можно воспользоваться Heroku или его Российским аналогом - Amvera Cloud. Это и проще и главное, проект будет приватным и всегда работающим.
В replit больше не работает бесплатный хостинг: https://ask.replit.com/t/uptimerobot-replit/95188/13
Как хостить телеграм-бота (и другие скрипты на Python) на Repl.it бесплатно 24/7