Pull to refresh

Comments 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. Стоит все таки убрать токен из кода, потому что сейчас твой токен могут все посмотреть.

Спасибо за замечания! Безопасность, действительно важна!

У меня есть два комментария:

  1. Если реализация бота представляет коммерческую тайну, наверное стоит воспользоваться платными решениями, а не изобретать велосипед

  2. На 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 поможет пробросить порты через нат?

ddns дает тебе dns имя, которое решает проблему динамического IP. (он сам будет обновлять на твои новые ip). Проброс портов делается на самом примитивном роутере (local server, port forwarding ,etc...)

При чем здесь примитивный роутер, если выше речь шла про нат провайдера?

Можно организовать сеть между VPS и ноутом объединив их одной впн'кой, тогда ноуту динамический адрес будет пофиг и внутри сети можно будет обращаться по локальнм ип'кам

hosting render , карты не нужны , фри тир на 750часов в месяц , есть докер.

После 15 мин простоя делает суспенк скрипта пока к нему не постучаться , если не хотите задержек после 1 запроса после простоя - то воспользуйтесь uprobot из статьи

ноутбук находится в домашней сети за NAT'ом провайдера

А это действительно NAT провайдера? Я чаще видел NAT личного WiFi раутера. В них обычно можно открыть несколько портов и отправить их на одно из локальных устройств (по MAC адресу, чтобы не менялся).

Ну у меня провайдер выдаёт IP из диапазона 10.0.0.0/8, так что NAT где-то там должен быть.

Я думаю, что сможете найти реализацию на Яндекс облаке.

Aws/azure дают бесплатные VPS, которых вчерашнему студенту будет за глаза

Как жаль только, что оформить их сейчас из России не представляется возможным.

AWS вроде только на год даёт

Максимально простое решение кмк — ZeroTier (или аналогичный сервис). Устанавливаете на ноуте и на своих vps. Получаете общую сеть на все ваши устройства.

Для HTTP использую обычно Nginx - все докеры экспозят на локалхост, Nginx их разруливает, плюс заворачивает в HTTPS, в соответствии с именем хоста еще и разный контент отдаёт с одного и того же порта.

Для более сложных протоколов имеет смысл посмотреть haproxy.

Возможно я не прав, но я предпочитаю между сервисами и интернетом держать контролируемую прослойку.

Статический айпи у любого провайдера обычно стоит 100-150 р/мес

Нет, не у любого, к сожалению. В частности, у ТТК в Якутии такая опция в принципе отсутствует, а РТК для улусных (районных) абонентов загнул цену в 2500₽/мес. (информация за 2020 год)

Если есть 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. Теперь он не заснет.

Также есть очень хороший бесплатный хостинг от pythonanywhere.

сделал всё по инструкции, на replit приходят запросы каждые 5 минут, но тем не менее он падает, а uptime показывает что всё работает

совсем не понимаю как это исправить...

Возможно, падает сам скрипт с ботом из-ха какой-то ошибки, а flask продолжает работать. Вы можете проверить работоспособности сервера по ссылке и самостоятельно, тогда станет понятно, где сложность

Тоже столкнулся с такой проблемой. Починил двумя действиями:

  1. Заменил bot.polling(none_stop=True) на bot.infinity_polling(none_stop=True)

  2. Как и порекомендовал @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. Это и проще и главное, проект будет приватным и всегда работающим.

Sign up to leave a comment.

Articles