Три круга ада или разворачиваем сервер 1С Ubuntu + PostgreSQL с поддержкой веб-клиента (Apache)

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

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

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

Для начала, что нужно:

  1. Сервачек под линухом (у меня под это дело Ubuntu 22.04)
  2. PostgreSQL Pro (с патчами от 1С)
  3. Платформа 1С (Конечно лицензия, ни каких пираток; Учебка не умеет подключаться к серверу. Учесть, что версия 1С на Бубунте должна быть такой же, как и сама платформа)
  4. Прямые руки (хотя, если я смог со своими кривыми руками, то и у вас выйдет)
  5. Бубен или барабан (не заменимая вещь при работе с 1С)

Предварительная настройка Бубнты

Сразу после аренды сервака меняю локализацию самого сервака, что бы потом не танцевать с бубном вокруг Postgre и сервером 1C.

sudo dpkg-reconfigure locales

Выбираю ru_RU.UTF-8 UTF-8

Рисунок 1. Смена локализации
Рисунок 1. Смена локализации

Для корректной работы приложений необходимо установить шрифты из состава Microsoft Core Fonts:

sudo apt install ttf-mscorefonts-installer fontconfig

Устанавливаю утилитку для работы с изображениями. В интрнетах и на фурумах пишут, что она 1С нужна.

sudo apt install imagemagick curl

Установка PostgreSQL Pro

Идем на

Выбираем там нужную нам ОС, выбираем версию Postgre и заполняем форму, на почту приходит инструкция по установке (на gmail письмо будет в спаме).

Я устанавливаю 13 версию, вот такими действиями:

1) Установка (под root)

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

1.1) Устанавливаем утилитку gnupg2 (без нее будет ошибка у 1С)

apt-get install gnupg2

1.2) Запускаю скрипт, скаченный в пункте 1

sh pgpro-repo-add.sh

2) Далее устанавливаем сам сервер:

apt-get install postgrespro-1c-13

3) Проверим состояние сервера Postgre:

systemctl status postgrespro-1c-13

Postgre активный и в норме, теперь надо его настроить:

Рисунок 2. Статус postgrespro-1c-13
Рисунок 2. Статус postgrespro-1c-13

Настройка PostgreSQL Pro

Добавляем службу в автозагрузку:

systemctl enable postgrespro-1c-13

Сразу вхожу под новым узером postgres:

sudo -u postgres psql

Задаю новый пароль:

\password postgres

Смотрю местонахождение hba_file:

SHOW hba_file; -- Выдал ответ: --------------------------------------- /var/lib/pgpro/1c-13/data/pg_hba.conf (1 row)

Вижу, что все конфиги лежат в /var/lib/pgpro/1c-13/data/.

Настрою удаленное подключение к БД.

Сразу редачу pg_hba.conf через nano

Можно и vim редактировать или блокнотом, но я люблю nano.

nano /var/lib/pgpro/1c-13/data/pg_hba.conf

Листаем вниз и добавляем строку.

host all all all password

Вот что вышло

Рисунок 3. Пример pg_hba.conf
Рисунок 3. Пример pg_hba.conf

Сохраняем(cntr+o) и закрываем (cntrl+x).

Открываем теперь postgresql.conf, он находиться в том же каталоге, что и hba_file

nano /var/lib/pgpro/1c-13/data/postgresql.conf

Ищем параметр listen_addresses, раскомментируем и задаем значение *

* по умолчанию, параметр закомментирован и настроен на прослушивание запросов только с локального сетевого интерфейса. В данном примере мы разрешили прослушивание запросов на всех IP-адресах (*), но, если требуется более безопасная настройка, можно просто перечислить последние через пробел.

Рисунок 4. Пример postgresql.conf
Рисунок 4. Пример postgresql.conf

Делаем рестарт postgrespro-1c-13 и проверяем статус

systemctl restart postgrespro-1c-13 systemctl status postgrespro-1c-13

Статус сервиса активный, а значит все норм .

Рисунок 5. Статус сервиса postgresql
Рисунок 5. Статус сервиса postgresql

Открываем порты на Linux для удаленного доступа к серверу

У меня на Бубунте по умолчанию были все порты закрыты, так что открываем 5432 для БД; 1540 и 1541 для сервера 1С; 1560 — для запросов к базе данных (конфигарации) 1С. 443 + 80 добавил для апача (веб сервиса)

iptables -A INPUT -i eth0 -p tcp --dport 80 -j ACCEPT iptables -A INPUT -i eth0 -p udp --dport 80 -j ACCEPT iptables -A INPUT -i eth0 -p tcp --dport 5432 -j ACCEPT iptables -A INPUT -i eth0 -p udp --dport 5432 -j ACCEPT iptables -A INPUT -i eth0 -p tcp --dport 443 -j ACCEPT iptables -A INPUT -i eth0 -p udp --dport 443 -j ACCEPT iptables -I INPUT 1 -p tcp --dport 1540:1541 -j ACCEPT iptables -I INPUT 1 -p tcp --dport 1560 -j ACCEPT

Потом я ребутнул сервак, что бы все сохранить и проверить, подниматься ли СУБД на автозапуске. После запуска статус службы - активна. А значит можно проверить удаленное подключение к БД. Открыл Dbeaver И подключусь к базе.

Я удивлен, но пока все нормально.

Рисунок 6. Тест соединения к СУБД
Рисунок 6. Тест соединения к СУБД

Установка дополнительных компонентов

Снова мне форумы сказали, что помимо шрифтов нужны доп. компоненты. И без них реально 1С сервер не работал, устанавливаем их (Вводить по строчке, там нужно согласия протыкать).

sudo apt-get install imagemagick sudo apt-get install unixodbc sudo apt-get install libgsf-1-114 sudo apt-get update

Тут я заметил, что клиент который у меня качался уже около часа перестал качаться и пошел спать (1С предназначена, что бы страдать. Не могло все идти так гладко. Если бы я знал что убью еще 2 дня я бы бросил это дело сразу).

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

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

Рисунок 7. Скачивание технологической платформы 1С
Рисунок 7. Скачивание технологической платформы 1С

На сервере создам папку 1С.

mkdir 1c cd 1c

Переносим скачанный архив .tar.gz в данную папку.

И сразу командой все распаковываем в текущую папку:

tar xzvf deb64_8_3_18_1208.tar.gz

Выполняю ls, вижу что распокавались все пакеты из архива:

Рисунок 8. deb пакеты распаккованого архива deb64_8_3_18_1208.tar.gz
Рисунок 8. deb пакеты распаккованого архива deb64_8_3_18_1208.tar.gz

Далее я в тупую установил все deb пакеты (многие говорят, что есть какая то потребность устанавливать их по порядку определенному - но я ленив да и звучит это как бред):

sudo apt install ./*.deb

Запускаем службу 1С и получаем статус OK:

/opt/1cv8/x86_64/8.3.18.1208/srv1cv83 start
Рисунок 9. Запуск службы srv1cv83
Рисунок 9. Запуск службы srv1cv83

Создадим символьную ссылку на службу srv1cv83 в /etc/init.d/. И добавим службу в автозагрузку:

ln -s /opt/1cv8/x86_64/8.3.18.1208/srv1cv83 /etc/init.d/srv1cv83 /lib/systemd/systemd-sysv-install enable srv1cv83

Рестартуем службу и проверяем ее статус работы

systemctl restart srv1cv83 systemctl status srv1cv83

Все супер, служба активна

Рисунок 9. Статус службы srv1cv83
Рисунок 9. Статус службы srv1cv83

Установка технологической платформы на клиент

Снова идем в https://releases.1c.ru и скачиваем файл Технологическая платформа 1С:Предприятия (64-bit) для своей ОС. (На картинке версия не как у меня в статье, скриншоты не мои, у меня старая версия просто потому, что она у меня была диске)

Внимание! Берем установщик именно полной технологической платформы. Ибо если у вас есть просто тонкий клиет - 1С скажет, что не может понять какой версии ваш сервер. При этом установщик платформы для клиента, должен совпадать с версией вашего сервера. У меня сервак 8.3.18.1208 и техплатформа под виндой тоже 8.3.18.1208.

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

Рисунок 10. Скачивание технологической платформы под Шиндовс
Рисунок 10. Скачивание технологической платформы под Шиндовс

Запускаем установщик. Из скачанного архива windows64full.... запускаем. setup.exe.

Внимание! В данном окне обязательно выбираем установку Администрирование сервера 1С:Предприятия. Остальное можно оставить по умолчанию, или ставить по вашим потребностям.

Рисунок 11. Установка клиента платформы 1С: Предприятия
Рисунок 11. Установка клиента платформы 1С: Предприятия

Делее прожимаем "далее", и оставляем все по умолчанию. После установки в меню пуск находим ссылку Регистрация утилиты администрирования серверов (версия) и запускаем ее от имени администратора (лично я в пуске нашел):

Рисунок 12. Регистрация утилиты администрирования
Рисунок 12. Регистрация утилиты администрирования

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

Ищем и запускаем утилиту Администрирование серверов 1С Предприятия:

Рисунок 13. Утилита для администрирования серверов 1С
Рисунок 13. Утилита для администрирования серверов 1С

В открывшемся окне кликаем правой кнопкой мыши по Central 1C:Enterprise 8.3 servers - выбираем: "Создать" -> "Центральный сервер 1С:Предприятие 8.3" - Пишем имя сервера 1С или его IP-адрес:

Рисунок 14. Подключение к центральному серверу
Рисунок 14. Подключение к центральному серверу

Пишем IP-адрес сервера (адрес бубунты, на которой крутиться наш сервак):

Рисунок 15. Подключение к новому центральному серверу
Рисунок 15. Подключение к новому центральному серверу

... и нажимаем OK. В панели управления появится подключение — переходим в раздел: "Кластеры" -> "Локальный кластер" -> кликаем правой кнопкой по Информационные базы: выбираем: "Создать" -> "Информационная база".

Рисунок 16. 
Рисунок 16. 

Заполняем параметры для создания новой базы:

Рисунок 16. Создание новой информационной базы на сервере
Рисунок 16. Создание новой информационной базы на сервере

* в данном примере нами были заполнены:

  • Имя — задаем произвольное имя для подключения к базе.
  • Сервер баз данных — имя или IP-адрес базы. Задаем ip, нашей бубенты, где крутиться сервак 1С.
  • Тип СУБД — выбираем PostgreSQL.
  • База данных — имя базы данных.
  • Пользователь сервера БД — пользователь, под которым будет выполняться подключение к базе. В нашем примере postgres.
  • Пароль пользователя БД — пароль для базы, который мы задали после установки СУБД.
  • Создать базу данных в случае ее отсутствия — ставим галочку, чтобы база была создана.

База должна создастся, изначально я создал базу с именем Damo1 (накосячил с названием, ночь все таки) и сразу проверил, что она есть на сервере PostgreSQL. Посмотреть можно через DBeaver или PGAdmin.

Рисунок 17. Создание новой информационной базы на сервере
Рисунок 17. Создание новой информационной базы на сервере

Теперь запускаем 1С клиент и добавляем новую базу - при добавлении выбираем Добавление в список существующей информационной базы:

Рисунок 18. Добавление уже существующей бащы в платформу
Рисунок 18. Добавление уже существующей бащы в платформу

Указываем произвольное имя информационной базы, а также выбираем тип расположения базы На сервере 1С:Предприятия:

Рисунок 19. Подключаемся к серверу
Рисунок 19. Подключаемся к серверу

Нажимаем Далее и Готово. Запускаем конфигуратор, загружаем базу и пользуемся, хотел бы я сказать - но увидел сообщение о том что моя лицензия (клиентская) протухла.

Рисунок 20. Получение лицензии
Рисунок 20. Получение лицензии

Написал другу у которого остались лишние лицензии, и собственно за помощь в настройке сервака (почему родилась эта статья), он мне дал заветный ключик (История о том, как Ваня потерял одно рабочее место). После проверки лицензии базка подключилась и в ней уже можно работать.

Рисунок 21. Успешный вход в конфигарацию новой базы на сервере
Рисунок 21. Успешный вход в конфигарацию новой базы на сервере

Написал модуль приложения для 1С и попытался запустить его, вроде работает. А вроде было предупреждение о том, что нет шрифта (я его ставил в самом начале)

Рисунок 22. Сообщение 
Рисунок 22. Сообщение 

А еще я познал новую боль - время отладки одной команды - заняло пару минут (1С испытывает мои нервы на прочность)

Заменил сообщить на ПоказатьОповещениеПользователя и пусто.

Мне не нравиться, что команда ПоказатьОповещениеПользователя("Привет, мир!",,"В самом деле привет!"); - не работает. Поэтому я снова на сервере переустановил шрифты (оказалось, что шрифты реально не были установлены, все таки кривые руки дают о себе знать)

Выполнил на Бубунте:

apt-get -y install ttf-mscorefonts-installer fc-cache –fv

Запустил конфигурацию, сообщения - нет. Ребутнул Убунту - сообщения нет ). Перезапустил клиент - сообщения нет ). Сделал три удара в бубен - сообщения нет (обычно бубен с ошибками в 1С, магическим образом их решал)

Заменил ПоказатьОповещениеПользователя предупреждение, и о чудо есть сообщение - бубен помог.

Рисунок 23. Предупреждение пользователя
Рисунок 23. Предупреждение пользователя

Настройка web клиента на Apache

Дело за малым установить apache2 и опубликовать на web-сервер 1С

1) Коннектимся к Ubuntu

2) Вводи команду

apt-get install apache2

3) Сразу apache в автозагрузку пихаем

systemctl enable apache2

4) Запускаем

systemctl start apache2

5) Проверяем статус

systemctl start apache2

Статус - активен. Все значит в норме

Рисунок 24. Состояние службы apache
Рисунок 24. Состояние службы apache

80 порт apache по умолчанию мы открыли в начале, значит переходим в браузеру по адресу сервака.

Еще надо 443 открыть!!! Тоже в начале открывал в пункте подготовки, но обязательно проверьте доступность 80 и 443 порта.

Рисунок 25. Стартовая страница apache
Рисунок 25. Стартовая страница apache

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

Попытаюсь, сейчас опубликовать конфигурацию через конфигуратор. Вкладка администрирование -> публикация на web-сервер.

Если у вас руки из правильного места растут, то вы увидите такое окно (Лично я его не увидел, если вы тоже идите дальше по статье):

Рисунок 26. Окно публикации базы на веб сервер
Рисунок 26. Окно публикации базы на веб сервер

Если же вы увидели это самое, заветное окно публикации базы в путь к веб-серверу пишите любую рандомную пустую папку. Я для этого в Temp создал пустую папку 1CServ и ее же указал. Жмякаем публикацию и у вас на сервере опубликуется база. Первоначально, я не увидел данное окно, поэтому пришлось потанцевать с бубном (если у вас все норм, можете не читать дальше. После публикации вы увидите, сообщение о том, что 1С надо перезапустить Apache согласитесь с этим и нажмите ОК. Потом проверяйте публикацию через браузер по адресу:

http://{domen}/demo
*Где {domen} - непосредственно домен вашего сервера, на котором стоит Бубунта или ее ip адрес.)

Я увидел такое окно:

Рисунок 27. Ошибка веб-клиент недоступен
Рисунок 27. Ошибка веб-клиент недоступен

День убил, на то что бы понять какого хрена 1С сервер, не видит веб сервер, который крутиться рядом с ним (ниже все исправляю).

Собственно вот диаграмма, как оно работает (должно работать):

Рисунок 28. Даиграмма взаимодействия клиента с кластером серверов и веб-сервера
Рисунок 28. Даиграмма взаимодействия клиента с кластером серверов и веб-сервера

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

Ручная публикация базы готовой гонфигурации:

Создадим папку для vrd-файла:

mkdir -p /var/www/1c/demo

Создадим файл конфигурации apache:

touch /etc/apache2/conf-available/demo.conf

Переходим в каталог платформы:

cd /opt/1cv8/x86_64/8.3.18.1208

Публикуем базу:

./webinst -apache24 -wsdir demo -dir '/var/www/1c/demo' -connstr 'Srvr="localhost";Ref="Demo1";' -confPath /etc/apache2/conf-available/demo.conf

Перезагружаем настройки веб-сервера:

systemctl reload apache2

Подключаем демо конфигурацию:

a2enconf demo

Перезапускаем веб-сервер с применением изменений:

systemctl restart apache2

Теперь можно открыть конфигурацию в веб-браузере по её URL: http://{domen}/demo

*Где {domen} - непосредственно домен вашего сервера, на котором стоит Бубунта или ее ip адрес.

Видим окно 1С, все супер. Значит руки растут откуда надо ). Поздравляю у вас реально стальные нервы (А apache работает, как надо).

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

  1. Я забыл открыть порт 443 (это я исправил уже в начале статьи)
  2. У меня не было ssl сертификата (о том, как сделать самоподписывающийся сертификат написано нижен)
  3. Третье проблемой может стать, то что у вас незаданно доменное имя в hosts. (у меня нет такой проблемы, но как исправить я тоже покажу)

Делаем себе самоподписывающийся сертификат

Скопипастил отсюда (у меня по данной инструкции все заработало):

1. Требуется установить snapd:

sudo apt install snapd

2. Убедитесь, что ваша версия snapd обновлена, введя команду:

sudo snap install core; sudo snap refresh core

3. Установка бесплатного ssl-сертификата выполняется через Certbot. Если вы работаете на сервере, на котором ранее была установлена более старая версия Certbot.

sudo apt remove certbot

Установить certbot

sudo snap install --classic certbot

4. Затем для удобства установим симлинк:

sudo ln -s /snap/bin/certbot /usr/bin/certbot

Настройка веб-сервера для работы по HTTPS-протоколу выполнится автоматически.

Так как нам нужен сертификат на апач, выполняем именно эту команду:

sudo certbot --apache

Просит ввести email - вводим и жмем enter. Потом несколько раз соглашаемся с требованиями.

В конце выводиться просьба выбрать на какой домен выдается сертификат, если у вас нет домена пишем: {IP}.sslip.io

* Где {IP} - это адрес бубунты

Теперь на всякий случай я меняю дефолтную конфигурацию apache

nano /etc/apache2/sites-available/000-default.conf

Задаю параметр RewriteCond %{SERVER_NAME} ={IP}.sslip.io

* Где {IP} - это адрес бубунты

Вышло так:

Рисунок 29. Файл 000-default.conf
Рисунок 29. Файл 000-default.conf

Сохраняем файл. И перезапускаем apache.

sudo systemctl restart apache2

Проверяем статус службы:

sudo systemctl status apache2

Указываем домен в файле hosts

На всяких форумах для дядь 1С-ников, написано что это тоже может стать причиной.

1) Открываем файл hosts

nano /etc/hosts

2) В первой строке вводим

127.0.0.1 {IP}.sslip.io

* Где {IP} - это адрес бубунты

На всякий случай ребутнул сервак.

И снова сделал русную публикацию базы, что бы пересобрать файл конфигурации:Создадим файл конфигурации apache:

touch /etc/apache2/conf-available/demo.conf

Переходим в каталог платформы:

cd /opt/1cv8/x86_64/8.3.18.1208

Публикуем базу:

./webinst -apache24 -wsdir demo -dir '/var/www/1c/demo' -connstr 'Srvr="localhost";Ref="Demo1";' -confPath /etc/apache2/conf-available/demo.conf

Рестартуем apache:

sudo systemctl restart apache2

Итог

И так, потратив субботу я почти все настроил, потратив воскресенье я осознал свои ошибки и исправил их. Потратив еще одну ночь понедельника я внес все правки в статью и начал ее редачить. Ночью вторника закончил редачить статью и вот что вышло. Надеюсь она поможет кому нибудь. Советую никому не связываться с 1С, это было слишком мучительно.

99
8 комментариев

я в этом ничего не понимаю, но прочла. хд очень подкупил ваш подход «сделаю полезное сквозь дебри ненависти»

3
Автор

Подход такой выбран из-за экономии. Своми руками = почти даром.

1

Хоть вы и не ожидали, но лайк)
Кстати, команды apt не обязательно вводить по одной. Достаточно указать все пакеты через пробел и использовать флаг -y, чтобы каждый раз не давать согласие на установку.

2

и все этом можно собрать в докер

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

Требуется ли для вышеизложенного лицензия 1С-Сервер?

В статье написано же:

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

Из минусов - из под браузера не открывалась конфигурация, т.к. сервер не давал подтверждение о лицензии.

Плюсы сервиса лицензирования на сервере Линукс (в статье не описано, как его ставить). Пользователю, при подключении к нашему серверу не надо вводить ключ лицензии (или вставлять флешку с ключем) - сервер сам отправляет информацию о лицензии. (Но я уже написал не мой вариант)