Как поднять сервер на python
Перейти к содержимому

Как поднять сервер на python

Пишем простой сервер на Python

Ну, начнем как и везде с определений, берите тетрадь и ручку сейчас начнется нудятина. Чтобы мы cмогли написать свой сервер, нужно для начала понимать как он вообще работает, ловите определение:

Сервер – это программное обеспечение, которое ожидает запросов клиентов и обслуживает или обрабатывает их соответственно.

Если объяснять это своими словами, представьте фургон с хот-догами(сервер), проголодавшись, вы(клиент) подходите и говорите повару, что вы хотите заказать(запрос), после чего повар обрабатывает, что вы ему сказали и начинает готовить, в конечном итоге вы получаете свой хот-дог(результат) и сытый радуетесь жизни. Для наглядности посмотри схему.

Околопрактика

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

Socket позволяет нам общаться с сервером с помощью сокетов. Весь код я постараюсь пояснять, дабы ты мой дорогой читатель все понял. В конце статьи будет готовый код.

Создайте два файла в одной директории:

socket_server.py

socket_client.py

Практика

Пишем код для серверной части, так что открывайте файл socket_server.py.

Начнем с импорта модуля и создания TCP-сокета:

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

Добавим вечный цикл, который будет считывать данные с клиентской части, и отправлять их обратно.

Переходим к клиентской части, весь код теперь пишем в файле socket_client.py.

Начало у клиентской части такое-же как и у серверной.

Далее подключимся к нашему серверу и отправим сообщение «Hello. Habr!».

Слева сервер, справа клиент

Слева сервер, справа клиент

Заключение

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

Настройка web–сервера для приложений на Python

В статье содержится руководство по первичной настройке инфраструктуры сервера для хостинга web–сайтов на основе Debian 9.7, разработанных с применением python–фреймворка Flask.
Получаемое окружение предназначено для использования в процессе разработки, но, с некоторыми оговорками, может использоваться и в production–режиме.

  1. сайт, размещаемый на сервере имеет название mysite.com ;
  2. команды начинающиеся с символа # выполняются с root –правами;
  3. читатель обладает базовыми знаниями о Linux и предназначении используемого ПО, а также может самостоятельно восполнить пробелы из документации; в связи с этим в тексте опущены пояснения «очевидных» моментов.

Обновление дистрибутива, локаль и пользователь

При первом подключении к серверу необходимо.

  1. Обновить пакеты дистрибутива:
  1. Добавить русскоязычную локаль:

В появившемся окне выбора локалей и их кодировок нужно выбрать en-us.UTF-8 и ru_RU.UTF-8 . По умолчанию ставим en-us.UTF-8 .

  1. Перезагрузить сервер:
  1. Добавить пользователя admin , от имени которого будут запускаться приложения:

Для доступа по ssh будет использоваться сертификат, поэтому если его нет, нужно предварительно его создать.

После получения сертификата в /home/admin :

В открывшемся редакторе вставляем публичную часть ключа пользователя, которая выглядит примерно так:

Далее редактируем конфигурационный файл демона ssh:

Минимальное содержимое конфига:

Если все сделано правильно и ssh–клиент настроен корректно, можно отключиться от сервера и переподключиться с использованием сертификата.

Смена имени хоста

Ясно определенное имя хоста (например, mysite.com ) отображается в приглашении консоли и, когда консолей много, снижает риск выполнения каких-либо команд не на той машине.

Для изменения имени необходимо отредактировать файл hostname :

В открывшемся редакторе пишем новое имя хоста.

После перезагрузки сервера в приглашении консоли появится новое имя.

nginx

Документация по установке находится на официальном сайте.

После установки нужно удалить конфигурационный файл по умолчанию и создать конфигурационный файл сайта /etc/nginx/conf.d/mysite.com.conf :

Обратите внимание, что описанная конфигурация: 1. предполагает использование сайта только по SSL; 2. содержит закомментированные строки конфигурации SSL; подобное необходимо для корректного запуска nginx пока отсутствует SSL–сертификат; 3. Для проксирования запросов от сайта используется порт 5000, который будет указан позже в конфигурации gunicorn.

