В этом руководстве рассказывается об установке PostgreSQL 18 на Void Linux, инициализации кластера баз данных, создании службы рунита с нуля (Void не поставляется) и блокировке аутентификации. Если вы работаете в Debian или RHEL, самое большое отличие заключается в управлении сервисами, которые мы подробно рассмотрим.
Предварительные условия
- Сервер под управлением Void Linux.
- Привилегии пользователя: пользователь root или не root с привилегиями sudo.
Конвенции
| |
Обновите систему
Свежая установка Void Linux требует обновления пакетов до последних доступных версий.
| |
После того, как xbps включен, запустите полное обновление системы.
| |
Система может нуждаться в перезагрузке после обновления.
| |
Установить PostreSQL
Хранилище Void XBPS поставляется с PostgreSQL 18.x. Установите пакеты сервера и клиента:
| |
Подтвердите установленную версию:
| |
Вы должны увидеть строку версии, подтверждающую 18.x:
| |
XBPS автоматически создает пользователя системы postgres во время установки. Проверьте, существует ли:
| |
Результат подтверждает пользователя и группу:
| |
Инициировать кластер баз данных
PostgreSQL нуждается в начальном каталоге данных, прежде чем он может начаться. Создайте каталог и установите право собственности на пользователя postgres:
| |
Теперь инициализируйте кластер. Это должно работать как пользователь postgres:
| |
На выходе инициализации показан кластер, создаваемый с настройками по умолчанию:
| |
Обратите внимание на предупреждение об аутентификации доверия. Мы ужесточим это после запуска службы.
Создать сервис Runit
Void Linux использует рунит для управления службами, а PostgreSQL по умолчанию не поставляется с файлом службы рунита. Вам нужно создать его вручную. Это застает большинство людей врасплох, когда они приходят из дистрибутивов, где systemctl enable postgresql позволяет просто работать.
Создайте структуру каталога услуг:
| |
Создайте основной скрипт запуска, который запускает PostgreSQL в качестве пользователя postgres:
| |
Сделайте его исполняемым:
| |
Теперь создайте лог-сервис. Runit ожидает, что скрипт log/run захватит выход через svlogd:
| |
Сделайте его исполняемым и создайте каталог журнала:
| |
Включите услугу, создав симлинк на /var/service/. Рунит забирает его автоматически в течение нескольких секунд:
| |
Проверьте статус сервиса:
| |
Здоровый сервис выглядит так:
| |
Если статус отображается down, проверьте журнал на /var/log/postgresql/current на наличие ошибок. Общие причины включают неправильные разрешения в каталоге данных или отсутствующего пользователя.
Защитите установку
Конфигурация initdb по умолчанию использует аутентификацию доверия для локальных соединений, что означает, что любой локальный пользователь может подключаться как любой пользователь базы данных без пароля. Исправьте это, установив пароль для суперпользователя postgres и переключившись на аутентификацию на основе пароля.
Подключитесь к PostgreSQL и установите пароль суперпользователя:
| |
Замените YourStrongPassword сильным паролем, включая случайные символы.
Ответ подтверждает изменение:
| |
Теперь отредактируйте pg hba.conf для обеспечения аутентификации пароля.
| |
Перезагрузите PostgreSQL, чтобы применить изменения без отказа от существующих соединений:
| |
Подтверждение перезагрузки:
| |
Отныне каждое соединение требует пароля. Проверьте:
| |
Введите пароль, который вы установили ранее. Вывод запроса показывает вашу запущенную версию:
| |
Создание базы данных и пользователя
Производственные приложения никогда не должны подключаться в качестве суперпользователя postgres. Создайте выделенного пользователя и базу данных для вашего приложения.
Подключайтесь сначала как суперпользователь:
| |
Создать нового пользователя, базу данных и предоставить привилегии. Это интерактивная сессия psql:
| |
Проверьте, может ли новый пользователь подключиться к базе данных:
| |
Информация о подключении подтверждает пользователя и базу данных:
| |
Включить удаленные соединения (Необязательный)
По умолчанию PostgreSQL 18 прослушивают только на локальном хосте. Если другие машины в вашей сети должны подключаться, вам нужно будет изменить адрес прослушивания и добавить правило брандмауэра.
Откройте основной файл конфигурации:
| |
Найдите строку listen_addresses и измените ее на все интерфейсы:
| |
Затем добавьте строку в pg hba.conf для подключения к сети. Откройте файл:
| |
Добавьте эту строку в конце, настраивая подсеть в соответствии с вашей сетью:
| |
Перезагрузите PostgreSQL, чтобы применить изменение адреса прослушивания:
| |
Void Linux использует nftables для брандмауэра. Разрешите порт 5432 TCP:
| |
Чтобы сделать правило брандмауэра постоянным при перезагрузке, сохраните текущий набор правил:
| |
Проверить PostgreSQL можно на всех интерфейсах:
| |
На выходе должно быть показано 0,0.0.0:5432 вместо 127.0.0.1:5432:
| |
Основные команды psql
Быстрая ссылка на наиболее распространенные команды psql, которые вы будете использовать ежедневно. Свяжитесь с psql -U postgres -h 127.0.0.1 и запустите их из psql:
| Команды | Описание |
|---|---|
\l | Перечислите все базы данных |
\dt | Таблицы перечней в текущей базе данных |
\c dbname | Подключение к другой базе данных |
\d tablename | Опишите таблицу (колонки, типы, индексы) |
\du | Список всех ролей/пользователей |
SELECT version(); | Показать серверную версию PostgreSQL |
\timing | Отображение времени выполнения запроса Toggle |
\x | Расширенный (вертикальный) выход Toggle |
\q | Выход psql |
Тюнинг для производства
Конфигурация PostgreSQL по умолчанию является консервативной. На выделенном сервере базы данных вы захотите настроить эти настройки в postgresql.conf. Значения ниже предполагают сервер с 4 ГБ ОЗУ.
| |
Ключевые параметры для изменения:
| |
После редактирования перезагрузите конфигурацию без перезагрузки:
| |
Некоторые параметры (например, shared buffers и max connections) требуют полного перезапуска. Проверьте документацию PostgreSQL 18, для которой настройки требуют перезагрузки. Для бэкэнда веб-приложения соединение этого со стеком LAMP или Nginx на том же хосте Void Linux хорошо работает для развертывания от малого до среднего. После того, как база данных содержит реальные данные, настройте стратегию резервного копирования с моментальным восстановлением, чтобы вы могли восстановиться в любой момент до сбоя.
Завершение
Теперь вы можете интегрировать PostgreSQL с вашими приложениями для безопасного управления данными.
Если вам понравился этот пост об установке PostgreSQL на сервере Void Linux, пожалуйста, поделитесь им со своими друзьями в социальных сетях, которым может быть интересна эта статья или оставьте комментарий ниже.