Flask на виртуальном хостинге Beget
Мой сайт, который собирает статистику по файлам пользователей проекта DCS работает на хостинге Beget и написан с ипользованием Python и фреймворка Flask. Как установить Python и фреймворк написано в статье тут. Я же покажу как я настроил сам фреймворк.
Структура проекта
├── HelloFlask
│ ├── blueprints
│ │ └── blogapp
│ ├── config.py
│ ├── controllers.py
│ ├── __init__.py
│ ├── logs
│ ├── models.py
│ ├── profs
│ ├── static
│ │ ├── files
│ │ ├── img
│ │ ├── styles
│ ├── templates
│ └── view.py
├── passenger_wsgi.py
├── public -> public_html/
├── public_html
├── README.md
├── requirements.txt
├── run.py
├── tmp
│ └── restart.txt
└── venv
Содержимое файлов настроек
congig.py
Файл конфигурации позволяет гибко настраивать фреймворк. Логирование настроено на запись логов в файл в директорию log. Также при оптимизации сайта понадобилось настройить сохранение .prof файлов профилировщика на диск в директорию profs.
class Configuration: DEBUG = False SQLALCHEMY_TRACK_MODIFICATIONS = False SQLALCHEMY_DATABASE_URI = 'mysql://:@127.0.0.1:3306/' TESTING = False PROFILING = False # Enable profiling LOGGING = True # Enabe logging CACHE_TYPE = 'SimpleCache' # Flask-Caching related configs CACHE_DEFAULT_TIMEOUT = 300 class ProductionConfiguration(Configuration): pass class TestConfiguration(Configuration): TESTING = True class DevelopmentConfiguration(Configuration): DEBUG = True
__init__.py
Для инициализации использована фабричная функция.
import os import logging from logging.handlers import RotatingFileHandler from flask import Flask, render_template from werkzeug.middleware.profiler import ProfilerMiddleware # Import SQLAlchemy from flask_sqlalchemy import SQLAlchemy from .config import (DevelopmentConfiguration, ProductionConfiguration, TestConfiguration) from flask_caching import Cache cache = Cache() db = SQLAlchemy(engine_options=>) def create_app(): # Define the WSGI application object app = Flask(__name__) # Configurations try: if os.environ['FLASK_ENV'] == 'development': app.config.from_object(DevelopmentConfiguration) elif os.environ['FLASK_ENV'] == 'testing': app.config.from_object(TestConfiguration) except KeyError: app.config.from_object(ProductionConfiguration) if app.config.get('PROFILING'): if not os.path.exists('HelloFlask/profs'): os.mkdir('HelloFlask/profs') app.wsgi_app = ProfilerMiddleware( app.wsgi_app, restrictions=( '/controllers.py:', [30], ), profile_dir=os.path.join('HelloFlask', 'profs'), filename_format='-.prof', ) if app.config.get('LOGGING'): if not os.path.exists('HelloFlask/logs'): os.mkdir('HelloFlask/logs') file_handler = RotatingFileHandler( 'HelloFlask/logs/hello-flask.log', maxBytes=10240, backupCount=10) file_handler.setFormatter(logging.Formatter( '%(asctime)s:%(levelname)s:%(message)s:%(pathname)s:%(lineno)d') ) file_handler.setLevel(logging.INFO) app.logger.addHandler(file_handler) app.logger.setLevel(logging.INFO) app.logger.info('Startup logging') # Define the database object which is imported # by modules and controllers db.init_app(app) cache.init_app(app) with app.app_context(): db.create_all() # HTTP error handling @app.errorhandler(404) def not_found(error): return render_template('page404.html'), 404 # Import a module/component using its blueprint handler variable (mod_auth) from HelloFlask.view import webapp from HelloFlask.blueprints.blogapp.view import posts # Register blueprint(s) app.register_blueprint(webapp) app.register_blueprint(posts) # Build the database: # This will create the database file using SQLAlchemy with app.app_context(): db.create_all() migrate = Migrate(app, db) return app app = create_app() if __name__ == '__main__': app.run()
passenger_wsgi.py
# -*- coding: utf-8 -*- # /home/m/ma5tad/dcs-webapp-flask/public_html/venv/bin/flask import sys sys.path.append('/home/m/ma5tad/dcs-webapp-flask/HelloFlask') # указываем директорию с проектом sys.path.append('/home/m/ma5tad/dcs-webapp-flask/venv/lib/python3.6/site-packages') # указываем директорию с библиотеками, куда поставили Flask # from public_html.HelloFlask import create_app as application # когда Flask стартует, он ищет application. Если не указать 'as application', сайт не заработает from HelloFlask import app as application # когда Flask стартует, он ищет application. Если не указать 'as application', сайт не заработает from werkzeug.debug import DebuggedApplication # Опционально: подключение модуля отладки application.wsgi_app = DebuggedApplication(application.wsgi_app, True) # Опционально: включение модуля отадки application.debug = False # Опционально: True/False устанавливается по необходимости в отладке
run.py
from HelloFlask import create_app def main(*args, **kwargs): app = create_app(*args, **kwargs) return app if __name__ == '__main__': APP = main() APP.run(host='127.0.0.1', port=9000)
Сайт расположен на домене ma5ta.ru. Изначально сайт располагался на VPS Hetzner. При переезде на Бегет пришлось сменить БД и модифицировать работу сайта.
Используя сайт вы соглашаетесь с
BEGET PYTHON УСТАНОВКА
Python — один из наиболее популярных языков программирования. Он чрезвычайно мощный и удобный, однако его трудно использовать, если вы не установили его правильно. Одной из наиболее популярных платформ для установки Python является Beget. Это надежная платформа, которая предоставляет хостинг с рядом дополнительных возможностей, таких как автоматическая установка популярных языков программирования, включая Python.
Установка Python на Beget довольно проста:
ssh user@server
sudo apt-get update
sudo apt-get install python3
Первая команда подключается к удаленному серверу, который вы хотите настроить. Вторая команда обновляет пакеты на сервере, а третья устанавливает Python3.
Чтобы убедиться, что Python установлен правильно, можно воспользоваться командой:
Которая выведет на экран версию Python, которую вы установили.
Также, вы можете установить дополнительные библиотеки Python, используя менеджер пакетов pip:
sudo apt-get install python3-pip
pip3 install package_name
Первая команда устанавливает менеджер пакетов pip для Python3. Вторая команда устанавливает библиотеку package_name.
Установка скрипта zTDS на хостинг Beget
Как загрузить сайт на хостинг Beget
#26. Завершаем развертывание Django-сайта на хостинге — Django уроки
Как разместить готовый сайт на Django на хостинге
За 10 минут — выгрузка (деплой) телеграм-бота на хостинг и его запуск.
Установка Telegram бота на ХОСТИНГ (СЕРВЕР) — Настройка сервера
#25. Начинаем развертывание Django-сайта на хостинге — Django уроки
- Математические задачи python
- Интересные команды python
- Методы objects django
- Как увеличить шрифт в python idle
- Python стек технологий
- Django валидация username
- Преобразование бокса кокса python
- Интеграционные тесты python
- Python магический квадрат
- Как построить линейный график в python
- Проверка на пустую строку python
- Крупномасштабное машинное обучение вместе с python
- Python pandas регулярные выражения
Установка Python на хостинге Beget
Python — высокоуровневый язык программирования общего назначения, ориентированный на повышение производительности разработчика и читаемости кода. Синтаксис ядра Python минималистичен. В то же время стандартная библиотека включает большой объём полезных функций.
Сначала необходимо включить подключение к серверу по SSH. Делается это в разделе Тех. информация и нажать кнопку SSH.
Используя PuTTY подключаемся к серверу для этого необходимо ввести имя сервера, показанное рядом с кнопкой включения SSH.
После нажатия кнопки Соединиться появиться окно логина, в него необходимо ввести догин и пароль от аккаунта Beget. После этих действий должно появиться это окно.
Если на сервере нет нужной версии python можно самостоятельно её установить. Для этого необходимо зайти в Docker-окружение. Делается это следующей командой:
Далее создаем временную директорию и переходим в неё, используя команды:
$ mkdir -p ~/.beget/tmp
$ cd ~/.beget/tmp/
Для сборки Python версии 3.7.0 и выше потребуется собрать библиотеку ffi. Если нужна версия ниже этот шаг можно пропустить. Скачиваем исходный код библиотеки:
Распакуем архив и переходим в каталог с исходным кодом:
$ tar -xf libffi-3.2.1.tar.gz && cd libffi-3.2.1
С помощью утилиты configure настроим все зависимости, префиксы, переменные, после чего будет сгенерирован Makefile:
$ ./configure —prefix $HOME/.local LDFLAGS=»-L/usr/local/lib»
Теперь запускаем процесс компиляции и установки:
Cкачать python можно с официального сайта, используя команду:
После этого распакуем архив и перейдём в каталог:
$ tar -xf Python-3.7.0.tgz && cd Python-3.7.0
Используя утилиту configure настраиваем все зависимости, префиксы, переменные, после чего будет сгенерирован Makefile:
$ ./configure —prefix=$HOME/.local LDFLAGS=»-L/usr/local/lib»
Теперь запускаем процесс компиляции и установки:
Всё готово. После этих действий все должно работать.
Комментарии(3):
Спасибо за пост. Установка прошла сразу, после тупого копирования мною текста. Вернее, вместо «—prefix=» я вводил «-prefix=», а вместо »-L/usr/local/lib» вводил «-L/usr/local/lib». Но запустить скрипт на сайте пока не получилось. — сделал test.py исполняемым для всех — в .htdocs разрешил исполнение файлов .py — первой строчкой файла делал: #!/home/U/USERNAME/.local/bin/python3.7 , а также #!/usr/bin/python3 — никак не сработало — второй строчкой: print(‘Content-Type: text/html\n\n’) Выдаёт ошибку 500.