PostgreSQL diegimas: bazė, vartotojas, prieiga

Paleiskite serveryje viena komanda (pirmiausia patikrinkite skripto turinį žemiau):

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

…arba su wget:

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

Skripto turinys ustanovit-postgresql.sh:

#!/usr/bin/env bash
# Install PostgreSQL, create a database and a user
set -e
export DEBIAN_FRONTEND=noninteractive

DB_NAME=app_db
DB_USER=app_user
DB_PASS='StrongPassword123!'

# 1. Install PostgreSQL and the contrib extensions
sudo apt-get update
sudo apt-get install -y postgresql postgresql-contrib
sudo systemctl enable --now postgresql

# 2. Create the role (user) and the database
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. Grants on the public schema (required from PostgreSQL 15 on)
sudo -u postgres psql -d ${DB_NAME} -c "GRANT ALL ON SCHEMA public TO ${DB_USER};"

echo "Done: database ${DB_NAME} and user ${DB_USER} created."

PostgreSQL yra galinga reliacinė duomenų bazių valdymo sistema su JSON palaikymu, pilnateksčia paieška ir griežtu duomenų vientisumu. Žemiau — diegimas Ubuntu 22.04/24.04, duomenų bazės ir vartotojo sukūrimas bei prieigos konfigūracija.

1 žingsnis. Diegimas

PostgreSQL yra standartinėje saugykloje:

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

Patikrinkite versiją ir būseną:

psql --version
sudo systemctl status postgresql

Paketas postgresql-contrib prideda naudingų plėtinių (pavyzdžiui, pg_stat_statements, uuid-ossp).

2 žingsnis. Rolė ir duomenų bazė

PostgreSQL sukuria sisteminį vartotoją postgres. Prisijunkite jo vardu prie konsolės:

sudo -u postgres psql

Sukurkite vartotoją (rolę) ir duomenų bazę programai:

CREATE ROLE app_user WITH LOGIN PASSWORD 'StrongPassword123!';
CREATE DATABASE app_db OWNER app_user;
GRANT ALL PRIVILEGES ON DATABASE app_db TO app_user;
\q

PostgreSQL 15+ versijose teisės į schemą public pagal numatytuosius nustatymus apribotos. Jei programa negali kurti lentelių, suteikite teises į schemą:

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

3 žingsnis. Prisijungimo patikra

Prisijunkite nauju vartotoju lokaliai:

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

Įveskite slaptažodį. Jei pasirodė eilutė app_db=> — prieiga veikia.

4 žingsnis. Nuotolinės prieigos konfigūracija

Pagal numatytuosius nustatymus PostgreSQL klauso tik localhost. Kad priimtų išorinius prisijungimus (pavyzdžiui, iš kitame serveryje veikiančios užpakalinės dalies), pataisykite du failus. Suraskite jų kelius:

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

Faile postgresql.conf nurodykite klausymo adresus. Atidarykite failą redaktoriuje (nano, vim arba mcedit):

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

Nustatymo eilutė:

listen_addresses = '10.0.0.5, localhost'

Arba pridėkite ją viena komanda — nukopijuokite ir įklijuokite į konsolę (heredoc prirašys eilutę failo gale):

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

Faile pg_hba.conf pridėkite taisyklę patikimam potinkliui su slaptažodžio šifravimu. Atidarykite failą redaktoriuje:

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

Taisyklės turinys:

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

Arba pridėkite taisyklę viena komanda (kabutės 'EOF' — tekstas bus įrašytas toks, koks yra):

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

Niekada neatverkite duomenų bazės adresu 0.0.0.0/0 — tik konkretiems IP arba privačiam tinklui. Pritaikykite pakeitimus:

sudo systemctl restart postgresql

Atidarykite prievadą tik reikiamam šaltiniui:

sudo ufw allow from 10.0.0.10 to any port 5432

Naudingos psql komandos

Komanda Veiksmas
\l duomenų bazių sąrašas
\du rolių sąrašas
\dt dabartinės bazės lentelės
\c app_db perjungti į duomenų bazę
\conninfo prisijungimo parametrai

Dažni klausimai

Kuo rolė skiriasi nuo vartotojo PostgreSQL sistemoje? Tai tas pats: vartotojas — tai rolė su atributu LOGIN. CREATE USER yra CREATE ROLE ... WITH LOGIN sinonimas.

Kodėl programa rašo „permission denied for schema public“? Nuo PostgreSQL 15 teisės į schemą public apribotos. Suteikite jas aiškiai: GRANT ALL ON SCHEMA public TO app_user.

Kaip nustatyti slaptažodį vartotojui postgres? Prisijunkite sudo -u postgres psql ir įvykdykite ALTER USER postgres PASSWORD 'naujas_slaptazodis';.

Kaip patikrinti, ar bazė klauso išorinio prievado? sudo ss -tlnp | grep 5432 parodys klausymo adresus. Jei tik 127.0.0.1 — taisykite listen_addresses.

PostgreSQL jautri disko greičiui ir atminties kiekiui talpyklai. Duomenų bazėms rinkitės planus su NVMe: žiūrėkite VPS serverio nuoma ir specializuotą VPS duomenų bazėms.

Laura Zariņa