Менеджер баз данных 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

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

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

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

Автоматизированное получение Let’s encrypt сертификатов для Ingress Nginx при помощи cert‑manager

Безопасность веб‑приложений сегодня — не опция, а необходимость. Шифрование трафика через HTTPS стало стандартом: поисковые системы отдают приоритет защищённым сайтам, а браузеры явно предупреждают пользователей о небезопасных соединениях. Let’s Encrypt предоставляет…

Тестовый кластер Kubernetes в Docker Desktop

Продолжаю переносить свои сервисы в кластер Kubernetes в Cloud.ru и естественно мне нужен локальный тестовый кластер для проработки миграции идентичный кластеру в Cloud.ru. Установка Docker Desktop в Ubuntu Linux Убедитесь,…

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

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

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

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

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

Автоматизированное получение Let’s encrypt сертификатов для Ingress Nginx при помощи cert‑manager

Автоматизированное получение Let’s encrypt сертификатов для Ingress Nginx при помощи cert‑manager

Тестовый кластер Kubernetes в Docker Desktop

Тестовый кластер Kubernetes в Docker Desktop

Хранилище артефактов (Docker) Cloud.ru

Хранилище артефактов (Docker) Cloud.ru

Хранение медиа-файлов WordPress в S3-хранилище

Хранение медиа-файлов WordPress в S3-хранилище

Настройка кэширования WordPress при помоши Redis

Настройка кэширования WordPress при помоши Redis