Подготовка рабочего места к web-разработке на Python3, инфраструктура

newbie

Опубликован:  2018-12-18T12:07:55.413094Z
Отредактирован:  2018-12-19T03:23:51.458646Z

Продолжаем подготовку рабочего места к web-разработке на Python3 на пакетной базе Debian stretch. На этот раз я расскажу об одном из возможных вариантов организации инфраструктуры рабочего места web-разработчика и покажу, что можно сделать в том случае, когда у вас под рукой только бюджетный лэптоп и нелимитированное по трафику и времени соединение с Интернет.

Любое web-приложение - это в сути клиент-серверное приложение, в котором клиент и сервер взаимодействуют друг с другом по сети, по протоколу HTTP. Отсюда напрашивается простой вывод: web-приложение содержит код работающий на клиенте и код работающий на сервере. Обычно эти две составляющие называют клиентской частью (или front end) и серверной частью (или back end). Серверная часть web-приложения всегда имеет некоторую структуру, предполагающую использование сторонних специализированных приложений - в подавляющем большинстве это различные решения для работы с данными. Web-разработчик в процессе проектирования, отладки и тестирования своего приложения должен иметь на своём рабочем десктопе и клиентские программы, и серверные сторонние приложения развёрнутыми и готовыми к взаимодействию. Так как процесс разработки обычно занимает от силы процентов 50 всего времени работы десктопа, то тащить на десктоп серверные программы - не очень заманчивая идея. Как же быть?

Ответ на вопрос прост. Серверные приложения вполне можно вынести на виртуальную машину. На время процесса разработки web-приложения виртуальную машину можно включать, по окончании процесса - выключать, таким образом разработчик получает возможность не захламлять десктоп серверными программами и использовать их только тогда, когда они действительно нужны.

Процесс создания и настройки базового виртуального сервера с Debian stretch подробно описан в соседнем блоге серией статей. Моя задача - рассказать о том, как и для чего именно такой виртуальный сервер можно эффективно использовать.

Итак, у меня есть десктоп с LXDE на борту, который подсоединён к виртуальной сети на IP-адресе 192.168.56.102.

FRwniAapQS.png

Кроме этого, у меня есть виртуальный сервер, который в данный момент включен и подсоединён к виртуальной сети на IP-адресе 192.168.56.101 и на домене auriz.net, и я могу подключаться к этому серверу из терминала десктопа по SSH.

IoMcFGiT8v.png

На снимке экрана выше следует обратить внимание, как после подключения по SSH изменилось в терминале имя машины - подчёркнуто зелёным фломастером. Напоминаю, соответствующие настройки десктопа и сервера детально описаны.

В ближайших выпусках этого блога я намерен описать начальную стадию разработки небольшого web-приложения с использованием Python3. Для этого приложения мне потребуется база данных - я буду использовать PostgreSQL. Поскольку разрабатываемое web-приложение будет основано на блокирующем фреймворке, мне понадобится очередь задач Celery, которая в свою очередь будет иметь в качестве брокера и result back end-a Redis. Оба решения (PostgreSQL и Redis) достаточно распространены, и оба требуют серверной части, которую я и предполагаю установить на свой виртуальный сервер.

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

sudo apt-get install postgresql redis-server

A06GjZumpD.png

Соглашаюсь, для этого ввожу Y и дожидаюсь завершения процесса установки всех запрошенных пакетов.

На сервере PostgreSQL мне нужно создать пользователя и дать этому пользователю необходимые для работы с сервером права. Вхожу пользователем postgres.

sudo  -i -u postgres

83inXidPuJ.png

На снимке экрана выше следует обратить внимание, как в терминале сервера изменилось имя текущего пользователя - подчёркнуто зелёным фломастером.

Создаю новую роль с именем newbie. В данном случае имя роли можно наверно задать любое другое, но мне удобно, чтобы имя пользователя базы данных совпадало с именем текущего пользователя на десктопе, поэтому newbie.

createuser newbie -P -d --interactive

yHnSmcmp0U.png

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

