Новая платформа на сервере 1С под Linux: установка рядом со старой, переключение службы и откат
Содержание
Сервер 1С на Linux обновляют так: ставят новую версию платформы рядом со старой, останавливают службу старой версии, подключают systemd-юнит новой и запускают его на тех же портах. Старая версия остаётся в своём каталоге, поэтому откат занимает пару минут. Конфигурации баз при этом не меняются: обновляется только платформа.
Ниже — порядок для платформы 8.3.20 и новее, где дистрибутив для Linux поставляется единым установщиком setup-full-*.run, а файлы ложатся в /opt/1cv8/x86_64/<версия>/. Для старых сборок на пакетах deb/rpm отличия указаны отдельно. Команды даны для Ubuntu/Debian; на RHEL-подобных системах меняется только менеджер пакетов.
Что проверить на сервере до обновления платформы
Обновление начинается не с консоли, а с проверки совместимости. Пропущенный пункт здесь обычно и превращает пятиминутную работу в вечер.
- 🧩 Требования конфигураций. В описании каждого релиза конфигурации указан минимальный номер платформы. Убедитесь, что все базы кластера работают на выбранной версии: номер платформы должен быть не ниже требуемого.
- 🐘 Версия СУБД. Если базы на PostgreSQL, сверьте, какие сборки PostgreSQL поддерживает новая платформа. Платформу и СУБД одновременно не обновляйте: два изменения сразу не дадут понять, что сломалось.
- 🖥️ Клиенты. Версия клиента должна совпадать с версией сервера до последней цифры. Если на рабочих местах стоит 8.3.24.1467, а сервер станет 8.3.25.1374, подключиться пользователи не смогут, пока клиенты не обновятся.
- 🔑 Лицензии. Программные лицензии привязаны к параметрам оборудования, а не к номеру платформы. Смена версии их не сбрасывает, но перед работой сделайте копию каталога лицензий (обычно
/var/1C/licenses). - 💾 Место на диске. Каждая версия платформы занимает около 1–1,5 ГБ. Проверьте
df -h /optи заодно место под резервную копию базы .
Отдельно посмотрите, как сейчас запущен сервер. Это определит, какую службу останавливать:
systemctl list-units --type=service | grep -i 1c
ls /opt/1cv8/x86_64/ 2>/dev/null; ls /opt/1C/v8.3/x86_64/ 2>/dev/null
Если сервер работает через srv1cv8-8.3.xx.xxxx@default, это новая схема. Если через srv1cv83 (скрипт в /etc/init.d) — старая пакетная установка. Переход со старой схемы на новую описан ниже, в разделе про запуск службы.
Где взять дистрибутив сервера 1С для Linux и как не сломать пакеты
У фирмы 1С нет публичного apt- или yum-репозитория для платформы. Дистрибутив скачивают с портала релизов по подписке на ИТС: раздел «Технологическая платформа», нужная версия, файл «Технологическая платформа 1С:Предприятия (64-bit) для Linux». Внутри архива лежит установщик вида setup-full-8.3.25.1374-x86_64.run.
Какой файл брать:
| Сборка платформы | Что в архиве | Куда ставится |
|---|---|---|
| 8.3.20 и новее | единый установщик setup-full-*.run | /opt/1cv8/x86_64/<версия>/ |
| до 8.3.20 | набор пакетов 1c-enterprise83-common, -server, -ws и др. | /opt/1C/v8.3/x86_64/ |
Разница принципиальная. Старые пакеты ставились в один общий каталог, и новая версия затирала предыдущую. Установщик 8.3.20+ раскладывает каждую версию в свой каталог, поэтому две-три платформы спокойно живут на одном сервере.
Скопируйте архив на сервер, распакуйте и дайте установщику право на запуск:
scp server64_8_3_25_1374.tar.gz admin@srv1c:/tmp/
cd /tmp && tar xzf server64_8_3_25_1374.tar.gz
chmod +x setup-full-8.3.25.1374-x86_64.run
Теперь о репозиториях системы. Опасность не в платформе 1С, а в соседях. Плановый apt upgrade может подтянуть новую версию PostgreSQL или системных библиотек в тот же вечер, когда вы меняете платформу.
Закрепите пакеты СУБД, чтобы они обновлялись только по вашему решению: sudo apt-mark hold <имя пакета postgresql>. Список закреплённых пакетов показывает apt-mark showhold, снять закрепление — apt-mark unhold.
Если на сервере включены автоматические обновления (unattended-upgrades), на время работ их лучше приостановить.
Остановка службы 1С и резервные копии
Этот этап нельзя сокращать. Платформа меняется на работающем сервере, и всё, что пойдёт не так, придётся возвращать из копий.
Шаг 1. Запретите новые сеансы и предупредите людей
Заранее сообщите пользователям время работ. В консоли кластера в свойствах каждой базы включите блокировку начала сеансов и укажите сообщение. С Linux-машины без графики то же делается через rac, если запущен сервер администрирования ras:
/opt/1cv8/x86_64/8.3.24.1467/rac cluster list
/opt/1cv8/x86_64/8.3.24.1467/rac session list --cluster=<uuid кластера>
Параметры блокировки и завершения сеансов у rac зависят от версии. Точный синтаксис посмотрите в справке: rac help infobase и rac help session.
Остановка службы обрывает все сеансы. Несохранённые документы пользователи потеряют, а фоновые и регламентные задания прервутся на середине. Останавливайте сервер только после того, как в списке сеансов никого не осталось.
Шаг 2. Сделайте копию баз средствами СУБД
Выгрузка .dt для большой базы идёт долго и требует монопольного доступа. На сервере с PostgreSQL быстрее и надёжнее штатный дамп:
sudo -u postgres pg_dump -Fc -f /backup/buh_$(date +%F).dump buh
Для каждой базы — свой файл. Проверьте, что файлы не нулевого размера.
Шаг 3. Остановите службу и сохраните настройки кластера
sudo systemctl stop srv1cv8-8.3.24.1467@default
# старая схема:
# sudo systemctl stop srv1cv83
После остановки скопируйте каталог данных кластера. По умолчанию это /home/usr1cv8/.1cv8/1C/1cv8. В нём лежат список кластеров 1cv8wsrv.lst и реестр кластера в подкаталоге reg_1541 — список баз, администраторы, рабочие серверы.
sudo tar czf /backup/1cv8-cluster-$(date +%F).tar.gz /home/usr1cv8/.1cv8/1C/1cv8
Без этой копии ошибка при запуске новой версии может оставить вас без зарегистрированных баз в кластере. Сами данные баз в СУБД не пострадают, но регистрировать всё заново долго.
Установка новых пакетов платформы на Linux
Установщик работает и в графическом, и в текстовом режиме. На сервере без графики удобен режим без вопросов:
sudo ./setup-full-8.3.25.1374-x86_64.run --mode unattended --enable-components server,ws,server_admin
Что означают компоненты:
server— сам сервер 1С:Предприятия (агент, менеджер кластера, рабочие процессы);ws— модуль расширения веб-сервера, нужен для публикации баз через Apache;server_admin— сервер администрированияrasи утилитаrac.
Набор и названия компонентов иногда меняются между версиями. Полный список для своего дистрибутива выведите командой ./setup-full-8.3.25.1374-x86_64.run --help. Клиентские компоненты на сервер ставить не нужно, если на нём никто не работает
интерактивно.
После установки проверьте, что каталог новой версии появился и в нём есть исполняемые файлы сервера:
ls /opt/1cv8/x86_64/
ls /opt/1cv8/x86_64/8.3.25.1374/ | grep -E 'ragent|rac|ras|srv1cv8'
Если установщик ругается на отсутствующие библиотеки, доставьте их из системного репозитория и запустите установку ещё раз. Чаще всего не хватает пакетов шрифтов и fontconfig — без них сервер не сформирует печатные формы и PDF.
Обновление на старой пакетной схеме
На сборках до 8.3.20 обновление выглядит иначе: старые пакеты удаляют, новые ставят поверх.
dpkg -l | grep 1c-enterprise
sudo dpkg -i 1c-enterprise83-common_*.deb 1c-enterprise83-server_*.deb 1c-enterprise83-ws_*.deb
Каталог данных кластера при этом не трогается, но версия в /opt/1C/v8.3/x86_64/ будет заменена. Поэтому быстрого отката здесь нет: только переустановка прежних пакетов. Это весомый довод перейти на единый установщик при ближайшем обновлении.
Запуск кластера на новой версии сервера 1С
В каталоге каждой версии лежит шаблон systemd-юнита srv1cv8-<версия>@.service. Его подключают к systemd, выключают юнит старой версии и включают новый.
OLD=8.3.24.1467
NEW=8.3.25.1374
sudo systemctl disable srv1cv8-$OLD@default
sudo systemctl link /opt/1cv8/x86_64/$NEW/srv1cv8-$NEW@.service
sudo systemctl enable srv1cv8-$NEW@default
sudo systemctl start srv1cv8-$NEW@default
systemctl status srv1cv8-$NEW@default
Суффикс @default означает экземпляр со стандартными параметрами: порты агента 1540, менеджера кластера 1541, диапазон рабочих процессов 1560–1591, данные в /home/usr1cv8/.1cv8/1C/1cv8. Новая версия подхватит тот же каталог данных, и все базы окажутся на месте.
Если у старого сервера были нестандартные порты или каталог данных, перенесите их. Посмотрите, как был настроен старый юнит, и задайте те же значения для нового через systemctl edit:
systemctl cat srv1cv8-$OLD@default
sudo systemctl edit srv1cv8-$NEW@default
Самая частая ошибка при обновлении на Linux — стартовать новый юнит, не выключив старый. Оба пытаются занять порт 1540, второй падает, а в логе видно только «адрес уже используется».
Переход со старого srv1cv83 на systemd-юнит
Если раньше сервер запускался скриптом /etc/init.d/srv1cv83, его настройки (порты, каталог данных, отладка) хранились в /etc/default/srv1cv83 или /etc/sysconfig/srv1cv83. Перед переходом выпишите оттуда значения, затем отключите старую службу командой sudo systemctl disable srv1cv83 и подключайте новый юнит по схеме выше.
Сервер администрирования ras
Консоль кластера на Windows и утилита rac работают через ras (порт 1545 по умолчанию). Его тоже нужно запустить из каталога новой версии:
sudo -u usr1cv8 /opt/1cv8/x86_64/$NEW/ras cluster --daemon
Если ras у вас оформлен отдельной службой, поменяйте в ней путь к исполняемому файлу на новую версию.
Клиенты
Последний шаг — рабочие места. Пока там старая версия, подключение к серверу не пройдёт. Обычно используют один из вариантов:
| Способ | Когда подходит | Минус |
|---|---|---|
| Установка клиента вручную | до 10 рабочих мест | долго и легко пропустить машину |
| Групповые политики, скрипт развёртывания | домен, много компьютеров | нужна предварительная настройка |
| Автообновление клиента через веб-сервер | смешанный парк, удалённые сотрудники | нужна публикация дистрибутива |
| Тонкий клиент через терминальный сервер | все работают в RDP | обновляется один терминальный сервер |
Сервер 1С не запустился после обновления: диагностика и логи
Если что-то пошло не так, идите от простого к сложному.
- Состояние службы.
systemctl status srv1cv8-<версия>@defaultпокажет, работает ли процесс, и последние строки вывода. - Журнал systemd.
journalctl -u srv1cv8-<версия>@default -n 100 --no-pager— здесь видны ошибки загрузки библиотек и проблемы с правами. - Порты.
ss -tlnp | grep -E '154[015]'— кто слушает 1540, 1541 и 1545. Если там процесс старой версии, вы не остановили прежнюю службу. - Права. Каталог данных кластера должен принадлежать пользователю
usr1cv8. После ручного копирования или распаковки из бэкапа права слетают:sudo chown -R usr1cv8:grp1cv8 /home/usr1cv8/.1cv8. - Технологический журнал. Если служба работает, но базы ведут себя странно, включите технологический журнал: файл
logcfg.xmlкладут в каталогconfплатформы. Пишите только нужные события и ограничьте срок хранения — журнал быстро занимает диск.
Очистка сеансового кэша (snccntx* в каталоге reg_1541) делается только при остановленной службе, а значит, при отключённых пользователях. Сам реестр 1CV8Clst.lst при этом не трогайте.
Как откатиться на прежнюю платформу
Ради этого и ставят версии рядом. Если новая платформа ведёт себя плохо, а разбираться нет времени, верните старую:
sudo systemctl stop srv1cv8-$NEW@default
sudo systemctl disable srv1cv8-$NEW@default
sudo systemctl enable srv1cv8-$OLD@default
sudo systemctl start srv1cv8-$OLD@default
Клиенты, которые успели обновиться, тоже придётся вернуть на прежнюю версию: правило совпадения номеров работает в обе стороны.
Откат безопасен, пока вы не обновили конфигурации баз до релизов, которые требуют новую платформу. После такого обновления старая платформа базу не откроет, и возврат возможен только из резервной копии СУБД.
Каталоги старых версий удаляйте через неделю-две стабильной работы. В каталоге каждой версии есть свой деинсталлятор. Держать больше двух-трёх версий нет смысла: они только занимают место.