ubuntu server
April 22

Установка PostgreSQL на сервер с веб-интерфейсом Adminer

Во время разработки я пользовался сервисом Beget, и арендовал облачный сервер.

Состав приложения:

Ubuntu 22.04.01;

Node.js 22.x;

nginx 1.18.0;

PM2 5.2.2.

1: Установка PostgreSQL

Сначала обновим пакеты и установим сам PostgreSQL:

sudo apt update
sudo apt install postgresql postgresql-contrib -y

После выполнения этих команд может высветиться данное окно, но это не ошибка, а просто уведомление.
"Pending kernel upgrade" — новая версия ядра доступна (5.15.0-136), а сейчас у нас работает старая (5.15.0-135).
Чтобы новая версия начала использоваться, понадобится перезагрузка сервера.

2: Проверка службы PostgreSQL

sudo systemctl status postgresql

Если статус показывает active (running)/active (exited) - то, все отлично.

3: Вход в PostgreSQL

sudo -u postgres psql

Это должно открыть интерфейс PostgreSQL

Мы выполнили вход под пользователем postgres

4: Создание пользователя и базы данных

Сейчас создадим пользователя, базу и дадим права.

CREATE USER myuser WITH PASSWORD 'mypassword';
CREATE DATABASE mydb;
GRANT ALL PRIVILEGES ON DATABASE mydb TO myuser;

Вместо myuser вставьте свое имя пользователя.

Вместо mypassword вставьте свой пароль.

Весто mydb вставьте свое название базы данных.

Чтобы выйти обратно, достаточно прописать:

\q

5: Разрешаем внешние подключения

1. Открываем конфигурацию postgresql.conf

sudo nano /etc/postgresql/17/main/postgresql.conf

sudo nano /etc/postgresql/(ваша версия)/main/postgresql.conf

Найдем строку:

#listen_addresses = 'localhost'

И изменим её на:

listen_addresses = '*'

Сохраняем и закрываем окно nano (Ctrl+X, Ctrl+Y, Enter)

2. Открываем pg_hba.conf

sudo nano /etc/postgresql/17/main/pg_hba.conf

sudo nano /etc/postgresql/(ваша версия)/main/pg_hba.conf

В самый конец кода добавим:

host  all       all       0.0.0.0/0        md5

(это разрешает доступ с любых IP — можно потом ограничить)

Сохраняем и закрываем окно nano (Ctrl+X, Ctrl+Y, Enter)

3. После этого перезапускаем PostgreSQL

sudo systemctl restart postgresql

6: Открытие порта PostgreSQL в фаерволе

По умолчанию PostgreSQL использует порт 5432.

Если у нас включён ufw (Ubuntu Firewall), нужно открыть порт:

sudo ufw allow 5432/tcp

После этого проверяем статус:

sudo ufw status

Status: inactive - значит фаервол выключен.

На этом этапе у нас:

✅ Установлен PostgreSQL

✅ Пользователь и база созданы

✅ Разрешено подключение снаружи

✅ Порт 5432 открыт


Дополнительно

Поменять пароль суперпользователя (postgres):

  1. Открой pg_hba.conf

2. Найди строки типа:

host  all       all       127.0.0.1/32      scram-sha-256

3. Замени scram-sha-256 или md5 на trust:

host  all       all       127.0.0.1/32      trust

Это временно отключит проверку пароля.

4. Теперь можно войти без пароля:

psql -U postgres

5. Сброс пароля:

ALTER USER postgres WITH PASSWORD 'новый_пароль';

Удаление postgres с сервера:

Надо выполнить следующие команды:

sudo apt purge postgresql* -y
sudo apt autoremove -y
sudo rm -rf /etc/postgresql /var/lib/postgresql /var/log/postgresql /var/run/postgresql

Если ошибка Adminer - Нет расширений Недоступно ни одного расширения из поддерживаемых (PgSQL, PDO_PgSQL):

Скачиваем нужные пакеты:

sudo apt-get install php8.1-pgsql

Переходим к файлу pg_hba.conf:

sudo nano /etc/postgresql/17/main/pg_hba.conf

sudo nano /etc/postgresql/(версия)/main/pg_hba.conf

И меняем строчку:

local   all             postgres                                peer

На:

local   all             postgres                                md5

После этого перезагружаемся:

sudo service postgresql restart
sudo systemctl restart nginx

Если ошибка Adminer - Unable to connect to PostgreSQL server: connection to server on socket /var/run/postgresql/.s.PGSQL.5432 failed: FATAL: Peer authentication failed for user username:

Это означает что нужно изменить метод аутентификации:

sudo nano /etc/postgresql/14/main/pg_hba.conf

И меняем строчку:

local   all             all                                     peer

На:

local   all             all                                     md5

После этого перезагружаемся:

sudo service postgresql restart
sudo systemctl restart nginx

7: Установка Adminer

7.1 Установка PHP и php-fpm

sudo apt install php php-fpm -y

Если после установки php и php-fpm вы получили следующее сообщение с ошибкой:

Во время установки PHP система также установила Apache, а он пытается занять порт 80, который уже используется Nginx'ом — отсюда ошибка

Мы используем Nginx (а не Apache), поэтому Apache можно спокойно отключить, чтобы он не мешал:

sudo systemctl stop apache2
sudo systemctl disable apache2

7.2 Создание папки для Adminer

sudo mkdir -p /var/www/adminer
cd /var/www/adminer

7.3 Скачивание Adminer

sudo wget https://github.com/vrana/adminer/releases/download/v4.8.1/adminer-4.8.1.php
sudo mv adminer-4.8.1.php index.php

7.4 Установка прав

sudo chown -R www-data:www-data /var/www/adminer

8: Настройка Nginx для Adminer

Сейчас создадим отдельный конфиг для Adminer, например adminer.conf:

sudo nano /etc/nginx/sites-available/adminer

Вставим туда минимальный конфиг:

server {
  listen 80;
  server_name 0.0.0.0; # Просто IP, НЕ домен!

  root /var/www/adminer;
  index index.php;

  location / {
    try_files $uri $uri/ =404;
  }

  location ~ \.php$ {
    include snippets/fastcgi-php.conf;
    fastcgi_pass unix:/var/run/php/php8.1-fpm.sock;
  }

  location ~ /\.ht {
    deny all;
  }
}

Теперь нужно создать ссылку в sites-enabled:

sudo ln -s /etc/nginx/sites-available/adminer /etc/nginx/sites-enabled/

Проверить конфиг и запустить Nginx:

sudo nginx -t
sudo systemctl restart nginx

Переходим по нашему адресу: http://0.0.0.0

Вуаля! Все работает.

Буду рад за подписку на мой телеграмм канал - https://t.me/upmycode
Там публикуются такие гайды/мануалы, как этот.