PostgreSQL — это объектно-реляционная СУБД, которая обладает широкой функциональностью и высокой производительностью. Открытый исходный код и бесплатный доступ делает ее подходящим решением для работы с 1С.
Перед установкой советуем ознакомиться с системными требованиями к конфигурации сервера.
Если не хотите настраивать серверы самостоятельно, воспользуйтесь готовыми серверами Selectel для 1C. Мы возьмем на себя настройку, оптимизацию производительности, резервное копирование и обслуживание инфраструктуры, чтобы вы могли полностью сосредоточиться на бизнес-задачах.
Установка на Windows
Рассмотрим клиент-серверный вариант работы 1С на Windows. Для этого установим серверы с платформой:
- Windows Server 2022 с 1С:Предприятием 8.3,
- Windows Server 2022 с СУБД PostgreSQL.
Подготовка сервера для 1С
После установки Windows Server настроим ОС, чтобы обеспечить корректную работу с дополнительным ПО.
Включаем сетевое обнаружение
Если вы устанавливаете 1С и PostgreSQL на разные серверы, то необходимо включить сетевое обнаружение. Для этого переходим в Параметры → Сеть и Интернет → Ethernet → Изменение расширенных параметров общего доступа и нажимаем Включить сетевое обнаружение, затем активируем флаг Включить автоматическую настройку на сетевых устройствах.
Открываем порты
Для подключения пользователей с других устройств используются порты 1540, 1541 и 1560-1591. Чтобы их открыть, переходим в Брандмауэр Защитника Windows → Дополнительные параметры → Правила для входящих подключений и нажимаем Создать правило. Добавляем туда параметры.
- Тип правила: для порта.
- Протоколы и порты: протокол TCP / порт 1540.
- Действия: разрешить подключения.
- Профиль: доменный, частный и публичный.
- Имя: любое.
Аналогично создаем правила брандмауэра для оставшихся портов.
Установка сервера 1С
На этом шаге необходимо учесть несколько важных моментов, о которых расскажем ниже. В остальном процесс инсталляции ничем не отличается от установки обычного приложения на ОС Windows.
При установке сервера 1С всплывает окно с перечнем компонентов, они могут отличаться в зависимости от дистрибутива. В нашем примере выберем обязательные и необязательные компоненты.
Обязательные компоненты 1С:
- 1С:Предприятие 8;
- сервер 1С:Предприятие 8;
- администрирование сервера 1С:Предприятия.
Необязательные компоненты 1С:
- 1С:Предприятие — тонкий клиент;
- 1С:Предприятие — тонкий клиент, файловый вариант;
- модули расширенного веб-сервиса.
Устанавливаем флаг в поле Установить сервер 1С:Предприятия 8 как сервис Windows, выбираем Создать пользователя USR1CV8 и указываем новый пароль.
При возникновении предупреждения «Ошибка при запуске службы “Агент сервера 1С:Предприятие”…» вручную запускаем указанную службу из консоли управления службами и нажимаем Пропустить в окне ошибки.
После установки переходим в директорию ../1cv8/version_1C/bin, где version_1C — версия устанавливаемого дистрибутива 1С. Запускаем файл RegMSC.bat, чтобы зарегистрировать утилиту администрирования серверов.
Подготовка сервера для PostgreSQL
Отключаем IPv6
Советуем отключить работу протокола IPv6, чтобы избежать возможных ошибок. Если, конечно, вы не используете его в своей инфраструктуре.
В Windows Server 2022 переходим в Параметры → Сеть и Интернет → Ethernet → Настройка параметров адаптера → Сеть → Свойства и снимаем флаг с параметра IP версии 6 (TCP/IPv6).
Включаем сетевое обнаружение
При установке 1С и PostgreSQL на разные серверы включаем сетевое обнаружение так же, как на первом сервере. Для этого переходим в Параметры → Сеть и Интернет → Ethernet → Изменение расширенных параметров общего доступа, нажимаем Включить сетевое обнаружение и активируем флаг Включить автоматическую настройку на сетевых устройствах.
Включаем службу «Вторичный вход в систему»
Служба помогает запускать программы от имени другого пользователя. Переходим в Службы, находим Вторичный вход в систему и нажимаем Запустить.
Установка и настройка PostgreSQL
Устанавливаем PostgreSQL
Скачиваем и запускаем дистрибутив PostgreSQL для 1C. Установка производится так же, как и обычная программа на ОС Windows, поэтому опишем лишь основные моменты.
- На этапе Компоненты устанавливаемой программы выбираем все доступные параметры.
- В параметрах сервера меняем Локаль на ru-RU, задаем имя суперпользователя и его пароль.
Локаль — это набор данных, указывающий на формат даты и времени, отображение валют, используемый язык и другие региональные данные. Суперпользователь — это имя пользователя внутри СУБД, а не сервиса. Из соображений безопасности пароль не должен быть таким же, как у сервиса PostgreSQL.
- Далее выбираем Провести оптимизацию параметров. Программа автоматически рассчитает объем ресурсов, который будет выделяться для работы сервера PostgreSQL.
Устанавливаем pgAdmin 4
Для удобной работы с базой данных можно установить графическую консоль pgAdmin 4.
Чтобы изменить язык интерфейса на русский, переходим в настройки, нажав на верхней панели File → Preferences. В разделе Miscellaneous → User language выбираем Russian в раскрывающемся меню.
Подключаем обслуживание базы данных
PostgreSQL содержит две утилиты для создания резервных копий данных — pg_dump
и pg-dumpall
.
- Команда
pg_dump
сохраняет набор SQL-команд в файл, который создает полную копию скопированной базы. - Команда
pg_dumpall
сохраняет резервную копию всех БД и данных уровня кластера — например, роли, определения табличных пространств и другие.
Использовать эти утилиты можно в планировщике событий и pgAdmin 4. Первый вариант позволяет автоматизировать процесс создания резервных копий БД. Второй вариант не поддерживает встроенный планировщик событий, поэтому резервные копии каждый раз нужно создавать вручную.
В PostgreSQL есть четыре операции, которые помогают управлять и оптимизировать обслуживание базы данных.
- VACUUM — для освобождения пространства от удаленных записей. После удаления строк из таблицы место не освобождается немедленно. Вместо этого оно помечается как доступное для повторного использования, но не возвращается в пользование ОС. Команда VACUUM чистит это пространство, делая его доступным.
- ANALYZE — для сбора статистики о данных в таблице. Полученная информация помогает оптимизатору принимать более эффективные решения при выполнении запросов.
- REINDEX — для перестроения индексов в базе данных, которые ускоряют поиск и сортировку данных. Периодическое выполнение предотвращает потерю производительности идексов при их использовании.
- CLUSTER — для физической пересортировки данных в таблице на основе индекса. Он улучшает производительность запросов, которые часто используют определенные индексы.
Создание информационной базы 1С на PostgreSQL
Чтобы создать базу данных в PostgreSQL, переходим в оснастку Администрирование серверов 1С:Предприятия. На левой панели находим Информационные базы и создаем новую базу с необходимыми параметрами.
- Имя — имя информационной базы на сервере 1С.
- Сервер баз данных — имя или IP-адрес SQL-сервера, где будет располагаться база данных.
- Тип СУБД — в нашем случае, PostgreSQL.
- База данных — имя базы данных, создаваемой на SQL-сервере.
- Пользователь и пароль БД — имя и пароль пользователя, задаваемые при установке PostgreSQL (имя по умолчанию — postgres).
- Создавать базу данных в случае ее отсутствия — создание БД на сервере PostgreSQL, если до этого такой базы не существовало.
С помощью pgAdmin 4 можно проверить, что база данных находится на сервере PostgreSQL.
Терминальный сервер
Терминальный сервер 1С — это сервер, который предоставляет удаленный доступ к 1С:Предприятию. Ему не нужны мощные клиентские устройства — вся работа будет выполняться на сервере.
Для подключения терминального сервера 1С в Windows Server, выполним несколько шагов.
- В Диспетчере серверов нажимаем Добавить роли и компоненты.
- Выбираем тип установки сервера: Установка ролей и компонентов.
- В качестве роли указываем Службу удаленных рабочих столов.
- На вкладке Службы ролей выбираем Лицензирование удаленных рабочих столов и Узел сеанса удаленных рабочих столов.
- Настраиваем пользовательский доступ к серверу в разделе диспетчера серверов Средства → Управление компьютером → Локальные пользователи → Пользователи.
- Всех созданных пользователей добавляем в группу Пользователи удаленного рабочего стола.
- В разделе диспетчера серверов Средства → Локальная политика безопасности → Локальные политики → Назначение прав пользователя → Разрешить вход в систему через службу удаленных рабочих столов добавляем пользователей или их группы.
Теперь пользователи могут подключаться к терминальному серверу и удаленно работать с программой 1С:Предприятие.
Установка на Linux
Рассмотрим клиент-серверный вариант работы 1С на Linux. Для этого подготовим сервер для установки 1С:Предприятие 8.3 и СУБД PostgreSQL с ОС Debian 12. С подробной инструкцией по установке и настройке ОС Debian можно ознакомиться здесь.
Подготовка сервера
Подключаем репозиторий
Перед началом установки 1С и ее компонентов подключаем репозиторий, в котором лежат необходимые файлы. В файл /etc/apt/sources.list добавляем следующую строку:
deb http://ftp.ru.debian.org/debian sid main contrib non-free
После изменения файла sources.list обновляем информацию о состоянии пакетов командой:
# sudo apt-get update
Устанавливаем дополнительные пакеты
Перед установкой 1С устанавливаем дополнительные пакеты:
# apt-get install imagemagick unixodbc ttf-mscorefonts-installer
- imagemagick — набор программ для чтения и редактирования графических файлов;
- unixodbc — диспетчер драйверов для ODBC;
- ttf-mscorefonts-installer — набор шрифтов Microsoft.
Устанавливаем локаль
Для корректной установки сервера 1С на Linux следует использовать российскую локаль. Чтобы проверить актуальную локаль в системе, воспользуемся командой:
# locale
Если ваша ОС использует не ru_RU.UTF-8, ее необходимо сгенерировать и выставить как локаль по умолчанию.
Список локалей, доступных для установки, перечислен в файле /etc/locale.gen. В нем необходимо раскомментировать строку ru_RU.UTF-8. После этого для генерации русской локали вводим в терминале команду:
# sudo locale-gen ru_RU.UTF-8
Устанавливаем русскую локаль как Локаль по умолчанию:
# sudo update-locale LANG=ru_RU.UTF-8
Перезагружаем сервер для применения изменений.
Подготавливаем дистрибутив
Для установки сервера 1С:Предприятие на Debian подготовим установочный файл. Он находится в скачанном архиве с deb-пакетами и имеет расширение .tar.gz.
Если файл находится на каком-либо устройстве под управлением Windows, для переноса архива на сервер Debian можно использовать утилиту SCP.
В командной строке Windows вводим команду:
> scp file_path root@ip_address_debian:/destination_path
- file_path – путь к файлу в ОС Windows;
- ip_address_debian – IP-адрес сервера, на который будет передан файл;
- destination_path – путь к директории, в которую будет скопирован файл в ОС Debian.
Установка сервера 1С на Linux
Приступим к установке непосредственно 1С. Переходим в директорию со скопированным архивом и распаковываем его командой:
# tar -zxvf deb64_version_1C.tar.gz
version_1C — это версия 1С, устанавливаемая на ваш сервер.
Далее устанавливаем все пакеты, которые находились в данном архиве. Для этого вводим команду:
# dpkg -i 1c*.deb
После успешной инсталляции сервера 1С устанавливаем его автозагрузку, а также запускаем сам сервер 1С:
# systemctl enable srv1cv83
# systemctl start srv1cv83
Если во время запуска 1С возникает ошибка «srv1cv83.service not found», создаем символьную ссылку в директории /etc/init.d на файл srv1cv83:
# ln -s /opt/1cv8/x86_64/version_1C/srv1cv83 /etc/init.d/srv1cv83
Обычно файл srv1cv83 находится в /opt/1cv8/x86_64/version_1C. Если вы не обнаружили его в указанной директории, можно воспользоваться командой find /opt -name srv1cv83 для поиска.
В новых версиях 1С используются файлы для systemd, их названия заканчиваются на @.service, например:
/opt/1cv8/x86_64/version_1C/srv1cv8-8.3@.service
После этого вводим повторную команду автозагрузки и запуска 1С. Чтобы проверить статус команды, введите # systemctl status srv1cv83. В поле Active должен быть указан статус Active (running). Также с помощью # netstat -tulnp | grep «rphost\|ragent\|rmngr» можно проверить, запущены ли все необходимые службы.
Установка PostgreSQL
Мы будем использовать сборку от компании PostgreSQL Pro. На момент написания статьи актуальная версия PostgreSQL — 16.0, но во время установки можно выбрать любую.
Вводим следующие команды в терминал Debian для загрузки репозитория PostgreSQL:
# wget https://repo.postgrespro.ru/1c-16/keys/pgpro-repo-add.sh
# sh pgpro-repo-add.sh
Устанавливаем базу данных:
# apt-get install postgrespro-1c-16
После установки выполняем команду для добавления PostgreSQL в автозагрузку:
# systemctl enable postgrespro-1c-16
Проверить корректность установки можно с помощью команды # systemctl status postgrespro-1c-16
. В поле Active должен быть указан статус Active (running).
Настройка PostgreSQL для работы с 1С
Пароль пользователя postgres
После установки PostgreSQL создадим пароль для внутреннего пользователя СУБД — postgres. Для этого подключаемся к PostgreSQL:
# sudo -u postgres psql
Задаем пользователю postgres пароль:
# ALTER USER postgres WITH PASSWORD 'postgres';
Используйте более сложный пароль, «postgres» указан в качестве примера.
Прослушивание адресов
Если сервер 1С установлен на том же хосте, что и PostgreSQL (как в нашем случае), то для СУБД следует установить прослушивание только локального порта localhost.
Для этого переходим к редактированию файла /var/lib/pgpro/1c-16/data/postgresql.conf, находим строку listen_addresses = ‘localhost’ и раскомментируем ее.
Если к серверу 1С будут подключаться пользователи с других устройств, параметру listen_address следует присвоить значение * (прослушивание всех адресов) или указать конкретные IP-адреса через пробел .
В данном случае также необходимо открыть порт 5432 для TCP-подключения, а в файле pg_hba.conf настроить аутентификацию клиентов. Подробнее об этом можно почитать в документации.
После внесенных изменений перезапускаем PostgreSQL:
# systemctl restart postgrespro-1c-16
Создание базы 1С
Для создания базы 1С дополнительно требуется устройство с ОС Windows. Во время установки клиента выбираем компонент Администрирование сервера 1С:Предприятие.
После установки переходим в директорию ../1cv8/version_1C/bin и запускаем файл RegMSC.bat. Так мы зарегистрируем утилиту администрирования серверов.
Чтобы создать базу данных в PostgreSQL, переходим в оснастку Администрирование серверов 1С:Предприятия. В левой панели находим Информационные базы и создаем новую с необходимыми параметрами.
- Имя — имя информационной базы на сервере 1С.
- Сервер баз данных — имя или IP-адрес SQL-сервера, где будет располагаться база данных.
- Тип СУБД — в нашем случае, PostgreSQL.
- База данных — имя базы данных, создаваемой на SQL-сервере.
- Пользователь и пароль БД — имя и пароль пользователя, задаваемые при установке PostgreSQL (имя по умолчанию — postgres).
- Создавать базу данных в случае ее отсутствия — создание базы данных на сервере PostgreSQL, если ранее такой базы не существовало.
Если при создании базы данных получено предупреждение «Ошибка соединения с рабочим процессом», то на сервере, где установлена PostgreSQL, необходимо разрешить TCP-подключение по портам 1540, 1541 и 1560. Если же возникла ошибка «Этот хост неизвестен», то необходимо проверить в настройках DNS или в файле hosts, записано ли в нем имя сервера и IP-адрес.
После создания информационной базы ее можно добавить в клиентское приложение 1С. Для этого нужно указать имя базы и ее расположение на сервере 1С:Предприятия.
Настройка резервного копирования
Резервное копирование баз данных в системе 1С обеспечивает надежность и безопасность информации. Позволяет быстро восстановить работу системы в случае возникновения нештатных ситуаций.
В PostgreSQL есть встроенные утилиты для работы с резервными копиями. Один из основных инструментов и синтаксис команды представлены ниже:
# pg_dump <параметры> <имя базы> > <файл для сохранения копии>
Настройку резервного копирования с использованием различных утилит PostgreSQL подробно описали в предыдущей статье.
Установка HASP Licence Manager
HASP License Manager — это ПО для управления лицензиями на программные продукты, которые используют аппаратные ключи защиты. Он поддерживает централизованный контроль за лицензиями и их распределением в сетевых средах.
Убедимся, что сервер поддерживает установленный аппаратный ключ:
# lsusb
В выводе этой команды появляется запись об Aladdin Knowledge Systems HASP. Если все корректно определяется, то можно начинать установку HASP LM.
Открываем терминал на сервере и загружаем необходимый пакет из репозитория:
# wget http://download.etersoft.ru/pub/Etersoft/HASP/stable/Debian/11/haspd_8.43-eter2debian_i386.deb
Обновляем информацию и инсталлируем необходимые зависимости. Затем устанавливаем пакеты HASP:
# apt updat
# apt install make libc6-i386
# dpkg -i hasp*.deb
Если в 64-битной версии Debian (amd64) при попытке введения команды dpkg -i hasp*.deb вы получаете ошибку:
dpkg: ошибка при обработке архива haspd_8.43-eter2debian_i386.deb (--install): архитектура пакета (i386) не соответствует архитектуре системы (amd64)
Следует запустить ту же команду с параметром --force-architecture
:
# dpkg --force-architecture -i hasp*.deb
После установки запускаем службу, добавляем ее в автозагрузку командами и проверяем статус:
# systemctl start haspd
# systemctl enable haspd
# systemctl status haspd
Для контроля выданных лицензий можно использовать утилиту Aladdin Monitor.
Миграция базы из старой 1С
Чтобы мигрировать базу 1С в новую, нужно открыть ее в конфигураторе на старом клиенте и нажать Администрирование → Выгрузить информационную базу. Далее указываем путь для сохранения файла и выгружаем текущую базу.
Чтобы загрузить базу на новый сервер 1С, открываем конфигуратор информационной базы, нажимаем Администрирование → Загрузить информационную базу и выбираем файл базы, выгруженный из старой 1С.
Веб-публикация 1С с помощью Apache
Сервер 1С поддерживает веб-публикацию баз, чтобы пользователи могли подключать к ним напрямую из браузера. Подключим функцию с помощью веб-сервера Apache.
Для начала установим сам веб-сервер. В терминале Debian вводим:
# apt-get install apache2
Как и ранее, включаем службу в автозагрузку и запускаем ее:
# systemctl enable apache2
# systemctl start apache2
Если на вашем сервере активирован брандмауэр, следует добавить в него правило:
# iptables -I INPUT -p tcp --dport 80 -j ACCEPT
# netfilter-persistent save
Если в поисковой строке браузера ввести http://ip_address, где ip_address — это адрес сервера 1С, отобразится страница Apache.
Чтобы опубликовать базу, необходимо запустить на выполнение скрипт webinst, который добавляется автоматически при установке Apache. Для проверки будем публиковать тестовую базу в директорию /var/www/html.
Создаем каталог, в который будем публиковать базу. Переходим в папку с установленной платформой 1С и запускаем скрипт:
# mkdir /var/www/html/test
# cd /opt/1cv8/x86_64/version_1C/
# ./webinst -apache24 -wsdir test -dir /var/www/html/test -connstr "Srvr=ip_address;Ref=test;" -confPath /etc/apache2/apache2.conf
- apache24 — версия установленного Apache;
- /var/www/html/test — путь до каталога на сервере, в котором будет опубликована база;
- ip_address — адрес сервера 1С;
- Ref=test — имя базы в СУБД;
- /etc/apache2/apache2.conf — путь до конфигурационного файла Apache.
Если в поисковой строке браузера ввести http://ip_address/test, где ip_address — это адрес сервера 1С, а test — название базы, отобразится страница с указанной базой 1С.
Обслуживание БД 1С на сервере с PostgreSQL
Обслуживание баз данных 1С с использованием PostgreSQL включает в себя различные задачи, в том числе чистку баз и перестройку индексов.
Чистка базы данных (VACUUM)
VACUUM в PostgreSQL управляет пространством и оптимизирует производительность базы данных. Опишем его основные задачи.
- Удаление из памяти устаревших версий кортежей. PostgreSQL использует механизм многоверсионности для поддержки одновременного доступа к данным. VACUUM удаляет версии кортежей, которые больше не нужны для поддержки транзакций.
- Освобождение пространства после удаления данных. После выполнения операции DELETE или UPDATE место, ранее занятое данными, остается выделенным для 1С. VACUUM освобождает это место.
- Обновление статистики. VACUUM также обновляет статистику, которая используется оптимизатором запросов для выбора оптимальных планов выполнения.
Перестройка индексов (REINDEX)
REINDEX в PostgreSQL используется для перестройки индексов. Он полезен, если индекс становится поврежденным или если вы хотите оптимизировать его производительность.
Выполнение этих задач может занять время. При этом доступ к базе данных будет органичен или замедлен. Рекомендация: следует выполнять эти операции в периоды низкой активности базы данных.
Настройка обновления для сервера 1С
Чтобы установить обновление, скачиваем новый дистрибутив. При этом прекращаем работу предыдущего сервиса 1С:
# systemctl stop srv1cv83
Создаем каталог в удобном для нас месте, чтобы распаковать скачанный архив:
# mkdir update_for_1c
# tar -zxf deb64_version_1C.tar.gz -C …/update_for_1c/
Устанавливаем новую версию пакетов:
# dpkg -i …/update_for_1c/1c_version_1C.deb
Удаляем старую символьную ссылку. Для этого находим все файлы srv1cv83:
# find /opt -name srv1cv8*
# rm -f /etc/init.d/srv1cv83
После — создаем новую. Она будет вести на обновленную версию файла:
# ln -s /opt/1cv8/x86_64/8.3.version_1C/srv1cv83 /etc/init.d/srv1cv83
Перезапускаем Daemon и запускаем сервис 1С:
# systemctl daemon-reload
# systemctl start srv1cv83
Заключение
В инструкции подробно рассмотрели процесс установки 1С на серверы с операционными системами Windows и Linux. Важно помнить, что корректная установка и настройка обеспечивают стабильную работу инфраструктуры. При выполнении всех представленных шагов вы создадите основу для успешной эксплуатации и управления данными в вашей информационной системе.
Уровень сложностиСредний
Время на прочтение22 мин
Количество просмотров12K
-
Будь проще и люди к тебе потянуться. СУБД с человеческим лицом?
-
Почему не все дистрибутивы Postgres одинаково полезны для 1С
-
Подготовка для Windows. Установка locale
-
Установка VCRUNTIME
-
Отключение борьбы за экономию.
-
Собственно инсталляция.
-
Инициализация кластера — лучше через initdb
-
Настраиваем доступность по сети и первый старт.
-
Настройка кластера Postgres под 1С.
-
Настройки Postgres.conf для профиля OLTP нагрузки
-
Параметры связанные сеансами и соединениями.
-
shared_buffers = 12 020MB
-
max_files_per_process = 10 000
-
max_parallel_workers_per_gather = 0
-
temp_tablespaces = 'ssd_temp'
-
Параметры журнала предзаписи (WAL)
-
Параметры планировщика
-
Параметры автовакуума и сбора статистики.
-
Использование символа \ для экранирования.
-
Параметры для мониторинга
-
-
Скрипт установки более агрессивных настроек
И это все?
Будь проще и люди к тебе потянуться. СУБД с человеческим лицом?
Большинство любят смотреть картинки, а не читать книги, а тем более руководства. Здесь нет ничего плохого, если картинка быстро и сразу доносит необходимую информацию. Однако развертывание Postgres, напоминает нам о прошлом, о котором я читал только в книгах. Прошлое когда ИТ инфраструктура была настолько дорогая, квалифицированных специалистов было больше чем машин. Все крутились вокруг очередной суперЭВМ или стояли в очереди на сеанс машинного времени.
Microsoft SQL Server уже показал хороший пример системного ПО для человека, хотя его внутреннюю архитектуру трудно ставить в пример как Oracle. Машин стало больше чем квалифицированных специалистов и как бы пора меняться.
Действия по данной инструкции — могла бы сделать программа инсталляции запросив лишь профиль нагрузки (например OLTP ), а дальше уже по параметрам оборудования
-
Провести настройку окружения.
-
Показать лог установки
При таком подходе руководства могли бы пригодится только для творческого тюнинга, планов развертывания, но не рутинной работы.
Дистрибутивы от release.1c.ru и 1c.postgrespro.ru такого не делают, только в PostgresPro выставили некоторые рекомендуемые параметры 1С. Как результат, мы не увидим лучшие практики и каждый пойдет настраивать Postgres в меру своего понимания, поскольку документация Postgres написана для всех случаев, а не для OLTP приложений
Ситуация вряд ли будет быстро меняться, поскольку санкции это хороший стимул жрать кактус, тем более в ИТ за сложность и платят.
Замечу, что Postgres ставят не только администраторы, но и программисты для создания локальных баз разработки, создания внешних схем данных и так далее.
Здесь все изложено для жесткого OLTP, которое создает платформа 1С, независимо от талантов программиста 1С. Те кто не верит, что 1С может быть жестким OLTP почитайте простой тест тут Концепция ORM как двигатель прогресса – выявит слабое место Вашей СУБД . В этом тесте только запись, без конкурентных блокировок. А когда идет запись в регистр с итогами все еще веселее.
Изложение идет на примере Windows , но установка параметров справедлива и для Unix. В данной части внимание уделено базовой настройке, позволяющей переварить нагрузку при параллельной записи данных и дать 1С возможность приемлемо работать на Postgres. Остальные вопросы как блокировки, большие запросы на чтение, тюнинг индексов, безопасность имеет смысл обсуждать, когда оптимизирован самый ресурсоемкий процесс в OLTP
Почему не все дистрибутивы Postgres одинаково полезны для 1С
Допускаю, что на просторах интернета есть сборка и дистрибутив Postgres, который большую часть работы по установке сделает за Вас, но в 1С мы ограничены двумя бесплатными дистрибутивами и вот почему.
Поиск по слову 1С:Предприятие в документации PostgresPro выдаст следующие ссылки
Postgres Pro Standard: Документация: 16: F.30. mchar — дополнительные типы данных для совместимости с Microsoft SQL Server: Компания Postgres Professional
«Этот модуль был разработан для улучшения поддержки системы 1С:Предприятие, самой популярной в России CRM и ERP‑платформы.
Он содержит реализацию типов MCHAR и MVARCHAR, которые с точностью до ошибок совместимы с типами MS SQL CHAR и VARCHAR, соответственно.»
Postgres Pro Standard: Документация: 16: F.20. fulleq — дополнительный оператор равенства для совместимости с Microsoft SQL Server: Компания Postgres Professional
«Модуль fulleq предоставляет дополнительный оператор равенства для совместимости с Microsoft SQL Server.
Этот модуль требуется для поддержки системы 1С:Предприятие.»
Postgres Pro Standard: Документация: 16: 13.3. Явные блокировки: Компания Postgres Professional
«Кроме того, для поддержки системы 1С:Предприятие реализованы ещё два режима блокировок. Эти режимы не конфликтуют ни с какими режимами, описанными выше. Их можно использовать, но лучше вместо них применять рекомендательные блокировки, которые предоставляют ту же функциональность.»
И наконец самое известное:
Postgres Pro Standard: Документация: 16: F.18. fasttrun — транзакционно‑небезопасная функция для усечения временных таблиц: Компания Postgres Professional
«Модуль fasttrun предоставляет транзакционно‑небезопасную функцию для усечения временных таблиц, предотвращающую разрастание каталога pg_class.
Этот модуль требуется для поддержки системы 1С:Предприятие.
Операция быстрого усечения не является транзакционной, так что её действие нельзя отменить и оно немедленно становится видимым во всех сеансах независимо от уровня изоляции.»
Это только только то, что изложено в документации Postgres pro. При запросах на поддержку — 1С поддерживает только дистрибутив Postgres собственной сборки (а это не тоже самое, что 1c.postgrespro.ru)
Как следствие при всем богатстве выбора другие альтернативы потребуют от Вас глубокое погружение в Postgres.
Подготовка для Windows. Установка locale
Формально установка Postgres состоит из установки исполняемых файлов и создания кластера Postgres. При создании кластера (initdb) можно установить необходимые locale вручную если прочитать большое руководство PostgreSQL: Документация: 15: 24.3. Поддержка кодировок: Компания Postgres Professional, и точно знать что Вы хотите. Но есть более простой путь.
Для аккаунта под которым ведется установка Postgres.
1) Установите РФ или Ваш регион в Region, Region format
2) И на всякий случай Russia в non-Unicode programs.
Такие же установки нужно сделать под аккаунтом с которым будет работать сервис Postgres.
Initdb в этом случае сможет выбрать правильную комбинацию для locale.
Установка VCRUNTIME
По каким то причинам дистрибутив 1С не проверяет установку VCRUNTIME, как следствие, приходится его устанавливать вручную, иначе при старте будет ошибка:
Установить можно отсюда Download Visual Studio Tools – Install Free for Windows, Mac, Linux (microsoft.com).
Отключение борьбы за экономию
Борьба за экономию электричества настолько слишком глубоко засела в серверах и на уровне операционной системы, и на уровне виртуализации и на уровне Bios. Все это нужно отключить иначе у Вас будет периодически просаживаться производительность. Как это случается можно почитать тут: 1C MSSQL Против Матрицы виртуализации — Перезагрузка.
Собственно инсталляция
При инсталляции рекомендую указать только каталоги, а галочку «Установить как сервис» снять. Включение ее приведет к инициализации кластера и заодно сервиса с минимальными параметрами. На моей среде она корректно не работала, а сделать тоже из командной строки несложно и гораздо наглядней:
Без флага «Установить как сервис» установка фактически произведет разворачивание файлов в каталог Postgres. Вообще инструкция у 1С еще проще Глава 3. Установка компонентов системы:: Клиент‑серверный вариант. Руководство администратора:: 1С:Предприятие 8.3.23. Документация (1c.ru).
Инициализация кластера – лучше через initdb
Кластер баз данных представляет собой набор баз, управляемых одним экземпляром работающего сервера. Очень похож на Instance MS SQL Server.
Инициализация кластера идет через initdb.exe
Подробное описание параметров команды можно прочитать тут PostgreSQL: Документация: 15: initdb: Компания Postgres Professional.
На этом этапе мы укажем каталоги для системных баз данных и для <транзакционных логов> журнала предзаписи, именно на этом этапе удобней всего разнести их по разным дискам и именно на этом этапе можно понять какие проблемы есть при создании кластера:
D:\PostgresSQL\15_3\bin>initdb.exe —auth=md5 —encoding=UTF8 —username=»postgres» —pgdata=»D:\PostgresSQL\15_3\data» —waldir=»D:\PostgresSQL\15_3\wal» —pwprompt
The files belonging to this database system will be owned by user «my1cuser».
This user must also own the server process.
The database cluster will be initialized with locale «Russian_Russia.1251».
The default text search configuration will be set to «russian».
Data page checksums are disabled.
Enter new superuser password:
fixing permissions on existing directory D:/PostgresSQL/15_3/data … ok
fixing permissions on existing directory D:/PostgresSQL/15_3/wal … ok
creating subdirectories … ok
selecting dynamic shared memory implementation … windows
selecting default max_connections … 100
selecting default shared_buffers … 128MB
selecting default time zone … America/Los_Angeles
creating configuration files … ok
running bootstrap script … ok
performing post-bootstrap initialization … ok
syncing data to disk … ok
Success. You can now start the database server using:
На этом этапе можно часто столкнутся с проблемами настройки прав (а unix там особенно нужно быть внимательным к owner каталогов). Чтобы работать без проблем, рекомендую устанавливать Postgres под тем аккаунтом — под которым он будет.
Сделать аккаунт, под которым работает Postgres как owner и не забыть про наследование [Solved] «Failed to Enumerate Objects in the Container» Windows 10 /11 Error (thegeekpage.com).
Настраиваем доступность по сети и первый старт
Отключаем временно Windows Firewall , чтобы проще искать проблемы.
Для разрешения всех коннектов прописать в pg_hba.conf следующее:
host all all 0.0.0.0/0 md5
а в postgres.conf нужно раскомментировать:
listen_addresses = '*'
В данном случае нам нужно просто проверить работоспособность кластера, а не закрутить побольше гаек в безопасности.
Сначала проверяем запуск
pg_ctl -D "D:\PostgresSQL\15_3\data" -l "D:\PostgresSQL\15_3\trace\logfile.txt" start
Если в D:\PostgresSQL\15_3\trace\logfile.txt нет ошибок, можно Вас поздравить.
Пути и каталоги нужно указывать те, которые на сервере.
Даже если старт успешен сразу — нужно проверить что
netstat -aon | find "LISTENING" | find ":5432"
Показывает:
TCP 0.0.0.0:5432 0.0.0.0:0 LISTENING 14712
TCP [::]:5432 [::]:0 LISTENING 14712
На windows ipv6 сейчас приоритетный протокол, и это может влиять на коннект по ipv4. Я предпочитаю использовать ipv4, если нет необходимости использовать ipv6.
Если все стартует хорошо можно зарегистрировать 1С как сервис, для удобной перезагрузки сервера.
pg_ctl register -D "D:\PostgresSQL\15_3\data" -l "D:\PostgresSQL\15_3\trace\logfile.txt" -N PostgresSQLMain
Не забудьте в сервисе поставить LogOn под доменным пользователем (можно через параметры -U -P но почему то пароль не ставился), и Delayed start для надежности.
Далее проверяем как все стартовало
pg_ctl status -D "D:\PostgresSQL\15_3\data"
pg_ctl: server is running (PID: 6088)
d:/Postgres/15_3/bin/postgres.exe "-D" "D:\PostgresSQL\15_3\data"
Настройка кластера Postgres под 1С
Для удобства лучше установить PGAdmin на ПК администратора, чтобы видеть кластер визуально.
При установке с сайта внимательно смотрите на версию Windows — новые версии PgAdmin требуют новых версий Windows Download (pgadmin.org).
Теперь можно выполнить настройки согласно Глава 3. Установка компонентов системы:: Клиент‑серверный вариант. Руководство администратора:: 1С:Предприятие 8.3.23. Документация (1c.ru).
Для нормальной работы 1С нужно создать.
Обязательные tablespace v81c_index, v81c_data .
Tablespace для временных файлов ssd_temp лучше выделять отдельно и на быстрых дисках.
Вообще — учитывая огромное количество файлов, создаваемых Postgres — чем больше вы их разведете по дискам, тем лучше.
CREATE TABLESPACE ssd_temp
OWNER postgres
LOCATION 'D:\PostgresSQL\15_3\data\pg_ssdtemp';
ALTER TABLESPACE ssd_temp
OWNER TO postgres;
CREATE TABLESPACE v81c_data
OWNER postgres
LOCATION 'D:\PostgresSQL\15_3\data\pg_1cdata';
ALTER TABLESPACE v81c_data
OWNER TO postgres;
CREATE TABLESPACE v81c_index
OWNER postgres
LOCATION 'D:\PostgresSQL\15_3\data\pg_1cindex';
ALTER TABLESPACE v81c_index
OWNER TO postgres;
Настройки Postgres.conf для профиля OLTP нагрузки
В postgres.conf параметров, влияющих на поведение Postgres больше, чем переключателей в кабине самолета. Плохая новость — в вышеуказанных дистрибутивах большинство их закомментировано (применяются значения по умолчанию). Самое интересное, что в дистрибутиве 1С НЕ установлены даже те, которые требует поставить (либо не менять) сама 1С, согласно своей же документации.
Настройки PostgreSQL для работы с 1С:Предприятием:: PostgreSQL:: Методическая поддержка для разработчиков и администраторов 1С:Предприятия 8 (1c.ru)
Настройки PostgreSQL для работы с 1С:Предприятием. Часть 2:: PostgreSQL:: Методическая поддержка для разработчиков и администраторов 1С:Предприятия 8 (1c.ru)
В дистрибутиве postgrespro часть этих параметров установлено, что показывает другое отношение к продукту. Здесь я собрал то, что считаю необходимым для OLTP, конечно сколько бы параметров не установил, все равно кажется что список неполный.
Ниже приведены рекомендуемые для OLTP параметры, но прежде чем сделать Copy‑Paste нужно пересчитать их в зависимости (здесь параметры выставлены для баз от 2 до 5 терабайт)
А) Числа коннектов.
Б) Количества IOPS, которая выдает Ваша дисковая подсистема.
В) И размера таблиц (у меня они могут быть до терабайта, поэтому какие то значения могут показаться большими).
Как Postgres работает с коннектами — описано тут Postgres Pro Enterprise: Документация: 15: 53.2. Как устанавливаются соединения: Компания Postgres Professional.
«Postgres Pro реализует простую клиент‑серверную модель по схеме „процесс для пользователя“. В такой схеме один клиентский процесс подключается к одному отдельному серверному процессу. Так как мы не знаем заранее, сколько подключений будет, нам нужен „главный процесс“, который будет запускать новый процесс при каждом запросе подключения».
С точки зрения 1С каждое активное соединение породит дополнительный процесс на Postgres. Если Вы запустите 20 фоновых заданий 1С это породит 20 процессов на Postgres. Не надо соединение 1С с количеством rphost на сервере, ведь один rphost 1С может обслуживать много соединений.
Все это нужно учитывать для расчета потребления памяти на процесс.
Для удобства прилагаю файл postgres.conf.
Подробные описания можно найти тут PostgreSQL: Документация: 15: Глава 20. Настройка сервера: Компания Postgres Professional. Ниже только комментарии.
Параметры связанные сеансами и соединениями
max_connections = 500
Определяет максимальное число одновременных подключений к серверу БД. Помните — любое фоновое задание 1С или открытый сеанс это уже connection.
temp_buffers = 128MB
Задаёт максимальный объём памяти, выделяемой для временных буферов в каждом сеансе. Эти существующие только в рамках сеанса буферы используются исключительно для работы с временными таблицами. Для 1С это маштабируется на количество сеансов и фоновых заданий. 1С интенсивно использует временные таблицы, поэтому значение по умолчанию 8 мегабайт для нее слишком мало. Даже если Вы явно их не используете в 1С , любая запись в регистр их будет использовать пример Compare by Statements.
row_security = off
«В дополнение к стандартной системе прав SQL, управляемой командой GRANT, на уровне таблиц можно определить политики защиты строк, ограничивающие для пользователей наборы строк, которые могут быть возвращены обычными запросами или добавлены, изменены и удалены командами, изменяющими данные. Это называется также защитой на уровне строк (RLS, Row-Level Security».
Поскольку у 1С есть свой механизм RLS , очевидно что она рекомендует не пользоваться аналогом в Postgres.
Ssl = off
В документации 1С считают, что этот параметр может вызвать повышенный расход CPU . Склонность postgres к большему расходу CPU, чем MS SQL это проверенный факт. Но насколько будет влияние данного параметра это интересный повод для теста или сколько стоит безопасность.
work_mem = 128MB # min 64kB
«Задаёт базовый максимальный объём памяти, который будет использоваться во внутренних операциях при обработке запросов (например, для сортировки или хеш-таблиц), прежде чем будут задействованы временные файлы на диске».
Важный параметр, от которого зависит скорость работы и расход памяти в зависимости от активных сеансов.
max_locks_per_transaction = 1000
Значение рекомендовано в документации 1С, значение по умолчанию слишком маленькое 64.
«В общей таблице блокировок может храниться max_locks_per_transaction объектов (например, таблиц) для каждого серверного процесса или подготовленной транзакции, таким образом, в любой момент времени может быть заблокировано не больше этого числа различных объектов. Этот параметр ограничивает среднее число блокировок объектов, используемых каждой транзакцией, отдельные транзакции могут заблокировать и больше объектов, если все они умещаются в таблице блокировок»
shared_buffers = 12020MB
Задаёт объём памяти, который будет использовать сервер баз данных для буферов в разделяемой памяти. Поскольку значение по умолчанию 128 мегабайт, очевидно нужно устанавливать свое.
«Существуют варианты нагрузки, при которых эффективны будут и ещё большие значения shared_buffers, но так как PostgreSQL использует и кеш операционной системы, выделять для shared_buffers более 40% ОЗУ вряд ли будет полезно. При увеличении shared_buffers обычно требуется соответственно увеличить max_wal_size, чтобы растянуть процесс записи большого объёма новых или изменённых данных на более продолжительное время».
max_files_per_process = 10000
В любой типовой конфигурации 1С больше тысячи таблиц, а в Postgres на каждую таблицу будет несколько файлов.
max_parallel_workers_per_gather = 0
Значение 0 отключает параллельное выполнение запросов. Не все запросы хорошо распараллеливаются. В OLTP это только создаст лишнюю нагрузку сервер Postgres, который и так склонен к большему использованию CPU чем MS SQL – проверено тут Postgres как предчувствие. Вычисляем процент импортозамещения в режиме Highload от 1С . Если очень хочется попробовать 1С рекомендует включать параллелизм только в одном случае Настройка параметра Max degree of parallelism при выполнении реструктуризации информационной базы :: MS SQL Server :: Методическая поддержка для разработчиков и администраторов 1С:Предприятия 8 (1c.ru) . Оптимизированный механизм реструктуризации поддерживается в Postgres, поэтому это может помочь.
temp_tablespaces = 'ssd_temp'
Поскольку работа с временными таблицами в Postgres реализована неэффективно – единственный вариант сгладить — вынести функционал на SSD либо RAM диск. По этому поводу есть хорошая статья от конкурентов 1С PostgreSQL и временные таблицы , но помните, что RAM диск должен иметь хорошую реализацию по многопоточности, иначе все повиснет на одном ядре. В этом случае лучше найти быстрый SSD серверного класса, поскольку реализация дисковых подсистем это учитывает.
Параметры журнала предзаписи (WAL)
В документации Postgres периодически попадаются глубокие описания PostgreSQL: Документация: 15: 30.1. Надёжность. Журнал предзаписи: Компания Postgres Professional , которые не встретишь даже у Oracle. Рекомендую почитать первоисточник, для понимания как все работает.
Для OLTP с записью в несколько потоков нужно synchronous_commit = off
это сразу расширит бутылочное горлышко, которым является журнал предзаписи, он же transaction log в MS SQL, он же Redo log в Oracle.
Польза просчитана и доказана тут на примере MS SQL Delayed durability поможет вашему ORM увеличить производительность на 50% и более, если Вы только будете использовать … и 1С крайне рекомендует для Postgres в своей документации. Данный параметр не следует путать с fsync, который выключать опасно для базы. synchronous_commit = off при жестком сбое может привести к потере последних зафиксированных транзакций, но база останется в целостности в отличии от игр с fsync.
commit_delay = 1000
Взят из рекомендаций 1С.
«Параметр commit_delay добавляет паузу перед собственно выполнением сохранения WAL. Эта задержка может увеличить быстродействие при фиксировании множества транзакций, позволяя зафиксировать большее число транзакций за одну операцию сохранения WAL, если система нагружена достаточно сильно и за заданное время успевают зафиксироваться другие транзакции».
Параллельно рекомендуется commit_siblings=5
, но он и так в этом значении по умолчанию
max_wal_size = 4GB
min_wal_size = 2GB
«Пока WAL занимает на диске меньше этого объёма, старые файлы WAL в контрольных точках всегда перерабатываются, а не удаляются. Это позволяет зарезервировать достаточно места для WAL, чтобы справиться с резкими скачками использования WAL, например, при выполнении больших пакетных заданий».
Поэтому значения по умолчанию 1гб и 80мб слишком маленькие для нагруженной OLTP
checkpoint_timeout = 15min
Checkpoint
«это точки в последовательности транзакций, в которых гарантируется, что файлы с данными и индексами были обновлены всей информацией записанной перед контрольной точкой. Во время контрольной точки, все «грязные» страницы данных, находящиеся в памяти, сохраняются на диск, а в файл журнала записывается специальная запись контрольной точки».
Чтобы понять как он связан с фиксацией транзакций и записью WAL, нужно прочитать PostgreSQL : Документация: 15: 30.5. Настройка WAL : Компания Postgres Professional . По умолчанию checkpoint_timeout =5 минут, но он так же срабатывает при приближении к пределу max_wal_size, если это имеет место раньше. Я предпочитаю ориентироваться на max_wal_size , а не на время.
Параметры планировщика
Результат установки параметров этого раздела самый неочевидный, поскольку они больше рекомендательные для планировщика, а что он решит в итоге будет зависеть множества факторов (документация, акуальность статистики, работа autovacuum, ошибки релиза). Кроме того, влияние их можно проверить только на отдельных запросах, операциях. Для оценки их влияния нужна группа синтетических тестов, где видно, что улучшение одних тестов, не приводит к деградации других.
effective_cache_size = 36060MB # 75% of RAM
В разных источниках рекомендуют effective_cache_size либо 50%-75% Ram либо RAM- shared_buffers . Документация большей ясности не добавила, почитайте сами.
from_collapse_limit = 8
join_collapse_limit = 8
Это достаточно важный параметр для 1С . В 1С почти всегда делается либо СрезПоследних для периодических регистров сведений, либо запросы по итогам. Даже если Вы явно не делаете Join при срезе последних, внутри платформы Join происходит . А если кто-то любит делать так Документ.Контрагент.ИНН, чтобы добраться нужных реквизитов, все усугубится. Для понимания лучше прочитать этот раздел PostgreSQL : Документация: 15: 14.3. Управление планировщиком с помощью явных предложений JOIN : Компания Postgres Professional.
random_page_cost = 1.4
random_page_cost забавный параметр, который 1С рекомендует подкрутить random_page_cost = 1.5–2.0 для RAID, 1.1–1.3 для SSD. Причем меня смущает такая точность, когда значение по умолчанию 4.0 и как пишут в документации.
«Таким образом, можно считать, что значение по умолчанию моделирует ситуацию, когда произвольный доступ в 40 раз медленнее последовательного, но 90% операций произвольного чтения удовлетворяются из кеша».
А если часть базы на SSD, а часть на HDD? Вопрос философский.
По такой логике остается только выбрать 1.4 , а влияния других значений в тесте на запись я не заметил.
Есть параметры которые 1С не рекомендует отключать, например, PostgreSQL : Документация: 15: 20.7. Планирование запросов Генетический оптимизатор : Компания Postgres Professional geqo, geqo_threshold.
Параметры автовакуума и сбора статистики
Параметры по умолчанию для автовакуума и статистики сразу влияют на производительность в 1С если Вы подвигаете итоги вперед назад, либо будете использовать текущие итоги. Также он влияет на запись в регистры и чем они больше тем существенней.
Обратите внимание, что запуск автовакуума это комплекс действий, не ограниченный очисткой от «мертвых» кортежей. Хорошее описание тут PostgreSQL: Документация: 15: 25.1. Регламентная очистка: Компания Postgres Professional.
-
Для высвобождения или повторного использования дискового пространства, занятого изменёнными или удалёнными строками.
-
Для обновления статистики по данным, используемой планировщиком запросов PostgreSQL.
-
Для обновления карты видимости, которая ускоряет сканирование только индекса.
-
Для предотвращения потери очень старых данных из-за зацикливания идентификаторов транзакций или мультитранзакций.
Проведенный для 1С тест показывает, что автовакуум нужно настраивать индивидуально для каждой таблицы регистров бухгалтерии и накопления и без использования процентов.
Как эффективно настроить autovacuum в Postgres для 1С
Но в типовых конфигурациях 1С больше тысячи таблиц, и для (справочников, небольших регистров сведений, бизнес процессов и метаданных с небольшой нагрузкой) удобней использовать и общие параметры.
maintenance_work_mem = 128MB # min 1MB
« Задаёт максимальный объём памяти для операций обслуживания БД, в частности VACUUM, CREATE INDEX и ALTER TABLE ADD FOREIGN KEY. »
max_parallel_maintenance_workers = 8
«Задаёт максимальное число рабочих процессов, которые могут запускаться одной служебной командой. В настоящее время параллельные процессы может использовать только CREATE INDEX при построении индекса-B-дерева и VACUUM без указания FULL».
Учитывая, что даже в типовых конфигурациях любят писать данные сразу в несколько регистров, автовакуум тоже нужно распараллеливать. Значение нужно подбирать учитывая количество ядер которые это будут обслуживать.
Устанавливания этот параметр нужно проверить ограничители сверху (по умолчанию max_worker_processes, max_parallel_workers.
autovacuum_max_workers = 8
«Задаёт максимальное число процессов автоочистки (не считая процесс, запускающий автоочистку), которые могут выполняться одновременно».
Для понимания этих параметров нужно почитать статью Как эффективно настроить autovacuum в Postgres для 1С . А устанавливать их обязательно, потому что значения по умолчанию слишком большие даже для маленьких баз.
autovacuum_vacuum_scale_factor = 0.01
«Задаёт процент от размера таблицы, который будет добавляться к autovacuum_vacuum_threshold при выборе порога срабатывания команды VACUUM. Значение по умолчанию — 0.2 (20% от размера таблицы)».
autovacuum_analyze_scale_factor = 0.005
«Задаёт процент от размера таблицы, который будет добавляться к autovacuum_analyze_threshold при выборе порога срабатывания команды ANALYZE. Значение по умолчанию — 0.1 (10% от размера таблицы)».
autovacuum_naptime = 20s # time between autovacuum runs
Задаёт минимальную задержку между двумя запусками автоочистки для отдельной базы данных. При запуске он проверяет, что порог очистки = базовый порог очистки + коэффициент доли для очистки * количество кортежей и при превышении, которого срабатывает автовакуум. Достижение порога очистки само по себе не инициирует процесс чистки.
vacuum_cost_limit = 800 # 100* autovacuum_max_workers
«Во время выполнения команд VACUUM и ANALYZE система ведёт внутренний счётчик, в котором суммирует оцениваемую стоимость различных выполняемых операций ввода/вывода. Когда накопленная стоимость превышает предел (vacuum_cost_limit), процесс, выполняющий эту операцию, засыпает на некоторое время (vacuum_cost_delay). Затем счётчик сбрасывается и процесс продолжается».
Ну и конечно autovacuum = on дожно быть включено (установлен по умолчанию), но чтобы автоочистка работала, нужно также включить track_counts.
Важно! В документации написано что
«Автоочистка не обрабатывает временные таблицы. Поэтому очистку и сбор статистики в них нужно производить с помощью SQL‑команд в обычном сеансе».
Видимо поэтому 1С сейчас постоянно делает analyze при работе с временными таблицами независимо от ее размера и это занимает больше 30% времени при тесте на оборотном регистре сведений. SQL команды можно посмотреть SQL DML при записи в оборотный регистр.
За автообновление статистики отвечает параметр online_analyze.enable, который 1С рекомендует устанавливать в off.
Я лично не проверял, что 1С делает везде (во всех компонентах ORM) analyze для временных таблиц, а не только при записи в регистры, поскольку это требует длительного тестирования. В 1С временные таблицы также широко используются при работе с пакетами запросов, а недавно добавилась возможность добавление записей во временные таблицы через 1С. Поэтому я оставляю эти параметры в On только для временных таблиц Postgres Pro Standard: Документация: 15: F.31. online_analyze: Компания Postgres Professional Если у Вас есть другая подтвержденная информация — делитесь. Параметры ставлю менее агрессивные чем для автовакуума, поскольку в 1С данные во временные таблицы добавляются как результат запроса, а не мелкими порциями.
online_analyze.threshold = 50
online_analyze.scale_factor = 0.1
online_analyze.enable = on
online_analyze.verbose = off
online_analyze.min_interval = 10000
online_analyze.table_type = 'temporary'
online_analyze.local_tracking = on
plantuner.fix_empty_table = on
Использование символа \ для экранирования
В документации 1С просят устанавливать вот такие параметры, подробности в документации Postgres
escape_string_warning = off
standard_conforming_strings = off
#log_timezone = 'Europe/Moscow'
Параметры для мониторинга
В отличии от Microsoft и Oracle в Postgres хороший мониторинг из коробки не идет. Достаточно попробовать получить качественную статистику ожиданий и все станет понятно тут Как в postgres получить качественную статистику ожиданий? — Хабр Q&A (habr.com).
Гораздо лучше обстоят дела в Postgres pro Enterprise ( см pgpro_pwr) . Но и там сбор данных для мониторинга скриптом может съесть ресурсы на простом скрипте, как описано тут Postgres бесплатный сыр или ступенька к Enterprise версии поэтому применяйте его осмотрительно.
А в обычной версии остается использовать только следующие пакеты (online_analyze это другое , описан выше).
#shared_preload_libraries = 'online_analyze, plantuner,pg_stat_statements,pg_wait_sampling'
shared_preload_libraries = 'online_analyze, plantuner,pg_stat_statements'
track_activities = on
#track_activity_query_size = 1024 # (change requires restart)
track_counts = on
track_io_timing = on
track_wal_io_timing = on
track_functions = all # none, pl, all
stats_fetch_consistency = none
Скрипт установки более агрессивных настроек
В данной статье Как эффективно настроить autovacuum в Postgres для 1С | 1CUnlimited | Дзен (dzen.ru) на нагрузочном тесте было доказано, что указания уровней срабатывания autovacuum в процентах для больших таблиц указывать неэффективно.
Выход простой — установить абсолютные значения срабатывания для наиболее нагруженных таблиц.
do $$
<<first_block>>
declare
gettable RECORD;
begin
-- get the number of films or tablename like '%accrg%' or tablename like '%accumrg%'
FOR gettable IN select tablename from pg_tables where tablespace ='v81c_data' and (tablename like '%inforg%' or tablename like '%accrg%' or tablename like '%accumrg%' ) ORDER BY tablename
LOOP
-- display a message
raise notice 'Process table %', gettable.tablename;
EXECUTE 'ALTER TABLE ' || quote_ident(gettable.tablename) ||' SET (autovacuum_enabled = on, autovacuum_vacuum_scale_factor = 0, autovacuum_vacuum_threshold = 2000, autovacuum_analyze_scale_factor =0 , autovacuum_analyze_threshold = 2000 )' ;
--EXECUTE 'select tablename, tableowner from pg_tables where tablename=$1' INTO gettable USING gettable.tablename;
-- raise notice 'Process table %', gettable.tableowner;
END LOOP;
end first_block $$;
Это не значит что автовакуум будет срабатывать каждые 2000 записей, это значит что он будет срабатывать каждые autovacuum_naptime = 20s, если количество измененных записей превысит 2000.
У Postgres богатый язык скриптов и очень удобный как можно увидеть из примера.
И это все?
Как ни пиши инструкцию, всегда найдется повод ее дополнить. Необходимый минимум для OLTP получился не таким уж и маленьким. Не случайно администратор СУБД это отдельная профессия, и судя по росту нагрузок, она такой и останется тем более 24×7 в эпоху тотального интернета уже необходимость, маленький RTO уже необходимость.
Конечно не освещено много других тем, например блокировки. Просто настройка СУБД должна сразу исключать узкие места на которых возможны появления ожиданий или излишний расход ресурсов.
-
Параметры влияющие на дисковую подсистему.
-
Параметры влияющие на кэширование и использование памяти.
-
Параметры влияющие на работу отдельных процессов Postgres.
-
Далее можно переходить к параметрам влияющим на блокировки, эффективного использования ресурсов, балансировки нагрузки, тюнинг индексов, планировщика и …
До новых встреч на нашем канале t.me/Chat1CUnlimited
Установка сервера 1С + PostgreSQL на Linux Ubuntu
Обновлено:
Опубликовано:
Можно значительно сократить затраты на программное обеспечение, установив сервер 1С на Linux. В данной инструкции мы рассмотрим процесс настройки сервера 1C 8.3 на Ubuntu 18.04, 20.04 или 22.04 с сервером баз данных (не файловый вариант). В качестве СУБД мы будем использовать PostgreSQL (на примере версий 12, 13 и 15).
Выбор операционной системы должен, в первую очередь, базироваться на основе официальных системных требованиях. Прежде чем сделать окончательный выбор, ознакомьтесь с ними.
Подготовка сервера к работе
Имя сервера
Настройка сетевого экрана
Установка и запуск PostgreQL
Подготовка сервера к установке
Установка и настройка PostgreSQL Pro для 1С
Использование СУБД версии 12
После установки PostgreSQL
Пароль
Запуск
Запрет обновлений PostgreSQL
Установка и запуск сервера 1С
Настройка сервера и подключение к базе
Установка и запуск HASP Licence manager
Перенос базы со старой 1С
Публикация на веб-сервере
Обновление сервера 1С
Подготовка системы
Задаем имя сервера
Чтобы сервер 1С мог запуститься без ошибки, необходимо ему задать корректное имя:
hostnamectl set-hostname server1C.dmosk.ru
Если данное имя не зарегистрировано в DNS, прописываем соответствие в файле hosts:
vi /etc/hosts
192.168.1.11 server1C.dmosk.ru
Настройка брандмауэра
Для корректной работы сервера, необходимо открыть порты:
- 1540 и 1541 для сервера 1С.
- 1560 — запросы к базе данных.
По умолчанию, в Ubuntu действует разрешающая политика и настройка брандмауэра не требуется. В противном случае, вводим команды:
iptables -I INPUT 1 -p tcp —dport 1540:1541 -j ACCEPT
iptables -I INPUT 1 -p tcp —dport 1560 -j ACCEPT
И сохраняем правила с помощью iptables-persistent:
apt install iptables-persistent
netfilter-persistent save
Установка PostgreSQL
Как было сказано выше, мы задействуем СУБД PostgreSQL. Для 1С требуется специальная сборка postgresql, которая может быть установлена из специального дистрибутива или от поставщика 1С. Рассмотрим установку версий Postgres Pro 15, а также обычную версию PostgreSQL 12.
Подготовка к установке СУБД
Настраиваем локаль, введя команду:
dpkg-reconfigure locales
В открывшемся окне выбираем локаль ru_RU.UTF-8 UTF-8:
Нажимаем OK. В следующем окне также выбираем ru_RU.UTF-8:
… и нажимаем OK.
* Если мы устанавливали русскую версию Linux, возможно, данные настройки уже будут выставлены. Так или иначе, стоит в этом убедиться.
Дальшейшие наши действия зависят от выбранной версии PostgreSQL.
PostgreSQL Pro для 1С
Для работы 1С рекомендуется установить специальный выпуск PostgreSQL Pro. Она также может быть загружена и установлена бесплатно.
Устанавливаем gnupg2:
apt install gnupg2
* без данного пакета при попытке установить репозиторий мы получим ошибку:
E: gnupg, gnupg2 and gnupg1 do not seem to be installed, but one of them is required for this operation
Error adding key.
Переходим на страницу 1c.postgres.ru — проходим 3 шага мастера:
Выбираем нужную версию Postgresql и Ubuntu.
После заполняем форму для получения инструкции по установке СУБД:
На указанную почту придет инструкция по установке PostgreSQL.
Пример установки PostgreSQL Pro 15. Скачиваем скрипт для установки репозитория и запускаем его:
curl -sLO https://repo.postgrespro.ru/1c/1c-15/keys/pgpro-repo-add.sh
sh ./pgpro-repo-add.sh
Запускаем установку СУБД:
apt install postgrespro-1c-15
Разрешаем автозапуск:
systemctl enable postgrespro-1c-15
Остановим сервис:
systemctl stop postgrespro-1c-15
Удаляем содержимое каталога data:
rm -rf /var/lib/pgpro/1c-15/data/*
* в противном случае, при попытке инициализировать базу мы получим ошибку Data directory /var/lib/pgpro/1c-15/data is not empty!
Инициализируем базу:
/opt/pgpro/1c-15/bin/pg-setup initdb —tune=1c —locale=ru_RU.UTF-8
Запускаем сервис postgrespro:
systemctl start postgrespro-1c-15
Установка PostgreSQL 12 от 1С
Устанавим пакет libssl:
wget http://archive.ubuntu.com/ubuntu/pool/main/o/openssl1.0/libssl1.0.0_1.0.2n-1ubuntu5.6_amd64.deb
* если команда вернет ошибку, точное название для новой версии libssl смотрим, перейдя по ссылке.
dpkg -i libssl1.0.0_1.0.2n-1ubuntu5.4_amd64.deb
Устанавливаем libllvm6.0:
apt install libllvm6.0
Распаковываем архив с postgresql:
tar jxvf postgresql_12.*.1C_amd64_deb.tar.bz2
Устанавливаем по очереди
dpkg -i postgresql-12.*.1C_amd64_deb/libpq5_12.*.1C_amd64.deb
dpkg -i postgresql-12.*.1C_amd64_deb/postgresql-client-12_12.*.1C_amd64.deb
dpkg -i postgresql-12.*.1C_amd64_deb/postgresql-12_12.*.1C_amd64.deb
Инициализируем СУБД:
sudo -u postgres /usr/lib/postgresql/12/bin/initdb -D /var/lib/postgresql/12/main —locale=ru_RU.UTF-8
* при инициализации для нас важно задать русскую локаль. В противном случае мы можем получить ошибку «Порядок сортировки не поддерживается базой данных».
Действия после установки postgres
Если мы установили PostgreSQL Pro версию, выполним только первую настройку (пароль).
Пароль для пользователя postgres
Задаем пароль для пользователя postgres:
sudo -u postgres psql -U postgres -d template1 -c «ALTER USER postgres PASSWORD ‘password'»; history -d $((HISTCMD-1))
* данную команду мы запускаем под пользователем postgres; мы задаем пароль password для postgresql-пользователя postgres. Дополнительная команда history -d $((HISTCMD-1)) удалить из истории строку с паролем.
Остальные настройки выполняем для PostgreSQL не Pro версии.
Автозапуск
Разрешаем автозапуск сервиса баз данных и стартуем его:
systemctl enable postgresql —now
Блокировка обновлений PostgreSQL
Так как для 1С устанавливается специальная сборка СУБД, необходимо запретить ее обновление. В противном случае будет установлен обычныйpostgresql, что приведет к потери работоспособности сервера.
Смотрим версию установленного сервера баз данных:
dpkg -l | grep postgresql
Пример ответа:
ii postgresql-12 12.10-4.1C …
ii postgresql-client-12 12.10-4.1C …
…
И так, у нас установлена версия 12.10-4.1C. Вводим:
dpkg -l | grep 12.10-4.1C | awk -F’ ‘ ‘{print $2}’ | xargs apt-mark hold
* где 12.10-4.1C — версия установленного PostgreSQL. Команда apt-mark hold блокируем установку обновлений для пакетов версии 12.10-4.1C.
Также добавим:
apt-mark hold postgresql-common postgresql-client-common
Для установки сервера 1С необходимо сначала установить вспомогательные пакеты, затем сам сервис. Дистрибутив необходимо скачать с сайта 1С — личного кабинета, доступного по подписке.
И так, выполним установку следующих пакетов:
apt install imagemagick unixodbc ttf-mscorefonts-installer
* где:
- imagemagick — набор программ для чтения и редактирования графических файлов.
- unixodbc — диспетчер драйверов для ODBC.
- ttf-mscorefonts-installer — набор шрифтов Microsoft.
В процессе установки система запросит принять лицензионное соглашение — выбираем Yes.
Копируем на сервер архив с дистрибутивом для 1С, который был загружен с сайта 1С или получен от поставщика. Переходим в каталог, в который перекинули архив и создаем новый каталог:
mkdir 1c_install
Распаковываем архив в созданный каталог:
Распаковываем архив командой:
tar -zxf 8.3.25.1336.tar.gz -C 1c_install/
* где 8.3.25.1336 — версия 1С. В архиве пакеты deb (для Linux на основе Debian) для 64-х разрядной системы.
В зависимости от скачанного архива, команда будет отличаться. Например, для zip:
unzip deb64*.zip -d 1c_install/
Выполняем установку новой версии пакетов:
Устанавливаем все пакеты, которые находились в архиве командой:
dpkg -i 1c_install/1c-enterprise*.deb
После установки необходимо настроить запуск сервиса с помощью systemd. 1С уже предоставляет нужный конфигурационный файл, для его поиска вводим:
find /opt -name srv1cv8*
В моем случае было несколько путей, в том числе, для установленной нами версии:
/opt/1cv8/x86_64/8.3.25.1336/srv1cv8-8.3.25.1336@.service
Копируем найденный юнит-файл в каталог /etc/systemd/system:
cp /opt/1cv8/x86_64/8.3.25.1336/srv1cv8-8.3.25.1336@.service /etc/systemd/system/srv1cv83.service
Разрешаем автозапуск и стартуем сервис:
systemctl enable srv1cv83
systemctl start srv1cv83
Необходимо убедиться, что сервис запустился:
systemctl status srv1cv83
Настройка кластера и клиента
На любой компьютер в сети установим толстый клиент 1С:Предприятие той же версии, что и сервер. Во время установки обязательно выбираем компонент Администрирование сервера 1С:Предприятие:
Устанавливаем клиента 1С. После установки в меню пуск находим ссылку Регистрация утилиты администрирования серверов (версия) и запускаем ее от имени администратора:
Теперь запускаем утилиту Администрирование серверов 1С Предприятия:
В открывшемся окне кликаем правой кнопкой мыши по Central 1C:Enterprise 8.3 servers — выбираем Создать — Центральный сервер 1С:Предприятие 8.3:
Пишем имя сервера 1С или его IP-адрес:
… и нажимаем OK. В панели управления появится подключение — переходим в раздел Кластеры — Локальный кластер — кликаем правой кнопкой по Информационные базы — выбираем Создать — Информационная база:
Заполняем параметры для создания новой базы:
* в данном примере нами были заполнены:
- Имя — задаем произвольное имя для подключения к базе.
- Сервер баз данных — имя или IP-адрес базы. Задаем localhost, так как в нашем случае сервер 1С и сервер баз данных находятся на одном сервере.
- Тип СУБД — выбираем PostgreSQL.
- База данных — имя базы данных.
- Пользователь сервера БД — пользователь, под которым будет выполняться подключение к базе. В нашем примере postgres.
- Пароль пользователя БД — пароль для базы, который мы задали после установки СУБД.
- Создать базу данных в случае ее отсутствия — ставим галочку, чтобы база была создана.
Если мы получим ошибку Этот хост неизвестен:
… необходимо убедиться, что имя сервера разрешается в IP-адрес. Для этого необходимо его добавить в локальную DNS или файл hosts.
База должна создастся. Теперь запускаем 1С клиент и добавляем новую базу — при добавлении выбираем Добавление в список существующей информационной базы:
Указываем произвольное имя информационной базы, а также выбираем тип расположения базы На сервере 1С:Предприятия:
Нажимаем Далее и Готово. Запускаем конфигуратор, загружаем базу и пользуемся.
HASP Licence manager
Если в сервер вставлен аппаратный ключ, необходимо установить HASP Licence manager, чтобы лицензии могли получать компьютеры по сети.
Проверяем, что наш сервер видит ключ:
lsusb | grep -i hasp
Мы должны увидеть что-то на подобие:
Bus 001 Device 003: ID 0529:0001 Aladdin Knowledge Systems HASP copy protection dongle
Bus 001 Device 002: ID 0529:0001 Aladdin Knowledge Systems HASP copy protection dongle
Устанавливаем необходимые пакеты:
apt install make libc6-i386
* где:
- make — утилите, которая в нашем случае используется для компиляция исходного кода.
- libc6-i386 — набор стандартных библиотек для С и математических вычислений.
Создадим каталог для загрузки пакетов и перейдем в него:
mkdir /tmp/hasp ; cd /tmp/hasp
Переходим на страницу загрузки HASP для Ubuntu. Выбираем необходимую версию и копируем ссылки на 2 файла — haspd-modules_… и haspd_…
С помощью скопированных ссылок загружаем на сервер два файла:
wget https://download.etersoft.ru/pub/Etersoft/HASP/stable/x86_64/Ubuntu/22.04/haspd-modules_7.90-eter2ubuntu_amd64.deb
wget https://download.etersoft.ru/pub/Etersoft/HASP/stable/x86_64/Ubuntu/22.04/haspd_7.90-eter2ubuntu_amd64.deb
* в моем примере загрузка выполнялась для Ubuntu 22.04.
Выполним установку скачанных пакетов командой:
dpkg -i haspd*.deb
Разрешим автозапуск сервиса haspd:
systemctl enable haspd
Запускаем его:
systemctl start haspd
Проверяем, что он корректно стартовал и работает:
systemctl status haspd
Готово — наши компьютеры в локальной сети смогут получить лицензию.
Миграция базы на PostgreSQL
В случае, если это не первая установка и у нас уже есть база, ее нужно перенести на новый сервер. Рассмотрим 2 варианта — база была на другом сервере PostgreSQL и универсальный (файловый вариант или другая СУБД).
С PostgreSQL на PostgreSQL
В данном случае процесс переноса заключается в создании дампа (backup) и его восстановления на новом сервере (restore). Необходимо учесть, что для корректного переноса данных, версии 1С должны совпадать.
Есть несколько инструментов по созданию резервных копий PostgreSQL и их восстановлению. Их описание выходит за рамки данной статьи — подробнее читайте инструкцию Резервное копирование PostgreSQL.
Универсальный способ миграции на PostgreSQL
Данный способ также подойдет и для миграции с PostgreSQL на PostgreSQL. Для начала, открываем нашу базу в конфигураторе на старом 1С — кликаем по Администрирование — Выгрузить информационную базу:
Выбираем путь для сохранения файла. Ждем окончания выгрузки и переносим полученный файл на компьютер с толстым клиентом 1С (если для нового сервера мы используем другой компьютер с 1С).
Открываем конфигуратор для созданной в PostgreSQL базы — кликаем Администрирование — Загрузить информационную базу:
… и выбираем выгруженный ранее файл. Дожидаемся его загрузки — система потребует перезапустить 1С — соглашаемся. Ждем новой загрузки. После можно пользоваться базой 1С на новом сервере.
Веб-публикации
Сервер 1С поддерживает возможность веб-публикаций баз 1С. Это дает возможность открывать программу в браузере или мобильном приложении. В Linux данные публикации осуществляются с помощью Apache.
Установка и запуск Apache
Первым делом, устанавливаем веб-сервер apache:
apt install apache2
Разрешаем автозапуск веб-сервера и стартуем сам сервис:
systemctl enable apache2
systemctl start apache2
Если на нашем сервере используется брандмауэр, применяем правило:
iptables -I INPUT -p tcp —dport 80 -j ACCEPT
netfilter-persistent save
Открываем браузер и переходим по адресу http://<IP-адрес сервера 1С> — мы должны увидеть стартовую страницу Apache:
Публикация 1С на веб-сервере
Публикация базы выполняется с помощью скрипта webinst, который устанавливается с сервером. Для простоты, мы опубликуем базу в корневую директорию /var/www/html, но при желании, можно настроить виртуальные домены.
Для удобства работы, создадим переменные с именем публикуемой базы и адресом сервера, например:
DBNAME=test
SERVER1C=192.168.1.11
* в нашем примере будет публиковаться база с именем test, которая находится на сервере с IP-адресом 192.168.1.11.
И так, создадим каталог, в который опубликуем нашу базу:
mkdir -p /var/www/html/$DBNAME
Переходим в каталог с установленным 1С:
cd /opt/1cv8/x86_64/8.3.16.1148/
* где 8.3.16.1148 — версия установленной платформы.
Если мы не знаем, в каком каталоге находится рабочий экземпляр 1С, выполняем команду:
systemctl status srv1cv83
Мы увидим статус службы, а также пути до исполняемых файлов, например:
/opt/1cv8/x86_64/8.3.16.1148/ragent
Получается, что в нашем примере, рабочий каталог будет /opt/1cv8/x86_64/8.3.16.1148.
Заускаем скрипт для публикации базы:
./webinst -apache24 -wsdir $DBNAME -dir /var/www/html/$DBNAME -connstr «Srvr=${SERVER1C};Ref=${DBNAME};» -confPath /etc/apache2/apache2.conf
* где:
- apache24 — версия установленного apache;
- $DBNAME — имя нашей базы, которую мы создали ранее;
- /var/www/html/$DBNAME — путь до каталога на сервере, в котором будет опубликована база;
- ${SERVER1C} — IP-адрес сервера 1С;
- Ref=$DBNAME — имя базы в СУБД;
- /etc/apache2/apache2.conf — путь до конфигурационного файла apache.
Мы должны увидеть:
Publication successful
… или:
Публикация выполнена
Перезапускаем апач:
systemctl restart apache2
Открываем браузер и переходим по адресу http://<IP-адрес сервера 1С>/test/, где test — каталог в каталоге /var/www/html, куда мы опубликовали базу.
Если мы хотим опубликовать другую базу, то находясь в каталоге 1С, вводим:
DBNAME=test2
mkdir -p /var/www/html/$DBNAME
./webinst -apache24 -wsdir $DBNAME -dir /var/www/html/$DBNAME -connstr «Srvr=${SERVER1C};Ref=${DBNAME};» -confPath /etc/apache2/apache2.conf
systemctl restart apache2
Обновление сервера 1С
Подготовимся к обновлению — скачаем новую версию дистрибутива сервера DEB нужной разрядности (как правило, 64 бит). Копируем архив на сервер.
Для удобства, создадим переменную с версией 1С, на которую будем обновлять платформу:
export VER1C=8.3.25.1336
* в моем примере будет установлена версия 8.3.25.1336.
Остановим сервис 1С:
systemctl stop srv1cv83
Далее процедура обновления напоминает установку приложения.
Переходим в каталог, в который перекинули архив и создаем новый каталог, куда распакуем его:
mkdir 1c_update
распаковываем архив в созданный каталог:
tar -zxf deb64*.tar.gz -C 1c_update/
В зависимости от скачанного архива, команда будет отличаться. Например, для zip:
unzip deb64*.zip
Данная команда распакует все файлы в текущий каталог. Для удобства, переместим их в созданную папку:
mv 1c-enterprise*.deb 1c_update/
Выполняем установку новой версии пакетов:
dpkg -i 1c_update/1c-enterprise*.deb
Сервис 1С запускается с помощью systemd и название файла заканчивается на @.service, например.
Чтобы найти все файлы для запуска 1С через systemd, выполним команду:
find /opt -name srv1cv8*
В моем случае было несколько путей, в том числе, для установленной нами версии 8.3.25.1336:
/opt/1cv8/x86_64/8.3.25.1336/srv1cv8-8.3.25.1336@.service
В более старых версиях используются файлы srv1cv83, которые являются симлинками. Нам нужно удалить старый симлинк и создать новый. Подробнее процесс рассмотрим ниже.
Следующие несколько команд зависят от того, какой у нас файл.
а) Если для systemd.
Копируем юнит-файл в каталог /etc/systemd/system:
cp /opt/1cv8/x86_64/${VER1C}/srv1cv8-${VER1C}@.service /etc/systemd/system/srv1cv83.service
Перечитываем systemd-файл. Разрешаем автозапуск:
systemctl enable srv1cv83
б) Если старого типа (для init.d).
Удаляем симлинк, который ведет на старую версию файла:
rm -f /etc/init.d/srv1cv83
Создаем новый (путь до которого мы нашли командой find):
ln -s /opt/1cv8/x86_64/${VER1C}/srv1cv83 /etc/init.d/srv1cv83
Готово. Мы настроили сервис. Можно перейти к его запуску.
Следующие команды как для init.d, так и systemd.
Обновляем информацию о сервисе:
systemctl daemon-reload
Запускаем сервис:
systemctl start srv1cv83
Убедиться, что сервис запустился можно командой:
systemctl status srv1cv83
Также рекомендую удалить каталог с распакованными файлами, чтобы они нам не помешали при следующем обновлении:
rm -rf 1c_update
Рассмотрим установку PostgreSQL+1С на Ubuntu — актуальная на 2023 год сборка.
В данной инструкции задействована ВМ с ОС Ubuntu Server 22.04 LTS. Рекомендованные минимальные характеристики для данных сервисов следующие: 6 ядер ЦП, 60 ГБ системный диск SSD и как минимум 12 ГБ ОЗУ. Однако, ресурсы следует рассчитывать из дальнейшего сценария использования и количества пользователей, работающих в базах.
Установка PostgreSQL
Если установлена английская версия Ubuntu, то требуется переконфигурировать локали с помощью команды:
$ sudo dpkg-reconfigure locales
И выбрать ru_RU.UTF-8 UTF-8 (по умолчанию число номер 392), а затем перезагрузить сервер.
Далее приведена последовательность действий, необходимых для успешной установки PSQL:
- Добавить репозиторий последней актуальной версии PSQL (на момент написания данной инструкции таковой является 15.4)
$ 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 -qO- https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo tee /etc/apt/trusted.gpg.d/pgdg.asc &>/dev/null
- Обновить пакеты:
$ sudo apt update && sudo apt upgrade
- Скачать последнюю актуальную версию патченого PosgtreSQL с портала ИТС.
- Распаковать и установить скачанный архив вместе с зависимостями.
$ tar -xvf postgresql_15.1_4.1C_amd64_deb.tar.bz2 $ cd postgresql_15.1_4.1C_amd64_deb && sudo apt install ./* -y
- Настроить конфигурацию:
$ sudo nano /etc/postgresql/15/main/postgresql.conf
Раскомментируем эту строчку и присваиваем ей следующее значение:
- В конфигурации настроить autovacuum для предотвращения деградации базы
Раскомментировать следующие строчки и предаём им следующие значения:autovacuum = on autovacuum_max_workers = x # (где x — половина от количества ядер ЦП на сервере СУБД) autovacuum_vacuum_cost_delay = x # (x — пропорционально количеству количеству воркеров, т.е. если кол-во воркеров, например, 6 – увеличиваем значение по умолчанию в два раза) autovacuum_vacuum_scale_factor = 10 autovacuum_analyze_scale_factor = 0.5
- Также хорошей практикой будет вынести базы на отдельный диск, для этого:
Создаём отдельную директорию (например, /var/lib/postgesqldb ) и монтируем раздел нашего SSD-диска (в нашем случае — это /dev/sda2).
Отключаем службу psql:
$ sudo systemctl stop postgresql $ sudo mkdir -p /var/lib/postgesqldb && sudo chown postgres:postgres /var/lib/postgresqldb && sudo mount /dev/sda2 /var/lib/postgresqldb
Находим строчку data_directory и заменяем значение на ‘/var/lib/postgesqldb’. После чего инициализируем там кластер PSQL:
И заодно добавим в fstab директорию для хранения баз, чтобы она не размонтировалась при следующем перезапуске. Для этого нужно зайти в blkid и найти UUID раздела.
Заходим в /etc/fstab:
И добавляем следующую строчку:
UUID=xxxx-xxxx-xxxxxx-xxx /var/lib/postgresqldb auto rw,user,auto 0 0
(Где иксы заменяем на UUID раздела, который нашли в blkid).
- Дополнительно, если планируется получать доступ к БД с другого компьютера, то следует разрешить подключения к базе в pg_hba.conf. В рассматриваемом нами случае планируется подключение к базам только из локальной сети, поэтому разрешим подключения ко всем базам от всех пользователей СУБД в подсети:
$ sudo nano /etc/postgresql/15/main/pg_hba.conf
Добавляем строчку:
host all all 192.168.89.0/24 md5
При необходимости открыть доступ к базе извне, вместо all all указываем базу данных и пользователя соответственно, а подсеть заменяем на 0.0.0.0/0.
- После проделанных настроек перезапускаем службу и проверяем, что она работает:
$ sudo systemctl restart postgresql.service && sudo systemctl status postgresql.service
Если всё настроено правильно, то будет следующий вывод:
Рисунок 1 — Проверка работы службы PostgreSQL
- Меняем пароль для пользователя postgres для подключения к базе:
$ sudo -u postgres psql -U postgres -c "alter user postgres with password 'postgrespwd';"
Вместо postgrespwd можем указать свой пароль.
Установка сервера 1С
- Скачиваем нужную нам версию сервера 1С на портале ИТС.
- Распаковываем с помощью tar архив и запускаем файл .run:
sudo ./setup-full-8.3.21.1393-x86_64.run
- Дальше следуем указаниям в установщике, после успешной установки создаём сервис службы 1С. Для этого нужно убедиться, что создался пользователь usr1cv8, либо создать его самостоятельно:
- Если в списке есть пользователь, то продолжаем дальше, если нет, то создаём вручную:
$ sudo useradd usr1cv8 -mp ‘password’
- Далее нужно найти директорию запускаемого файла ragent, в нашем случае это /opt/1cv8/x86_64/8.3.21.1393/ragent. Создаём сервис: нужно открыть файл в текстовом редакторе, записать содержание и сохранить файл:
$ sudo nano /etc/systemd/system/1CServer.service [Unit] Description=1C Server agent After=network.target [Service] Restart=Always User=usr1cv8 ExecStart=/opt/1cv8/x86_64/8.3.21.1393/ragent [Install] WantedBy=multi-user.target
- Затем обновляем список служб и проверим работает ли служба 1С:
$ sudo systemctl daemon-reload $ sudo systemctl start 1CServer && sudo systemctl status 1CServer
Если всё настроено корректно, получим примерно такой вывод:
Рисунок 2 — Проверка работы службы 1C
Убедившись, что всё работает, устанавливаем службу:
$ sudo systemctl enable 1CServer
Подключение базы 1С
Создать базу 1С можно и в терминале Linux через команду, однако, для удобства, мы воспользуемся оснасткой администрирования сервера 1С, установленной на соседнюю машину на ОС Windows Server.
- Перед тем как присоединять базу, если компьютеры не объединены в домен Active Directory, рекомендуется внести имя сервера СУБД и его IP-адрес в “C:WindowsSystem32driversetchosts”, иначе возможно получение ошибки “Этот хост неизвестен” в 1С.
- Не пытайтесь создать пустую базу в PSQL, а затем подключить её в оснастке 1С! Для PostgreSQL базы 1С не являются нормальными, поэтому все базы создаются средствами 1С, как описано ниже.
- Заходим в оснастку администрирования и добавляем Центральный Сервер 1С. В имени сервера вводим имя или IP-адрес сервера СУБД, на котором устанавливали 1С.
- Далее заходим в кластер и добавляем базу: Правой кнопкой мыши нажать на “Информационные базы (Далее ИБ)” > “Создать” > “ИБ”. Заполняем поля:
Рисунок 3 — Параметры информационной базы
Мы добавили ИБ для запуска, можно заходить в конфигуратор и загружать имеющую конфигурацию. Итак, структура готова к работе в 1С.
Нужна помощь? Администрирование linux-серверов и PostgreSQL мы осуществляем в рамках услуги администрирование серверов.
Самая примитивная инструкция по установке PostgreSQL 14 + сервер 1C 8.3.20.1710 на Ubuntu 20.04
Статья переехала на ypermitin.github.io
Инструкция с минимальным набором шагов по настройке сервера 1С:Предприятия 8.3.20 + PostgreSQL 14 на Ubuntu 20.04. В общем плане актуальна для других версий приложений и ОС. Клиентскую часть 1С здесь не рассматриваем.
Многие вещи в инструкции не раскрыты и вся информация скорее для ознакомления с процессом, а для рабочего окружения нужно более вдумчиво подходить ко всем настройкам.
Настройка ОС
Полностью описывать настройку ОС в части сети, дисковой подсистемы и прочего смысла нет. Остановимся только на важных моментах, связанных с работой PostgreSQL и платформы 1С.
Обновим систему
Рекомендую поставить все последние обновления перед продолжением.
sudo apt update sudo apt upgrade
Настройка локали
Чтобы платформа 1С могла работать с базой данных PostgreSQL нужно, чтобы в системе были установлены необходимые локали.
sudo dpkg-reconfigure locales
Далее на первом шаге выбираем из списка локаль «ru_RU.UTF-8 UTF-8». Эту же локаль на втором шаге выбираем как локаль по умолчанию.
Часовой пояс и время
Далее установим нужный часовой пояс в системе.
sudo timedatectl set-timezone Europe/Moscow
Текущие настройки можно посмотреть так.
А список доступных часовых поясов можно узнать так.
timedatectl list-timezones
Установка PostgreSQL
Теперь установим СУБД PostgreSQL. «Ванильная» версия платформой 1С не поддерживается, поэтому скачаем сборку от компании PostgresPro. Для этого идем на сайт 1c.postgres.ru, выбираем архитектуру, версию сборки, операционную систему и загружаем (будет отправлено письмо с информацией по указанным контактным данным с инструкцией по установке).
Есть сборка PostgreSQL от фирмы 1С, которую можно загрузить с официального сайта. Ее в инструкции не рассматриваем.
Далее обновляем доступные репозитории пакетов согласно инструкции.
curl -o pgpro-repo-add.sh https://repo.postgrespro.ru/pg1c-14/keys/pgpro-repo-add.sh sudo sh pgpro-repo-add.sh
И устанавливаем PostgreSQL версии 14.
apt-get install postgrespro-1c-14
Чтобы найти имя демона PostgreSQL выполним команду.
systemctl --type=service | grep postgres # Пример вывода: # postgrespro-1c-14.service
Теперь останавливаем сервис и удаляем созданный по умолчанию кластер.
# Останавливаем PostgreSQL sudo systemctl stop postgrespro-1c-14 # Удаляем файлы ранее созданного при установке кластера # Вместо 1c-14 может быть другое название каталога, в зависимости от версии. rm -r /var/lib/pgpro/1c-14/data/* # Инициализируем новый кластер для 1С с нужной локалью (не обязательно, если по умолчанию локаль в системе "ru_RU.UTF-8"). sudo /opt/pgpro/1c-14/bin/pg-setup initdb --tune=1c --locale=ru_RU.UTF-8 # Запускаем PostgreSQL sudo systemctl start postgrespro-1c-14
Готово. Дополнительно, но только в качестве примера, сделаем дополнительные шаги.
- Разрешим подключение к СУБД с любых адресов. Для этого в файле конфигурации сервера (/var/lib/pgpro/1c-14/data/postgresql.conf) изменим строчку:
# listen_addresses = 'localhost' listen_addresses = '*'
Также разрешим подключение для всех пользователей по логину и паролю. В файле (/var/lib/pgpro/1c-14/data/pg_hba.conf) изменим разрешения для IPv4.
# Было # # IPv4 local connections: # host all all 127.0.0.1/32 md5 # Стало # IPv4 local connections: host all all 0.0.0.0/0 password host all all 127.0.0.1/32 md5
Теперь доступ к СУБД имеется с любой машины и для любого пользователя. Кстати, давайте создадим, опять же только для примера, пользователя PostgreSQL.
Далее SQL-командой создаем пользователя. Для 14 версии команда будет такая (для других см. документацию):
CREATE USER username SUPERUSER PASSWORD 'passwordstring';
Настройки выше являются небезопасными и годятся только для локальных установок с целью тестирования и изучения. Будьте осторожны!
Установка сервера 1С
Начиная с версии 8.3.20 установка стала значительно проще (хотя может и с более ранних версий). С официального сайта скачиваем версию для Linux, в нашем случае она называется:
Технологическая платформа 1С:Предприятия (64-bit) для Linux
Копируем файл на наш сервер и распаковываем архив.
# Имя архива меняется в зависимости от версии платформы 1С tar -xvzf server64_8_3_20_1710.tar.gz # В итоге появится файл "setup-full-8.3.20.1710-x86_64.run" для установки. Он то нам и нужен. Запускаем. sudo ./setup-full-8.3.20.1710-x86_64.run
Программа установки интерактивно спросит язык установки, выбираем:
[16] Russian - Русский
Далее соглашаемся на выбор компонентов. Нас интересуют:
Сервер 1С:Предприятия 8 [y/N] : y
Интерфейсы на различных языках - Русский [Y/n] :y
Дожидаемся окончания процесса установки.
Пожалуйста, подождите пока программа установит 1С:Предприятие на ваш компьютер.
Установка
0% ______________ 50% ______________ 100%
#########################################
----------------------------------------------------------------------------
Завершена установка 1С:Предприятие на ваш компьютер.
После установки может потребоваться создать ссылку для службы. Перед этим проверим не создал ли установщик ссылку самостоятельно.
sudo systemctl --type=service | grep srv1cv83
Если предыдущая команда не находит службу, то создаем ее.
# Добавляем ссылку на файл службы sudo ln -s /opt/1cv8/x86_64/8.3.20.1710/srv1cv83 /etc/init.d/srv1cv83 # Включаем службу sudo systemctl enable srv1cv83 sudo systemctl restart srv1cv83 # Проверяем результат, состояние службы sudo systemctl status srv1cv83
Готово! Служба установлена и работает.
● srv1cv83.service - LSB: Starts and stops the 1C:Enterprise daemons
Loaded: loaded (/etc/init.d/srv1cv83; generated)
Active: active (exited) since Thu 2022-03-24 19:45:25 UTC; 1s ago
Docs: man:systemd-sysv-generator(8)
Process: 21186 ExecStart=/etc/init.d/srv1cv83 start (code=exited, status=0/SUCCESS)
Mar 24 19:45:20 app1cpg systemd[1]: Starting LSB: Starts and stops the 1C:Enterprise daemons...
Mar 24 19:45:20 app1cpg su[21230]: (to usr1cv8) root on none
Mar 24 19:45:20 app1cpg su[21230]: pam_unix(su-l:session): session opened for user usr1cv8 by (uid=0)
Mar 24 19:45:20 app1cpg su[21230]: pam_unix(su-l:session): session closed for user usr1cv8
Mar 24 19:45:25 app1cpg srv1cv83[21186]: Starting 1C:Enterprise 8.3 server: OK
Mar 24 19:45:25 app1cpg systemd[1]: Started LSB: Starts and stops the 1C:Enterprise daemons.
И еще немного информации.
Послесловие
Как говорилось в самом начале, это лишь поверхностная инструкция по установке PostgreSQL + сервер 1С для Ubuntu 20.04. Многие аспекты даже не рассматривались:
- Открытие портов для брэндмауэра
- Настройка безопасности для СУБД
- Тюнинг настроек PostgreSQL
- Настройка использования лицензий 1С
- И многое другое.
Но для старта информация подходящая.
Ниже ссылки на полезные материалы, в них некоторые моменты описаны более развернуто. В общем, вперед! К знаниям!
Полезные ссылки
- УСТАНОВКА СЕРВЕРА 1С НА UBUNTU 20.04
- От экспертов «1С‑Рарус»: Установка серверной части 1С в Linux среде
- Поднимаем сервер 1С на UBUNTU и PostgreSQL за 20 минут
- Установка и настройка нескольких экземпляров сервера 1С: Предприятия 8.3 разных релизов на одном Ubuntu-server
- Сервер 1С:Предприятие на Ubuntu 16.04 и PostgreSQL 9.6, для тех, кто хочет узнать его вкус. Рецепт от Капитана