Подготовка рабочего места к 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
.
Кроме этого, у меня есть виртуальный сервер, который в данный момент включен и подсоединён к виртуальной сети на IP-адресе 192.168.56.101
и на домене auriz.net
, и я могу подключаться к этому серверу из терминала десктопа по SSH.
На снимке экрана выше следует обратить внимание, как после подключения по SSH изменилось в терминале имя машины - подчёркнуто зелёным фломастером. Напоминаю, соответствующие настройки десктопа и сервера детально описаны.
В ближайших выпусках этого блога я намерен описать начальную стадию разработки небольшого web-приложения с использованием Python3. Для этого приложения мне потребуется база данных - я буду использовать PostgreSQL. Поскольку разрабатываемое web-приложение будет основано на блокирующем фреймворке, мне понадобится очередь задач Celery, которая в свою очередь будет иметь в качестве брокера и result back end-a Redis. Оба решения (PostgreSQL и Redis) достаточно распространены, и оба требуют серверной части, которую я и предполагаю установить на свой виртуальный сервер.
Устанавливаю на сервер необходимые пакеты.
sudo apt-get install postgresql redis-server
Соглашаюсь, для этого ввожу Y
и дожидаюсь завершения процесса установки всех запрошенных пакетов.
На сервере PostgreSQL мне нужно создать пользователя и дать этому пользователю необходимые для работы с сервером права. Вхожу пользователем postgres.
sudo -i -u postgres
На снимке экрана выше следует обратить внимание, как в терминале сервера изменилось имя текущего пользователя - подчёркнуто зелёным фломастером.
Создаю новую роль с именем newbie. В данном случае имя роли можно наверно задать любое другое, но мне удобно, чтобы имя пользователя базы данных совпадало с именем текущего пользователя на десктопе, поэтому newbie.
createuser newbie -P -d --interactive
Программа createuser в интерактивном режиме запросит необходимые данные. Пароль пользователя следует вводить очень внимательно и хорошо запомнить, с этим паролем впоследствии можно будет подключиться к базам данных создаваемого пользователя.
Выхожу.
exit
Таким образом я снова нахожусь в терминале сервера как пользователь newbie.
Создаю тестовую базу данных с именем startpoint. Имя просто беру с потолка любое запоминающееся.
createdb startpoint
Теперь к этой базе данных можно подключиться из терминала сервера.
psql -d startpoint
Отлично. Но проблема состоит в том, что мне нужно будет подключаться к этой и другим базам данных в терминале десктопа. Следовательно, необходимо открыть доступ для подключения к 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'
Сохраняю файл и выхожу из текстового редактора. Обращаю внимание, что в этот файл я вписал 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
Сохраняю файл и выхожу из текстового редактора. Обращаю внимание, что в этом файле я вписал имя созданной в PostgreSQL роли и IP-адрес моего десктопа в виртуальной сети.
Теперь необходим рестарт сервера PostgreSQL, но поскольку мне нужно перейти в консоль десктопа, я перезагружаю весь сервер.
sudo shutdown -r now
Обращаю внимание, что в момент ввода этой команды ssh-сессия прервалась, и я оказался в терминале своего десктопа, о чём свидетельствует имя машины в приглашении командной строки. Пока грузится сервер, устанавливаю на десктоп необходимые пакеты.
sudo apt-get install postgresql-client redis-tools
Соглашаюсь и дожидаюсь полного завершения процесса установки всех запрошенных пакетов. Затем убеждаюсь, что виртуальный сервер загрузился и пытаюсь подключиться к созданной на нём базе данных из терминала десктопа.
psql -h 192.168.56.101 -U newbie -d startpoint
Успех! Сервер 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
Сохраняю файл и выхожу из текстового редактора. Перезагружаю сервер Redis.
sudo systemctl restart redis-server.service
Подключаюсь к серверу Redis из терминала десктопа.
redis-cli -h 192.168.56.101
Успех! Redis на сервере доступен для подключения с десктопа. И поскольку мой сервер виден только в виртуальной сети и предназначен только для тестирования и отладки, подобная настройка сервера Redis вполне приемлема и достаточна.
Подвожу итог, мой виртуальный сервер готов к использованию для разработки, отладки и тестирования web-приложений, использующих базы данных PostgreSQL и Redis. Его можно включить, когда он нужен, и выключить, когда десктоп используется для других задач. Выключить виртуальный сервер можно прямо из терминала.
sudo shutdown -h now
В следующих выпусках этого блога я сосредоточу своё внимание на описании начальной стадии разработки небольшого web-приложения, для чего мне и понадобится только что настроенный виртуальный сервер. Будет интересно. Напоминаю, что вопросы мне можно задать в комментариях к этой статье, там же можно поделиться своими отзывами и предложениями, правда для этого придётся зарегистрироваться и войти в сервис.
Метки: | papa-debian, python3x, virtualbox, desktop, postgresql, server, web, redis |