Install pgadmin4 on debian with nginx
Install required packages
As root:
echo "deb https://ftp.postgresql.org/pub/pgadmin/pgadmin4/apt/$(lsb_release -cs) pgadmin4 main" >/etc/apt/sources.list.d/pgadmin4.list
curl https://www.pgadmin.org/static/packages_pgadmin_org.pub | gpg --dearmor > packages.pgadmin.gpg
install -o root -g root -m 644 packages.pgadmin.gpg /etc/apt/trusted.gpg.d/
rm packages.pgadmin.gpg
apt update
apt install uwsgi-plugin-python3 pgadmin4-server
If you are running sid replace $(lsb_release -cs) with the current stable (bullseye)
Create user and paths
adduser --system --home /var/lib/pgadmin --disabled-login --shell /usr/sbin/nologin pgadmin4
mkdir /var/log/pgadmin
chown pgadmin4 /var/log/pgadmin
Systemd unit file
Create /etc/systemd/system/pgadmin4.service
[Unit]
Description = PgAdmin4 uwsgi Service
After = network.target network-online.target
Wants = network-online.target
[Service]
User=pgadmin4
StateDirectory=pgadmin
RuntimeDirectory=pgadmin4
LogsDirectory=pgadmin
ExecStart=uwsgi \
--socket /run/pgadmin4/pgadmin4.sock --chmod-socket=666 \
--plugin python3 \
-H /usr/pgadmin4/venv \
--wsgi-file /usr/pgadmin4/web/pgAdmin4.wsgi \
--processes 1 \
--threads 25 \
--chdir /usr/pgadmin4/web/ \
--manage-script-name \
--mount /pgadmin=pgAdmin4:app
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
Configure pgadmin4
Create /etc/pgadmin/config_system.py
LOG_FILE = '/var/log/pgadmin/pgadmin4.log'
SQLITE_PATH = '/var/lib/pgadmin/pgadmin4.db'
SESSION_DB_PATH = '/var/lib/pgadmin/sessions'
STORAGE_DIR = '/var/lib/pgadmin/storage'
Configure pgadmin
cd /usr/pgadmin
source venv/bin/activate
cd web
python setup.py
# Answer the questions
chown pgadmin4:nogroup -R /var/lib/pgadmin
Configure nginx
upstream pgadmin {
server unix:///run/pgadmin4/pgadmin4.sock;
}
server {
...
location ^~ /pgadmin {
include uwsgi_params;
uwsgi_pass pgadmin;
}
...
}