Skip to content

Instantly share code, notes, and snippets.

@rdnvndr
Last active November 5, 2022 14:33
Show Gist options
  • Star 8 You must be signed in to star a gist
  • Fork 8 You must be signed in to fork a gist
  • Save rdnvndr/51ae8692bebcd02325ca7c046fe5ade2 to your computer and use it in GitHub Desktop.
Save rdnvndr/51ae8692bebcd02325ca7c046fe5ade2 to your computer and use it in GitHub Desktop.
Установка PgAdmin4 + Nginx + uwsgi

Установка PgAdmin4 + Nginx + uwsgi

Установка PgAdmin 4

Для установки PgAdmin 4 через pip необходимо выполнить команды:

sudo apt-get install python3-pip build-essential python3-dev libssl-dev libffi-dev
sudo pip3 install https://ftp.postgresql.org/pub/pgadmin/pgadmin4/v6.15/pip/pgadmin4-6.15-py3-none-any.whl

Для инициализации конфигурации в директории /usr/local/lib/python3.5/dist-packages/pgadmin4/ необходимо создать файл config_local.py:

LOG_FILE = '/var/log/pgadmin/pgadmin.log'
SQLITE_PATH = '/var/lib/pgadmin/pgadmin.db'
SESSION_DB_PATH = '/var/lib/pgadmin/sessions'
STORAGE_DIR = '/var/lib/pgadmin/storage'
SERVER_MODE = True
ALLOW_SAVE_PASSWORD = True

и выполнить команду:

python3 setup.py

Установка uwsgi

Для установки uwsgi необходимо выполнить команду:

sudo apt-get install uwsgi-core uwsgi-plugin-python3

Для проверки неоходимо запустить uwsgi командой

sudo uwsgi --http-socket :8000 --plugin python3 --chdir /usr/local/lib/python3.10/dist-packages/pgadmin4/ 
--wsgi-file /usr/local/lib/python3.10/dist-packages/pgadmin4/pgAdmin4.wsgi

и открыть в браузере ссылку http://localhost:8000 Далее необходимо создать сервис uwsgi с использованием systemd. Для этого необходимо в директории /etc/uwsgi создать файл настроект pgadmin.ini:

[uwsgi]
uid             = www-data
gid             = www-data
plugins         = python3
chdir           = /usr/local/lib/python3.10/dist-packages/pgadmin4/
wsgi-file       = /usr/local/lib/python3.10/dist-packages/pgadmin4/pgAdmin4.wsgi
master          = true
processes       = 1
socket          = /tmp/pgadmin.sock
chmod-socket    = 664
vacuum          = true

Для поддержки SSL необходимо добавить:

https = =0,/etc/uwsgi/pgadmin.crt,/etc/uwsgi/pgadmin.key,HIGH,!ca.crt

Самоподписанный сертификат (файлы /etc/uwsgi/pgadmin.crt и /etc/uwsgi/pgadmin.key) можно получить командой:

sudo openssl req -x509 -nodes -newkey rsa:2048 -days 365 -keyout /etc/uwsgi/pgadmin.key -out /etc/uwsgi/pgadmin.crt

В директорию /etc/systemd/system/ добавить файл uwsgi@.service:

[Unit]
Description=uWSGI service unit
After=syslog.target

[Service]
ExecStart=/usr/bin/uwsgi --ini /etc/uwsgi/%I.ini
ExecReload=/bin/kill -HUP $MAINPID
ExecStop=/bin/kill -INT $MAINPID
Restart=always
Type=notify
StandardError=syslog
NotifyAccess=all
KillSignal=SIGQUIT

[Install]
WantedBy=multi-user.target

и задействовать командой:

sudo systemctl enable uwsgi@pgadmin

Установка Nginx

Для установки nginx необходимо выполнить команду:

sudo apt-get install nginx-full

а в директорию /etc/nginx/sites-available/ добавить файл настройки сайта pgadmin.conf:

