Установка и настройка 1С на Debian с PostgreSQL

Возможность сэкономить на дорогих лицензиях от Microsoft побуждает многие компании искать альтернативные варианты запуска 1С. Сегодня расскажу об одной из таких альтернатив - установке и настройке сервера 1С на Linux (Debian) в связке с базой данных PostgreSQL. Я не просто покажу, как запустить 1С на Linux, но и поделюсь полной информацией по эксплуатации этой системы, так как имею подобный опыт.

Углубленный онлайн-курс по MikroTik

Научиться настраивать MikroTik с нуля или систематизировать уже имеющиеся знания можно на углубленном онлайн-курcе по администрированию MikroTik. Автор курcа – сертифицированный тренер MikroTik Дмитрий Скоромнов. Более 40 лабораторных работ по которым дается обратная связь. В три раза больше информации, чем в MTCNA.

Введение

Сервер 1С не умеет работать со стандартной версией PostgreSQL. Её нужно патчить. Существует как минимум 2 версии postgresql с патчами для запуска 1С:

  1. PostgreSQL Pro - https://1c.postgres.ru.
  2. Версия от фирмы 1С. Установочный файл обычно называется Дистрибутив СУБД PostgreSQL для Linux x86 (64-bit) одним архивом. Скачать можно только с портала https://releases.1c.ru имея актуальную учетную запись.

Я всегда в своей практике использовал версию от postgresql pro, так как она обновляется быстрее и проще скачать. С ней как правило меньше проблем. Я лично вообще не сталкивался с ними, так что могу рекомендовать именно эту версию.

Используя Linux сервер для установки 1С вы экономите деньги на следующих лицензиях:

  • Microsoft Windows Server.
  • Microsoft SQL Server.
  • Клиентский доступ к MS SQL Server.

Вам понадобится приобрести только лицензию на сам 1С сервер. А операционная система Linux и БД PostgreSQL бесплатны. Более подробно стоимость лицензий и их подбор я рассматривал в своем телеграм канале отдельной заметкой. Там же есть полезные комментарии в обсуждениях на этот счет.

Если вы в данный момент используете файловые базы, но их производительность вас не устраивает, посмотрите мою статью про ускорение файловых баз 1С. Возможно вам удастся немного отсрочить момент перехода на клиент-серверную версию, так как это сопряжено с дополнительными расходами. Причем расходы будут как на начальную покупку лицензий и железа, так и на последующее сопровождение. Иногда можно обойтись без них.

В этой статья я всё буду настраивать на базе дистрибутива Debian 11.

Если у вас еще не настроен сервер с Debian, рекомендую мои материалы на эту тему:

Далее переходим к самой настройке 1С. Если у вас нет отдельной серверной и сервера под это дело, то удобнее арендовать dedic, например, у Selectel. Для комфортной работы с 1С средней компании хватит бюджетного дедика за 5000-6000 р. в месяц. Я рекомендую устанавливать всё на гипервизор Proxmox на программный рейд mdadm, даже если у вас будет всего одна виртуальная машина. Это упрощает бэкап и перенос системы в случае необходимости. Для этого при заказе сервера в Selectel выберите соответствующий шаблон. Вручную ничего настраивать не придётся. Сразу получите установленный гипервизор Proxmox на софтовом mdadm raid1.

Установка 1С:Предприятие 8.3 на Debian 11

Начнем нашу настройку с установки сервера 1С. Для этого нам надо установить дополнительные пакеты в систему, которые находятся в разделах системного репозитория contrib и non-free. Их нужно добавить в конфиг репозиториев Debian. Для этого редактируем файл /etc/apt/sources.list и приводим его примерно к следующему виду:

deb http://mirror.yandex.ru/debian bullseye main contrib non-free
deb-src http://mirror.yandex.ru/debian bullseye main contrib non-free

deb http://mirror.yandex.ru/debian bullseye-updates main contrib non-free
deb-src http://mirror.yandex.ru/debian bullseye-updates main contrib non-free

deb http://security.debian.org/ bullseye-security main contrib non-free
deb-src http://security.debian.org/ bullseye-security main contrib non-free

Репозитории в Debian для установки 1С

Сами адреса репозиториев у вас могут быть другие. Выполняем обновление списка пакетов:

# apt update

Теперь устанавливаем нужные для работы 1С в linux пакеты. Начнем со шрифтов mscorefonts.

# apt install ttf-mscorefonts-installer

Установка будет идти достаточно долго, так как скачивается целая куча дополнительных пакетов и файлов.

Установка шрифтов ttf-mscorefonts

Подключим репозиторий от Debian 10 для установки пакета libenchant1c2a, который нужен для установки сервера 1С. Без него получите ошибку примерно следующего содержания:

Не удалось установить пакеты, требуемые для работы. Чтобы установка платформы "1С:Предприятие" завершилась успешно, необходимо самостоятельно установить отсутствующие пакеты с помощью пакетного менеджера операционной системы и заново запустить установку платформы. Отсутствующие пакеты приведены ниже и их можно скопировать в буфер обмена:
libenchant1c2a gstreamer1.0-plugins-bad libegl1-mesa

# echo "deb http://mirror.yandex.ru/debian buster main" > /etc/apt/sources.list.d/buster.list

Добавляем еще несколько необходимых пакетов:

# apt update
# apt install imagemagick unixodbc sudo curl libenchant1c2a

Следующий важный этап подготовки к установке сервера 1С — настройка локали. Для этого выполняем команду в терминале:

# dpkg-reconfigure locales

Нам нужно выбрать ru_RU.UTF-8 UTF-8. Так же убедитесь на всякий случай, что en_US.UTF-8 тоже выбрана. В дефолте так и должно быть, но я сталкивался с ситуациями, когда эту локаль тоже приходилось добавлять.

Установка локали ru_RU.UTF-8 UTF-8 в Debian

По умолчанию выбираем ее же — ru_RU. После того, как вы разлогинитесь из системы и зайдёте снова, у вас в консоли будет русский язык. Немного непривычно с ним работать, но придется потерпеть это неудобство. Не забудьте перезайти. Если этого не сделать, то в процессе создания базы 1С получите ошибку.

Теперь нам необходимо скачать дистрибутив сервера с портала 1С. Для этого логинимся под действующей учетной записью на https://releases.1c.ru и скачиваем файл Технологическая платформа 1С:Предприятия (64-bit) для Linux.

Загрузка дистрибутива 1С Предприятия для Linux

Имя файла будет server64_8_3_22_1851.tar.gz. Его нужно передать на Debian сервер. Я обычно winscp для этого использую. Распаковываем архив в отдельную директорию.

# mkdir 1c-server
# mv server64_8_3_22_1851.tar.gz 1c-server/
# cd 1c-server/
# tar xzvf server64_8_3_22_1851.tar.gz
# rm server64_8_3_22_1851.tar.gz

Вы получите единый установщик setup-full-8.3.22.1851-x86_64.run, который содержит все пакеты для сервера 1С. Запускаем его в пакетном режиме с некоторыми параметрами:

# chmod +x setup-full-8.3.22.1851-x86_64.run
# ./setup-full-8.3.22.1851-x86_64.run --mode unattended --enable-components server,ws

Полный список опций можно посмотреть в официальной документации. В данном случае я установил сам кластер серверов 1С и модуль расширения веб сервера. Не забудьте изменить версию платформы в имени файла на свою.

Регистрируем unit systemd для управления службой 1С:

# systemctl link /opt/1cv8/x86_64/8.3.22.1851/srv1cv8-8.3.22.1851@.service

Запускаем Сервер 1С на Debian и сразу добавляем в автозагрузку:

# systemctl start srv1cv8-8.3.22.1851@.default
# systemctl enable srv1cv8-8.3.22.1851@.service

Установка сервера 1С в Debian

Проверим, все ли службы запустились:

# netstat -tulnp | grep "rphost\|ragent\|rmngr"

Проверка работы сервера 1С

Всё на месте. Если у вас включен Firewall на сервере, не забудьте открыть указанные порты. Данная настройка не относится к тематики статьи, так что я ее опускаю.

На этом установка самого Сервера 1С закончена. Переходим к установке и настройке базы PostgreSQL для него.

Установка PostgreSQL Pro для 1С

Для работы с 1С в PostgreSQL необходимо внести некоторые изменения в виде патчей. Существует несколько редакций этих патчей, но наиболее известные две:

  1. От самой 1С.
  2. От компании PostgreSQL Pro.

Я не берусь судить сам, какая сборка PostgreSQL для 1С будет лучше. Я всегда использую от Postgresql Pro. Эта компания активно участвует в разработке самого движка БД, так что компетенций у нее достаточно. Есть мнение, что эти сборки лучше, чем от 1С. К тому же в последних версиях, я заметил, что эти сборки автоматически настраивают конфиг postgresql под параметры памяти и процессоров вашего сервера. Не нужно это делать потом вручную.

Загрузить PostgreSQL Pro для 1С можно по ссылке - https://1c.postgres.ru. Для этого ответьте на 3 вопроса установщика и в конце укажите вашу почту. Туда придёт инструкция по установке.

Загрузка PostgreSQL для 1С в Linux

Инструкция достаточно простая. Подключаем репозитории postgresql:

# wget https://repo.postgrespro.ru/1c-15/keys/pgpro-repo-add.sh
# sh pgpro-repo-add.sh

Устанавливаем базу данных:

# apt install postgrespro-1c-15

Установка PostgreSQL на Debian

База данных запустилась автоматически, добавляем её в автозагрузку:

# systemctl enable postgrespro-1c-15

Проверьте статус сервиса postgrespro-1c-15. Он должен быть запущен.

# systemctl status postgrespro-1c-15

Запуск postgrespro для 1С

Далее переходим к настройке postgresql.

Настройка PostgreSQL для работы с 1С

Первым делом зададим пароль внутреннего пользователя postgers, под которым будет работать сервер 1С.

# sudo -u postgres /usr/bin/psql -U postgres -c "alter user postgres with password 'postgrespwd';"
ALTER ROLE

Внесём некоторые изменения в конфигурацию postgresql. Она находится в файле /var/lib/pgpro/1c-15/data/postgresql.conf. Изменения некритичные и носят рекомендательный характер. Можете их не менять, если не хочется разбираться. 1С будет нормально работать и без них. Обратите внимание, что в этой сборке postgresql рекомендованные настройки, зависящие от ресурсов сервера, указаны в самом конце конфигурационного файла. Я предлагаю добавить или изменить следующие настройки:

# если сервер 1С установлен на этой же машине, то слушаем только localhost
listen_addresses = 'localhost'
# увеличиваем дефолтное значение подключений
max_connections = 150

Перезапускаем postgresql:

# systemctl restart postgrespro-1c-15

В целом, больше ничего добавлять в конфигурацию PostgreSQL для её настройки работы с 1С не обязательно. Всё и в таком виде будет нормально функционировать. Более детальная настройка требует погружение в специфику работы PostgreSQL. Этим можно заняться в процессе эксплуатации системы, когда накопится статистика и будут видны узкие места (например, неоптимальные настройки по потреблению оперативной памяти).

Создание баз 1С

Теперь идём на любую машину, где у вас установлена консоль администрирования 1С. Обычно её на какую-то виндовую машину ставят. Для этого надо скачать Технологическую платформу той же версии, что и установленный сервер 1С на Debian.

Загрузка дистрибутива технологической платформы 1С

Во время установки обязательно выбрать компонент Администрирование сервера 1С.

Установка компонентов Администрирование сервера 1С

После установки запускаем Администрирование серверов 1С Предприятия x86-64 и добавляем туда сервер 1С на Debian, который мы установили ранее. Можно по dns имени, если оно настроено, либо просто по ip.

Если получите ошибку: "Консоль управления (MMC) не может создать оснастку.", то сделайте следующее.

Консоль управления (MMC) не может создать оснастку.

Запустите командную строку с правами администратора. Это важно. И выполните там:

"C:\Program Files\1cv8\8.3.19.1150\bin\RegMSC.cmd"

Регистрация Консоли управления 1С

Не забудьте поменять версию платформы на свою. После этого оснастка управления сервером 1С нормально заработает. Подключаем наш сервер на Debian.

Подключение к серверу 1С на Linux

Дальше всё управление выполняется как обычно. Создавайте новую базу. В качестве сервера БД указываем 127.0.0.1, пользователя postgres и пароль, который вы задали ранее.

Создание базы 1С на Linux

Если получите ошибку "Ошибка соединения с рабочим процессом." и дальше некоторые подробности сетевых проблем, то добавьте DNS запись или запись в файл hosts с именем и ip адресом вашего сервера 1С. Потом попробуйте создать базу снова. Так же эта ошибка может появляться, если включен и не настроен firewall. Вам как минимум нужно открыть порты tcp 1540, 1541, 1560.

После этого к базе можно подключиться обычной платформой и залить конфигурацию.

Добавление базы 1С на debian

В целом, на этом настройка сервера 1С закончена. Дальше ставятся софтовые лицензии и начинается работа. Если у вас лицензия аппаратная, то необходимо установить и настроить HASP Licence manager.

Установка и настройка HASP Licence manager

Для того, чтобы компьютеры могли получать лицензии по сети от сервера, куда вставлен usb ключ, на него надо установить и запустить HASP Licence manager. Для начала вставьте ключ в сервер или пробросьте в виртуальную машину гипервизора (proxmox умеет это делать) и проверьте, видит ли его система:

# lsusb | grep -i hasp

Вы должны увидеть устройство с именем наподобие Aladdin Knowledge Systems HASP copy protection dongle. Если его нет, то разбирайтесь с подключением и пробросом usb портов, если у вас это виртуальная машина. Одним из вариантов проброса hasp ключа по сети является использование usbipd-win.

Дальше идем на страницу https://download.etersoft.ru/pub/Etersoft/HASP/stable/x86_64/Debian/, выбираем свою версию системы и скачиваем файл:

  • haspd_8.23-eter3debian_amd64.deb

Устанавливаем пакет haspd, но перед этим установим пару пакетов - make и libc6-i386, если они у вас отсутствуют:

# apt install make libc6-i386
# dpkg -i haspd_8.23-eter3debian_amd64.deb

Установка HASP Licence manager на Debian

Если получите ошибку:

/etc/init.d/haspd: 24: SourceIfNotEmpty: not found

То у вас скорее всего пакет с ошибкой в systemd unit. Исправить ошибку очень просто. Открываем файл /etc/init.d/haspd и в 24 строке добавляем пропущенное равно = в указанном параметре. Должно быть вот так:

SourceIfNotEmpty=/etc/sysconfig/haspd

После этого перечитываем настройки systemd:

# systemctl daemon-reload

Запускаем службу haspd и добавляем в автозагрузку:

# systemctl start haspd
# systemctl enable haspd

Проверяем, запустился ли hasp:

# netstat -tulnp | grep hasp
tcp        0      0 0.0.0.0:1947            0.0.0.0:*               LISTEN      1330/hasplmd        
tcp6       0      0 :::1947                 :::*                    LISTEN      1330/hasplmd        
udp        0      0 0.0.0.0:1947            0.0.0.0:*                           1330/hasplmd        
udp6       0      0 :::1947                 :::*                                1330/hasplmd        

Все в порядке. Теперь лицензии должны нормально работать, а клиенты их получать по сети.

Бэкап баз 1С на postgresql

Без регулярного автоматического бэкапа баз 1С невозможно себе представить эксплуатацию. Так что этим вопросом надо заняться в первую очередь после настройки сервера и добавления баз. Посмотрим, какие базы postgresql у нас существуют:

# sudo -u postgres psql -U postgres -l

Список баз 1С на postgresql

Я создал две тестовые базы: buh30 и zup31. Их и будем бэкапить. Я для этого предлагаю использовать обычный pg_dump, а затем дамп сразу же сжимать архиватором pigz. Его отличительная особенность в том, что он умеет жать всеми ядрами процессора, а не только одним, как, к примеру, gzip. Более подробно про pigz я рассказывал в заметке.

В самом простом случае бэкап базы данных выглядит следующим образом:

# sudo -u postgres /usr/bin/pg_dump -U postgres buh30 | pigz > /mnt/backup/buh30.sql.gz

Если посмотреть на dump, то в случае успешного создания, в начале дампа будет строка:

-- PostgreSQL database dump

а в конце:

-- PostgreSQL database dump complete

В будущем эта информация нам понадобится для мониторинга создания бэкапов и получения уведомления, если дамп не завершился корректно.

Для того, чтобы бэкапить автоматически все базы сразу я предлагаю использовать простой скрипт.

#!/bin/bash

BASES=("buh30" "zup31")
#BASES=`sudo -u postgres /usr/bin/psql -U postgres -l | grep "_buh\|_zup" | awk '{print $1}'`
DATA=`date +"%Y-%m-%d_%H-%M"`
LOGS=/var/lib/pgpro/service_logs
BACKUPDIR=/var/lib/pgpro/backup

for i in ${BASES[@]};
    do
    echo "`date +"%Y-%m-%d_%H-%M-%S"` Start backup $i" >> $LOGS/$DATA.log
    sudo -u postgres /usr/bin/pg_dump -U postgres $i | pigz > $BACKUPDIR/$DATA-$i.sql.gz
    echo "`date +"%Y-%m-%d_%H-%M-%S"` End backup $i" >> $LOGS/$DATA.log
    done

В скрипте предложены 2 варианта указания списка баз для бэкапа:

  1. Последовательное перечисление.
  2. Бэкап всех баз, что имеют в своем названии _zup или _buh.

Я обычно ставлю некоторые метки в именах баз, чтобы потом было проще формировать списки для бэкапа. Например, все тестовые базы можно помечать в имени _test - company_buh30_test и потом исключать из списка бэкапа все базы с дополнением _test в названии. Либо просто все рабочие базы сразу именовать с приставкой _buh или _zup и по этому признаку их выводить в список.

Для работы скрипта в таком виде, не забудьте создать каталоги:

# mkdir -p /var/lib/pgpro/service_logs
# mkdir -p /var/lib/pgpro/backup

И еще важно учесть, что так как в скрипте мы запускаем команды от системного пользователя postgres, необходимо, чтобы у него был доступ к скрипту, когда добавите его в планировщик.

На выходе у вас получится примерно такой список бэкапов баз 1С из postgresql.

Бэкап баз 1С на postgresql

В дальнейшем мы их будем забирать отсюда и удалять.

Обслуживание баз 1С на сервере PostgreSQL

В качестве обслуживания баз 1С на сервере PostgreSQL я предлагаю регулярно запускать следующие процедуры:

  1. Чистку базы данных - vacuumdb.
  2. Перестройку индексов - reindexdb.

Я не буду подробно расписывать для чего всё это нужно. Эта информация без проблем ищется в интернете. Сразу даю готовый скрипт для обслуживания всех баз 1С. Список формируется по аналогии со скриптом для бэкапа - либо вручную, либо по какому-то признаку.

#!/bin/bash

BASES=("buh30" "zup31")
#BASES=`sudo -u postgres /usr/bin/psql -U postgres -l | grep "_buh\|_zup" | awk '{print $1}'`
DATA=`date +"%Y-%m-%d_%H-%M"`
LOGS=/var/lib/pgpro/service_logs
BACKUPDIR=/var/lib/pgpro/backup

for i in ${BASES[@]};
    do
    echo "`date +"%Y-%m-%d_%H-%M-%S"` Start vacuumdb $i" >> $LOGS/$DATA.log
    sudo -u postgres /usr/bin/vacuumdb --full --analyze --username postgres --dbname $i
    echo "`date +"%Y-%m-%d_%H-%M-%S"` End vacuumdb $i" >> $LOGS/$DATA.log
    echo "`date +"%Y-%m-%d_%H-%M-%S"` Start reindexdb $i" >> $LOGS/$DATA.log
    sudo -u postgres /usr/bin/reindexdb --username postgres --dbname $i
    echo "`date +"%Y-%m-%d_%H-%M-%S"` End reindexdb $i" >> $LOGS/$DATA.log
    echo "=========================================" >> $LOGS/$DATA.log
    done

Я обычно запускаю этот скрипт по ночам сразу после выполнения бэкапа. Имейте ввиду, что подобное обслуживание может занимать много времени, которое будет зависеть от размера баз и производительности сервера. Убедитесь, что с базами никто не работает в часы обслуживания. Если в будни это сложно отследить, так как могут выполнять какие-то работы программисты 1С или обслуживающий персонал, то перенесите выполнение раз в неделю в какой-то выходной день.

Проверка бэкапов postgresql баз

То, что вы настроили дамп баз 1С, еще не значит, что у вас успешно работает бэкап. Дампы надо обязательно проверять. Я для этого использую еще один подобный сервер. Обычно просто клонирую виртуальную машину после того, как полностью её настрою. Тут встает вопрос лицензионности. Сервер 1С на Linux не просит на себя лицензию до какого-то числа пользователей. Точно не помню сколько их может быть, так как в проде всегда покупается лицензия. А вот клон запускается без лицензии только для проверки бэкапов. Пользователи к нему не подключаются. Не уверен, что такая схема эксплуатации допускается без приобретения лицензии, так что используйте её на свой страх и риск.

Как я уже сказал, делается копия рабочего сервера. На нём создаются те же самые базы 1С через панель администрирования. Далее мы на этот сервер забираем дампы с прода. Я это делаю с помощью rsync:

# rsync -av --progress --files-from=<(ssh root@10.20.1.30 '/usr/bin/find /var/lib/pgpro/backup -type f -mtime -1 -exec basename {} \; | egrep -v timestamp') root@10.20.1.30:/var/lib/pgpro/backup/ /data/backup/

Тут немного замороченная конструкция получилась. Смысл её в том, что нам надо забрать дампы только за последние сутки, поэтому список для копирования мы формируем на исходном сервере с помощью подключения туда по ssh. Подробно эту схему описал в отдельной заметке на канале. В моем примере timestamp это имя файла, который нам не надо копировать.

Эта команда оформляется в скрипт и регулярно запускается. Дальше работает следующий скрипт, который восстанавливает базы данных из дампов.

#!/bin/bash

BASES=("buh30" "zup31")
#BASES=`sudo -u postgres /usr/bin/psql -U postgres -l | grep "_buh\|_zup" | awk '{print $1}'`
BACKUP_DIR="/data/backup"

for i in ${BASES[@]};
    do
    echo "`date +"%Y-%m-%d_%H-%M-%S"` Drop database ${i}"
    sudo -u postgres /usr/bin/dropdb -U postgres ${i}
    echo "`date +"%Y-%m-%d_%H-%M-%S"` Create database ${i}"
    sudo -u postgres /usr/bin/createdb -U postgres -T template0 ${i}
    echo "`date +"%Y-%m-%d_%H-%M-%S"` Start extract $i"
    /usr/bin/find /data/backup -type f -name *${i}* -exec /usr/bin/unpigz '{}' \;
    echo "`date +"%Y-%m-%d_%H-%M-%S"` End extract $i"
    echo "`date +"%Y-%m-%d_%H-%M-%S"` Start restore $i"
    sudo -u postgres /usr/bin/psql -U postgres ${i} < ${BACKUP_DIR}/`ls ${BACKUP_DIR} | grep ${i}` 1>/dev/null
    echo "`date +"%Y-%m-%d_%H-%M-%S"` End restore $i"
    echo "`date +"%Y-%m-%d_%H-%M-%S"` rm dump ${i}"
    /usr/bin/rm ${BACKUP_DIR}/`ls ${BACKUP_DIR} | grep ${i}`
    done

Для каждой базы 1C в postgresql последовательно выполняются следующие действия:

  1. Удаление базы - dropdb.
  2. Создание базы - createdb.
  3. Распаковка дампа - unpigz.
  4. Восстановление базы из дампа.
  5. Удаление дампа.

Я не делаю тут никаких проверок на ошибки, так как далее у меня будет автоматическая выгрузка этих баз в dt и там я уже буду смотреть, всё ли в порядке. Если вы этого не будете делать, то обязательно следите за результатами работы этого скрипта, чтобы увидеть какие-то проблемы в процессе. Если с дампами всё в порядке, то восстановление пройдет штатно и никаких ошибок не будет.

Выгрузка баз 1С в dt из командной строки Linux

Для того, чтобы точно убедиться в целостности бэкапов баз 1С, настроим автоматическую выгрузку баз, восстановленных из них, в dt файлы. Если эта процедура пройдет успешно можно считать, что бэкапы живые. Существует 2 способа это сделать:

  1. Использовать обычный клиент 1С в режиме конфигуратора.
  2. Воспользоваться автономным сервером 1С.

Изначально статья писалась с использованием клиента 1С, поэтому дальше пойдёт описание того, как его запустить через консоль, без установки полноценного графического окружения. Если вам нужна только выгрузка баз в dt, то клиент тут избыточен. Проще использовать автономный сервер. Как это сделать, я покажу в самом конце этого раздела.

Основная сложность с клиентом будет в том, что у нас сервер без графического окружения и устанавливать его мне не хочется, так что будем обходиться без него. Нам нужно будет установить программу xvfb для запуска клиента 1С в консоли. А для ее работы нужен пакет libwebkitgtk-3.0-0, которого нет в репах для Debian 11.

Я долго возился с этой историей и никак не мог разрешить все зависимости для корректной работы xvfb. В итоге решил вопрос подключением репозитория от stretch. Для этого создаем файл /etc/apt/sources.list.d/1с-stretch.list следующего содержания:

deb http://archive.debian.org/debian stretch main contrib non-free

После этого обновляем пакеты и ищем libwebkitgtk.

# apt update
# apt search libwebkitgtk

Установка libwebkitgtk на Debian

Есть то, что нам нужно. Устанавливаем:

# apt install libwebkitgtk-3.0-0

Если все прошло успешно, то ставим дальше xvfb:

# apt install xvfb dbus-x11

Теперь попробуем сделать выгрузку базы 1С в dt напрямую через консоль:

# xvfb-run -a /opt/1cv8/x86_64/8.3.22.1851/1cv8 CONFIG /DumpIB ~/buh30.dt /Out ~/out.log /S 10.20.1.30\\buh30 /N admin /P password /DumpResult ~/result.log
/opt/1cv8/x86_64/8.3.22.1851/1cv8 бинарник 1С, не забудьте изменить путь в соответствии со своей версией платформы
CONFIG указываем, что используем конфигуратор
/DumpIB ~/buh30.dt выгружаем базу в dt файл
/Out ~/out.log лог записываем в отдельный файл
/S 10.20.1.30\\buh30 путь к базе на сервере 1С
/N admin /P password учетка для доступа к базе
/DumpResult ~/result.log результат работы записываем в отдельный лог

Если у вас всё получилось с первого раза, поздравляю. У меня редко так получается. То лицензию не найдет клиент, то учётка неверная, то еще что-то. Постоянно возникают какие-то накладки, а так как у тебя нет графического окружения, ты не можешь посмотреть, что происходит с клиентом 1С и почему он не выполняет выгрузку в dt. Но эту проблему можно решить. Установим x11vnc, подключим сервер в экрану xvfb и посмотрим, что там происходит.

# apt install x11vnc

Теперь снова запустим xvfb-run и подключимся к его экрану.

# xvfb-run -a /opt/1cv8/x86_64/8.3.22.1851/1cv8 CONFIG /DumpIB ~/buh30.dt /Out ~/out.log /S 10.20.1.30\\buh30 /N admin /P password /DumpResult ~/result.log

Посмотрим параметры, с которыми запустился xvfb:

# ps ax | grep xvfb-run
22027 pts/0    S+     0:00 /bin/sh /usr/bin/xvfb-run -a /opt/1cv8/x86_64/8.3.22.1851/1cv8 CONFIG /DumpIB /root/buh30.dt /Out /root/out.log /S 10.20.1.30\buh30 /N Администратор /DumpResult /root/result.log
22037 pts/0    Sl+    0:00 Xvfb :100 -screen 0 1280x1024x24 -nolisten tcp -auth /tmp/xvfb-run.uNVA1Y/Xauthority
22157 pts/2    S+     0:00 grep xvfb-run

Я выделил жирным ту информацию, что для нас важна. Используем её для запуска vnc сервера:

# x11vnc -display :100 -bg -nopw -listen 10.20.1.30 -xkb -auth /tmp/xvfb-run.uNVA1Y/Xauthority

Запуск x11vnc сервера

Если всё в порядке, то x11vnc сервер запустится на указанном адресе и порту. Не забудьте открыть его в firewall. Теперь можно подключиться любым vnc клиентом к нашему серверу и посмотреть, что там происходит с 1С. Авторизация не потребуется.
Выгрузка баз 1С в dt из командной строки Linux

В моем случае все остановилось на окне логина. Я для примера специально указал несуществующую учётную запись, поэтому процесс выгрузки в dt не прошёл, а мы остались на моменте логина в систему. Таким образом вы можете отладить проблемы с подключением linux клиента 1C даже не имея полноценного графического окружения на сервере. Ещё одной причиной того, что выгрузка не будет работать — сервер не видит клиентскую лицензию, если она установлена не на нём.

Если вы всё укажете верно, то выгрузка пройдёт корректно. На выходе у вас будет:

  1. dt файл с базой 1С
  2. out.log с информацией в нём в случае успеха: "Выгрузка информационной базы успешно завершена"
  3. result.log с информацией в нем в случае успеха: "0"

Записи в лог файлах можно использовать для мониторинга результатов выгрузки. Напомню, что я выгрузку в dt настроил на втором сервере, где тестируются бэкапы. Вы можете всё то же самое настроить и на боевом, если у вас есть потребность в сохранении .dt выгрузок через консоль в linux сервере. Это достаточно удобно для автоматизации. Можно не только дампы postgresql баз снимать, но подстраховываться 1сными выгрузками. Единственное, в чем будет проблема, если делать это на боевом - вам придётся всех выгонять из баз, иначе выгрузка не пройдет. На резервном сервере с этим проблем нет, так как там никто не работает, поэтому dt я выгружаю именно там и потом передаю их на бэкап сервер. Плюс, на этом сервере стоит во всех базах блокировка регламентных заданий.

В завершении этой темы приведу свой простой скрипт по автоматизации этого процесса:

#!/bin/bash

BASES_ZUP=`/usr/bin/psql -U postgres -l | grep "_zup" | awk '{print $1}'`
BASES_BUH=`/usr/bin/psql -U postgres -l | grep "_buh" | awk '{print $1}'`
BACKUP_DIR="/data/dt"
USER_ZUP="adminzup"
PASS_ZUP="passzup"
USER_BUH="adminbuh"
PASS_BUH="passbuh"

/usr/bin/rm -f /data/dt/*

for i in ${BASES_BUH};
    do
    echo "`date +"%Y-%m-%d_%H-%M-%S"` Start export dt database ${i}"
    /usr/bin/xvfb-run -a /opt/1cv8/x86_64/8.3.22.1851/1cv8 CONFIG /DumpIB ${BACKUP_DIR}/`date +"%Y-%m-%d_%H-%M-%S"`-${i}.dt /Out ${BACKUP_DIR}/`date +"%Y-%m-%d_%H-%M-%S"`-${i}-out.log /S 10.1.5.12\\${i} /N ${USER_BUH} /P ${PASS_BUH} /DumpResult ${BACKUP_DIR}/`date +"%Y-%m-%d_%H-%M-%S"`-${i}-result.log
    echo "`date +"%Y-%m-%d_%H-%M-%S"` Finish export dt database ${i}"
    done

for i in ${BASES_ZUP};
    do
    echo "`date +"%Y-%m-%d_%H-%M-%S"` Start export dt database ${i}"
    /usr/bin/xvfb-run -a /opt/1cv8/x86_64/8.3.22.1851/1cv8 CONFIG /DumpIB ${BACKUP_DIR}/`date +"%Y-%m-%d_%H-%M-%S"`-${i}.dt /Out ${BACKUP_DIR}/`date +"%Y-%m-%d_%H-%M-%S"`-${i}-out.log /S 10.1.5.12\\${i} /N ${USER_ZUP} /P ${PASS_ZUP} /DumpResult ${BACKUP_DIR}/`date +"%Y-%m-%d_%H-%M-%S"`-${i}-result.log
    echo "`date +"%Y-%m-%d_%H-%M-%S"` Finish export dt database ${i}"
    done

В моем примере все базы промаркированы в имени файла приставкой _zup или _buh. У каждого типа базы своя учётка для экспорта в dt. Перед началом экспорта я удаляю все старые выгрузки, которые лежат в директории, так как они уже уехали на бэкап сервер. Если вам не нужно ничего удалять, уберите этот код с rm. Разумно оставить этот запасной сервер и в качестве хранения бэкапов, так как тут они уже проверены. А при передачи их по сети есть шанс, что они побьются и их по хорошему надо будет еще раз проверять уже на месте окончательного хранения.

С помощью автономного сервера база выгружается вот так:

# /opt/1cv8/x86_64/8.3.22.1851/ibcmd infobase dump --db-server=localhost --dbms=postgresql --db-name=basa1 --db-user=postgres --db-pwd=parol /mnt/backup/basa1.dt

Можете в скриптах использовать этот способ. Через консоль и автономный сервер можно загрузить данные в базу 1С из dt файла. К примеру, загрузим предыдущую выгрузку в новую базу:

# /opt/1cv8/x86_64/8.3.18.1363/ibcmd infobase create --db-server=localhost --dbms=postgresql --db-name=basa2 --db-user=postgres --db-pwd=parol --create-database --restore=/mnt/backup/basa1.dt

С помощью автономного сервера можно проверить базу 1С на ошибки прямо в консоли:

# /opt/1cv8/x86_64/8.3.18.1363/ibcmd infobase config check --db-server=localhost --dbms=postgresql --db-name=basa2 --db-user=postgres --db-pwd=parol

Мониторинг бэкапов 1С

Разберемся далее с тем, как нам мониторить бэкапы, чтобы быть уверенным в том, что у нас всё в порядке. Я тут использую многоступенчатый подход:

  1. Проверяю, что дамп 1с базы, сделанный напрямую из postgresql, завершился корректно.
  2. Слежу за экспортом в dt баз, восстановленных с дампов боевого сервера.
  3. Отправляю всё на бэкап сервер и слежу за тем, чтобы туда приехало всё, что должно приехать.

Статья уже получилась очень объемной, так что я не буду в ней раскрывать по шагам тему мониторинга, потому что всё это у меня уже описано в других статьях. Я дам на них ссылки и прокомментирую. Весь мониторинг настроен в Zabbix.

Мониторинг дампов postgresql баз делаем по аналогии с тем, как я описал мониторинг дампов mysql - https://serveradmin.ru/nastrojka-mysqldump-proverka-i-monitoring-bekapov-mysql/ Берём начало дампа и конец. Смотрим, есть ли там нужные строки, которые характеризуют корректность выполнения дампа. Если строки есть, значит всё ОК. Какие это строки, я указывал в разделе про создание дампов.

В этой же статье выше показано, как мониторить лог файл с результатами процесса. То есть берем логи с выгрузки в dt и анализируем их. Если нет необходимых нам строк, означающих, что все в порядке, срабатывает триггер в zabbix.

Информация по мониторингу бэкапов есть в моей статье - https://serveradmin.ru/monitoring-bekapov-s-pomoshhyu-zabbix/. Там рассмотрены различные подходы к этой процедуре. В рамках данной статьи я бы сделал следующие проверки:

  1. Создавал тестовый файл в директории источника бэкапов, а после передачи бэкапов на сервер для долгосрочного хранения там бы проверял, есть ли этот тестовый файл и какая у него дата создания. Его наличие и свежая дата будет означать, что процесс переноса данных прошел успешно и в запланированное время.
  2. Так же я бы следил за размером и датой создания самих дампов. Если размер ниже разумного или среднего за какой-то период, то выводил бы предупреждение.

Все это есть с примерами в статье, которую я привёл.

Заключение

Я рассмотрел практически все аспекты, связанные с разворачиваем Сервера 1С с базой PostgreSQL полностью на Linux сервере. Весь материал не гипотетический, а основанный на моем лично опыте подобных установок. Все примеры, скрипты, подходы взяты с работающих по этой схеме серверов. Поэтому нужно понимать, что описанная выше настройка не набор лучших практик, а мой субъективных опыт. Возьмите его себе на вооружение, но настройте всё так, как нужно именно вам и как вы считаете правильно. Если я что-то делаю неверно и можно сделать лучше, удобнее, поделитесь этим в комментариях.

В дополнение к данной статье будет полезна ссылка на публикацию баз 1С без графического окружения. В примере используется операционная система Centos, но для нашего случая с Debian всё будет аналогично практически один в один. Только веб сервер называется по-разному - там httpd, а здесь apache2.

Вообще, посмотрев на всё настроенное выше, может возникнуть вопрос, зачем вообще все это делать у себя? Нужно железо, администратор с хорошей квалификацией, который сможет всё это настроить и поддерживать. Проще купить готовый сервис и платить абонентскую плату. А всё остальное возьмет на себя сервис. На практике не всегда это получается удобнее и дешевле. С бэкапами и их проверкой всё равно придётся решать вопрос самостоятельно, потому что полностью доверить его людям со стороны может быть опасно.

Онлайн-курс по устройству компьютерных сетей.

На углубленном курсе "Архитектура современных компьютерных сетей" вы с нуля научитесь работать с Wireshark и «под микроскопом» изучите работу сетевых протоколов. На протяжении курса надо будет выполнить более пятидесяти лабораторных работ в Wireshark.

Помогла статья? Подписывайся на telegram канал автора

Анонсы всех статей, плюс много другой полезной и интересной информации, которая не попадает на сайт.

Автор Zerox

Владимир, системный администратор, автор сайта. Люблю настраивать сервера, изучать что-то новое, делиться знаниями, писать интересные и полезные статьи. Открыт к диалогу и сотрудничеству. Если вам интересно узнать обо мне побольше, то можете послушать интервью. Запись на моем канале - https://t.me/srv_admin/425 или на сайте в контактах.

180 комментариев

  1. Максим

    Добрый день, спасибо за статью - отличный мануал.

    Подскажите, может у кого получилось настроить Kerberos аутентификацию через Apache2 используя модуль libapache2-mod-auth-gssapi? Так как libapache2-mod-auth-kerb больше не поддерживается с Debian 11.

  2. 1) На сайте 1С есть уже DEB дистрибутив сервера. Установка простая через dpkg -i ...
    2) В установке postgrespro другой путь для скрипта установки репозитория (а может у вас опечатка). не wget https://repo.postgrespro.ru/1c-15/keys/pgpro-repo-add.sh, а wget https://repo.postgrespro.ru/1c/1c-15/keys/pgpro-repo-add.sh

    А так делал по инструкции (кроме установки самой 1С, ставил из deb), всё норм. Спасибо!

    • Путь скорее всего поменялся. Он открыто нигде не представлен, а присылается на почту после заполнения формы на сайте.

  3. Не нашла нигде информацию как настроить 1с и postgres, если они стоят не на одном сервере, а на разных, можете подсказать в каких где в конфигурационных файлах это настраивается?

    • Каких-то особых настроек при этом делать не нужно. Ставьте на разные сервера, а потом в оснастке администрирования 1С при создании базы укажите адрес сервера с базой. Адрес postgresql сервера указывается только в свойствах базы. Больше нигде.

      • Спасибо) да, всё работает как ни странно, единственное, что я сделала, так в этом конфиг файле /var/lib/pgpro/1c15/data/postgresql.conf поменяла значение переменной listen_addresses = '*'

  4. Николай

    Остановился на этапе заливки конфигурации, подскажите как это сделать?

    • Николай

      Поправлюсь: конфигурацию ведь надо залить на сервер, а не указать её расположение на данном компьютере или в локальной сети. То есть, прежде чем указать её расположение на сервере 1С: Предприятия, её туда надо как-то залить, а вот как? Я ожидал простой от 1Сника, у которого купил лицензии, что это делается через Конфигуратор, ан нет, он отвечает, что это делается на самом debian

      • Конфигурация заливается через платформу, установленную на клиенте. К серверу это не имеет отношения. Специально на сервере ничего делать не надо.

        • Николай

          Никак не получается, уже два раза по инструкции всё переустановил, при попытке загрузить информационную базу в конфигураторе, выгрузить её, запустить 1С - всё время вылезает одно и тоже: Ошибка SDBL: в схеме базы данных нет таблицы с именем ExtensionsInfoNGS
          1С:Предприятие 8.3 (8.3.24.1368)

          • А пустую базу у вас получается создать? Ошибка выходит, когда через конфигуратор заливаете туда конфигурацию?

            • Николай

              Да, когда пытаюсь залить через конфигуратор. Пустая база, я так полагаю, создалась в консоли администрирования

              • Николай

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

                • Николай

                  Снова начал установку, заметил это при установке локали:
                  *** update-locale: Warning: LANGUAGE ("en_US:en") is not compatible with LANG (ru_RU.UTF-8). Disabling it.
                  Такое должно быть?

                  • Николай

                    Сразу, ещё раз запустил установку локали - Generation complete
                    Означает ли, что реально получилось... посмотрим

                    • Николай

                      sudo -u postgres /usr/bin/psql -U postgres -c "alter user postgres with password '7738929sdff';"
                      could not change directory to "/root": Отказано в доступе
                      ALTER ROLE
                      Новый сюрприз )

                    • Это не ошибка работы команды sql. Можно игнорировать.

                    • Николай

                      Плюнул на 11 debian и всё поставил на 12 - получилось! Единственная заминка была - после команды
                      wget https://repo.postgrespro.ru/1c-16/keys/pgpro-repo-add.sh
                      репозиторий всё равно создаётся для 15 postgres. Не понял почему, исправил руками и 1С запустилась с 1 раза!
                      Спасибо большое Владимир! После всех неудач и разочарований от них всё равно не хотел искать другую статью, ваш очень подробная, с наиболее детальными объяснениями, ликбезом по всем нужным полезным и необходимым нюансам!
                      Успехов вам и буду рад найти именно ваш труд, когда понадобится помошь!

  5. Андрей

    Сперва хочется поблагодарить за подробную статью, большой труд, спасибо!
    Столкнулся с проблемой раздачи лицензий с HASP-ключа на своём сервере. У меня сервер на Astra linux, но я вижу что у вас такая же ситуация.
    Для того чтоб менеджер лицензий раздавал лицензии клиентам в сети надо чтоб был открыт порт UDP 475 на сервере (по умолчанию), но у вас в выводе команды netstat видно, что порт этот не слушает, только 1947. У меня точно такая же ситуация. Пробовал устанавливать разные пакеты из репозитория download.etersoft.ru, но результат не меняется. Клиенты не могут получить лицензию с сервера.
    На данный момент менеджер лицензий установлен на том же сервере, где сервер 1С, а раздачей лицензий занимается сам сервер 1С. Но в случае если лицензии раздает сервер, то каждая сессия клиента забирает одну лицензию. Если вы запустили два экземпляра 1С на одном компе, то будут выданы две лицензии, что совсем не удобно с ограниченным количеством лицензий.
    Кто-то может подсказать в чем проблема и как её решить?

    • Статью я скорее всего писал с тестового сервера, поэтому работу hasp мог не проверить. Но у меня есть работающие сервера на Debian, где ключ воткнут в сервер и настроено примерно так же, как в статье. Я не помню, чтобы что-то особенное делал с hasp. Просто устанавливал и всё.

      • Андрей

        А подскажите, у вас лицензии раздает сервер 1с или десктопы сами получают лицензию по сети? Hasp ключ у вас сетевой? И можете посмотреть слушает ли у вас сервис hasp порт UDP 475?

        • Клиенты сами получают по сети. UDP порт открыт:

          # netstat -tulnp | grep 475
          udp 0 0 0.0.0.0:475 0.0.0.0:* 760/hasplm

    • Геннадий

      Удалось ли решить проблему раздачи пользовательского ключа по сети широкополосным запросом?

  6. При выгрузке в DT с помощью ibcmd - выдает "Для выполнения операции требуется аутентификация в информационной базе. ..логин ..пароль"
    Ранее программа работала без пользователя 1С, теперь надо добавлять еще параметры
    --user – имя пользователя в 1С от этой базы.
    --password – и пароль от него.

    • Да, и это очень мешает. Не знаю, зачем они ввели обязательную аутентификацию в ibcmd. Это сильно всё усложнило.

  7. Спасибо Debian 12, Postgre 16, 1С 8.3.23.1997 от 05.12.23 - установка прошла успешно

  8. Андрей

    Добрый день!
    Вопрос совсем не по теме, если нужно направить вопрос в другую тему, то прошу направить куда необходимо.
    У меня так раскидано пространство на сервере
    nvme1n1 259:0 0 1,8T 0 disk
    ├─nvme1n1p1 259:2 0 1G 0 part /boot/efi
    └─nvme1n1p2 259:3 0 1,8T 0 part
    └─md0 9:0 0 1,8T 0 raid1
    ├─md0p1 259:7 0 3G 0 part /boot
    ├─md0p2 259:8 0 100G 0 part /var
    ├─md0p3 259:9 0 128G 0 part [SWAP]
    └─md0p4 259:10 0 1,6T 0 part /
    nvme2n1 259:1 0 1,8T 0 disk
    ├─nvme2n1p1 259:4 0 1G 0 part
    └─nvme2n1p2 259:5 0 1,8T 0 part
    └─md0 9:0 0 1,8T 0 raid1
    ├─md0p1 259:7 0 3G 0 part /boot
    ├─md0p2 259:8 0 100G 0 part /var
    ├─md0p3 259:9 0 128G 0 part [SWAP]
    └─md0p4 259:10 0 1,6T 0 part /

    Но как оказалось в /var хранятся базы , а данные раздел у меня практически заполнился, как можно отщепнуть пространство у корня и добавить в var, при условии что диски у меня в рейде?

    • Проще всего перенести содержимое баз из /var куда-то в корень. Там, судя по всему, места много. А в /var оставить символьную ссылку на новое место. Это намного проще, чем передвигать разделы. А в вашем случае расширить /var вообще не получится, так как он зажат двумя соседними разделами.

    • Андрей

      Либо же так же перенести базы в корень и в конфиге Postgresql указать новый путь?

      • Можно и так. Но мне символьная ссылка нравится больше. Мне кажется удобнее сохранять оригинальные директории для стандартного софта. Так меньше шанса получить в какой-то момент сюрприз.

        • Андрей

          Благодарю за помощь!
          P.S.
          При попытке зарегистрироваться на сайте, отправляется письмо с ссылкой на создание пароля, но при переходе по ссылке отсутствует форма для установки пароля.

  9. Добрый день! Спасибо за труды, весьма помогает и не только эта статья) 1с перестал продавать лицензию на сервер с аппаратным ключом, только программный, в связи с этим начинаются проблемы с виртуализацией, те изменили что то в виртуальной машине, нужен новый пин? Да и не совсем понятно как это все настраивается.

  10. Добрый день Владимир. Подскажите пожалуйста, мне нужно чтобы перед командой shutdown, poweroff, reboot, выполнялся скрипт на остановку 1с сервера и Postgresql. Теперь поподробней, есть Debian 12, на отдельном винте установлен 1с сервер и Postgresql 16, при выключении или перезагрузке, ломаются базы, система сначала начинает выполнять команду umount. А нужно чтобы она сначала остановила 1с и Postgres. Я проверял, если ручками выполнить остановку 1с и Posgresql все проходит без ошибок.
    Нужна так сказать, система от дураков.

  11. Дмитрий

    Добрый день!
    Спасибо за статью. Ставил на Debian 12. На три виртуалки: отдельно 1С-Сервер, Веб-сервер и сервер СУБД PostgresPro 1c-16. Технологическая платформа 1С устанавливалась из программы установки setup-full-8.3.23.1865-x86_64.run
    Хочу отметить пару особенностей:
    1. на опубликованных базах получал предупреждение: "На сервере отсутствуют шрифты из состава Microsoft Core Fonts..."
    Сначала подумал, что Веб-сервер не может отрисовать, но оказалось, что шрифты надо ставить на виртуалку с 1С-Сервером
    # apt install software-properties-common -y
    # apt-add-repository contrib
    # apt install gnupg2 sudo ttf-mscorefonts-installer fontconfig -y
    # fc-cache -fv
    2. Настроить подключение к СУБД MSSQL 2019 не удалось, не смотря на долгую. но успешную установку драйвера ODBC от Microsoft. Ошибку получил на уровне 1С-сервера при создании информационной базы 1С

  12. Добрый день!
    Спасибо за отличнейшую инструкцию!
    Вопрос мой будет немного на другую тему: прочёл вашу статью и взялся экспериментировать на виртуалках Debian 11,12, Ubuntu- всё запускалось и работало. В основном тестировал производительность в разных условиях. И тут у меня образовался новый железный сервер. Установил на нём Debian+Postgres, создал тестовую базу с помощью rac, пытаюсь зайти конфигуратором чтобы загрузить копию рабочей базы (в организации используют виндовый сервер 1С+MSSQL). а он мне -"у вас нет лицензии"! Что это за номер? На виртуалках такого не было, к тому же, вроде бы, линуксовый сервер поддерживает до 10 клиентов без лицензии. Или моя информация устарела?
    И ещё- после systemctl link /opt/1cv8/x86_64/8.3.22.1851/srv1cv8-8.3.22.1851@.service daemon-reload не обнаруживат нового сервиса, приходится при запуске руками имя сервиса (или демона?) писать. После первого запуска всё нормализуется. Это фича Debian'а?

    • Про лицензию он какую писал? Серверную или клиентскую? Серверная лицензия не нужна на Linux для подключения до 10-ти клиентов, но клиентская нужна. По сервисам не понял, в чём суть ошибки, но никаких особых фич у Debian нет. Всё работает как обычно.

      • Владимир

        "Не обнаружена лицензия на запуск сервера". Скрин нельзя прикрепить? Даже ключи в него разные втыкал- не работает.
        По сервисам никакой ошибки, протсо в Убунте после daemon-reload новый сервис уже определяется, а здесь не так немного.

  13. Александр

    Стоит добавить, что если вы ставите версию постгреса от postgrespro-1c, то в переменную PATH нужно добавить :/opt/pgpro/1c-15/bin. Иначе скрипты и консольные утилиты жить не будут.

  14. Николай

    Здравствуйте! Мне тут наш 1Сник пытается рассказать, что правильно надо PostgreSQL и технологическую платформу (я так понял, но не уверен с его слов) ставить на разные физические машины. А по вашей инструкции технологическая платформа Linux ставится внутри PostgreSQL. Подскажите, что он имеет ввиду. Грубо говоря с его слов - сервер 1С на одной машине, PostgreSQL на другой. Есть ли такой вариант установки или он что-то путает?

    • Это нужно, если у вас есть необходимость увеличить производительность системы, а в рамках одного сервера это невозможно из-за каких-то ограничений. Например, из-за недостаточной производительности дисков. Тогда можно сервисы разнести на разные сервера с разными дисками. Если проблем с производительностью нет, то можно всё ставить на один сервер. Это не принципиально и проблем не будет.

  15. Добрый день! Я пришла в новую контору и у них такая структура 1С : есть 2 терминальные машины (win) через которые пользователи 1С подключаются к серверу 1С, который в свою очередь подключается к линуксовой виртуалке с postrgree ... Сервер 1С стоит на машине с win Server 2008 R2, базы - штук 8 .. все такое неповоротливое . Около 5 минут или даже больше открывается 1С . Пользователей 10-14 .. Не знаю за что взяться. Надо как то собрать на новых виртуалках рабочую схему - протестировать с базой. но не знаю как быть с лицензиями. Какую схему посоветуете... чтобы перенести с наименьшими затратами, остановиться не можем, у нас отель

    • Посмотрите для начала регламентные задания в базах, которые работают в фоне. Если их никто не настраивал, то там куча заданий которые часто запускаются и сильно расходуют ресурсы сервера. 10-14 пользователей это очень мало. Вытягивать должно любое мало мальски свежее железо. Простая перенастройка и обновление систем без апгрейда железа вряд ли даст какое-то ускорение. Надо конкретно разбираться, из-за чего так тормозит 1С.

      Сервер 1С на Linux работает без лицензионного ключа для <10 пользователей. Так что тестовый контур можно собрать на его основе и протестировать всё. Нужны будут только клиентские лицензии, которые уже есть на текущих рабочих местах. Можно там добавить базы от нового сервера и потестировать производительность, загрузив туда базы с рабочего сервера. То есть вы можете взять одну виртуальную машину Linux, поставить туда бесплатный PostgreSQL и сервер 1С. Запустить всё это дело, загрузить туда копии рабочих баз и проверить быстродействие.

  16. На днях обновлял один из серверов. После обновления очень долго подключались клиенты, висли регламентные задания, LA на сервере в потолок улетал. Причиной была нехватка подключений к postgresql. Увидел это в его логе. Судя по всему подвисли подключения от старого сервера или что-то другое случилось. В итоге остановил сервер 1С, перезапустил postgresql и всё нормализовалось.

  17. Стал ставить на контейнер Debian 12 (proxmox 8). Одна неприятность - postgepro 15 пока 12 версию не поддерживает. Начал ставить на debian 11, а там c unprivileged container появляется известная sys-kernel-config.mount loaded failed failed, решается конечно просто , но с контейнером debian 12 такого нет. Владимир, контейнеры используете, непривелигированные?

    • Я не очень люблю под такие задачи контейнер использовать. Как раз из-за того, что не хочется потом решать подобные проблемы. Да и бэкапить, переносить, восстанавливать из VM быстрее и проще, чем из контейнера.

      • Вот! Так же считаю абсолютно! Просто мнений много, многие уговаривают, подумал попробовать. Спасибо :-), остаюсь при своем мнении, надежностью не хочу жертвовать ради небольшого прироста.

        • Контейнеры удобно, когда надо плотно упаковать однотипную нагрузку. Например, 20 контейнеров с веб сервером. Или когда надо часто разворачивать, удалять контейнеры. А под долгосрочные сервисы, и тем более под базы данных, без особой нужды я не вижу смысла использовать контейнеры на гипервизорах.

  18. Хочу попробовать установить, стоит ли делить серверы на 2 отдельные виртуалки для 1С и postgre? Мне кажется, что для linux совсем не обязательно, но столько мнений!

    • Это вопрос удобства и производительности. Делят, чтобы можно было распределить нагрузку. Если такой необходимости нет, то можно всё на одной виртуалке запускать. Я обычно на одной запускаю. У меня нет больших нагрузок.

  19. Служба srv1cv8-8.3.23.1688 автоматически перезапускается примерно раз в минуту, спустя некоторые время клиенты не могут подключиться к серверу.

    https://hostingkartinok.com/show-image.php?id=44669b96f50dea389fc6e7dfe9832973

  20. Николай

    Его нужно передать на Debian сервер. Я обычно winscp для этого использую.
    Так это как всё-таки? В какую директорию это вставлять? В Proxmox я смог лишь закачать этот файл в шаблоны контейнеров

    • Этот файл нужно не на Proxmox загружать, а в виртуальную машину, на которой всё настраивается. Обычное копирование файла.

  21. Спасибо за статью. Имея знания на уровне "слышал что такое возможно" получил работающий сервант.
    Хотелось бы попросить освятить процесс обновления сервера 1с.
    Наверняка есть тонкости и есть свои "грабли". 1с-ка, как обычно, немногословна...

  22. Так ждать исправлений по статье?

  23. Евгений

    Есть проблема при установке по данной инструкции на Debian 11.
    Дело в том что клиент на ОС устанавливается 13й, а сервер по инструкции 15й.
    Если снести клиента от ОС, тогда есть проблемы с путями переменных, из-за которых не запускается psql, pg_dump.

    • А какая проблема при разных версиях клиента и сервера? Никогда не следил за этим и не видел ошибок, связанных с этими разногласиями. По статье сам много раз настраивал.

      • Евгений

        Проблема в том, что psql и pg_dump при установленном клиенте Дебиана, запускается именно 13 версии, и выходит ошибка, что сервер версии 15, а клиент 13 и прерывается исполнение.
        Если же удалить 13ю версию клиента из Дебиана, тогда начинается новая проблема, а именно с тем что пути в системе прописаны в /usr/bin... Попытки записать в etc/enironment путь к каталогу для 15й версии postgres от 1с, не привели к успеху.
        Так что пока не понятно как решить... :(

  24. Александр

    Данная команда sudo -u postgres /usr/bin -U postgres -c "alter user postgres with password 'postgrespwd';" не работает. И выплевывает sudo: /usr/bin: команда не найдена.
    После данных манипуляций:
    Регистрируем unit systemd для управления службой 1С:

    # systemctl link /opt/1cv8/x86_64/8.3.22.1851/srv1cv8-8.3.22.1851@.service
    Запускаем Сервер 1С на Debian и сразу добавляем в автозагрузку:

    # systemctl start srv1cv8-8.3.22.1851@.default
    # systemctl enable srv1cv8-8.3.22.1851@.service
    Сервер 1С не стартует и даже после перезагрузки.

    Пожалуйста напишите подробно какие порты открывать и что вписывать в эту консоль Консоль управления (MMC) которая 1с. Угадывать не хочется что вводить.
    Можно обычный PostgreSQL поставить?

    • Вы команду не полностью скопировали, psql после /usr/bin потеряли.

      Если внимательно повторить то, что показано в статье, то всё получится. Она не так давно обновлялась и проверялась мной.

      • Александр

        Напишите подробно как подключаться через ММС и что куда вводить пожалуйста.
        И после команд к 1с сам 1с не запущен в процессах даже после перезагрузки.

        Даже после этой команды sudo -u postgres /usr/bin/psql -U postgres -c "alter user postgres with password 'postgrespwd';"
        Пишет или команда не найдена, или сокет не тот, либо права не те. Ubuntu 22.04.02 LTS в минимальной установке.
        Пытаюсь все собрать и проверить на виртуалке и вот что-то-то пока не очень.

  25. E: Репозиторий «http://deb.debian.org/debian stretch Release» не содержит файла Release.
    N: Обновление из этого репозитория нельзя выполнить безопасным способом, поэтому по умолчанию он отключён.
    N: Информацию о создании репозитория и настройках пользователя смотрите в справочной странице apt-secure(8).

    • При попытке установки libwebkitgtk

      Не могу понять почему так происходит, есть идеи?

      • Поддержка Debian 9 закончилась. Основной репозиторий закрыт. Нужно подключать архивный, либо обновляться на новый релиз.

    • Надо вот этот использовать: http://archive.debian.org/debian/

      • Владимир, устану Вас отвлекать конечно, но после попытки сделать дамп базы, получаю вот такое уведомление, и в инете не могу ничего найти

        "libGL error: MESA-LOADER: failed to open swrast: /usr/lib/dri/swrast_dri.so: невозможно открыть разделяемый объектный файл: Нет такого файла или каталога (search paths /usr/lib/x86_64-linux-gnu/dri:\$${ORIGIN}/dri:/usr/lib/dri)
        libGL error: failed to load driver: swrast"

  26. Андрей

    С помощью автономного сервера база выгружается вот так:

    # /opt/1cv8/x86_64/8.3.22.1851/ibcmd infobase dump --db-server=localhost --dbms=postgresql --db-name=basa1 --db-user=postgres --db-pwd=parol /mnt/backup/basa1.dt
    эта команда просит авторизацию в ИБ.

    нашел на форуме https://infostart.ru/1c/articles/1168516/ информацию, что нужно добавить так же --user= --password= пользователя от ИБ и тогда проблем не будет. Прошу дополнить в статью, за статью отдельное спасибо

  27. Андрей

    При попытке выгрузить дамп в какую либо директорию выдает ошибку -bash: /Backup/dumps/test.sql: Permission denied
    В чем заключается проблема?

    • Вы выгружаете дамп в директорию, к которой нет доступа пользователя, от имени которого выполняется дамп.

      • Андрей

        :~$ sudo -u postgres pg_dump -U postgres test > /Backup/dumps/test.sql.bz2
        -bash: /Backup/dumps/test.sql.bz2: Permission denied
        :~$ ls -l / |grep Backup
        drwxr-xr-x 3 postgres postgres 4096 апр 27 14:53 Backup

        Я выдал рекурсивные права пользователю postgres на /Backup, но ошибка все равно есть. В какую сторону нужно смотреть?

        • Чудес не бывает. Я не вижу полные права на всём пути, но ошибка явно говорит о том, что с правами проблема. Значит это так и есть. Посмотрите всё внимательно ещё раз. Сколько раз сталкивался с подобными ошибками и везде проблема была в невнимательности или опечатке. В Linux с правами всё чётко. Доступ либо есть, либо нет.

  28. Алексей

    Доброго вечера . Установил Сервер 1С и Postgres 15 на Debian 10 . В сети офиса серверу был дан адрес 192.168.0.190 и все работало
    перевезли сервер в другой офис где подсетка другая и дали адрес Debian Linux машине 192.168.222.150 - и все перестал работать сервер и к нему не подключиться никак , пишет что сервере отверг запрос на подключение. ..
    Можно узнать при перенесении в другую подсеть , какие файлы настроек проверить и скорректировать ??

  29. Виктор

    Добрый день. При переносе файловой базы на postgresql столкнулся с проблемой, сто сеансы пользователей висят в сервере кластеров. Пользователи работают на терминальном сервере. Сеансы на терминальном сервере автоматически закрываются через 2 часа неактивности. Но в кластере серверов сеансы остаются активными. Из-за этого пользователям на следующий день не хватает лицензий. Приходится руками убивать сеансы в кластере

    • Это где-то настраивается. Сейчас не помню, где точно, но на сервере 1С спящие сеансы можно завершать автоматически через какое-то время.

      • Виктор

        Параметры информационной базы->время засыпания пассивного сеанса и время завершения спящего сеанса в конфигураторе.
        Спасибо

  30. Сервер 1с установлен на debian, лицензии на винде, пользователи подключаются к терм серверу и лицензии соответственно устновлены там же ( а не на дебиан) , у меня два вопроса, если можно : если опубликовать базу, то при попытке войти ругается на лицензию, как я понял надо включить настройку, чтобы лицензии брались с сервера, но чтобы ее включить у меня нет пароля Администратора кластера, подскажите как его сбросить на дебиан ?

  31. Здравствуйте! После отключения электропитания перестал стартовать сервер:
    systemctl restart postgrespro-1c-13 Failed to restart postgrespro-1c-13.service: Unit postgrespro-1c-13.service failed to load: No such file or directory.

    Подскажите пожалуйста, можно ли как-то исправить без переустановки?

    • Вопрос снят, у меня 9.6 стоял, не стартовал, сделал apt-get install -y postgresql-pro-1c-9.6, после чего написал что всё уже установлено, но посгрес запустился.

      • В таких случаях надо сразу лог базы смотреть. Там будут ошибки. Какие-то могут автоматически исправиться, какие-то вручную. Ну а некоторые исправить не получится. Базы данных не любят аварийные отключения. Поэтому бэкапы обязательно должны быть, ну и УПС на сервере.

        • Спасибо за ответ! Бэкапы есть конечно же, хранятся на отдельной СХД. А отключился из-за аварийной работы самого ИБП :)

  32. Спасибо за статью, есть л какие то подводные камни при обновлении платформы?

    • Нет, всё стандартно обновляется просто установкой новой версии.

      • # ln -s /opt/1cv8/x86_64/8.3.19.1150/srv1cv83 /etc/init.d/srv1cv83
        # ln -s /opt/1cv8/x86_64/8.3.19.1150/srv1cv83.conf /etc/default/srv1cv83

        на этом моменте проблема, если устанавливать версию платформы 8.3.22.1750, то по пути /opt/1cv8/x86_64/8.3.19.1150/ просто нет файла ни srv1cv83, ни srv1cv83.conf

        • Конечно же там путь /opt/1cv8/x86_64/8.3.22.1750/, если устанавливать другую версию, но это не меняет сути дела :(

        • Эта статья устарела немного после того, как вышел новый установщик дистрибутива 1С.

          • в версии 8.3.22.1750 и выше вместо добавления символьных ссылок нужно установить сценарий запуска
            systemctl link /opt/1cv8/x86_64/8.3.22.1709/srv1cv8-8.3.22.1709@.service

            тогда сервер 1с запуститься командой
            systemctl start srv1cv8-8.3.22.1750@default.service

            :)

  33. Владимир

    не нашел в тексте где тут описано. Столкнулся с ситуацией что скрипт на чистку и переиндексацию требует ввода пароля от посгриса. При указании -W пароль . Указывало что слишком много параметров. Нашел выход в домашней директории пользователя \home\vova создать файл .pgpass и туда поместить пароль в формате host:port:base:user:password.(192.168.1.15:5432:buh31:users:passw)

    • Это от настроек postgres зависит. Подключение с localhost может проходить без аутентификации, либо с ней. А вы, судя по всему, подключались не на localhost, а на 192.168.1.15, поэтому и пароль требовался.

  34. а если сервер БД на не стандартом порту, то как быть? параметр порт нет в ibcmd

  35. stats_temp_directory = '/var/lib/pgsql_stats_tmp'
    Для PG 14 и выше, похоже, что уже устарело.

    • Вот только не понятно как теперь работает сборщик статистики.

    • Статистические данные на уровне сервера PostgreSQL теперь собираются в общую память, устраняя как процесс сбора статистики, так и периодическую запись этих данных на диск.

  36. Леонид

    Информация: Не удалось установить пакеты, требуемые для работы. Чтобы установка
    платформы "1С:Предприятие" завершилась успешно, необходимо самостоятельно
    установить отсутствующие пакеты с помощью пакетного менеджера операционной
    системы и заново запустить установку платформы. Отсутствующие пакеты приведены
    ниже и их можно скопировать в буфер обмена:
    gstreamer1.0-plugins-bad libegl1-mesa

  37. Евгений

    День добрый.
    Развернута 1С на Debian 8, в виде виртуалки на Proxmox.
    Ее надо мигрировать в другую подсеть.
    Подскажите, пожалуйста, если бекапом разворачиваю ее в другой подсети и на клиенте прописываю новый айпи, все равно клиент пытается коннектиться к старой. Клиентская машина и новый сервер друг друга видят полностью, файервол открыт между ними полностью.
    На сервере менял etc/network/interfaces и /etc/hosts. Больше поиском не нашел нигде старого айпишника. Куда глядеть?

    • Если клиент пытается подключаться к старому адресу, то надо с ним разбираться, почему так происходит.

  38. Николай

    Удалось решить проблему загрузки одного ядра в конфигураторе?

  39. В свете того, какой трындец щас происходит, попробовал установить 1С на Debian11.
    В части, касающейся установки Postgres есть изменения (по крайней мере при установке Постгреса14 на дебиан 11)

    для установки postgreSQL для 1с. Обратите внимание, что команды должны выполняться от пользователя с правами суперпользователя.

    wget https://repo.postgrespro.ru/pg1c-14/keys/pgpro-repo-add.sh
    sh pgpro-repo-add.sh

    apt install postgrespro-1c-14

  40. Алексей

    Отличная и доходчивая статья.
    Дошел до создания базы в 1с и задумался, а "самбу" не надо инсталировать и настраивать?
    Для того чтобы подружить виндового клиента и сервера на Linux?

    • Самба нужна, если будет использоваться файловая база. В данном случае она не используется.

  41. Аноним

    я так список баз получаю - не темплейты, не postgres и не test, а то программеры чего-то сами добавят, а потом окажется что бекапа под это что-то не подразумевалось. Все тестовые базы заставляют называть test и чего-им угодно

    sudo -i -u postgres psql -t -P format=unaligned -c "SELECT datname FROM pg_database WHERE NOT datistemplate AND datname 'postgres' AND datname 'test'"

  42. Андрей

    Спасибо - емко, точно.
    В качестве дополнения раздела - Выгрузка баз 1С в dt из командной строки Linux.
    В версиях 8.3.18.1208, 8.3.19.1467 () есть утилита ibcmd
    Выгрузка в dt производится одной строкой - ibcmd infobase dump --db-server=localhost --dbms=PostgreSQL --db-name=bla-bla --db-user=bla-bla --db-pwd=bla-bla --user=bla-bla --password=bla-bla файл.dt
    --db-name --db-user - логин пароль к базе PostgreSQL
    --user --password - логин пароль к конфигурации 1С
    Тогда не требуется огород с клиентом на тестовом сервере

  43. Спасибо за статью! Несколько вопросов, если можно:
    1) Зачем делать перестроение индексов, хранящихся на SSD? Особенно ежедневно.
    2) Напомню, что 1С не удаляет никаких данных сразу, а лишь помечает их на удаление. Т.е. пока в 1С не выполнят принудительное удаление какой смысл делать vacuumdb?

  44. Отличный сайт!
    Перечитал статью несколько раз, но так и не нашел как в командной строке после заливки дампа на тестовом Postgesql указать данную базу на линуксовом сервере 1С. Клиент 1С для создания dt не к postgresql коннектится, а к серверу 1С. Или у нас будет на сервере 1С уже готовая база подключенная к скулю, а мы только её содержимое меняем? Если автоматизировать, то полностью.

    • Я не знаю, всегда через консоль администрирования это делаю.

      • нарыл как это через линуксовый кластер делается.
        oparin.info/1c/administrirovanie-serverov-1s-pod-linux-ubuntu/
        В умелых руках можно и без gui обойтись.

        • Спасибо за информацию. Полезно. У меня консоль управления в любом случае всегда ставится, поэтому управление базами там. Часто даже не мной.

  45. Спасибо за статью! Все хорошо прошло до стадии подключения к серверу через админ панель mmc, после создания центрального сервера и переключения на него выходит ошибка консоли. В чем может быть проблема, подскажите, пожалуйста. Скрин ошибки: https://disk.yandex.ru/i/OYzda_H-IlnzOw

    • Я обычно с такой не сталкиваюсь. Регистрацию утилиты управления делали? Больше похоже на ошибку конкретной винды. Попробуйте на другой комп поставить консоль и подключиться.

      • Регистрацию делал. Изначально пробовал на реальное железо ставить, потом на виртуалке поднимал, несколько раз пробовал, думал возможно какой-то шаг упустил, пробовал из винды 7, 8 и 10 - один и тот же эффект.

    • При этом, если после ошибки продолжить работу в консоли, ветка с сервером будет пустая: https://disk.yandex.ru/i/nK28t-1TccyEtA

      Использовал: Debian 11, postgrespro 14, платформа 8.3.19.1417

    • Разобрался. Я просто убирал из установки саму платформу, оставлял только "администрирование сервера", думал что это независимые компоненты.

  46. Про debug на linux. Обновился как-то до 8.3.18.1289 и SRV1CV8_DEBUG=1 в /etc/init.d/srv1cv8 перестало работать, править нужно srv1cv8.conf в /opt/1cv8/x86_64/8.3.18.1289 и после рестарта службы debug заработает.

  47. Приветствую, Владимир.
    Прежде всего - спасибо огромное за статью. Не сказать что совсем зеленый в лине, но несколько моментов, при тесте описанной в статье конструкции, подчерпнул и добавил в свои заметки.
    Хотел дополнить несколько моментов:

    1. Столкнулся с проблемой запуска режима отладки на сервере 1С в дебиан.
    Во всех статьях приводится подобное "разблокируйте переменную SRV1CV8_DEBUG и присвойте ей значение 1, по адресу /etc/init.d/srv1cv83 "
    Проблема в том, что начиная с версии 8.3.16 (ниже не копал) - этой переменной в комментированном виде нет. Её необходимо добавить самому и прировнять не к 1, а текстовому значению "х1".
    SRV1CV8_VERSION=8.3.18.1661
    SRV1CV8_DEBUG="x1"

    И дополнительно скорректировать имя переменной в сборке строки запуска с флагом debug
    с [ "x$SRV1CV8_DEBUG" == "x1" ] && cmdline="$cmdline -debug"
    на [ "$SRV1CV8_DEBUG" == "x1" ] && cmdline="$cmdline -debug"
    Естественно с остановкой / запуском сервера 1С и обновлением списка демонов. Тогда сервер 1С стартует с отладкой на сервере

    (это уже можно найти в гайдах) Так же при попытке использовать отладку на сервере, находясь в ругой подсети, по отношению к серверу 1С, необходимо добавить флаг http в сборку сроки запуска cmdline="$cmdline -debug -http"

    2. Это про выгрузку в dt и потребность в x11 и выводе графического интерфейса клиента 1С
    У 1С есть поделка - "Автономный сервер", штука интересная (можете почитать), но в ключе статьи - нас интересует только ее компонент ibcmd
    Этот командный интерпретатор, присутствует в серверном каталоге 1С (на win и linux), а так же на машине linux где есть только толстый клиент (т.к. клиент ставится с серверными библиотеками) и позволяет для нужд работы с dt/cf - не использовать графический интерфейс клиента 1С.
    Эта "штука" позволяет на лету, без графического интерфейса и выпроваживания пользователей из базы (в случае с сервером БД) делать выгрузку в dt и при этом имеет обратный выхлоп для логирования своей работы.
    Что примечательно, она может делать бэкап с файловой версии и без авторизации.
    Так же позволяет создать базу на сервере и загрузить/выгрузить CF.

    На этом с дополнениями все. Еще раз - большое спасибо за труды.

    • Да, автономный сервер удобная штука. Я сам сейчас им пользуюсь. Статью надо обновить, но всё никак руки не доходят. Более свежая версия этой же статьи, но для убунту есть на другом моем сайте - https://ubuntu-admin.ru/ustanovka-i-nastrojka-1s-na-ubuntu-s-postgresql/

    • Приветствую!

      что-то никак не получается на Debian включить режим отладки....

      ругается
      1c srv1cv83[6138]: Starting 1C:Enterprise 8.3 server: /etc/init.d/srv1cv83: line 60: [: too many arguments

      пишу вот так
      SRV1CV8_VERSION=8.3.19.1467
      SRV1CV8_DEBUG="x1"

      function buildCommandLine() {
      local cmdline="$SRV1CV8_BINDIR/ragent -daemon"
      [ ! -z "$SRV1CV8_PORT" ] && cmdline="$cmdline -port $SRV1CV8_PORT"
      [ ! -z "$SRV1CV8_REGPORT" ] && cmdline="$cmdline -regport $SRV1CV8_REGPORT"
      [ ! -z "$SRV1CV8_DATA" ] && cmdline="$cmdline -d \"$SRV1CV8_DATA\""
      [ ! -z "$SRV1CV8_RANGE" ] && cmdline="$cmdline -range $SRV1CV8_RANGE"
      [ ! -z "$SRV1CV8_SECLEV" ] && cmdline="$cmdline -seclev $SRV1CV8_SECLEV"
      [ ! -z "$SRV1CV8_PINGPERIOD" ] && cmdline="$cmdline -pingPeriod $SRV1CV8_PINGPERIOD"
      [ ! -z "$SRV1CV8_PINGTIMEOUT" ] && cmdline="$cmdline -pingTimeout $SRV1CV8_PINGTIMEOUT"
      [ ! -z "$SRV1CV8_DEBUG" = "x1" ] && cmdline="$cmdline -debug"

      • Что конкретно в line 60 написано, на которую ругается?

        • 60 строка - это именно строка с параметром -debug
          вот она:
          [ ! -z "$SRV1CV8_DEBUG" = "x1" ] && cmdline="$cmdline -debug"

          пробовал менять на:
          [ "$SRV1CV8_DEBUG" == "x1" ] && cmdline="$cmdline -debug"
          не помогло.
          пробовал писать параметр сразу сюда:
          function buildCommandLine() {
          local cmdline="$SRV1CV8_BINDIR/ragent -daemon -debug"
          тоже не помогает...

          • Судя по всему что-то изменилось. Не хочет он понимать этот параметр, на него и ругается, как на лишний. Но может что-то с синтаксисом не так или какие-то лишние символы в строке. Может перехода на новую не хватает. Надо пробовать разные варианты.

            • отладка в новых версиях:

              # cat /etc/systemd/system/srv1cv8-8.3.22.1709\@debug.service.d/debug.conf
              [Service]
              Environment=SRV1CV8_DEBUG="-debug -http"
              Environment=SRV1CV8_PORT=2540
              Environment=SRV1CV8_REGPORT=2541
              Environment=SRV1CV8_RANGE=2560:2591
              Environment=SRV1CV8_DATA=/home/usr1cv8/.1cv8/1C/1cv8-debug

              после этого он стал слушать на порту и в конфигураторе, переключив на веб-отладку, можно запустить.

  48. А как сделать автозапуск srv1cv83? systemctl enable srv1cv83 не помогает

    • И так не помогло?
      # ln -s /opt/1cv8/x86_64/8.3.19.1150/srv1cv83 /etc/init.d/srv1cv83
      # systemctl daemon-reload
      # systemctl enable srv1cv83

      • Вроде заработал автозапуск, но не могу теперь побороть новую проблему.
        При запуске дампа базы с помощью pg_dump ругается: invalid memory alloc request size 1395489647

        • Разобрался, база УПП, а там не все так просто с таблицами, таблица конфигурации больше 1 Гб и просто pg_dump не подходит

  49. А есть ли рабочий мануал по настройке сквозной доменной авторизации?

    • У меня нету. И не видел никогда.

      • Владимир, приветствую!
        Я хотел срубить денег по-легкому, закупил под майнинг на хардах (чиа) HDD на 120 тыщ. + 40 тыщ материнка и проц, так и лежат у меня в упаковке 7 штук по 4 Тб, можете посоветовать, что мне подсобрать на продажу , что может быть восстребовано на рынке Девопс?

  50. Еще как вариант использовать UNIX Socket (что уберет сетевое взаимодействие и ускорит работу), для этого вместо сервера БД 127.0.01 указать путь к сокету PostgreSQL например /var/run/postgresql/ и дать на эту папку права пользователю 1С

    • Мне кажется, тут увеличение производительности очень условное. Я нигде не видел тестов, чтобы было четко видно, что unix через сокет работает быстрее. Там разница обычно в пределах стат. погрешности.

      • Тестов не проводил, но часто встречал такую рекомендацию, и на курсах OTUS (которые тут постоянно рекламируются) давали рекомендацию использовать сокет если апликуха на том же сервере (не только к 1С относится)

  51. Спасибо большое за такую подробную статью )

    >>Я понимаю, что проблема скорее всего в этом запросе, но его не поменять, это функционал 1С, она сама как-то формирует эти запросы. Не понятно, как решать такую проблему.

    А никак (
    Это "желтое" поделие переписывать полностью прийдется. Оно в 2021-м году в мультиядерность не умеет. От слова "никак". И пусть у вас сервер с двумя головами и 128-ю ядрами - это "чудо" будет пользовать ОДНО ядро.
    В то, что компания перепишет код под современные реалии лично не верю. Они стали стандартом де-факто и срослись с гос-вом.
    Бабло (гигантское) капает - зачем "париться".

  52. Владимир, попробуйте вместо pigz использовать zstd с ключами -T0 для использования всех ядер.
    На моих дампах при одинаковой компрессии выигрыш по времени более чем в два раза в пользу zstd.

  53. Владимир, а получалось ли Вам на таком сервере (linux) делать синхронизацию между базами (например между ЗУП и Бух)? Если делали то как? На виндовом сервере работает через COMConnector, понятно что на Линуксе такого нет и не будет. А чем заменить (и по удобству и по скорости) не понимаю.

    • Тут через файл обмен настраивается. Вроде никаких заморочек особо нет. Это даже не я настраиваю, а уже те люди, что поддержкой баз и пользователей занимаются.

  54. Планируется ли обновление статьи? Ссылки уже мертвы и уже давно поддерживается 12 версия postgresql последними версиями платформы

  55. Александр

    Здравствуйте, Вы встречались с проблемой когда служба постгреса не стартует после сбоя по питанию? Как быть в таких случаях?

    • С базой могло что-то случиться. Она не любит аварийные выключения. Нужно смотреть лог postgres на предмет ошибок и исправлять их. Чаще всего исправить получается, но могут быть и фатальные ошибки с повреждением какой-нибудь таблицы.

      • Александр

        Я тестово развернул виртуалку на windows server 2019 в hyper-v после жесткого ресета не запускается служба ругаясь на блокировку postmaster.pid файл в журналах windows.

        Лог сыпет.
        LOG: database system was not properly shut down; automatic recovery in progress
        LOG: redo starts at 7/91630030
        LOG: invalid record length at 7/91902888: wanted 24, got 0
        LOG: redo done at 7/91902860
        LOG: last completed transaction was at log time 2020-02-15 04:27:31.864602+07
        LOG: database system is ready to accept connections
        LOG: database system was interrupted; last known up at 2020-02-15 04:33:47 +07
        FATAL: the database system is starting up
        FATAL: the database system is starting up

        Для себя нашел решение

        cd "C:\Program Files\PostgreSQL\11.5-12.1C\bin\"
        pg_ctl.exe -D "D:\PostgreSQL_1C_Database" stop -s -m fast

        После этого все стартует нормально. Но автоматизировать это не получилось да и кажется что это больше костыль чем решение правильное.

        • Михаил

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

  56. Никита

    А зачем в Вашем конфиге два раза один и тот же параметр с разными значениями?
    default_statistics_target = 100 # range 1-10000
    default_statistics_target = 10

  57. Аноним

    https://postgrespro.ru/docs/postgrespro/9.6/config-one-c вот ещё небольшое дополнение по настройке.

  58. Добрый день!
    При выполнении данных действий
    Устанавливаем PostgreSQL

    # apt-get install postgresql-pro-1c-9.6
    Выдает ошибку:
    Пакеты, имеющие неудовлетворённые зависимости:
    postgresql-pro-1c-9.6 : Зависит: postgresql-client-pro-1c-9.6 но он не будет установлен

    Никак не пойму в чем причина.

  59. Можете описать процесс установки сервеар 1с на Debian?

  60. Всем доброго времени суток. Кто знает как перенести базу 1С в PostgreSQL на другой отдельный диск например на SSD ?

    • Первое, что приходит на ум - остановить службу, подмонтировать новый диск, перенести на него базу, сделать символьную ссылку с нового места на старое, запустить службу postgresql.

      • Вообще там служба стартует с ключом -d, в который прописывается путь до папки кластера.

  61. Аноним

    где тогда живёт хасп-ключ, если на линуксе только postgres?

  62. Владимир

    Статья отличная. Пользуюсь написанной для себя инструкцией уже более 3-х лет. Читал и прям как у меня написано и оптимизация и всё прочее. И PostgresPRO всегда сборки устанавливаю.
    Хотелось бы добавить ещё один параметр оптимизации. И чтобы его в статью внесли.

    150 или более, подбирается опытным путем. У меня блокировки пропали на 250 (в базе около 150 человек работает)

    max_locks_per_transaction = 250

    Спасибо за статью !

    • Да, менял этот параметр тоже, когда оптимизировал. А у тебя есть опыт решения следующей проблемы. У меня в базе есть запросы, которые выполняются очень долго, по 10-15 секунд. В это время весь интерфейс 1С зависает. Я посмотрел на сами запросы, включив лог длинных запросов в базе. Это запросы типа select с огромным количеством параметров. Когда выполняется подобный запрос, одно ядро загружено на 100%, все остальные в простое. Я почитал информацию и понял, что это особенность архитектуры - один запрос может обрабатывать только одно ядро. В итоге, то, что у тебя высокопроизводительный сервер с кучей ядер тебе никак не помогает. Жирный запрос висит на одном ядре и тормозит.

      Я понимаю, что проблема скорее всего в этом запросе, но его не поменять, это функционал 1С, она сама как-то формирует эти запросы. Не понятно, как решать такую проблему.

  63. Аноним

    Настраивал на Debian 8.6 Сборка от PostgresPro - Полет нормальный на УТ 11.3
    Возник один вопрос - Как изменить имя рабочего сервера после установки?

    • А в чем проблема изменения имени? Не предвижу никаких проблем.

    • Аноним

      Тоже столкнулся с этой проблемой. Когда добавляешь сервер в оснаску управления 1С, то он обращается к серверу по указанному IP/либо домену, а дальнейшие запросы пытается отправить на hostname сервера 1С. Сменил хостнейм у сервера 1С, он перестал стартовать. Искал в конфигах 1С, не нашел та нигде старый хостнейм. Пришлось возвращать старый хостнейм

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Нажимая кнопку "Отправить комментарий" Я даю согласие на обработку персональных данных.
Используешь Telegram? Подпишись на канал автора →
This is default text for notification bar