Ubuntu — настройка сервера под Flask

Admin Flask, Ubuntu

Настраиваем Linux сервер Ubuntu для работы сайтов на python через фреймворк Flask.

Этот материал из цикла статей по разработке сайтов на python: от локальной разработки до развертывания на удаленном сервере.

В статье работаем на сервере Ubuntu 20.04 с базовой первичной настройкой. Как обновить и сделать первичную настройку сервера Ubuntu.

Мы уже настраивали сервер под Django. Некоторые процессы похожи, а некоторые отличаются.

Перед развертыванием сервера у нас должна быть готова локальная разработка, иначе особого смысла в удаленном сервере нет.

Если сначала подготовить сервер, а только потом разрабатывать локально, то при переносах появится мешанина. Поэтому лучше сначала сделать сайт или приложение в локальной среде, а затем по инструкции ниже настроить и перенести на сервер.

1. Установка пакетов для Python

Обновим пакеты в системе:

sudo apt update

Установим необходимые пакеты для работы с python

sudo apt install python3-pip python3-dev python3-setuptools build-essential libssl-dev libffi-dev

2. Создаем виртуальную среду Python

Если нам нужно перенести сайт из локальной разработки на сервер, то пропускаем этот раздел и смотрим раздел 3, ниже.

Установим пакет python3-venv:

sudo apt install python3-venv

Заходим в папку пользователя:

cd /home/ploshadka

Создаем новую директорию для проекта. Это может быть название сайта:

mkdir ploshadka.net
cd ploshadka.net

Устанавливаем виртуальную среду в директорию venv. Она будет создана в текущей директории:

python3 -m venv venv

В этой изолированной виртуальной среде будут находиться различные модули для работы Python.

Для дальнейшей настройки активируем виртуальную среду:

source venv/bin/activate

3. Переносим локальный проект на удаленный сервер

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

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

4. Устанавливаем Flask

Находясь в виртуальной среде, устанавливаем:

pip install wheel
pip install uwsgi flask

Выходим из виртуальной среды:

deactivate

Дополнительно можно установить SQLAlchemy.

Создадим и проверим стартовую страницу

Создаём файл wsgi.py в корне сайта. Эта будет стартовая точка запуска нашего приложения.

Предварительно в нашем фаерволе ufw должен быть открыт порт:

sudo ufw allow 5000

Мы уже можем запустить наш сайт такой командой:

uwsgi --socket 111.111.111.111:5000 --protocol=http -w wsgi:app --py-autoreload 1

Сайт будет доступен по адресу:

http://111.111.111.111:5000

Поигрались и закрыли доступ снова:

sudo ufw delete allow 5000

Файл настроек

Дальше создадим файл с настройками в корне сайта:

wsgi-config.ini

Внутри него:

[uwsgi]
# Имя файла стартовой страницы без расширения
module = wsgi:app

# Режим мастера и количество рабочих процессоров
master = true
processes = 10

# Создание и очистка сокета
socket = wsgi-socket.sock
chmod-socket = 660
vacuum = true

die-on-term = true

# Автоматически обновляет данные на странице после изменений содержимого сайта
py-autoreload = 1

5. Настраиваем службу systemd

sudo nano /etc/systemd/system/ploshadka.service

Содержимое файла:

[Unit]
Description=uWSGI instance for ploshadka
After=network.target

[Service]
User=ploshadka
Group=www-data
WorkingDirectory=/home/ploshadka/ploshadka.net
Environment="PATH=/home/ploshadka/ploshadka.net/venv/bin"
ExecStart=/home/ploshadka/ploshadka.net/venv/bin/uwsgi --ini wsgi-config.ini

[Install]
WantedBy=multi-user.target

Команды службы uWSGI

Запуск службы:

sudo systemctl start ploshadka

Положим сервис в автозагрузку при запуске сервера:

sudo systemctl enable ploshadka

Проверка статуса:

sudo systemctl status ploshadka

Перезагрузка:

sudo systemctl restart ploshadka

Если меняете файл службы, то следует перезапустить демон:

systemctl daemon-reload

6. Настройка Nginx

Установим nginx на сервер:

sudo apt update
sudo apt install nginx

Добавим разрешение в наш брандмауэр ufw. Посмотрим возможные конфигурации:

sudo ufw app list

А добавим:

sudo ufw allow 'Nginx Full'

Настроим базовую конфигурацию для nginx:

sudo nano /etc/nginx/sites-available/ploshadka.net
При копировании следующей инструкции, нужно быть внимательным, чтобы не допустить ошибки unknown directive.

Содержимое файла:

server {
    listen 80;
    server_name ploshadka.net www.ploshadka.net;

    location / {
        include uwsgi_params;
        uwsgi_pass unix:/home/ploshadka/ploshadka.net/wsgi-socket.sock;
    }
}

Активируем настройки нового сайта для nginx:

sudo ln -s /etc/nginx/sites-available/ploshadka.net /etc/nginx/sites-enabled

Проверим на ошибки в синтаксисе файла:

sudo nginx -t

Перезагрузим nginx:

sudo systemctl restart nginx

Сайт готов и должен работать по адресу http://:

http://ploshadka.net

7. Получаем сертификат Let’s Encrypt для https

Устанавливаем Certbot для Nginx:

sudo apt install certbot python3-certbot-nginx

Certbot автоматически будет обновляться сертификат за 30 дней до истечения срока.

Запрашиваем сертификат для своего сайта:

sudo certbot --nginx -d твой-сайт.net -d www.твой-сайт.net

Проверим время окончания сертификата:

sudo systemctl status certbot.timer

8. Устанавливаем PostgreSQL

Установим PostgreSQL на сервер:

sudo apt-get install postgresql postgresql-contrib libpq-dev

Активируем виртуальную среду python (предварительно надо быть в каталоге сайта):

source venv/bin/activate

Теперь устанавливаем пакет psycopg2, который является python-postgreSQL адаптером:

pip install psycopg2

На случай проблем команда перезагрузки сервиса PostgreSQL в Ubuntu:

sudo systemctl restart postgresql.service

Перед созданием баз данных и пользователей не лишним будет ознакомиться с особенностями кодировок в PostgreSQL. Это поможет избежать возможных проблем при миграции базы данных с локальной разработки на удаленный сервер.

Дальше создаем и настраиваем пользователя и базу данных в PostgreSQL.

После настройки базы данных в PostgreSQL подключиться к ней можно с локального компьютера.

Если в локальной разработке уже есть нужные нам данные в БД, то перенесем их на удаленный сервер.

Если вам пригодилась информация, вы можете поблагодарить автора сайта символическим пожертвованием:

Добавить комментарий

Напишите свой комментарий, если вам есть что добавить/поправить/спросить по теме текущей статьи:
"Ubuntu — настройка сервера под Flask"