• Как запустить uwsgi сервер без перехвата консоли?

    Assargin
    @Assargin
    Перед ответом смотрю наличие ✔ в ваших вопросах
    Только недавно попробовал небольшой тестовый проект развернуть (сам в Python&Django пока двухмесячный опыт только имею). В итоге всё получилось, запустил uwsgi в так называемом "Emperor mode". Используется virtual environment. Устанавливается uwsgi (pip install) в систему, кстати, а не в venv.

    Создается файл /etc/init/uwsgi.conf с содержимым:
    # Emperor uWSGI script
    
    description "uWSGI Emperor"
    start on runlevel [2345]
    stop on runlevel [06]
    
    exec uwsgi --master --die-on-term --emperor /etc/uwsgi/vassals


    В папку /etc/uwsgi/vassals помещаются конфиги проектов (по одному на каждый проект), с примерно таким содержимым:
    # mysite_uwsgi.ini file
    [uwsgi]
    
    ## process-related settings
    # master
    master          = true
    # maximum number of worker processes
    processes       = 3
    # the socket (use the full path to be safe
    socket          = /home/user/virtualenvs/mysite/uwsgi.sock
    # ... with appropriate permissions - may be needed
    chmod-socket    = 666
    # clear environment on exit
    vacuum          = true
    # user, group
    uid=mysiteuser
    gid=mysitegroup
    
    ## Django-related settings
    # the virtualenv (full path)
    home            = /home/user/virtualenvs/mysite/
    # the base directory (full path)
    chdir           = /home/user/virtualenvs/mysite/www
    # Django's wsgi file
    module          = mysite.wsgi


    Теперь uswgi управляется как сервис: sudo service uwsgi (start|status|stop|restart и т.п.) и никаких занятых консолей.

    Насчет автоперезагрузки при изменении содержимого: пока не пробовал, но думаю вот оно
    Ответ написан
    2 комментария
  • Telegram+python+flask+PyTelegramBotApi+pythonanywhere+webhook?

    @egor201
    Для PyTelegramBotApi работает следующее:

    from flask import Flask, request
    import telebot
    from telebot import types
    import time
    
    secret = "GUID"
    bot = telebot.TeleBot('TOKEN_TELEGRAM', threaded=False)
    
    bot.remove_webhook()
    time.sleep(1)
    bot.set_webhook(url="https://YOURNAME.pythonanywhere.com/{}".format(secret))
    
    app = Flask(__name__)
    
    @app.route('/{}'.format(secret), methods=["POST"])
    def webhook():
        bot.process_new_updates([telebot.types.Update.de_json(request.stream.read().decode("utf-8"))])
        print("Message")
        return "ok", 200
    
    
    @bot.message_handler(commands=['start', 'help'])
    def startCommand(message):
        bot.send_message(message.chat.id, 'Hi *' + message.chat.first_name + '*!' , parse_mode='Markdown', reply_markup=types.ReplyKeyboardRemove())


    проверено на платном аккаунте
    Ответ написан
    3 комментария