Для CentOS 9 / Rocky Linux 9 / AlmaLinux 9
sudo dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-9-x86_64/pgdg-redhat-repo-latest.noarch.rpm
Отключение встроенного модуля PostgreSQL (для CentOS 8+)
sudo dnf -qy module disable postgresql || true
Очистка кэша и обновление
sudo yum clean all
sudo yum makecache
Установка PostgreSQL 18
sudo yum install -y postgresql18-server postgresql18-contrib postgresql18-libs
Проверка установки
/usr/pgsql-18/bin/postgres --version
Инициализация базы данных [citation:5][citation:8]
sudo /usr/pgsql-18/bin/postgresql-18-setup initdb
Запуск и добавление в автозагрузку [citation:8]
sudo systemctl start postgresql-18
sudo systemctl enable postgresql-18
Проверка статуса
sudo systemctl status postgresql-18
Часть 2: Настройка PostgreSQL для доступа из Docker
bash
Настройка PostgreSQL для приема внешних подключений
sudo nano /var/lib/pgsql/18/data/postgresql.conf
Найдите и раскомментируйте/измените:
listen_addresses = '*' # Слушать все интерфейсы
port = 5432 # Порт по умолчанию
max_connections = 100 # Для семейного проекта достаточно
shared_buffers = 128MB # Настройте под свою RAM
Настройка прав доступа для Docker-сети
sudo nano /var/lib/pgsql/18/data/pg_hba.conf
Добавьте в конец файла:
Разрешаем подключения из Docker-сети (обычно 172.17.0.0/16)
host all all 172.17.0.0/16 md5
host all all 172.18.0.0/16 md5
host all all 172.19.0.0/16 md5
Для надежности можно разрешить локальную сеть
host all all 192.168.0.0/16 md5
Настройка файрвола (если включен)
sudo firewall-cmd --permanent --add-port=5432/tcp
sudo firewall-cmd --reload
Перезапуск PostgreSQL для применения настроек
sudo systemctl restart postgresql-18
Переключение на пользователя postgres
sudo -i -u postgres
Создание баз данных и пользователей
psql << 'EOF'
-- Создаем пользователей с надежными паролями
CREATE USER auth_user WITH PASSWORD 'auth_secure_password_2024' LOGIN;
CREATE USER chat_user WITH PASSWORD 'chat_secure_password_2024' LOGIN;
CREATE USER file_user WITH PASSWORD 'file_secure_password_2024' LOGIN;
CREATE USER messenger_user WITH PASSWORD 'messenger_secure_password_2024' LOGIN;
-- Создаем базы данных
CREATE DATABASE messenger_auth OWNER auth_user;
CREATE DATABASE messenger_chat OWNER chat_user;
CREATE DATABASE messenger_files OWNER file_user;
CREATE DATABASE messenger_users OWNER messenger_user;
-- Даем права
GRANT ALL PRIVILEGES ON DATABASE messenger_auth TO auth_user;
GRANT ALL PRIVILEGES ON DATABASE messenger_chat TO chat_user;
GRANT ALL PRIVILEGES ON DATABASE messenger_files TO file_user;
GRANT ALL PRIVILEGES ON DATABASE messenger_users TO messenger_user;
-- Создаем расширения (полезно для полнотекстового поиска)
\c messenger_auth
CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
CREATE EXTENSION IF NOT EXISTS "pg_trgm";
\c messenger_chat
CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
CREATE EXTENSION IF NOT EXISTS "pg_trgm";
\c messenger_users
CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
CREATE EXTENSION IF NOT EXISTS "pg_trgm";
\q
EOF
GRANT SELECT ON bi.met_pest TO fieldsofrussia;
sudo -u postgres psql -c "CREATE DATABASE wikijs;"
sudo -u postgres psql -c \"CREATE USER wikiuser WITH ENCRYPTED PASSWORD 'StrongPasswordHere';\"
sudo -u postgres psql -c "GRANT ALL PRIVILEGES ON DATABASE wikijs TO wikiuser;"
psql -U wikiuser -h localhost -d wikijs
\q
To execute pg_trgm for a PostgreSQL database, the extension must first be enabled within that specific database. enable the pg_trgm extension.
Connect to your PostgreSQL database using a client like psql or pgAdmin and execute the following SQL command:
CREATE EXTENSION pg_trgm;
The extension has to be activated per database so make sure to enable it for your Wiki.js database.
sudo -u postgres psql -d messenger_db
ALTER TABLE users ADD COLUMN IF NOT EXISTS avatar_url VARCHAR;
ALTER TABLE users ADD COLUMN IF NOT EXISTS phone VARCHAR;
ALTER TABLE users ADD COLUMN IF NOT EXISTS bio TEXT;
#captcha
ALTER TABLE users ADD COLUMN IF NOT EXISTS is_verified BOOLEAN DEFAULT FALSE;
ALTER TABLE users ADD COLUMN push_token VARCHAR;
ALTER TABLE users ADD COLUMN push_platform VARCHAR;
ALTER TABLE users ADD COLUMN active_chat_id INTEGER;
ALTER TABLE users ADD COLUMN web_push_subscription JSON;