Обновление 1С:Предприятие с 8.3 до 8.5.1: сервер на Linux, клиенты на Windows RDS

12 мин проверено на 1С 8.5.1.1529, CentOS 7, Windows Server 2016
Содержание
  1. Что нужно знать до начала
  2. 1. Разведка: что сейчас установлено
  3. 2. Резервные копии
  4. 3. Скачивание дистрибутивов
  5. 4. Установка 8.5 на сервер Linux (рядом со старой версией)
  6. 5. Переключение кластера на 8.5
  7. 6. Проверка сервера
  8. 7. Клиенты и консоль администрирования на терминальном сервере Windows
  9. 8. Финальная проверка
  10. 9. Удаление старых версий
  11. Откат на 8.3
  12. Итог

Пошаговая инструкция по переводу клиент-серверной 1С на платформу 8.5.1 (на примере релиза 8.5.1.1529). Схема типовая для небольшой организации:

  • сервер 1С — Linux (CentOS 7), кластер 1С 8.3.27 работает как служба systemd, базы в PostgreSQL от 1С;
  • клиенты — терминальный сервер Windows Server (RDS), на нём же консоль администрирования кластера.

Всё описанное проверено на рабочей системе. Простой для пользователей — около 5 минут: только время переключения службы кластера.

Что нужно знать до начала

  1. Конвертация баз не нужна. По официальному списку изменений 8.5.1 конфигурации и информационные базы при переходе с 8.3 не конвертируются.
  2. Откат возможен, пока не трогали режим совместимости. Пока в конфигурации стоит режим совместимости 8.3.x, базу можно снова открыть на 8.3. После отключения режима совместимости база будет работать только на 8.5.
  3. Версии клиента и сервера должны совпадать. Клиенты 8.3 не подключатся к кластеру 8.5. Поэтому сервер и клиенты обновляются в одно окно.
  4. CentOS 7 официально больше не поддерживается (с версии 8.3.26 вместе с RHEL 7 и Oracle Linux 7). На практике 8.5.1 на ней запускается: в glibc 2.17 нужные библиотеки есть. Это проверяется до переключения, ниже есть команда. Но планировать переезд на поддерживаемый дистрибутив стоит.
  5. PostgreSQL. В 8.5.1 прекращена поддержка PostgreSQL 9.6 и старше. Сборки 1С версии 11 и новее подходят.
  6. Лицензии. Программные лицензии сервера (файлы .lic в /var/1C/licenses) продолжают работать на 8.5.1, переактивация не нужна.

1. Разведка: что сейчас установлено

На Linux-сервере:

bash
ls /opt/1cv8/x86_64/                       # установленные версии платформы
systemctl list-units --all | grep -E 'srv1cv8|ras'
ps -eo pid,user,args | grep -E 'ragent|rmngr|rphost|/ras' | grep -v grep
ldd --version | head -1                    # версия glibc

Список кластеров, баз и активных сеансов (порт RAS по умолчанию 1545):

bash
RAC=/opt/1cv8/x86_64/8.3.27.2325/rac
$RAC cluster list localhost:1545
CL=$($RAC cluster list localhost:1545 | awk '/^cluster/{print $3; exit}')
$RAC infobase summary list --cluster=$CL localhost:1545
$RAC session list --cluster=$CL localhost:1545 | grep -c '^session '

Если RAS не запущен, его можно поднять временно: /opt/1cv8/x86_64/<версия>/ras --daemon cluster.

На терминальном сервере Windows (PowerShell от администратора):

powershell
Get-ItemProperty 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\*' |
  ? DisplayName -match '1С|1C' | Select DisplayName, DisplayVersion
Get-Content 'C:\ProgramData\1C\1CEStart\1CEStart.cfg'   # какие компоненты ставились

Строка InstallComponents= в 1CEStart.cfg пригодится: новую версию ставим с тем же набором компонентов.

2. Резервные копии

Делаем до любых изменений. Места нужно примерно по 20% от размера каждой базы (дамп в формате custom сжимается).

bash
B=/home/pgbackup/pre-8.5-$(date +%Y%m%d)
mkdir -p $B && chown postgres $B

# настройки кластера (реестр кластера, списки баз, журналы) и юниты systemd, лицензии
tar czf $B/cluster-dotdir.tgz -C /home/usr1cv8 .1cv8
tar czf $B/conf-units-licenses.tgz /opt/1cv8/conf /etc/systemd/system/srv1cv8-*.service \
    /etc/systemd/system/ras-*.service /var/1C/licenses