upstream pgadmin {
      server unix:///tmp/pgadmin.sock;
}
server {
    listen 8000;
    server_name  $server_addr;
    charset      utf-8;
    client_max_body_size 75M;
    location / {
        include uwsgi_params;
        uwsgi_pass  pgadmin;
    }
}
server {
    listen          8001 ssl;
    server_name     $server_addr;
    charset      utf-8;
    ssl_certificate      /etc/uwsgi/pgadmin.crt;
    ssl_certificate_key  /etc/uwsgi/pgadmin.key;
    location / {
        include uwsgi_params;
        uwsgi_pass  pgadmin;
    }
}

Для активации сайта необходимо в директории /etc/nginx/sites-enabled создать ссылку на файл /etc/nginx/sites-available/pgadmin.conf:

/etc/nginx/sites-enabled# ln -s /etc/nginx/sites-available/pgadmin.conf

Nginx и uwsgi запускаются под www-data:www-data, поэтому у настроек необходимо изменить владельцев командами:

sudo chown www-data:www-data /var/lib/pgadmin/pgadmin.db
sudo chown -R www-data:www-data /var/log/pgadmin/
sudo chown -R www-data:www-data /var/lib/pgadmin/

Далее необходимо перезапустить nginx & uwsgi

sudo systemctl restart uwsgi@pgadmin
sudo systemctl restart nginx

PgAdmin4 должен быть доступен по ссылке http://localhost:8000

@rdnvndr
Copy link
Author

rdnvndr commented Feb 12, 2020

Спасибо, @MashinaMashina! Обновил описание по комментарию.

@ASUSRV
Copy link

ASUSRV commented Jan 20, 2021

Добрый день! Первые дни знакомлюсь с Linux, стандартно поставить PGAdmin на Apache нельзя, нужен именно nginx.
Делаю все по инструкции, дохожу до команды sudo chown www-data:www-data /var/lib/pgadmin/pgadmin.db и возвращается ошибка:
'/var/lib/pgadmin/pgadmin.db': Нет такого файла или каталога
И его действительно нет. Все сверху до этой команды выполнял.

@rdnvndr
Copy link
Author

rdnvndr commented Jan 20, 2021

Проверьте содержимое файла config_local.py и попробуйте переустановить pgadmin4.

@rxsend19
Copy link

rxsend19 commented Nov 5, 2022

прошу обновить и исправить некоторые команды и конфиги

sudo pip3 install https://ftp.postgresql.org/pub/pgadmin/pgadmin4/v6.15/pip/pgadmin4-6.15-py3-none-any.whl

 

sudo uwsgi --http-socket :8000 --plugin python3 --chdir /usr/local/lib/python3.10/dist-packages/pgadmin4/  --wsgi-file /usr/local/lib/python3.10/dist-packages/pgadmin4/pgAdmin4.wsgi   ( указываете установленную версию python) 

в файле /etc/uwsgi/pgadmin.ini

( указываете установленную версию python в строке chdir и  wsgi-file)
[uwsgi]
uid             = www-data
gid             = www-data
plugins         = python3
chdir           = /usr/local/lib/python3.10/dist-packages/pgadmin4/ 
wsgi-file       = /usr/local/lib/python3.10/dist-packages/pgadmin4/pgAdmin4.wsgi 
master          = true
processes       = 1
socket          = /tmp/pgadmin.sock
chmod-socket    = 664
vacuum          = true

в файле /etc/systemd/system/uwsgi@.service

 [Unit]
Description=uWSGI service unit
After=syslog.target
[Service]
ExecStart=/usr/bin/uwsgi --ini /etc/uwsgi/pgadmin.ini
ExecReload=/bin/kill -HUP $MAINPID
ExecStop=/bin/kill -INT $MAINPID
Restart=always
Type=notify
StandardError=syslog
NotifyAccess=all
KillSignal=SIGQUIT
[Install]
WantedBy=multi-user.target

@rdnvndr
Copy link
Author

rdnvndr commented Nov 5, 2022

Спасибо, @rxsend19!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment