Pull to refresh

Обновляем платформу 1С на сервере под управлением Linux

Level of difficultyMedium
Reading time7 min
Views44K

Вступление

Здравствуйте, меня зовут Шилин Никита и в прошлом я довольно много работал разработчиком 1С, а так же выполнял сопутствующие задачи. В настоящий момент я всё больше занимаюсь управлением командой и исполняю функции CTO на производственном предприятии. Команда у нас небольшая, отдельного девопса нет, а системный администратор не должен заниматься настройкой сервера 1С используется для других целей. Одной из задач на текущий момент для меня является администрирование сервера 1С на базе Ubuntu и его окружения.

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

Действуя по этой методичке вы сможете обновить свою платформу в конце 2022 года, включить отладку на сервере и обновить свой веб-сервер. В отличие от большинства гайдов, работать будем с подсистемой 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: добавлена информация о необходимости обновления кода в коннекторах]

  1. Сделаем архивы всех боевых баз. Надеюсь, вы еще и проверяете что они работают. Мы проверяем.

  2. Скачаем нужный дистрибутив с сайта users.v8.1c. Когда перейдёте на страницу для выбора варианта своего дистрибутива вас неприветливо встретят 34 ссылки с вариантами клиентов и прочей информацией. Сейчас их хотя бы распределили по разделам. Я прочитал и разобрался в них за вас: находим раздел Linux (64-bit), выбираем "Технологическая платформа 1С:Предприятия (64-bit) для Linux".

  3. Создадим на сервере папку через WinSCP, загрузим в неё дистрибутив и распакуем через WinSCP.

  4. Идём в SSH-клиент, подключаемся к серверу 1С, переходим в папку с распакованным дистрибутивом, запускаем единый установочный файл:
    ./setup-full-8.3.22.1709-x86_64.run

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

    Соглашаемся, соглашаемся, соглашаемся, готово.

    Скрытый текст
    Выбираем русский язык
    Выбираем русский язык
    Платформу не ставим
    Платформу не ставим
    Клиенты не ставим
    Клиенты не ставим
    Сервер ставим
    Сервер ставим
    Модули расширения веб-сервера не ставим
    Модули расширения веб-сервера не ставим
    Средства администрирования на ваше усмотрение (мы ставим)
    Средства администрирования на ваше усмотрение (мы ставим)
    Интерфейсы на различных языках: мы оставляем только русский(почему шакалит картинку я так и не понял)
    Интерфейсы на различных языках: мы оставляем только русский
    (почему шакалит картинку я так и не понял)
    Дополнительные функции и средства опционально (мы ставим).
    Дополнительные функции и средства опционально (мы ставим).
    Соглашаемся, соглашаемся, готово.

  5. Останавливаем службу сервера текущей версии платформы:
    systemctl stop srv1cv8-8.3.21.1302@default.service

  6. Отключаем службу:
    systemctl disable srv1cv8-8.3.21.1302@

  7. Удаляем старую платформу:
    cd /opt/1cv8/x86_64/8.3.21.1302/
    ./uninstaller-full

  8. Регистрируем новую службу (тут надо использовать полный путь):
    systemctl link /opt/1cv8/x86_64/8.3.22.1709/srv1cv8-8.3.22.1709@.service

  9. Добавляем новую службу в автозагрузку:
    systemctl enable srv1cv8-8.3.22.1709@

  10. Запускаем службу и проверяем что она работает, перезагружаем сервер:
    systemctl start srv1cv8-8.3.22.1709@default.service
    systemctl status srv1cv8-8.3.22.1709@default.service
    reboot

  11. Проверяем что служба перезапустилась при старте сервера.

    На этом с сервером 1С - всё! Идём дальше.

  12. Скачиваем новую платформу для Windows и ставим её на терминальник (установку платформы на Windows, я надеюсь, все осилят без подсказок. В любом случае есть достаточно статей на эту тему). Единственное, что хочется тут сказать: если вы используете подключения через V83.COMConnector (dll), установите режим "Устанавливать" напротив пункта COM connection (остальные настройки на этой картинке установите как вам надо, эта картинка взята случайно, из интернета, и не является примером для следования):

  13. Удаляем старую платформу с терминального сервера.

  14. Перезагружаем терминальный сервер.

  15. Проверяем что все заработало, пробуем войти в наши базы.

  16. Регистрируем новую утилиту администрирования серверов и проверяем что можем запустить её, подключиться к кластеру.

  17. Проверяем что отладка не работает. Плачем. Идём настраивать отладку. Для этого надо отредактировать 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.

  18. Проверяем что отладка запустилась — ставим точку останова в процедуре ПриСозданииНаСервере() в управляемой форме и запускаем её.

  19. Танцуем, потому что мы великолепны!

  20. Идём на веб сервер. Повторяем историю с WinSCP, заливаем дистрибутив, распаковываем, переустанавливаем файлы платформы для веб-сервера.
    Выбираем русский язык, ставим платформу и модули расширения веб-сервера, от остального отказываемся.

  21. Удаляем старую платформу:
    cd /opt/1cv8/x86_64/8.3.21.1302/
    ./uninstaller-full

  22. Останавливаем сервис апача:
    service apache2 stop

  23. Идём в конфигурационный файл и меняем ссылки на файлы расширения веб-сервера:
    cd /etc/apache2/
    nano apache2.conf

    Находим строку
    LoadModule _1cws_module "/opt/1cv8/x86_64/8.3.21.1302/wsap24.so"

    и меняем в ней версию платформы на 8.3.22.1709.
    Сохраняем, закрываем.

  24. Запускаем сервис, проверяем что запустился без ошибок:
    service apache2 start
    service apache2 status

  25. Проверяем что интеграция взлетела. Для этого обновим комментарий в тестовой сделке в битриксе и проверим что он обновится в 1С.

  26. Удаляем установочные файлы платформы на сервере, на веб-сервере и на терминальнике.

  27. После того, как 1С перешла на работу с единым файлом для установки всего-всего, к нам на сервер заодно будет установлен gnome, который нам, например не нужен. Отказаться нельзя. Поэтому мы удаляем gnome, который поставился вместе с платформой:
    apt purge gnome-shell gnome-control-center gnome-keyring
    apt autoremove

  28. Если вы где-то в коде используете коннекторы к другим ИБ, отличные от тех имен, которые вы регистрировали в системе, возможно у вас есть такие конструкции:
    Соединение = Новый 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, то можно не создавать объект СистемнаяИнформация, он по умолчанию доступен из методов глобального контекста.

    Еще момент по коннекторам: если по регистрации свежего коннектора вы получаете ошибку «Недопустимая строка с указанием класса», то можете воспользоваться вот этой инструкцией.

    От себя добавлю, что после регистрации свежего коннектора через командную строку, после перехода Панель управления -> Система и безопасность -> Component Services (Службы компонентов) -> Компьютеры -> Мой компьютер -> Приложения COM+ -> 1cv8 -> Компоненты

    нажимаем на компонент предыдущей версии ПКМ, Псевдоним... и меняем псевдоним как на картинке:


    Вот и всё! Можно возвращаться к работе.

Заключение, благодарности.

Для подготовки я использовал материалы следующих статей:

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.

Дополнения и уточнения в комментариях приветствуются.

Tags:
Hubs:
Total votes 17: ↑17 and ↓0+17
Comments19

Articles