Менеджер баз данных Postgresql упакованных в Docker (Postgresql Docker Manager)

Оцените статью

Доделал интересную приложуху для управления базами данных Postgresql упакованными в Docker. Возникла необходимость управления большим количеством баз данных и самые прожорливые отсадить в отдельные контейнеры урезав им аппетит по ресурсам. Да и вообще нужен удобный Web-интерфейс для управления.

Сборка Frontend

Фронтенд написан на Vue.JS и компилируется в простой HTML+JS блок который в дальнейшем публикуется при помощи Nginx. Для сборки установим Node version manager, установим и установим требуемую версию Node.JS и Node Package Manager.

# apt install curl
$ curl https://raw.githubusercontent.com/creationix/nvm/master/install.sh | bash
$ source ~/.bashrc
$ nvm install v24.16.0
$ nvm use v24.16.0

Клонируем репозитарий и собираем Frontend.

$ cd /opt/
$ git clone https://github.com/interlan-github/postgres-docker-manager.git
$ cd ./postgres-docker-manager/pgmanager/
$ npm install
$ export PORT=3000 && export BASE_PATH="/"
$ npm run build

Установка Nginx и настройка default location

Установка Nginx.

# apt-get install nginx

Конфигурация Default location для Vue.JS приложений выглядит следующим образом.

server {
    listen 80 default_server;
    listen [::]:80 default_server;

    server_name _;
    root /opt/postgres-docker-manager/pgmanager/dist/public;
    index index.html;

    location / {
        # This line is vital for Vue Router history mode
        try_files $uri $uri/ /index.html;
    }

    # Optional: Cache static assets for better performance
    location ~* \.(?:ico|css|js|gif|jpe?g|png)$ {
        expires 30d;
        add_header Cache-Control "public";
    }

}

Перезагружаем конфигурацию Nginx.

# systemctl reload nginx

Проверяем, что Web-интерфейс отображается.

Менеджер баз данных Postgresql упакованных в Docker (Postgresql Docker Manager)

Установка Postgresql и создание базы данных

Установим Postgresql.

# aptitude install postgresql-all

Создаем пользователя и базу данных.

# su postgres
$ psql
postgres=# CREATE USER pdm_user WITH PASSWORD 'Qazxsw123';
CREATE ROLE
postgres=# CREATE DATABASE pdm_db WITH OWNER pdm_user;
CREATE DATABASE

Запуск Backend

В конфигурационный файл Django вносим настройки подключения к базе данных.

В файле /opt/postgres-docker-manager/api-server/config/settings.py настраиваем секцию.

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',
        'NAME': 'pdm_db',
        'USER': 'pdm_user',
        'PASSWORD': 'Qazxsw123',
        'HOST': 'localhost',  # Or the IP address of your DB server
        'PORT': '5432',       # Default PostgreSQL port
    }
}

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

# cd /opt/postgres-docker-manager/api-server/
# apt install python3-venv python3-pip
# python3 -m venv venv
# source ./venv/bin/activate
# pip install -r ./requirements.txt

Выполняем миграцию базы данных.

# python3 ./manage.py migrate

Создаем пользователя администратора.

# python3 ./manage.py createsuperuser --username admin

Создаем SystemD-сервис для запуска Django-приложения.

Файл сервиса /etc/systemd/system/pdm.service.

[Unit]
Description=Postgres Docker Manager
After=network.target

[Service]
Type=simple
User=www-data
Group=www-data
WorkingDirectory=/opt/postgres-docker-manager/api-server
Environment="PATH=/opt/postgres-docker-manager/api-server/venv/bin"
ExecStart=/opt/postgres-docker-manager/api-server/venv/bin/python manage.py runserver 0.0.0.0:8000
Restart=always
RestartSec=30

[Install]
WantedBy=multi-user.target

Активируем и запускаем.

# systemctl daemon-reload
# systemctl enable pdm
# systemctl start pdm
# systemctl status pdm

Добавляем в конфигурацию Nginx доступ до локации /api.

    location /api {
        proxy_pass http://localhost:8000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }

Делаем перезапуск конфигурации Nginx.

# systemctl reload nginx

Теперь мы можем авторизоваться в Web-интерфейсе.

Авторизация в WEB-интерфейсе pgmanager

Устанавливаем Docker Engine и Docker Compose

# apt-get update
# apt-get install ca-certificates curl
# install -m 0755 -d /etc/apt/keyrings
# curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
# chmod a+r /etc/apt/keyrings/docker.asc
# echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
  $(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}") stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# apt-get update
# apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
# curl -L https://github.com/docker/compose/releases/download/v2.33.1/docker-compose-linux-x86_64 -o /usr/local/bin/docker-compose
# chmod +x /usr/local/bin/docker-compose
# ln -s /usr/local/bin/docker-compose /usr/local/bin/dc

Настраиваем API-доступ

Редактируем сервис.

# systemctl edit docker.service

Оверрайдим параметр.

ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock -H tcp://127.0.0.1:2375

Перезапускаем сервис.

# systemctl daemon-reload
# systemctl restart docker

Модифицируем сервис pdm на использование API.

[Unit]
Description=Postgres Docker Manager
After=network.target

[Service]
Type=simple
Environment="DOCKER_HOST=tcp://127.0.0.1:2375"
WorkingDirectory=/opt/postgres-docker-manager/api-server
Environment="PATH=/opt/postgres-docker-manager/api-server/.venv/bin"
ExecStart=/opt/postgres-docker-manager/api-server/venv/bin/python manage.py runserver 0.0.0.0:8000
Restart=always
RestartSec=30

[Install]
WantedBy=multi-user.target

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

Теперь можно создавать контейнеры и базы данных

Похожие записи

Настройка кластера Kubernetes в Ubuntu Linux 24.04: три узла (один мастер с возможностью запуска пользовательских подов, PVC в каталоге на хосте, сеть на Calico)

В этой статье мы рассмотрим пошаговую настройку кластера Kubernetes на Ubuntu 24.04 с тремя узлами: один мастер (который также может запускать пользовательские поды) и два рабочих узла. Мы настроим PersistentVolume…

Инструкция по установке и настройке ProxySQL в Ubuntu 24.04

В рамках создания собственного кластера Kubernetes я поднаял кластер Mysql который работает в режиме Master-Slave и Slave-узлы соответственно работают в режиме read-only, а мастер в read-write. Соответственно мне нужен балансировщик…

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

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

Читать еще статьи

Настройка кластера Kubernetes в Ubuntu Linux 24.04: три узла (один мастер с возможностью запуска пользовательских подов, PVC в каталоге на хосте, сеть на Calico)

Настройка кластера Kubernetes в Ubuntu Linux 24.04: три узла (один мастер с возможностью запуска пользовательских подов, PVC в каталоге на хосте, сеть на Calico)

Инструкция по установке и настройке ProxySQL в Ubuntu 24.04

Инструкция по установке и настройке ProxySQL в Ubuntu 24.04

Полное руководство по настройке UFW в Ubuntu: от основ до продвинутых правил

Полное руководство по настройке UFW в Ubuntu: от основ до продвинутых правил

Полное руководство по развертыванию GlusterFS в Ubuntu Linux: от подготовки до тестирования производительности

Полное руководство по развертыванию GlusterFS в Ubuntu Linux: от подготовки до тестирования производительности

Подробная инструкция по настройке кластера из трёх серверов MySQL на Ubuntu 24.04

Подробная инструкция по настройке кластера из трёх серверов MySQL на Ubuntu 24.04

Полное руководство по настройке NFS-клиента в Ubuntu Linux: от установки до автоматического монтирования

Полное руководство по настройке NFS-клиента в Ubuntu Linux: от установки до автоматического монтирования