Материал подготовлен командой Simple-Server для администраторов VPS и выделенных серверов. Команды и пути проверяйте на тестовой машине перед production.
Создание и подготовка сервера
Перед тем как установить PostgreSQL, нам необходимо выбрать конфигурацию сервера и создать его в панели управления.
Создание облачного сервера
После создания учётной записи можно приступить к аренде облачного сервера.
-
Переходим на страницу авторизации и входим в аккаунт, используя логин или адрес электронной почты и пароль, либо через Pass, ВКонтакте, GitHub, Google.
-
После успешной авторизации открывается панель управления текущего проекта. Переходим в раздел «Облачные серверы» и нажимаем «Создать» или «Добавить».
-
Выбираем операционную систему для установки на сервер. В нашем случае это будет Ubuntu версии 22.04.
-
Определяемся с регионом, в котором будет размещен сервер. Рекомендуется выбрать регион, находящийся ближе всего к вам.
Переходим на страницу авторизации и входим в аккаунт, используя логин или адрес электронной почты и пароль, либо через Pass, ВКонтакте, GitHub, Google.
После успешной авторизации открывается панель управления текущего проекта. Переходим в раздел «Облачные серверы» и нажимаем «Создать» или «Добавить».
Выбираем операционную систему для установки на сервер. В нашем случае это будет Ubuntu версии 22.04.
Определяемся с регионом, в котором будет размещен сервер. Рекомендуется выбрать регион, находящийся ближе всего к вам.
-
Конфигурацию сервера необходимо выбирать исходя из требований вашего проекта. Для демонстрационных целей выберем сервер с 1 ядром, 1 ГБ ОЗУ и диском объемом 15 ГБ.
-
Для установки и работы базы данных нам потребуется публичный IPv4-адрес. Также, при необходимости вы можете добавить сервер в приватную сеть.
-
Для повышения безопасности и надежности данных можно подключить резервные копии и защиту от DDoS-атак (последняя доступна только в Санкт-Петербурге и Москве).
-
Также можно заранее загрузить SSH-ключ, чтобы не входить на сервер с помощью пароля. Подробности можно найти в статье «Авторизация по SSH-ключу». Ключ добавляется только для root-пользователя.
-
Выберите проект, в котором будет располагаться сервер, и придумайте имя.
-
Нажмите «Заказать» для создания сервера. Если на вашем аккаунте недостаточно средств, появится предупреждение о необходимости пополнить баланс. После оплаты и создания сервера откроется главная страница сервера, где можно будет найти IP-адрес и реквизиты root-пользователя для подключения.
Обновление системы и установка необходимых пакетов
Авторизуемся на сервере по SSH по реквизитам из панели управления и приступаем к установке.
В первую очередь обновите систему и установите требуемые пакеты:
sudo apt update -y
sudo apt upgrade -yPostgreSQL поддерживает множество UNIX-подобных платформ. СУБД можно установить как на большинство дистрибутивов Linux, так и на Windows и MacOS.
Во время установки используйте пользователя с правами sudo. Не рекомендуется производить установку через root-пользователя.
На официальном сайте необходимо выбрать желаемую версию. Чтобы установить СУБД PostgeSQL 16.4, переходим в терминал и вводим:
wget https://ftp.postgresql.org/pub/source/v16.4/postgresql-16.4.tar.gzДалее проверяем архив с исходниками с помощью md5sum, чтобы убедиться в подлинности файла. Она должна совпадать с хэш-суммой на сайте.
md5sum postgresql-16.4.tar.gz
6849302e68ba1984cee67cd6eab2b930 postgresql-16.4.tar.gzРаспаковываем архив утилитой tar и переходим в директорию.
tar -xzvf postgresql-16.4.tar.gz
cd postgresql-16.4Установка PostgreSQL из исходников требует установки зависимостей.
sudo apt install -y gcc make pkg-config libreadline-dev zlib1g-dev icu-devtools libicu-devПереходим к конфигурированию базы данных.
./configure --prefix=/usr/local/lib/postgresql/16/ --libdir=/usr/local/lib/postgresql/16/lib/Здесь --prefix отвечает за путь, где хранится каталог, а --libdir — за место хранения библиотек и модулей.
Также можно задать следующие параметры:
-
--prefix=PREFIX: Задает основной каталог для установки всех файлов. По умолчанию это/usr/local/pgsql, но вы можете изменить его на любое другое место. Важно отметить, что файлы будут установлены в соответствующие подкаталоги, а не напрямую в каталог, указанный вPREFIX. -
--exec-prefix=EXEC-PREFIX: Определяет каталог для установки файлов, зависящих от архитектуры (например, исполняемых файлов и библиотек). Это может быть полезно, если вам нужно разделить файлы, зависящие от архитектуры, и независимые файлы, чтобы использовать их на разных хостах. Если этот параметр не указан, он автоматически принимает значение, указанное в--prefix. -
--bindir=DIRECTORY: Указывает каталог, в который будут установлены исполняемые файлы, такие какpsqlиinitdb. По умолчанию этоEXEC-PREFIX/bin, что обычно означает/usr/local/pgsql/bin. -
--sysconfdir=DIRECTORY: Определяет каталог для хранения конфигурационных файлов, таких какpostgresql.conf. По умолчанию этоPREFIX/etc. -
--libdir=DIRECTORY: Задает каталог для установки библиотек и динамически загружаемых модулей. По умолчанию используетсяEXEC-PREFIX/lib. -
--includedir=DIRECTORY: Указывает каталог для установки файлов заголовков C и C++. По умолчанию этоPREFIX/include. -
--datarootdir=DIRECTORY: Устанавливает корневой каталог для различных типов файлов, доступных только для чтения, например, документации и данных для локализации. По умолчанию этоPREFIX/share. -
--datadir=DIRECTORY: Указывает каталог для установки файлов, доступных только для чтения, которые используются установленными программами. Это не влияет на местоположение ваших файлов базы данных. По умолчанию используетсяDATAROOTDIR. -
--localedir=DIRECTORY: Определяет каталог для установки данных локализации, таких как файлы перевода сообщений. По умолчанию этоDATAROOTDIR/locale. -
--mandir=DIRECTORY: Указывает каталог для установки man-страниц, связанных с PostgreSQL. По умолчанию этоDATAROOTDIR/man. -
--docdir=DIRECTORY: Указывает корневой каталог для установки файлов документации (за исключением man-страниц). По умолчанию используетсяDATAROOTDIR/doc/postgresql. -
--htmldir=DIRECTORY: Задает каталог для установки HTML-документации для PostgreSQL. По умолчанию используетсяDATAROOTDIR.
--prefix=PREFIX: Задает основной каталог для установки всех файлов. По умолчанию это /usr/local/pgsql, но вы можете изменить его на любое другое место. Важно отметить, что файлы будут установлены в соответствующие подкаталоги, а не напрямую в каталог, указанный в PREFIX.
--exec-prefix=EXEC-PREFIX: Определяет каталог для установки файлов, зависящих от архитектуры (например, исполняемых файлов и библиотек). Это может быть полезно, если вам нужно разделить файлы, зависящие от архитектуры, и независимые файлы, чтобы использовать их на разных хостах. Если этот параметр не указан, он автоматически принимает значение, указанное в --prefix.
--bindir=DIRECTORY: Указывает каталог, в который будут установлены исполняемые файлы, такие как psql и initdb. По умолчанию это EXEC-PREFIX/bin, что обычно означает /usr/local/pgsql/bin.
--sysconfdir=DIRECTORY: Определяет каталог для хранения конфигурационных файлов, таких как postgresql.conf. По умолчанию это PREFIX/etc.
--libdir=DIRECTORY: Задает каталог для установки библиотек и динамически загружаемых модулей. По умолчанию используется EXEC-PREFIX/lib.
--includedir=DIRECTORY: Указывает каталог для установки файлов заголовков C и C++. По умолчанию это PREFIX/include.
--datarootdir=DIRECTORY: Устанавливает корневой каталог для различных типов файлов, доступных только для чтения, например, документации и данных для локализации. По умолчанию это PREFIX/share.
--datadir=DIRECTORY: Указывает каталог для установки файлов, доступных только для чтения, которые используются установленными программами. Это не влияет на местоположение ваших файлов базы данных. По умолчанию используется DATAROOTDIR.
--localedir=DIRECTORY: Определяет каталог для установки данных локализации, таких как файлы перевода сообщений. По умолчанию это DATAROOTDIR/locale.
--mandir=DIRECTORY: Указывает каталог для установки man-страниц, связанных с PostgreSQL. По умолчанию это DATAROOTDIR/man.
--docdir=DIRECTORY: Указывает корневой каталог для установки файлов документации (за исключением man-страниц). По умолчанию используется DATAROOTDIR/doc/postgresql.
--htmldir=DIRECTORY: Задает каталог для установки HTML-документации для PostgreSQL. По умолчанию используется DATAROOTDIR.
Эти параметры позволяют точно настроить, где будут размещены различные компоненты PostgreSQL, что может быть важно для организации и управления системой в различных окружениях. Более подробно со всеми настройками конфигурирования можно ознакомиться в документации Postgres.
Чтобы начать сборку PostgreSQL, выполните одну из следующих команд:
При этом важно использовать утилиту GNU Make. Процесс сборки займет несколько минут, в зависимости от характеристик вашего оборудования.
Если вы хотите собрать не только основную часть системы, но и всю возможную документацию (включая HTML и man-страницы), а также дополнительные модули (contrib), используйте команду:
Если вам нужно собрать все, включая дополнительные модули (contrib), но без документации, воспользуйтесь командой:
Выбрать нужный вариант сборки необходимо исходя из требования проекта. В статье будем использовать установку make world.
Проверим, что сборка проекта произошла без ошибок.
Чтобы запустить установку PostgreSQL версии world, введите:
Если для сборки вы использовали только стандартную часть системы, введите команду:
make install
make install-docs
make install-world-binВ PostgreSQL кластером баз данных называется группа баз, которые физически хранятся в определенной директории. Один сервер PostgreSQL способен обслуживать несколько таких кластеров, но для этого они должны быть настроены на использование разных портов. Директория, где расположен основной кластер, обычно обозначается как PGDATA.
Некоторые утилиты PostgreSQL, такие как initdb, могут обращаться к переменной окружения PGDATA, чтобы определить расположение основного кластера баз данных.
Для начала создадим системного пользователя с именем postgres, под которым будут выполняться все операции с базами данных. Пароль для этого пользователя можно оставить пустым, чтобы предотвратить доступ других пользователей, однако root или sudo-пользователь сможет выполнять действия от его имени.
sudo useradd postgres -d /var/local/lib/postgresql/ -s /bin/bashВ следующем шаге создадим каталог для основного кластера баз данных и назначим пользователя postgres владельцем этого каталога. Для этого выполните следующие команды:
sudo mkdir -p /var/local/lib/postgresql/16/main/
sudo chown -R postgres:postgres /var/local/lib/postgresql/После этого переключимся на пользователя postgres:
Теперь добавим необходимые переменные окружения для пользователя postgres, применим изменения и проверим их:
echo "export PGDATA=/var/local/lib/postgresql/16/main/" >> .bash_profile
echo "PATH=/usr/local/lib/postgresql/16/bin/:$PATH" >> .bash_profile
. .bash_profile
ls -ld $PGDATA
drwxr-sr-x 2 postgres postgres 4096 Aug 19 18:20 /var/local/lib/postgresql/16/main/
whereis psql
psql: /usr/local/lib/postgresql/16/bin/psqlПосле того как мы настроили переменные окружения, можно переходить к инициализации первого кластера базы данных. Для этого выполните следующую команду:
Обратите внимание, что по умолчанию генерируется кластер с английской локалью en_US.UTF-8. Чтобы база данных использовала по умолчанию русскую локализацию, необходимо перед инициализацией кластера настроить локаль.
Установите локаль ru_RU.UTF-8 в системе. Вы можете добавить её, используя команду locale-gen или эквивалентные команды, в зависимости от вашей операционной системы.
sudo locale-gen ru_RU.UTF-8
sudo update-localeТеперь перед инициализацией кластера указываем:
export LC_CTYPE=ru_RU.UTF-8Запуск и остановка кластера
Для управления кластером баз данных PostgreSQL используется утилита pg_ctl. Эта команда позволяет запускать, останавливать кластер, а также проверять его текущее состояние. Утилита pg_ctl опирается на переменную окружения PGDATA, которая указывает на каталог, где находится кластер. Также с помощью опции -l <файл> можно указать файл журнала, в который будут записываться сообщения о работе сервера.
Чтобы запустить кластер и записать журнал в файл postgres.log, выполните команду:
pg_ctl -l postgres.log start
waiting for server to start.... done
server startedУчтите, что только пользователи postgres или root имеют право запускать и останавливать кластер.
Для проверки статуса сервера используйте команду:
pg_ctl: server is running (PID: 13519)
/usr/local/lib/postgresql/16/bin/postgresЧтобы выполнить тестовый запрос к базе данных, выполните следующую команду:
now
-------------------------------
2024-08-19 18:47:32.003335+03
(1 row)Для остановки сервера выполните:
Для получения дополнительной информации о работе утилиты pg_ctl вы можете обратиться к документации PostgreSQL.
После завершения работы вернитесь к своему обычному пользователю, выполнив:
Этот процесс позволит вам управлять кластером баз данных PostgreSQL и выполнять основные операции, такие как запуск, проверка состояния и остановка сервера.
Создание службы systemd для кластера PostgreSQL
Настройка службы для основного кластера
Чтобы управлять кластером PostgreSQL с помощью systemd, нам нужно создать специальную службу. Для этого сначала разлогинимся из пользователя postgres, на которого мы переключились ранее
Теперь создадим файл службы для основного кластера PostgreSQL:
sudo nano /etc/systemd/system/postgresql.serviceВ файл добавляем следующую конфигурацию:
[Unit]
Description=PostgreSQL database server
Documentation=man:postgres(1)
After=network-online.target
Wants=network-online.target
[Service]
Type=forking
User=postgres
ExecStart=/usr/local/lib/postgresql/16/bin/pg_ctl -D /var/local/lib/postgresql/16/main/ -l /var/local/lib/postgresql/16/main/postgres-main.log start
ExecReload=/bin/kill -HUP $MAINPID
KillMode=mixed
KillSignal=SIGINT
[Install]
WantedBy=multi-user.targetПримените изменения и запустите службу:
sudo systemctl daemon-reload
sudo systemctl start postgresql.serviceЕсли служба не запускается, убедитесь, что нет запущенных процессов postgres, которые могли бы мешать запуску. В таком случае используйте утилиту pg_ctl от имени пользователя postgres для завершения процессов.
systemctl status postgresql.serviceВывод команды может выглядеть следующим образом:
Включение службы в автозагрузку
Для того чтобы служба автоматически запускалась при загрузке системы, выполните следующие команды:
sudo systemctl enable postgresql.serviceТеперь служба будет автоматически запускаться при каждом перезапуске сервера. Если вам потребуется отменить автозагрузку службы, используйте:
sudo systemctl disable postgresql.serviceЭтот процесс позволяет вам организовать управление кластером PostgreSQL через systemd, обеспечивая его автоматический запуск и управление на сервере.
Нужен сервер для практики? Арендуйте VPS/VDS в России — root-доступ, NVMe, DDoS-защита и поддержка 24/7.