Выхожу.

exit

YDYGzgiA7K.png

Таким образом я снова нахожусь в терминале сервера как пользователь newbie.

Создаю тестовую базу данных с именем startpoint. Имя просто беру с потолка любое запоминающееся.

createdb startpoint

dCeVkcCIuf.png

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

psql -d startpoint

cVHSuAqTbZ.png

Отлично. Но проблема состоит в том, что мне нужно будет подключаться к этой и другим базам данных в терминале десктопа. Следовательно, необходимо открыть доступ для подключения к PostgreSQL-серверу с моего десктопа. Напоминаю, IP-адрес сервера 192.168.56.101, IP-адрес десктопа 192.168.56.102. Открываю на сервере в текстовом редакторе nano файл /etc/postgresql/9.6/main/postgresql.conf.

sudo nano /etc/postgresql/9.6/main/postgresql.conf

Нахожу в этом файле секцию - Connection Settings -, в ней строчку listen_address и привожу эту строчку к следующему виду.

listen_addresses = 'localhost,192.168.56.101'

2hOKXxPZDT.png

Сохраняю файл и выхожу из текстового редактора. Обращаю внимание, что в этот файл я вписал IP-адрес сервера.

Далее открываю в текстовом редакторе nano файл /etc/postgresql/9.6/main/pg_hba.conf.

sudo nano /etc/postgresql/9.6/main/pg_hba.conf

Перемещаюсь в самый конец файла и добавляю в него новую строчку.

host    all             newbie          192.168.56.102/32          md5

gXc4mWEzmR.png

Сохраняю файл и выхожу из текстового редактора. Обращаю внимание, что в этом файле я вписал имя созданной в PostgreSQL роли и IP-адрес моего десктопа в виртуальной сети.

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

sudo shutdown -r now

UT002oRBA9.png

Обращаю внимание, что в момент ввода этой команды ssh-сессия прервалась, и я оказался в терминале своего десктопа, о чём свидетельствует имя машины в приглашении командной строки. Пока грузится сервер, устанавливаю на десктоп необходимые пакеты.

sudo apt-get install postgresql-client redis-tools

zGoombUZmG.png

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

psql -h 192.168.56.101 -U newbie -d startpoint

W6k3nLrnZu.png

Успех! Сервер PostgreSQL готов к работе, и я имею возможность проектировать, отлаживать и тестировать web-приложения с использованием этой базы данных.

Настала очередь Redis. Снова иду на сервер (ssh). Открываю в текстовом редакторе nano файл /etc/redis/redis.conf.

sudo nano /etc/redis/redis.conf 

Нахожу в этом файле строчку bind 127.0.0.1 и ниже дописываю ещё одну строчку.

bind 192.168.56.101

AMUHLfvaQ7.png

Сохраняю файл и выхожу из текстового редактора. Перезагружаю сервер Redis.

sudo systemctl restart redis-server.service

oq4LW6LWWl.png

Подключаюсь к серверу Redis из терминала десктопа.

redis-cli -h 192.168.56.101

MZ6JMnWWg6.png

Успех! Redis на сервере доступен для подключения с десктопа. И поскольку мой сервер виден только в виртуальной сети и предназначен только для тестирования и отладки, подобная настройка сервера Redis вполне приемлема и достаточна.

Подвожу итог, мой виртуальный сервер готов к использованию для разработки, отладки и тестирования web-приложений, использующих базы данных PostgreSQL и Redis. Его можно включить, когда он нужен, и выключить, когда десктоп используется для других задач. Выключить виртуальный сервер можно прямо из терминала.

sudo shutdown -h now

5KDSBKE8Ox.png

В следующих выпусках этого блога я сосредоточу своё внимание на описании начальной стадии разработки небольшого web-приложения, для чего мне и понадобится только что настроенный виртуальный сервер. Будет интересно. Напоминаю, что вопросы мне можно задать в комментариях к этой статье, там же можно поделиться своими отзывами и предложениями, правда для этого придётся зарегистрироваться и войти в сервис.

Комментарии: