Автор: Olzhas Alseitov
Telegram: @olzhasAl
LinkedIn: olzhas-alseitov
GitHub: InfiniteJas
Этот проект содержит production-ready shell-скрипт (написанный с соблюдением стандартов Google Shell Style Guide) для полностью автоматизированного развертывания PostgreSQL 16 с расширением pgvector на базе RHEL/CentOS 8.
Скрипт решает следующие задачи:
- Автоматически скачивает и устанавливает ядро БД, векторное расширение и Enterprise-модули безопасности (
credcheck,auth_delay). - Динамически вычисляет ресурсы сервера (объем RAM, количество ядер CPU) и на лету генерирует оптимизированный
postgresql.conf. - Настраивает строгую аутентификацию по протоколу SCRAM-SHA-256.
- Создает изолированную базу данных, application-пользователя с криптографически стойким паролем (24 символа) и активирует векторные индексы.
Построение надежных ИИ-агентов и систем RAG (Retrieval-Augmented Generation) требует совершенно иного подхода к базе данных. Стандартный PostgreSQL "из коробки" не готов к тяжелым математическим операциям и массовым запросам на поиск векторного сходства.
Данный скрипт создает эталонный инфраструктурный фундамент. Он идеально подходит для построения защищенных сред при развертывании и дообучении LLM в изолированных (air-gapped) контурах. Скрипт изначально спроектирован так, чтобы база данных выдерживала жесткое нагрузочное тестирование инструментами вроде k6 или JMeter, эффективно утилизируя память без риска падения с OOM (Out of Memory).
При настройке PostgreSQL под векторные вычисления (эмбеддинги) недостаточно просто "накинуть памяти". Векторные индексы HNSW или IVFFlat критически требовательны к RAM во время их создания и обхода.
Настройки в скрипте опираются на рекомендации официальной документации pgvector и фундаментальные статьи по тюнингу БД, в частности — «Optimize PostgreSQL Server Performance Through Configuration» от инженеров Crunchy Data.
Ключевые параметры, которые динамически высчитывает скрипт:
shared_buffers(25% от RAM): Как отмечается в рекомендациях Crunchy Data, Postgres использует архитектуру двойного буферизирования (свой кэш + кэш ОС). Выделение ровно 25% гарантирует, что база данных сможет держать кэшированные эмбеддинги в быстрой памяти, оставляя ОС достаточно места (до 75%) для её собственного кэша, что ускоряет чтение файлов.maintenance_work_mem(Динамический расчет): Этот параметр критически важен для pgvector. Создание HNSW-индексов на массивных датасетах требует колоссального объема памяти. Дефолтные 64MB приведут к тому, что база начнет постоянно сбрасывать временные данные на медленный диск. Скрипт выделяет значительный объем памяти специально под задачи построения индексов иVACUUM.work_mem(Пропорционально RAM): Объем памяти, выделяемый под каждую операцию сортировки или хэширования внутри одного запроса. Оптимизированное значение спасает от медленных сортировок на диске при параллельном поиске (k-NN), не доводя сервер до исчерпания памяти при пиковых нагрузках.- Специфичный тюнинг воркеров (
max_parallel_workers): pgvector способен распараллеливать процесс сборки индексов. Скрипт связывает количество background-воркеров напрямую с числом ядер процессора, чтобы максимизировать утилизацию железа.
# 1. Скопируйте скрипт на целевой сервер (RHEL/CentOS 8)
# 2. Выдайте права на исполнение
chmod +x setup_pg_en.sh
# 3. Запустите скрипт
sudo ./setup_pg_en.sh