- Установка на Astra Linux 1.7¶
- Настройка Apache 2.4¶
- Настройка дистрибутива XSQUARE — PGHS¶
- Настройка Web Resources XSQUARE — PGHS¶
- Настройка сервера приложений XSQUARE — PGHS¶
- Настраиваем параметры соединения с PostgreSQL¶
- Установка и настройка СУБД PostgreSQL (Linux)#
- Необходимое программное обеспечение под ОС Astra Linux / Debian#
- Установка#
- Дополнительная настройка#
- Развертывание новой базы#
- Развертывание поставочного дампа#
Установка на Astra Linux 1.7¶
Если наш продукт единственный Postgres на вашей машине и вы хотите сразу получить готовую к употреблению базу:
sudo apt-get install postgrespro-std-14
Проверка успешной установки БД
systemctl status postgrespro-std-14.service root@srv134:~# systemctl status postgrespro-std-14.service ● postgrespro-std-14.service - Postgres Pro std 14 database server Loaded: loaded (/lib/systemd/system/postgrespro-std-14.service; enabled; vendor preset: enabled) Active: active (running) since Fri 2022-08-19 16:32:16 MSK; 16min ago Process: 1574 ExecStartPre=/opt/pgpro/std-14/bin/check-db-dir $ (code=exited, status=0/SUCCESS) Main PID: 1583 (postgres) Tasks: 8 (limit: 4915) Memory: 69.5M CGroup: /system.slice/postgrespro-std-14.service ├─1583 /opt/pgpro/std-14/bin/postgres -D /var/lib/pgpro/std-14/data ├─1586 postgres: logger ├─1588 postgres: checkpointer ├─1589 postgres: background writer ├─1590 postgres: walwriter ├─1591 postgres: autovacuum launcher ├─1592 postgres: stats collector └─1593 postgres: logical replication launcher
Получаем список установленных БД
sudo su - postgres psql postgres=# \l Список баз данных Имя | Владелец | Кодировка | LC_COLLATE | LC_CTYPE | Права доступа -----------+----------+-----------+-----------------+-------------+----------------------- postgres | postgres | UTF8 | ru_RU.UTF-8@icu | ru_RU.UTF-8 | template0 | postgres | UTF8 | ru_RU.UTF-8@icu | ru_RU.UTF-8 | =c/postgres + | | | | | postgres=CTc/postgres template1 | postgres | UTF8 | ru_RU.UTF-8@icu | ru_RU.UTF-8 | =c/postgres + | | | | | postgres=CTc/postgres
Производим установку из поставки дистрибутива или на основе DEMO — APP
- appdb — бизнес база (имя базы данных на усмотрение администратора)
- xraddb — база метаданных приложения (переименование БД не рекомендуется)
Создаем директорию и помещаем файлы дистрибутива PGHS
mkdir -p /var/lib/pgpro/std-14/dump-imp cd /var/lib/pgpro/std-14/dump-imp postgres@srv134:/var/lib/pgpro/std-14/dump-imp$ ls -latr итого 35884 drwxr-xr-x 2 postgres postgres 4096 авг 19 17:32 . drwxr-xr-x 4 postgres postgres 4096 авг 19 17:25 .. -rw-r--r-- 1 postgres postgres 535928 авг 19 17:31 xraddb.xsquare -rw-r--r-- 1 postgres postgres 36197840 авг 19 17:32 appdb.xsquare
ssh root@srv134 su - postgres postgres@srv134:~$ psql psql (14.4) Введите "help", чтобы получить справку. postgres=# create user xrad_user with encrypted password 'xrad_user'; postgres=# create user app_user with encrypted password 'app_user'; postgres=# ALTER USER xrad_user WITH SUPERUSER; postgres=# ALTER USER app_user WITH SUPERUSER; exit
su - postgres createdb -O app_user appdb createdb -O xrad_user xraddb
su - postgres psql -U xrad_user -h 127.0.0.1 xraddb /var/lib/pgpro/std-14/dump-imp/xraddb.xsquare psql -U app_user -h 127.0.0.1 appdb /var/lib/pgpro/std-14/dump-imp/appdb.xsquare
Настройка Apache 2.4¶
Устанавливаем Apache и модули
sudo su - root apt-get install apache2 systemctl enable apache2 systemctl start apache2 systemctl status apache2 sudo a2enmod proxy sudo a2enmod proxy_http sudo a2enmod proxy_balancer
Добавляем в файл /etc/hosts и прописываем в локальный DNS организации
В /etc/apache2/apache2.conf установить AstraMode off
Создаем файл конфигурации VirtualHost для pghs сервера
ServerAdmin info@xsquare.ru ServerName pghs.xsquare ServerAlias pghs.xsquare DocumentRoot /var/www/pghs.xsquare Alias /files "/var/www/pghs.xsquare.files.local" Options FollowSymLinks AllowOverride None Require all granted ProxyPass /pghs http://127.0.0.1:8888/pghs ProxyPassReverse /pghs http://127.0.0.1:8888/pghs ErrorLog $/error.log CustomLog $/access.log combined
a2ensite pghs.xsquare.conf systemctl restart apache2
Настройка дистрибутива XSQUARE — PGHS¶
Настройка Web Resources XSQUARE — PGHS¶
Копируем файл Web приложения из дистрибутива
scp -r -P 22 pghs.xsquare root@IP_Server:/var/www/
Копируем файлы настройки Web приложения из дистрибутива
scp -r -P 22 pghs.xsquare.files.local root@IP_Server:/var/www/
Настройка сервера приложений XSQUARE — PGHS¶
Копируем дистрибутив сервера приложений
scp -r -P 22 /usr/local/xsquare.pghs root@IP_Server:/usr/local
Настраиваем параметры соединения с PostgreSQL¶
"app": "port": "8888" >, "XRAD": "login": "xrad_user", "password": "xrad_user", "host": "localhost", "port": 5432, "dbName":"xraddb", "minCons": 1, "maxCons": 10, "runtimeOptions": "LC_NUMERIC":"ru_RU.UTF-8" > >, "datasources": [ "name":"DEFAULT", "login": "app_user", "password": "app_user", "host": "127.0.0.1", "port": 5432, "dbName":"app_db", "minCons":1, "maxCons":10, "runtimeOptions": "LC_NUMERIC":"ru_RU.UTF-8" > > ] >
Создаем сервис
[Unit] Description=PGHS Services After=syslog.target network.target After=postgresql.service [Service] Type=simple ExecStart=/usr/local/xsquare.pghs/pghs WorkingDirectory=/usr/local/xsquare.pghs Restart=on-failure RestartSec=3 [Install] WantedBy=default.target
Включаем для сервиса AvtoStart и запускаем и проверяем статус
systemctl enable xsquare.pghs.service systemctl start xsquare.pghs.service systemctl status xsquare.pghs.service
Открываем и проверяем запуск
Установка и настройка СУБД PostgreSQL (Linux)#
Необходимое программное обеспечение под ОС Astra Linux / Debian#
- Сервер PostgreSQL 12 или выше
PostgreSQL или Postgres Pro - postgresql-contrib (обычно устанавливаются вместе с сервером Postgres)
- htop
- Iotop
- sysstat
- pgbadger
- ssh (клиент и сервер SSH)
- mc (Midnight Commander)
- tar
- zip
Не рекоммендуется выполнять сборку сервера самостоятельно из исходного кода т.к. нельзя гарантировать стабильность работы таких сборок в продуктивном контуре.
Установка#
Скачайте требуемый пакет с сайта https://postgrespro.ru/products/download или https://www.postgresql.org/download. Для установки следуйте инструкциям на сайте.
Дополнительная настройка#
- В конфигурационном файле postgresql.conf переопределите умолчательные параметры согласно конфигурации железа.
Пример для сервера с конфигурацией ЦП: 4 ядра; ОЗУ: 8 Гб; Диск: SSD:
Добавить в конец конфигурационного файла
#------------------------------------------------------------------------------ # CUSTOMIZED OPTIONS #------------------------------------------------------------------------------ # Memory Configuration shared_buffers = 2GB effective_cache_size = 6GB work_mem = 41MB maintenance_work_mem = 410MB # Checkpoint Related Configuration min_wal_size = 2GB max_wal_size = 3GB checkpoint_completion_target = 0.9 wal_buffers = -1 # Network Related Configuration listen_addresses = '*' max_connections = 100 # Storage Configuration random_page_cost = 1.1 effective_io_concurrency = 200 # Worker Processes Configuration max_worker_processes = 8 max_parallel_workers_per_gather = 2 max_parallel_workers = 2 max_locks_per_transaction = 500
Для подбора параметров можно воспользоваться онлайн-мастером https://www.pgconfig.org
В мастере указать версию постгреса, выбрать профиль DataWare house and BI Applications и указать параметры железа сервера: количество ядер ЦП, размер ОЗУ, тип диска.
# TYPE DATABASE USER ADDRESS METHOD # IPv4 local connections: host all all all md5
Для получения подробной информации по конфигурации Postgres воспользуйтесь документацией на сайте: https://postgrespro.ru/docs
Развертывание новой базы#
Поменяйте пароль пользователю ОС c именем postgres
Подключитесь терминалом к серверу СУБД под пользователем root
Переключитесь на пользователя «postgres»
Подключитесь локально утилитой psql к СУБД Postgres
Поменяйте пароль суперпользователя
alter user postgres password '';
CREATE ROLE WITH LOGIN NOSUPERUSER NOCREATEDB NOCREATEROLE INHERIT NOREPLICATION CONNECTION LIMIT -1 PASSWORD ''; GRANT pg_signal_backend TO ;
Создайте новую БД, в качестве владельца укажите созданного пользователя
CREATE DATABASE "" WITH OWNER = ENCODING = 'UTF8' CONNECTION LIMIT = -1;
Подключитесь к созданной бд
Подключите, необходимые для работы Global, расширения
CREATE EXTENSION if not exists plpgsql; CREATE EXTENSION if not exists fuzzystrmatch; CREATE EXTENSION if not exists pg_trgm; CREATE EXTENSION if not exists pg_stat_statements; CREATE EXTENSION if not exists "uuid-ossp"; CREATE EXTENSION if not exists dict_xsyn; CREATE EXTENSION if not exists ltree;
Теперь БД готова к работе.
Развертывание поставочного дампа#
При получении преднастроенного поставочного дампа нагоните его на созданную БД.
Если БД не пуста и содержит объекты, удалите их
При наличии прав суперпользователя Postgres можно удалить БД
и создать заново, выполнив шаги раздела «Развертывание новой базы»
Если прав суперпользователя Postgres нет, воспользуйтесть скриптом удаления
SET search_path TO public; -- DO $$ DECLARE r RECORD; BEGIN FOR r IN (SELECT p.oid::regprocedure as sFunctionName FROM pg_proc p INNER JOIN pg_namespace ns ON (p.pronamespace = ns.oid) inner join pg_roles a on p.proowner =a.oid WHERE ns.nspname = current_schema and a.rolname =current_user and p.probin is null) LOOP EXECUTE 'DROP FUNCTION IF EXISTS ' || r.sFunctionName || ' CASCADE'; END LOOP; END $$; -- DO $$ DECLARE r RECORD; BEGIN FOR r IN (SELECT tablename FROM pg_tables WHERE schemaname = current_schema()) LOOP EXECUTE 'DROP TABLE IF EXISTS ' || quote_ident(r.tablename) || ' CASCADE'; END LOOP; END $$; -- DO $$ DECLARE r RECORD; BEGIN FOR r IN (SELECT c.relname FROM pg_class c inner join pg_catalog.pg_namespace n on c.relnamespace =n.oid inner join pg_roles a on c.relowner =a.oid WHERE (c.relkind = 'S') and n.nspname =current_schema and a.rolname =current_user) LOOP EXECUTE 'drop sequence IF EXISTS ' || quote_ident(r.relname) || ' CASCADE'; END LOOP; END $$; -- DO $$ DECLARE r RECORD; BEGIN FOR r IN (SELECT c.relname FROM pg_class c inner join pg_catalog.pg_namespace n on c.relnamespace =n.oid inner join pg_roles a on c.relowner =a.oid where c.relkind ='v' and n.nspname =current_schema and a.rolname =current_user) LOOP EXECUTE 'drop view IF EXISTS ' || quote_ident(r.relname) || ' CASCADE'; END LOOP; END $$; -- SELECT lo_unlink(l.oid) FROM pg_largeobject_metadata l inner join pg_roles a on l.lomowner =a.oid WHERE a.rolname =current_user;
Поставочный дамп запакован архиватором tar
Имя файла архива имее следующий вид: _public__.tar Пример: demoDb_public_04.11.2022_170406.tar
Загрузите файл поставочного дампа на сервер Postgres в директорию /usr/dumpstore
mkdir -p /tmp/global/Dump tar -xvf /usr/dumpstore/_public__.tar -C /tmp/global/Dump --strip-components 1
Дамп распакуется в каталог /tmp/global/Dump/_public__
/opt/pgpro/std-12/bin/pg_restore —dbname=postgresql://:@localhost:5432/ -O -x -v —no-tablespaces —jobs=4 /tmp/global/Dump/_public__
/opt/pgpro/std-12/bin/pg_restore — путь до утилиты распаковки дампа (postgres pro 12)
jobs=4 — количество потоков, указывать по количеству ядер