Let’s encrypt

Для получения валидного SSL–сертификата используется сервис Let’s Encrypt.

Документация по установке находится на официальном сайте.

Для корректной работы сайта необходимо получить сертификат на домен mysite.com :

На вопрос How would you like to authenticate with the ACME CA? необходимо выбрать первый вариант ответа — Nginx Web Server plugin (nginx) .

После получения сертификата в файле конфигурации сайта /etc/nginx/conf.d/mysite.com.conf необходимо раскомментировать строки:

И перезапустить nginx командой:

Python

Для использования последней актуальной (на момент написания статьи) версии Python 3.7.3, нужно скачать и собрать дистрибутив:

Сторонние пакеты для Python

Исполнение Python производится из виртуального окружения, создать которое необходимо в домашнем каталоге пользователя admin :

Активировать виртуальное окружение можно командой:

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

Служба systemd для gunicorn

Gunicorn — WSGI HTTP–сервер для запуска приложений, созданных на Python. Используется в качестве прослойка между nginx и приложением cайта.

Прежде всего необходимо установить gunicorn. Сделать это можно в ранее созданном виртуальном окружении:

Далее создаем директории и файл службы для systemd:

/.config/systemd/user/gunicorn.service (предполагается, что приложение сайта находится в папке /home/admin/mysite.com ):

Важно!
Systemd останавливает все службы пользователя после закрытия последней сессии.
Таким образом после закрытия всех соединений с сервером gunicorn перестанет работать.
Чтобы подобного не происходило, нужно выполнить следующую команду от имени root :

Модуль http.server в Python.

Модуль http.server определяет классы для реализации HTTP-серверов (веб-серверов).

Предупреждение модуль http.server не рекомендуется для использования в продакшне, так как он выполняет только базовые проверки безопасности.

Класс http.server.HTTPServer , является подклассом socketserver.TCPServer() . Он создает и прослушивает HTTP-сокет, отправляя запросы обработчику.

Код для создания и запуска сервера выглядит так:

Классы HTTP веб-серверов.

http.server.HTTPServer(server_address, RequestHandlerClass) :

Класс HTTPServer основан на классе TCPServer, сохраняя адрес сервера в виде переменных экземпляра с именами server_name и server_port .

Сервер доступен обработчику, обычно через переменную экземпляра сервера обработчика RequestHandlerClass .

http.server.ThreadingHTTPServer(server_address, RequestHandlerClass) :

Класс ThreadingHTTPServer идентичен HTTPServer , но использует потоки для обработки запросов с помощью миксина ThreadingMixIn .

Такое поведение полезно для обработки запросов веб-браузеров, предварительно открывающих сокеты, на которых HTTPServer будет ждать бесконечно.

Классы HTTPServer и ThreadingHTTPServer должны получить в качестве аргумента RequestHandlerClass при создании экземпляра, из которых этот модуль предоставляет три различных варианта.

Обработчики HTTP-запросов:

    — класс используется для обработки HTTP-запросов, поступающих на сервер; — обслуживает файлы из текущего каталога, напрямую сопоставляя структуру каталогов с HTTP-запросами; — обслуживает файлы или вывод сценариев CGI из текущего каталога.

Примеры создания простых HTTP web-серверов

Пример HTTP web-сервера, обрабатывающего статические файлы.

Если запустить HTTP сервер таким способом, то можно создать, например, фиктивный API путем загрузки на этот сервер статических файлов json или/и xml . Структура ресурсов файлов, организованных в подпапки, будет обеспечивать RESTful-подобные URL-адреса. Например, /users/all.json может содержать фиктивные записи пользователей. Этот подход еще быстрее, чем создание, например, приложения Flask . База данных не требуется, работает везде. Можно применять там, где например есть некоторые трудности с командой терминала scp для загрузки данных. Решение — можно запустить простой сервер на удаленной машине и загрузить необходимое содержимое через HTTP.

Пример HTTP web-сервера, с поддержкой SSL.

Для запуска защищенного HTTPs сервера создайте следующий модуль:

Для создания файлов ключей и сертификатов с помощью OpenSSL используйте следующую команду

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *