Представь ситуацию: тебе нужно развернуть PostgreSQL на сервере в закрытом контуре, без доступа к внешним сетям. Это типичный сценарий для банков, госучреждений или промышленных систем. Давай разберем, как подготовить все пакеты на машине с интернетом и перенести их на целевой сервер для установки.
Подготовка: скачивание пакетов PostgreSQL
Первым делом нам нужна машина с доступом в интернет и той же архитектурой/дистрибутивом, что и целевой сервер. Это критически важно для совместимости пакетов.
Для Debian/Ubuntu (APT)
# Создаем рабочую директорию
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)
# Устанавливаем утилиту для скачивания
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: Для максимальной изоляции
Установка PostgreSQL на сервере без интернета
Debian/Ubuntu: установка из локального репозитория
# Копируем пакеты на целевой сервер (пример через 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 пакетов
# На целевом сервере
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
После установки нужно инициализировать кластер баз данных и настроить его.
# Инициализируем базу данных
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
# Редактируем основной конфиг
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
# Разрешаем локальные подключения
# 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:
# Для Debian/Ubuntu - ищем и скачиваем недостающие пакеты
# На машине с интернетом:
apt-cache depends postgresql-15 | grep Depends
# Для CentOS/RHEL:
repoquery --requires --resolve postgresql15-server
Проблема: Несовместимость версий библиотек
Убедись, что версии glibc и других системных библиотек совпадают на обеих машинах:
# Проверяем версию glibc
ldd --version
# Проверяем архитектуру
uname -m
# Проверяем версию дистрибутива
cat /etc/os-release
Дополнительные расширения и утилиты
Для production-среды часто нужны дополнительные компоненты:
- pg_stat_statements - мониторинг производительности
- postgresql-15-plpython3 - поддержка Python в процедурах
- pgaudit - аудит безопасности
- pgbackrest или barman - инструменты бэкапа
# Скачиваем расширения на машине с интернетом
# Для Debian/Ubuntu:
apt-get download postgresql-15-plpython3-15 postgresql-15-pgaudit
# Для CentOS/RHEL:
yum install --downloadonly --downloaddir=. \
postgresql15-plpython3 pgaudit15_15
Проверка работоспособности
После установки убедись, что PostgreSQL работает корректно:
# Проверяем, что служба запущена
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 без интернета — это полностью решаемая задача, требующая тщательной подготовки. Основной принцип: «все, что нужно на целевой машине, должно быть подготовлено на машине с доступом в интернет».
Ключевые шаги для успеха:
- Используй идентичные дистрибутивы и архитектуры
- Скачивай ВСЕ зависимости, включая неявные
- Создавай локальный репозиторий для удобства управления
- Тестируй установку в изолированной среде перед production
С этой инструкцией ты сможешь развернуть PostgreSQL в любой изолированной среде — от защищенных дата-центров до промышленных систем реального времени.