Вступление
Здравствуйте, меня зовут Шилин Никита и в прошлом я довольно много работал разработчиком 1С, а так же выполнял сопутствующие задачи. В настоящий момент я всё больше занимаюсь управлением командой и исполняю функции CTO на производственном предприятии. Команда у нас небольшая, отдельного девопса нет, а системный администратор не должен заниматься настройкой сервера 1С используется для других целей. Одной из задач на текущий момент для меня является администрирование сервера 1С на базе Ubuntu и его окружения.
Данная статья является, по сути, моей методичкой, которую я написал в конце 2022 года, собрав опыт настройки сервера под Linux с различных статей, официальной документации и просто покопавшись руками "вот в этом вот всем". Так как я ни разу не системный администратор и уж тем более под Linux, мне это далось с трудом, пришлось дополнительно много с чем разобраться. А мне ещё и делегировать это...
Действуя по этой методичке вы сможете обновить свою платформу в конце 2024 года, включить отладку на сервере и обновить свой веб-сервер. Статья поддерживается в актуальном состоянии, я сам ею пользуюсь при каждой установке и если спотыкаюсь обо что-то, сразу же добавляю все изменения сюда.
В отличие от большинства гайдов, работать будем с подсистемой systemd, вместо описанных везде init.d.
Проблематика
В последних дистрибутивах платформы 1С поменяла философию работы как с установочными файлами, так и с самими настройками сервера, поэтому первое с чем вы столкнетесь — это огромный ворох статей пятилетней давности, неактуальной документацией на its и множеством вопросов в духе "Почему не работает, я же все сделал по инструкции?". Плюс информация довольно сильно размазана и некоторые шаги я делал интуитивно, складывая, по аналогии, информацию из нескольких статей и пытаясь "изменить-сохранить-перезапустить" без малейшего понимания что я делаю, зачем, и надежды на то что оно вообще заработает. Спойлер: заработало.
Надеюсь, эта статья здорово сократит вам путь и снимет с вас головную боль от мысли что надо обновить платформу до последней версии, отладка отвалится, интеграции прилягут, а утром пользователи начнут звонить к вам в кровать.
Окружение
Мы используем Ubuntu 20.04.2 LTS (x64) для сервера 1С.
Вторую такую же машину для веб-сервера + Apache 2.4 для самописной интеграции с Битрикс24 (веб-хуки) и публикаций / внутренних сервисов компании.
Так же терминальный сервер для пользователей под Windows Server 2019 Standard.
Все настройки будут происходить по SSH/WinSCP. Все команды, выполняемые в консоли выполняются от имени пользователя с полными правами (root).
Больше никакой воды, переходим к инструкции.
Инструкция по обновлению
[upd: добавлены картинки для установки платформы на Linux]
[upd: добавлена информация о необходимости обновления кода в коннекторах]
Сделаем архивы всех боевых баз. Надеюсь, вы еще и проверяете что они работают. Мы проверяем.
Скачаем нужный дистрибутив с официального сайта. Когда перейдёте на страницу для выбора варианта своего дистрибутива вас неприветливо встретят 34 ссылки с вариантами клиентов и прочей информацией. Сейчас их хотя бы распределили по разделам. Я прочитал и разобрался в них за вас: находим раздел Linux (64-bit), выбираем "Технологическая платформа 1С:Предприятия (64-bit) для Linux".
Создадим на сервере папку через WinSCP, загрузим в неё дистрибутив и распакуем через WinSCP.
Идём в SSH-клиент, подключаемся к серверу 1С, переходим в папку с распакованным дистрибутивом, запускаем единый установочный файл:
./setup-full-8.3.22.1709-x86_64.run
Под катом в картинках можно посмотреть следующие действия по установке:
* Выбираем русский язык.
* Платформу не ставим.
* Клиенты не ставим.
* Зависимости ставим (чтобы это не значило, мне так и не удалось узнать о чем речь в описании пакетной установки на ИТС указано что это какие-то внешние зависимости платформы).
* Ярлыки не ставим, потому что речь, судя по всему, идет про ярлыки на рабочие столы. Это нужно для пользователей, но для пользователей у нас отдельный сервер со своей платформой ибухгярлыками.
* Сервер ставим.
* Модули расширения веб-сервера нам тут тоже не понадобятся.
* Средства администрирования на ваше усмотрение (мы ставим).
* Интерфейсы на различных языках нам не нужны, кроме русского.
* Дополнительные функции и средства опционально (мы ставим).
* Соглашаемся, соглашаемся, соглашаемся, готово.Как все выглядит на картинках, если текстом не понятно:
Выбираем русский язык Платформу не ставим Клиенты не ставим Зависимости ставим, ярлыки не ставим. Сервер ставим Модули расширения веб-сервера не ставим Средства администрирования на ваше усмотрение (мы ставим) Интерфейсы на различных языках: мы оставляем только русский
(почему шакалит картинку я так и не понял)Дополнительные функции и средства опционально (мы ставим). Соглашаемся, соглашаемся, готово. Останавливаем службу сервера текущей версии платформы:
systemctl stop srv1cv8-8.3.21.1302@default.service
Отключаем службу:
systemctl disable srv1cv8-8.3.21.1302@
Удаляем старую платформу:
cd /opt/1cv8/x86_64/8.3.21.1302/
./uninstaller-fullРегистрируем новую службу (тут надо использовать полный путь):
systemctl link /opt/1cv8/x86_64/8.3.22.1709/srv1cv8-8.3.22.1709@.service
Добавляем новую службу в автозагрузку:
systemctl enable srv1cv8-8.3.22.1709@
Запускаем службу и проверяем что она работает, перезагружаем сервер:
systemctl start srv1cv8-8.3.22.1709@default.service
systemctl status srv1cv8-8.3.22.1709@default.service
rebootПроверяем что служба перезапустилась при старте сервера.
На этом с сервером 1С - всё! Идём дальше.Скачиваем новую платформу для Windows и ставим её на терминальник (установку платформы на Windows, я надеюсь, все осилят без подсказок. В любом случае есть достаточно статей на эту тему). Единственное, что хочется тут сказать: если вы используете подключения через V83.COMConnector (dll), установите режим "Устанавливать" напротив пункта COM connection (остальные настройки на этой картинке установите как вам надо, эта картинка взята случайно, из интернета, и не является примером для следования):
Удаляем старую платформу с терминального сервера.
Перезагружаем терминальный сервер.
Проверяем что все заработало, пробуем войти в наши базы.
Регистрируем новую утилиту администрирования серверов и проверяем что можем запустить её, подключиться к кластеру.
Проверяем что отладка не работает.
Плачем.Идём настраивать отладку. Для этого надо отредактировать unit-файл службы на сервере 1С.
Останавливаем службу:
systemctl stop srv1cv8-8.3.22.1709@default.service
Идём туда, где лежит файл конфигурации:
сd /opt/1cv8/x86_64/8.3.22.1709/nano srv1cv8-8.3.22.1709@.service
Ищем строкуEnvironment=SRV1CV8_DEBUG=
и добавляем в конец-http
чтобы получилось:Environment=SRV1CV8_DEBUG=-http
Upd 31.07.24: обратите внимание, что начиная с 2024 года (думаю после первого квартала), новые версии платформы требуют немного другую нотацию и теперь для работы сервера отладки у вас должно быть написано (обязательно с кавычками):Environment=SRV1CV8_DEBUG="-debug -http"
Тут стоит уточнить: вы можете использовать флаг-tcp
вместо-http
, но у нас стоит NAT и добиться отладки по tcp мне пока не удалось.
Сохраняем, выходим.
Перечитываем новую конфигурацию:systemctl daemon-reload
Запускаем службу:systemctl start srv1cv8-8.3.22.1709@default.service
Проверяем статусsystemctl status srv1cv8-8.3.22.1709@default.service
Должны увидеть следующее:CGroup: /system.slice/system-srv1cv8\x2d8.3.22.1709.slice/srv1cv8-8.3.22.1709@default.service ├─3266 /opt/1cv8/x86_64/8.3.22.1709/ragent -d /home/usr1cv8/.1cv8/1C/1cv8 -port 1540 -regport 1541 -range 1560:1591 -seclev 0 -pingPeriod 1000 -pingTimeout 5000 -http ├─3296 /opt/1cv8/x86_64/8.3.22.1709/rmngr -port 1541 -host server1c.local -range 1560:1591 -d /home/usr1cv8/.1cv8/1C/1cv8/ -debug -http -clstid bd0a303e-c762-417f-b310-dc3aa2e80fca ├─3400 /opt/1cv8/x86_64/8.3.22.1709/dbgs --port=1550 └─3401 /opt/1cv8/x86_64/8.3.22.1709/rphost -range 1560:1591 -reghost server1c.local -regport 1541 -pid decb62bb-5dbe-42b7-a6c6-bd08c442d996 -debug -http
Тут мы хотим видеть флаги
-http
,-debug
, а так же процесс сервера отладкиdbgs
.Проверяем что отладка запустилась — ставим точку останова в процедуре
ПриСозданииНаСервере()
в управляемой форме и запускаем её.Танцуем, потому что мы великолепны!
Идём на веб сервер. Повторяем историю с WinSCP, заливаем дистрибутив, распаковываем, переустанавливаем файлы платформы для веб-сервера.
Выбираем русский язык, ставим платформу, зависимости и модули расширения веб-сервера, от остального отказываемся.Удаляем старую платформу:
cd /opt/1cv8/x86_64/8.3.21.1302/
./uninstaller-fullОстанавливаем сервис апача:
service apache2 stop
Идём в конфигурационный файл и меняем ссылки на файлы расширения веб-сервера:
cd /etc/apache2/
Находим строку
nano apache2.confLoadModule _1cws_module "/opt/1cv8/x86_64/8.3.21.1302/wsap24.so"
и меняем в ней версию платформы на8.3.22.1709
.
Сохраняем, закрываем.Запускаем сервис, проверяем что запустился без ошибок:
service apache2 start
service apache2 statusПроверяем что интеграция взлетела. Для этого обновим комментарий в тестовой сделке в битриксе и проверим что он обновится в 1С.
Удаляем установочные файлы платформы на сервере, на веб-сервере и на терминальнике.
После того, как 1С перешла на работу с единым файлом для установки всего-всего, к нам на сервер заодно будет установлен gnome, который нам, например не нужен. Отказаться нельзя. Поэтому мы удаляем gnome, который поставился вместе с платформой:
apt purge gnome-shell gnome-control-center gnome-keyring
apt autoremoveЕсли вы где-то в коде используете коннекторы к другим ИБ, отличные от тех имен, которые вы регистрировали в системе, возможно у вас есть такие конструкции:
Соединение = Новый COMОбъект("V83.COMConnector_8.3.22.1709");
Если есть, то найдите и поменяйте на свежую версию коннектора. Либо используйте универсальный вариант для такого случая:
СистемнаяИнформация = Новый СистемнаяИнформация;
Соединение = Новый COMОбъект("V83.COMConnector_" + СистемнаяИнформация.ВерсияПриложения);Так же обращу внимание на две вещи:
— Если вы забыли установить новый COM connector с платформой, его надо будет зарегистрировать строкой (от имени администратора):regsvr32 "C:\Program Files\1cv8\8.3.22.1709\bin\comcntr.dll"
— Если у вас версия платформы до 8.3.22, то можно не создавать объект СистемнаяИнформация, он по умолчанию доступен из методов глобального контекста.
Еще момент по коннекторам: если по регистрации свежего коннектора вы получаете ошибку «Недопустимая строка с указанием класса», то можете воспользоваться вот этой инструкцией.
От себя добавлю, что после регистрации свежего коннектора через командную строку, после перехода Пуск - (печатаем в поиске) Службы компонентов -> Компьютеры -> Мой компьютер -> Приложения COM+ -> 1cv8 -> Компонентынажимаем на компонент предыдущей версии ПКМ, Псевдоним... и меняем псевдоним как на картинке:
Если создалась копия компонента, заходим снова в ее псевдоним, удаляем все кроме значимого V83.COM... создастся еще одна копия с уже нормальным названием, теперь удаляем копию, которая создалась в первый раз, удаляем старый компонент, оставляем только тот что с номером новой платформы. Совершенно очевидно поведение любой системы.
Вот и всё! Можно возвращаться к работе.
Заключение, благодарности.
Для подготовки я использовал материалы следующих статей:
https://interface31.ru/tech_it/2021/10/edinyy-distributiv-1c-dlya-linux-server.html
https://infostart.ru/1c/articles/805266/
https://rarus.ru/publications/20210927-ot-ekspertov-ustanovka-1c-linux-496320/
https://spb.koderline.ru/expert/instruktsii/article-nedopustimaya-stroka-s-ukazaniem-klassa-v-1s/
Выражаю благодарность авторам, за то что они собрали информацию по работе с подсистемой systemd, так как большинство мануалов, в том числе официальных, написано для традиционной подсистемы init.
Дополнения и уточнения в комментариях приветствуются.