Практическое применение методов контейнеризации web-приложений защищенной операционной системе Astra Linux
В ходе практики были поставлены следующие цели:
- Изучение Docker и Docker-compose: Были изучены основы работы с Docker и Docker-compose, позволяющие создавать изолированные контейнеры для приложений.
- Разработка web-приложения: Главной задачей было разработать web-приложение на базе Django + Django Rest Framework с использованием базы данных PostgreSQL и упаковать его в контейнер Docker. Приложение должно было быть развернуто на операционной системе Astra Linux "Орел" и обеспечивать возможность переноса и развертывания на нескольких локальных ПЭВМ.
Web-приложение, разработанное в ходе практики, включает в себя следующие функциональные возможности:
- Пользовательский интерфейс: Пользовательский интерфейс приложения отображает необходимую информацию из таблиц базы данных.
- Изменение данных: Пользователи имеют возможность вносить необходимые изменения в базу данных через интерфейс приложения, включая добавление, удаление и изменение записей.
- Использование js, html, css: Пользовательский интерфейс реализован с использованием языков программирования и технологий веб-разработки, таких как JavaScript, HTML и CSS. В качестве средства JavaScript для реализации интерактивных элементов был выбран фреймворк ExtJS.
Было реализовано приложение для учёта личного состава. Приложение включает в себя четыре таблицы:
- Сотрудники;
- Отделы;
- Должности;
- Кабинеты.
Для данного приложения была разработана API-маршрутизация при помощи Django и Django-Rest-API. Для этого были подготовлены:
- Модели (Models.py):
- Department;
- Post;
- Cabinet;
- Employee.
- Сериализаторы (Serializers.py):
- DeartmentSerializer;
- PostSerializer;
- CabinetSerializer;
- EmployeeSerializer.
- Представления (Views.py):
- DepartmentViewSet;
- PostViewSet;
- CabinetViewSet;
- EmployeeViewSet.
При получении соответствующего запроса (Request) от WEB-клиента, сервер Django обрабатывает его, выполняет необходимый функционал и возвращает ответ (Response).
Пользовательский интерфейс приложения состоит из одностраничного сайта, в котором находятся вкладки, для переключения между таблицами:
-
Таблица отделов позволяет пользователю взаимодействовать с записями отделов (добавлять, удалять, изменять).
-
Таблица должностей позволяет пользователю взаимодействовать с записями должностей (добавлять, удалять, изменять).
-
Таблица кабинетов позволяет пользователю взаимодействовать с записями кабинетов (добавлять, удалять, изменять).
-
Таблица сотрудников. Является основной таблицей приложения. Позволяет вести учёт военнослужащих на предприятии. Связана с остальными таблицами при помощи связи many-to-one.
Каждая таблица формируется на основе данных, полученных при помощи HTTP-запросов, представленных соответствующей API-ссылкой:
- Для получения данных используется GET-запрос;
- Для создания записей в базе данных используется POST-запрос;
- Для редактирования записей в базе данных используется PUT-запрос;
- Для удаления записей в базе данных используется DELETE-запрос.
Для каждой таблицы реализованы кнопки для взаимодействия с записями:
- Создание записи. Соответствующая таблице форма открывается при нажатии на кнопку «Добавить». Пользователь вносит данные в поля и отправляет POST-запрос на создание записи.
- Удаление записи. При нажатии на кнопку «Удалить» открывается предупреждающее окно. Пользователь должен подтвердить намерения, после чего будет отправлен DELETE-запрос на удаление записи.
- Изменение записи. Пользователю необходимо внести изменения в соответствующие поля, после чего нажать на кнопку «Update». Будет отправлен PUT-запрос на изменение записи.
Для настройки образов и контейнеров в Docker используется два файла:
- Dockerfile – содержит список инструкций для образа;
- docker-compose.yml – позволяет запустить несколько контейнеров и связать их.
Для работы приложения необходимо одновременно запускать два контейнера: для сервера Django и для PostgreSQL.
Контейнер PostgreSQL можно запустить на основе уже готового образа postgres:13.0-alpine, который был скачен заранее.
Для самого приложения необходимо вручную описать образ. Это будет сделано в файле Dockerfile
# образ на основе которого создаём контейнер
FROM python:3.10
# set work directory
WORKDIR /usr/src/app
# set environment variables
ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1
# install psycopg2 dependencies
RUN apt-get update -y && apt-get upgrade -y && \
apt-get install gcc -y && \
apt-get install libpq-dev python3-dev -y
# install dependencies
RUN pip install --upgrade pip
COPY ./requirements.txt .
RUN pip install -r requirements.txt
# copy project
COPY . .
Переменная окружения 'PYTHONDONTWRITEBYTECODE' сообщает Python не создавать файлы кэша .pyc;
Переменная окружения 'PYTHONUNBUFFERED' не позволит Python помещать в буфер потоки stdout и stderr.
Переменная окружения 'PYTHONUNBUFFERED' не позволит Python помещать в буфер потоки stdout и stderr.
Все необходимые библиотеки находятся в файле requirements.txt
Django==2.2
django-crum==0.7.6
django-filter==2.2.0
djangorestframework==3.11.0
psycopg2-binary==2.9.3
pytz==2022.1
sqlparse==0.4.2
Таким образом, описанный образ будет запускать процесс установки python 3.10 и всех необходимых зависимостей, создавать рабочую директорию, в которую будут скопированы файлы приложения, после чего проект будет готов к запуску.
Настройки файла docker-compose.yml для запуска двух контейнеров: базы данных PostgreSQL и созданного вручную контейнера приложения.
version: '3.8'
services:
web:
build: ./app
command: python manage.py runserver 0.0.0.0:8000
volumes:
- ./app/:/usr/src/app/
ports:
- 8000:8000
env_file:
- ./.env.dev
depends_on:
- db
db:
image: postgres:13.0-alpine
volumes:
- postgres_data:/var/lib/postgresql/data/
environment:
- POSTGRES_USER=postgres
- POSTGRES_PASSWORD=123456qQ
- POSTGRES_DB=crudapp_db
volumes:
postgres_data:
Перед развертыванием приложения на операционной системе Astra Linux, необходимо выполнить ряд подготовительных шагов, включая установку Docker и Docker-compose.
Установка Docker выполняется при помощи команд:
sudo apt update
sudo apt install docker.io
Установка docker-compose выполняется при помощи команд:
sudo apt -y install apt-transport-https ca-certificates curl gnupg2 software-properties-common
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
После успешной установки Docker и Docker-compose, необходимо собрать образ приложения и запустить контейнеры:
sudo docker-compose up -d –build
Как только контейнеры будут запущены, следует выполнить миграции базы данных для нашего приложения:
sudo docker-compose exec web python manage.py migrate
После выполнения всех вышеперечисленных шагов, приложение готово к использованию на операционной системе Astra Linux.
Успешный запуск приложения на операционной системе военного назначения Astra Linux «Орел».