Установка PostgreSQL офлайн: скачать, перенести, настроить | AdminWiki

Установка PostgreSQL без интернета: Полное руководство для изолированных систем

18 декабря 2025 7 мин. чтения #deb пакеты #devops #postgresql #rpm пакеты #администрирование #без интернета #локальный репозиторий #офлайн установка

Представь ситуацию: тебе нужно развернуть PostgreSQL на сервере в закрытом контуре, без доступа к внешним сетям. Это типичный сценарий для банков, госучреждений или промышленных систем. Давай разберем, как подготовить все пакеты на машине с интернетом и перенести их на целевой сервер для установки.

Подготовка: скачивание пакетов PostgreSQL

Первым делом нам нужна машина с доступом в интернет и той же архитектурой/дистрибутивом, что и целевой сервер. Это критически важно для совместимости пакетов.

Для Debian/Ubuntu (APT)

Создадим папку для загрузки всех зависимостей PostgreSQL и его расширений.
bash
# Создаем рабочую директорию
mkdir -p ~/postgres-offline
cd ~/postgres-offline

# Добавляем репозиторий PostgreSQL (если нужно)
sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'
wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
sudo apt-get update

# Скачиваем пакет PostgreSQL и все зависимости
apt-get download $(apt-cache depends --recurse --no-recommends --no-suggests \
  --no-conflicts --no-breaks --no-replaces --no-enhances \
  postgresql-15 postgresql-client-15 postgresql-contrib-15 | \
  grep "^\w" | sort -u)

# Создаем индекс пакетов для локального репозитория
dpkg-scanpackages . /dev/null | gzip -9c > Packages.gz

Для CentOS/RHEL (YUM/DNF)

bash
# Устанавливаем утилиту для скачивания
sudo yum install -y yum-utils

# Скачиваем PostgreSQL и все зависимости
mkdir -p ~/postgres-offline
cd ~/postgres-offline

# Для PostgreSQL 15 на CentOS 7/RHEL 7
sudo yum install --downloadonly --downloaddir=. \
  postgresql15-server postgresql15-contrib

# Создаем локальный репозиторий
createrepo .

Перенос пакетов на целевой сервер

Теперь нужно перенести всю папку с пакетами на сервер без интернета. Есть несколько способов:

  • USB-накопитель: Просто скопируй папку на флешку и перенеси
  • SCP/SFTP: Если есть внутренний сетевой путь между машинами
  • DVD/CD: Для максимальной изоляции
Важно: Убедись, что на целевом сервере достаточно места для пакетов и будущей БД. Минимум 2-3 ГБ свободного места.

Установка PostgreSQL на сервере без интернета

Debian/Ubuntu: установка из локального репозитория

bash
# Копируем пакеты на целевой сервер (пример через SCP)
# На машине с интернетом:
scp -r ~/postgres-offline user@target-server:/tmp/

# На целевом сервере:
cd /tmp/postgres-offline

# Создаем локальный источник пакетов
echo "deb [trusted=yes] file:///tmp/postgres-offline ./" | sudo tee /etc/apt/sources.list.d/local-postgres.list

# Обновляем кэш пакетов
sudo apt-get update

# Устанавливаем PostgreSQL
sudo apt-get install -y postgresql-15 postgresql-client-15 postgresql-contrib-15

CentOS/RHEL: установка локальных RPM пакетов

bash
# На целевом сервере
cd /tmp/postgres-offline

# Создаем локальный репозиторий
sudo yum install -y createrepo  # если не установлен
createrepo .

# Создаем файл репозитория
sudo tee /etc/yum.repos.d/local-postgres.repo << EOF
[local-postgres]
name=Local PostgreSQL Repository
baseurl=file:///tmp/postgres-offline
enabled=1
gpgcheck=0
EOF

# Устанавливаем PostgreSQL
sudo yum install -y postgresql15-server postgresql15-contrib

Инициализация и настройка PostgreSQL

После установки нужно инициализировать кластер баз данных и настроить его.

bash
# Инициализируем базу данных
sudo /usr/pgsql-15/bin/postgresql-15-setup initdb

# Запускаем службу
sudo systemctl start postgresql-15
sudo systemctl enable postgresql-15

# Проверяем статус
sudo systemctl status postgresql-15

Базовая конфигурация postgresql.conf

config
# Редактируем основной конфиг
sudo nano /var/lib/pgsql/15/data/postgresql.conf

# Основные настройки для начала:
listen_addresses = 'localhost'          # или '*' для сетевого доступа
port = 5432
max_connections = 100
shared_buffers = 128MB                  # 25% от доступной RAM
work_mem = 4MB
maintenance_work_mem = 64MB
wal_level = replica                     # для репликации

Настройка аутентификации в pg_hba.conf

config
# Разрешаем локальные подключения
# TYPE  DATABASE        USER            ADDRESS                 METHOD
local   all             all                                     peer
host    all             all             127.0.0.1/32            md5
host    all             all             ::1/128                 md5

# Для сетевого доступа (настрой по необходимости)
# host    all             all             192.168.1.0/24          md5

Сравнение методов установки

Метод Плюсы Минусы Лучше всего для
Локальный APT/YUM репозиторий Автоматическое разрешение зависимостей, простое обновление Требует настройки репозитория на целевом сервере Несколько серверов, частые обновления
Установка .deb/.rpm пакетов напрямую Простота, не требует настройки репозитория Ручное разрешение зависимостей Единичная установка, тестовые среды
Сборка из исходников Полный контроль, оптимизация под железо Сложно, требует компилятора и библиотек Максимальная производительность, кастомные сборки

Частые проблемы и решения

Проблема: Отсутствующие зависимости

Если при установке появляются ошибки о missing dependencies:

bash
# Для Debian/Ubuntu - ищем и скачиваем недостающие пакеты
# На машине с интернетом:
apt-cache depends postgresql-15 | grep Depends

# Для CentOS/RHEL:
repoquery --requires --resolve postgresql15-server

Проблема: Несовместимость версий библиотек

Убедись, что версии glibc и других системных библиотек совпадают на обеих машинах:

bash
# Проверяем версию glibc
ldd --version

# Проверяем архитектуру
uname -m

# Проверяем версию дистрибутива
cat /etc/os-release

Дополнительные расширения и утилиты

Для production-среды часто нужны дополнительные компоненты:

  • pg_stat_statements - мониторинг производительности
  • postgresql-15-plpython3 - поддержка Python в процедурах
  • pgaudit - аудит безопасности
  • pgbackrest или barman - инструменты бэкапа
bash
# Скачиваем расширения на машине с интернетом
# Для Debian/Ubuntu:
apt-get download postgresql-15-plpython3-15 postgresql-15-pgaudit

# Для CentOS/RHEL:
yum install --downloadonly --downloaddir=. \
  postgresql15-plpython3 pgaudit15_15
Совет: Создай полный скрипт установки, который включает все шаги: проверку зависимостей, копирование пакетов, установку и настройку. Это сэкономит время при развертывании на нескольких серверах.

Проверка работоспособности

После установки убедись, что PostgreSQL работает корректно:

bash
# Проверяем, что служба запущена
sudo systemctl status postgresql-15

# Проверяем подключение
sudo -u postgres psql -c "SELECT version();"

# Создаем тестовую базу и пользователя
sudo -u postgres psql << EOF
CREATE USER testuser WITH PASSWORD 'securepassword';
CREATE DATABASE testdb OWNER testuser;
\c testdb
CREATE TABLE test_table (id serial PRIMARY KEY, name varchar(50));
INSERT INTO test_table (name) VALUES ('Тестовая запись');
SELECT * FROM test_table;
EOF

FAQ: Ответы на частые вопросы

Как обновить PostgreSQL без интернета?

Процесс аналогичен установке: скачай новые версии пакетов на машине с интернетом, перенеси на целевой сервер и выполни обновление через локальный репозиторий. Обязательно сделай бэкап баз данных перед обновлением.

Что делать, если нужна конкретная минорная версия PostgreSQL?

Укажи точную версию при скачивании пакетов: apt-get download postgresql-15=15.5-1.pgdg22.04+1. Используй apt-cache policy postgresql-15 чтобы увидеть доступные версии.

Как установить PostgreSQL на абсолютно чистой системе без интернета?

Помимо пакетов PostgreSQL, тебе понадобятся все системные зависимости. Используй apt-get download --download-only ubuntu-minimal или аналогичную команду для твоего дистрибутива, чтобы получить базовую систему.

Можно ли использовать Docker образ для офлайн установки?

Да! Сохрани образ на машине с интернетом: docker save postgres:15 -o postgres15.tar, перенеси файл и загрузи на целевом сервере: docker load -i postgres15.tar. Но учти, что для Docker тоже нужны базовые пакеты.

Заключение

Установка PostgreSQL без интернета — это полностью решаемая задача, требующая тщательной подготовки. Основной принцип: «все, что нужно на целевой машине, должно быть подготовлено на машине с доступом в интернет».

Ключевые шаги для успеха:

  1. Используй идентичные дистрибутивы и архитектуры
  2. Скачивай ВСЕ зависимости, включая неявные
  3. Создавай локальный репозиторий для удобства управления
  4. Тестируй установку в изолированной среде перед production

С этой инструкцией ты сможешь развернуть PostgreSQL в любой изолированной среде — от защищенных дата-центров до промышленных систем реального времени.

Поделиться:
Сохранить гайд? В закладки браузера