cp.lv — VPS, выделенные и облачные серверы

cp.lv (LANGMARKET LLP) — хостинг-провайдер: VPS, выделенные и облачные серверы на NVMe с выбором ОС, полным root-доступом и поддержкой 24/7. Тест-период до оплаты: выделенные серверы — 5 дней, VPS и облако — 5 часов.

Contact Info
LANGMARKET LLP
Rīga, Latvija

+371 00 000 000

Follow Us

Личный кабинет

Язык

Установка PostgreSQL: создание базы, пользователя и настройка доступа

Установка PostgreSQL: создание базы, пользователя и настройка доступа

Запустить на сервере одной командой (сначала проверьте содержимое скрипта ниже):

curl -sSL https://cp.lv/scripts/ustanovit-postgresql.sh | sudo bash

…или через wget:

wget -qO- https://cp.lv/scripts/ustanovit-postgresql.sh | sudo bash

Содержимое скрипта ustanovit-postgresql.sh:

#!/usr/bin/env bash
# Установка PostgreSQL, создание базы данных и пользователя
set -e
export DEBIAN_FRONTEND=noninteractive

DB_NAME=app_db
DB_USER=app_user
DB_PASS='СложныйПароль123!'

# 1. Установка PostgreSQL и расширений
sudo apt-get update
sudo apt-get install -y postgresql postgresql-contrib
sudo systemctl enable --now postgresql

# 2. Создание роли (пользователя) и базы данных
sudo -u postgres psql << EOF
CREATE ROLE ${DB_USER} WITH LOGIN PASSWORD '${DB_PASS}';
CREATE DATABASE ${DB_NAME} OWNER ${DB_USER};
GRANT ALL PRIVILEGES ON DATABASE ${DB_NAME} TO ${DB_USER};
EOF

# 3. Права на схему public (обязательно с PostgreSQL 15+)
sudo -u postgres psql -d ${DB_NAME} -c "GRANT ALL ON SCHEMA public TO ${DB_USER};"

echo "Готово: база ${DB_NAME} и пользователь ${DB_USER} созданы."

PostgreSQL — мощная реляционная СУБД с поддержкой JSON, полнотекстового поиска и строгой целостности данных. Ниже — установка на Ubuntu 22.04/24.04, создание базы и пользователя, настройка доступа.

Шаг 1. Установка

PostgreSQL есть в стандартном репозитории:

sudo apt update
sudo apt install postgresql postgresql-contrib -y
sudo systemctl enable --now postgresql

Проверьте версию и статус:

psql --version
sudo systemctl status postgresql

Пакет postgresql-contrib добавляет полезные расширения (например, pg_stat_statements, uuid-ossp).

Шаг 2. Роль и база данных

PostgreSQL создаёт системного пользователя postgres. Войдите под ним в консоль:

sudo -u postgres psql

Создайте пользователя (роль) и базу под приложение:

CREATE ROLE app_user WITH LOGIN PASSWORD 'СложныйПароль123!';
CREATE DATABASE app_db OWNER app_user;
GRANT ALL PRIVILEGES ON DATABASE app_db TO app_user;
\q

В PostgreSQL 15+ права на схему public по умолчанию урезаны. Если приложение не может создавать таблицы, выдайте права на схему:

sudo -u postgres psql -d app_db
GRANT ALL ON SCHEMA public TO app_user;
\q

Шаг 3. Проверка входа

Подключитесь новым пользователем локально:

psql -h 127.0.0.1 -U app_user -d app_db -W

Введите пароль. Если приглашение app_db=> появилось — доступ работает.

Шаг 4. Настройка удалённого доступа

По умолчанию PostgreSQL слушает только localhost. Чтобы принять внешние подключения (например, от бэкенда на другом сервере), отредактируйте два файла. Найдите их пути:

sudo -u postgres psql -c 'SHOW config_file;'
sudo -u postgres psql -c 'SHOW hba_file;'

В postgresql.conf укажите адреса прослушивания. Откройте файл в редакторе (nano, vim или mcedit):

sudo nano "$(sudo -u postgres psql -tAc 'SHOW config_file;')"

Строка настройки:

listen_addresses = '10.0.0.5, localhost'

Либо допишите её одной командой — скопируйте и вставьте в консоль (heredoc допишет строку в конец файла):

sudo tee -a "$(sudo -u postgres psql -tAc 'SHOW config_file;')" > /dev/null << 'EOF'
listen_addresses = '10.0.0.5, localhost'
EOF

В pg_hba.conf добавьте правило для доверенной подсети с шифрованием пароля. Откройте файл в редакторе:

sudo nano "$(sudo -u postgres psql -tAc 'SHOW hba_file;')"

Содержимое правила:

# TYPE  DATABASE  USER      ADDRESS         METHOD
host    app_db    app_user  10.0.0.0/24     scram-sha-256

Или добавьте правило одной командой (кавычки 'EOF' — текст запишется как есть):

sudo tee -a "$(sudo -u postgres psql -tAc 'SHOW hba_file;')" > /dev/null << 'EOF'
host    app_db    app_user  10.0.0.0/24     scram-sha-256
EOF

Никогда не открывайте базу на 0.0.0.0/0 — только для конкретных IP или приватной сети. Примените изменения:

sudo systemctl restart postgresql

Откройте порт только для нужного источника:

sudo ufw allow from 10.0.0.10 to any port 5432

Полезные команды psql

Команда Действие
\l список баз данных
\du список ролей
\dt таблицы текущей базы
\c app_db переключиться на базу
\conninfo параметры подключения

Частые вопросы

Чем роль отличается от пользователя в PostgreSQL? Это одно и то же: пользователь — это роль с атрибутом LOGIN. CREATE USER — синоним CREATE ROLE ... WITH LOGIN.

Почему приложение пишет «permission denied for schema public»? С PostgreSQL 15 права на схему public ограничены. Выдайте их явно: GRANT ALL ON SCHEMA public TO app_user.

Как задать пароль пользователю postgres? Войдите sudo -u postgres psql и выполните ALTER USER postgres PASSWORD 'новый_пароль';.

Как проверить, слушает ли база внешний порт? sudo ss -tlnp | grep 5432 покажет адреса прослушивания. Если только 127.0.0.1 — правьте listen_addresses.

PostgreSQL чувствителен к скорости диска и объёму памяти под кэш. Под базы данных берите тарифы на NVMe: смотрите аренда VPS и профильный VPS для баз данных.

Лаура Зариня

Лаура Зариня

Маркетолог. Рассказывает о сервисах cp.lv и следит, чтобы условия и цены были понятны каждому клиенту.