# дампы баз (в фоне, по очереди)
nohup su - postgres -c "cd $B && for d in база1 база2; do
  /usr/pgsql-11/bin/pg_dump -Fc -Z 6 -f \$d.dump \$d && echo \$d OK >> dump.status || echo \$d FAIL >> dump.status
done; echo ALLDONE >> dump.status" >/dev/null 2>&1 &

Переходить к переключению можно только когда в dump.status появился ALLDONE и нет FAIL. База на 23 ГБ дампится примерно за 15 минут, дамп получается около 4,5 ГБ.

Если tar пишет «файл изменился во время чтения» — это полнотекстовый индекс работающей базы, на восстановление настроек кластера это не влияет.

3. Скачивание дистрибутивов

На releases.1c.ru в разделе «Технологическая платформа 8.5» выбираем версию и скачиваем:

Файл Что внутри Куда
server64_8_5_1_1529.zip «Технологическая платформа 1С:Предприятия (64-bit) для Linux», единый установщик setup-full-…-x86_64.run сервер Linux
windows64full_8_5_1_1529.rar «Технологическая платформа 1С:Предприятия (64-bit) для Windows» — клиенты, конфигуратор, консоль администрирования терминальный сервер
checksums_8_5_1_1529.zip контрольные суммы MD5 и SHA256 всех файлов релиза для проверки

Проверяем целостность:

bash
unzip -o checksums_8_5_1_1529.zip -d cs
cat cs/server64_8_5_1_1529.zip.md5 cs/windows64full_8_5_1_1529.rar.md5
md5sum server64_8_5_1_1529.zip windows64full_8_5_1_1529.rar

Если сервер в закрытом сегменте и передача идёт через нестабильный VPN, удобнее всего rsync --partial --append-verify --bwlimit=3000: при обрыве он докачивает файл, а ограничение скорости заметно снижает число обрывов L2TP-туннеля. После копирования ещё раз сверьте MD5 на месте.

4. Установка 8.5 на сервер Linux (рядом со старой версией)

Новая версия ставится в отдельный каталог /opt/1cv8/x86_64/8.5.1.1529 и не трогает работающий кластер.

bash
cd /root/distr-8.5.1.1529
./setup-full-8.5.1.1529-x86_64.run --help        # список компонентов
./setup-full-8.5.1.1529-x86_64.run --mode unattended \
    --enable-components server,ws,server_admin,ru \
    --disable-components client_full,client_thin,client_thin_fib,desktop_icons
  • server — сервер 1С, server_admin — RAS и rac, ws — модули расширения веб-сервера (если публикуете базы через Apache);
  • по умолчанию установщик включает client_full — на сервере он не нужен, отключаем явно;
  • имена компонентов проверяются строго: например, en в --disable-components вызовет ошибку «Неверное значение» и установка не начнётся. Языки — ru, en и т.д. — указываются только в --enable-components.

Проверяем, что бинарники запускаются на этой ОС (важно для CentOS 7):

