Доделал интересную приложуху для управления базами данных 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 и создание базы данных
Установим 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-интерфейсе.

Устанавливаем 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
Теперь можно создавать контейнеры и базы данных.