bash
V=/opt/1cv8/x86_64/8.5.1.1529
for b in ragent rmngr rphost ras rac; do ldd $V/$b | grep -E 'not found|GLIBC'; done   # пусто = хорошо
$V/rac -v                                         # должно вывести 8.5.1.1529
ls $V/*.service                                   # шаблоны юнитов от 1С

5. Переключение кластера на 8.5

Перед переключением убедитесь, что в кластере нет сеансов (команда из раздела 1), и предупредите пользователей.

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

bash
OLD=8.3.27.2325; NEW=8.5.1.1529

systemctl stop srv1cv8-$OLD
systemctl disable srv1cv8-$OLD
pkill -f "x86_64/$OLD/ras"                     # если RAS запускался вручную

# юнит сервера: та же конфигурация, новый путь
sed -e "s/$OLD/$NEW/g" -e "s/Server 8.3 /Server 8.5 /" -e "s/ (%I)$//" \
    /etc/systemd/system/srv1cv8-$OLD.service > /etc/systemd/system/srv1cv8-$NEW.service
[ -f /opt/1cv8/x86_64/$OLD/usr1cv8.keytab ] && cp -n /opt/1cv8/x86_64/$OLD/usr1cv8.keytab /opt/1cv8/x86_64/$NEW/

# юнит RAS: просто поменять путь к бинарнику
sed -i -E "s#/opt/1cv8/x86_64/[0-9.]+/#/opt/1cv8/x86_64/$NEW/#g; s/for [0-9.]+$/for $NEW/" \
    /etc/systemd/system/ras-1cv8.service

systemctl daemon-reload
systemctl enable --now srv1cv8-$NEW
sleep 10
systemctl enable --now ras-1cv8

Почему (%I) убираем из описания: эта подстановка имеет смысл только для шаблонных юнитов (srv1cv8-…@.service). В обычном юните systemd на каждый запуск пишет предупреждение Failed to resolve unit specifiers.

Каталог данных кластера (-d /home/usr1cv8/.1cv8/1C/1cv8) и порты остаются прежними, поэтому новый агент подхватывает тот же кластер со всеми базами, назначениями и администраторами.

6. Проверка сервера

bash
systemctl is-active srv1cv8-8.5.1.1529 ras-1cv8
ps -eo user,args | grep -E 'ragent|rmngr|rphost|/ras' | grep -v grep      # все процессы из каталога 8.5.1.1529
ss -ltnp | grep -E ':(1540|1541|1545|156[0-9])\b'

RAC=/opt/1cv8/x86_64/8.5.1.1529/rac
CL=$($RAC cluster list localhost:1545 | awk '/^cluster/{print $3; exit}')
$RAC infobase summary list --cluster=$CL localhost:1545
$RAC process list --cluster=$CL localhost:1545 | grep -E '^(port|running)'
journalctl -u srv1cv8-8.5.1.1529 -n 30 --no-pager

7. Клиенты и консоль администрирования на терминальном сервере Windows

Распакуйте windows64full_…rar в, например, C:\Distr\1C_8.5.1.1529. Перед установкой закройте 1С во всех сеансах: к новому серверу старые клиенты всё равно уже не подключатся.

powershell
$d = 'C:\Distr\1C_8.5.1.1529'
Get-Process 1cv8, 1cv8c, 1cv8s -EA 0 | Stop-Process -Force

Start-Process "$d\vc_redist.x64.exe" -ArgumentList '/install /quiet /norestart' -Wait

$a = '/i "{0}\1CEnterprise 8 (x86-64).msi" /qn /norestart TRANSFORMS="adminstallrelogon.mst;1049.mst" ' +
     'DESIGNERALLCLIENTS=1 THINCLIENT=1 THINCLIENTFILE=0 SERVER=0 WEBSERVEREXT=0 CONFREPOSSERVER=0 ' +
     'CONVERTER77=0 SERVERCLIENT=1 LANGUAGES=RU /l*v "{0}\install.log"'
Start-Process msiexec.exe -ArgumentList ($a -f $d) -WorkingDirectory $d -Wait -PassThru | % ExitCode   # 0 = успех

Набор свойств — тот же, что в InstallComponents из 1CEStart.cfg:

  • DESIGNERALLCLIENTS=1 — толстый клиент и конфигуратор, THINCLIENT=1 — тонкий клиент;
  • SERVERCLIENT=1 — «Администрирование сервера 1С:Предприятия», то есть консоль кластера;
  • SERVER=0 — сервер 1С на терминальном сервере не нужен;
  • adminstallrelogon.mst — установка без требования перезагрузки, 1049.mst — русский интерфейс установщика.

Консоль администрирования — это оснастка MMC, которая использует radmin.dll той версии, что последней зарегистрирована в системе. Чтобы консоль гарантированно работала с кластером 8.5, регистрируем библиотеку явно:

powershell
regsvr32 /s "C:\Program Files\1cv8\8.5.1.1529\bin\radmin.dll"

# проверка: оба CLSID оснастки должны указывать на 8.5.1.1529
Get-ChildItem Registry::HKEY_CLASSES_ROOT\CLSID |
  ? { (Get-ItemProperty "$($_.PSPath)\InprocServer32" -EA 0).'(default)' -match 'radmin' } |
  % { (Get-ItemProperty "$($_.PSPath)\InprocServer32").'(default)' }

Ярлык консоли — C:\Program Files\1cv8\common\1CV8 Servers (x86-64).msc.

Проверка с терминального сервера, что кластер виден через новую версию rac:

powershell
$rac = 'C:\Program Files\1cv8\8.5.1.1529\bin\rac.exe'
& $rac cluster list <имя-сервера-1с>:1545

Пользователям ничего перенастраивать не нужно: 1cestart сам выбирает установленную версию, совпадающую с версией сервера. Старые версии клиента лучше оставить на время проверки и удалить позже (раздел 9).

Файловые базы на этом же сервере после установки 8.5 будут открываться новой версией (это самая свежая установленная). Это безопасно, пока не отключён режим совместимости, но если какую-то файловую базу нужно оставить на 8.3, укажите ей версию в свойствах списка баз.

8. Финальная проверка

  1. Войти в рабочую базу обычным пользователем и в конфигуратор администратором.
  2. В «О программе» — версия 8.5.1.1529, режим совместимости — прежний.
  3. Открыть консоль кластера, убедиться, что видны базы, сеансы, рабочие процессы.
  4. Проверить, что регламентные задания и обмены отработали (журнал регистрации через час-другой).
  5. Если используются программные лицензии — убедиться, что сеансы получают лицензию (в консоли кластера у сеанса заполнено поле лицензии).

9. Удаление старых версий

Когда пользователи поработали на 8.5 и всё в порядке, старые версии можно убрать. Учтите: после этого быстрый откат (раздел ниже) потребует сначала заново поставить 8.3 из дистрибутива.

На Linux пакеты rpm старой версии владеют только своим каталогом /opt/1cv8/x86_64/<версия>, так что общие файлы не пострадают. Проверить это можно заранее:

bash
for p in $(rpm -qa | grep '^1c-enterprise-8\.3'); do rpm -ql $p | grep -v '/opt/1cv8/x86_64/8.3'; done   # пусто = безопасно
rpm -e $(rpm -qa | grep '^1c-enterprise-8\.3\.27\.2325')
# версии, поставленные единым установщиком .run, удаляются своим деинсталлятором:
/opt/1cv8/x86_64/8.3.27.2342/uninstaller-full --mode unattended
rm -f /etc/systemd/system/srv1cv8-8.3.27.*.service && systemctl daemon-reload
systemctl is-active srv1cv8-8.5.1.1529 ras-1cv8                     # кластер 8.5 должен работать дальше

На Windows — штатное удаление через msiexec по коду продукта из раздела Uninstall реестра, затем обязательно повторная регистрация консоли 8.5: деинсталлятор старой версии может снять общую регистрацию оснастки, и консоль перестанет открываться.

powershell
Get-ItemProperty 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\*' |
  ? { $_.DisplayName -match '1С|1C' -and $_.DisplayVersion -like '8.3.*' } |
  % { Start-Process msiexec.exe -ArgumentList "/x $($_.PSChildName) /qn /norestart" -Wait }
# каталоги, оставшиеся без записи в списке программ (например, распакованные вручную), удалить руками
regsvr32 /s "C:\Program Files\1cv8\8.5.1.1529\bin\radmin.dll"

Откат на 8.3

Если что-то пошло не так и режим совместимости не менялся (если старые версии уже удалены — сначала установите 8.3 из дистрибутива тем же способом, что и 8.5):

bash
systemctl disable --now ras-1cv8 srv1cv8-8.5.1.1529
# при необходимости вернуть настройки кластера из копии:
#   mv /home/usr1cv8/.1cv8 /home/usr1cv8/.1cv8.after-8.5 && tar xzf $B/cluster-dotdir.tgz -C /home/usr1cv8
sed -i -E 's#/opt/1cv8/x86_64/8\.5\.1\.1529/#/opt/1cv8/x86_64/8.3.27.2325/#' /etc/systemd/system/ras-1cv8.service
systemctl daemon-reload
systemctl enable --now srv1cv8-8.3.27.2325 ras-1cv8

На терминальном сервере вернуть консоль на старую версию: regsvr32 "C:\Program Files\1cv8\8.3.27.2325\bin\radmin.dll". Клиент 8.3 остаётся установленным, 1cestart выберет его автоматически.

Итог

Что Было Стало
Сервер 1С (Linux) 8.3.27.2325 (+ неиспользуемая 8.3.27.2342) 8.5.1.1529, старые удалены
RAS запущен вручную от root служба systemd от usr1cv8
Клиенты на RDS 8.3.27 (три сборки) 8.5.1.1529, старые удалены
Консоль администрирования radmin.dll 8.3.27 radmin.dll 8.5.1.1529
Базы режим совместимости 8.3 без изменений
Статья помогла?

Нашли ошибку или устаревшую команду? Выделите текст и нажмите Ctrl+Enter.