Установка сервера 1С 8.3 нужна, когда файловая база перестаёт справляться: пользователей больше десятка, база растёт, а обмены должны работать круглосуточно. Ниже — состав кластера, установка сервера 1С:Предприятие на Windows и Linux, выбор СУБД, создание базы, администрирование через консоль и rac, ошибки первого запуска и код для программиста.
Файловая база — один файл 1Cv8.1CD в общей папке, и у неё есть потолки:
В клиент-серверном варианте данные лежат в СУБД, код выполняют процессы сервера 1С, а копии делаются средствами СУБД без остановки работы. Цена — администрирование, лицензия на сервер и выделенные ресурсы.
Сервер — это набор процессов. Кластер — группа рабочих серверов с общим списком информационных баз; на одной машине обычно один кластер на порту 1541.
| Процесс | Роль | Порт по умолчанию |
|---|---|---|
ragent | агент: реестр кластеров, запуск остальных процессов, служба ОС | 1540 |
rmngr | менеджер кластера: список баз, сеансы, блокировки, регламентные задания | 1541 |
rphost | рабочие процессы: серверный код и запросы к СУБД | 1560–1591 |
ras | сервер администрирования для rac, отдельная служба | 1545 |
Настройки кластера хранятся в каталоге srvinfo: реестр, журналы регистрации баз, сеансовые данные. Клиент сначала обращается к 1541, а затем получает адрес рабочего процесса из диапазона 1560–1591 — поэтому в брандмауэре открывают весь диапазон.
Второй сервер другой версии на том же компьютере ставят на свои порты и со своим каталогом srvinfo — см. несколько версий сервера 1С на одном компьютере. Чтобы новая база появилась у всех пользователей, раздайте общий список баз.
Сервер 1С:Предприятия 8.3 входит в полный дистрибутив платформы 1С для Windows (64-bit). При установке:
secpol.msc.srvinfo и снимите срок действия пароля, иначе через 42 дня служба перестанет запускаться.Разрядность. Ставьте 64-битный сервер: 32-битному процессу доступно не больше 4 ГБ памяти. Клиенты могут быть любой разрядности, но внешние компоненты и COM-объекты, создаваемые на сервере, нужны 64-битные, а лицензия на 32-битный сервер для 64-битного не подходит.
После установки в оснастке «Службы» появится «Агент сервера 1С:Предприятия 8.3 (x86-64)»; его командная строка с портами — в комментарии к листингу. Ключ -debug добавляют вручную для отладки на сервере; приёмы отладки — в статье про отладку 1С 8.3.
# PowerShell от имени администратора на сервере
# 1. Служба агента: учётная запись и командная строка. Типичная PathName:
# "C:\Program Files\1cv8\8.3.27.1786\bin\ragent.exe" -srvc -agent -regport 1541 -port 1540
# -range 1560:1591 -d "C:\Program Files\1cv8\srvinfo"
Get-CimInstance Win32_Service | Where-Object Name -like '1C*' |
Select-Object Name, State, StartName, PathName | Format-List
# 2. Кто слушает порты агента, кластера и ras
Get-NetTCPConnection -State Listen -LocalPort 1540, 1541, 1545 -ErrorAction SilentlyContinue |
Select-Object LocalPort, OwningProcess, @{ Name = 'Process'; Expression = { (Get-Process -Id $_.OwningProcess).ProcessName } }
# 3. Входящее правило брандмауэра: агент, кластер и диапазон рабочих процессов
New-NetFirewallRule -DisplayName "1C Server 8.3" -Direction Inbound -Protocol TCP `
-LocalPort '1540-1541', '1560-1591' -Action Allow
# 4. После обновления платформы: консоль кластера и COM-коннектор новой версии
regsvr32 "C:\Program Files\1cv8\8.3.27.1786\bin\radmin.dll"
regsvr32 "C:\Program Files\1cv8\8.3.27.1786\bin\comcntr.dll"
# 5. С клиентской машины: доступен ли кластер (ожидаем TcpTestSucceeded : True)
Test-NetConnection srv01 -Port 1541
Второй агент (например, на время перехода на новую версию платформы) запускают на сдвинутых портах со своим srvinfo. Там же регистрируют ras, без которого не работает rac:
# Второй агент: порты 2540/2541/2560–2591 и свой каталог кластера
$ver = "8.3.27.1786"
$bin = "C:\Program Files\1cv8\$ver\bin"
$data = "C:\Program Files\1cv8\srvinfo_2541"
New-Item -ItemType Directory -Force $data | Out-Null
icacls $data /grant "USR1CV8:(OI)(CI)F"
New-Service -Name "1C:Enterprise 8.3 Server Agent 2541" `
-DisplayName "Агент сервера 1С:Предприятия $ver (2540)" `
-BinaryPathName "`"$bin\ragent.exe`" -srvc -agent -regport 2541 -port 2540 -range 2560:2591 -d `"$data`"" `
-StartupType Automatic `
-Credential (Get-Credential -UserName ".\USR1CV8" -Message "Пароль USR1CV8")
Start-Service -Name "1C:Enterprise 8.3 Server Agent 2541"
# ras для rac: слушает 1545 и обращается к агенту на 1540
New-Service -Name "1C:Enterprise 8.3 Remote Server" `
-DisplayName "Сервер администрирования 1С:Предприятия 8.3 (ras)" `
-BinaryPathName "`"$bin\ras.exe`" cluster --service --port=1545 localhost:1540" `
-StartupType Automatic
Start-Service -Name "1C:Enterprise 8.3 Remote Server"
# Настройки службы: в PowerShell пишите sc.exe, просто sc — это Set-Content
sc.exe qc "1C:Enterprise 8.3 Server Agent (x86-64)"
С версии 8.3.20 платформа для Linux ставится единым установщиком setup-full-<версия>-x86_64.run вместо deb/rpm-пакетов. Он кладёт файлы в /opt/1cv8/x86_64/<версия>/ и создаёт пользователя usr1cv8 и группу grp1cv8. Служба подключается к systemd юнитом из каталога платформы, свой у каждой версии.
# Linux, платформа 8.3.20+; номер версии подставьте свой
V=8.3.27.1786
chmod +x setup-full-$V-x86_64.run
sudo ./setup-full-$V-x86_64.run --mode unattended --enable-components server,ws
id usr1cv8 # пользователь, от которого работает сервер
# служба из юнита в каталоге платформы
sudo systemctl link /opt/1cv8/x86_64/$V/srv1cv8-$V@.service
sudo systemctl enable --now srv1cv8-$V@default
systemctl status srv1cv8-$V@default --no-pager
sudo ss -ltnp | grep -E 'ragent|rmngr|rphost'
# ras для rac, демоном от имени usr1cv8
sudo -u usr1cv8 /opt/1cv8/x86_64/$V/ras cluster --daemon --port=1545 localhost:1540
# брандмауэр firewalld (для ufw: sudo ufw allow 1540:1541/tcp и 1560:1591/tcp)
sudo firewall-cmd --permanent --add-port=1540-1541/tcp --add-port=1560-1591/tcp
sudo firewall-cmd --reload
mchar/mvarchar, и база не создастся. Смещение дат — 0.Версию СУБД сверяйте с системными требованиями платформы на v8.1c.ru. Если СУБД и сервер 1С на одной машине, ограничьте память СУБД (в MS SQL — max server memory), иначе рабочим процессам её не хватит.
Проще всего — из окна запуска: «Добавить» → «Создание новой информационной базы» → «На сервере 1С:Предприятия». Поля:
srv01:2541, если кластер не на 1541;Ref);Файловую базу переносят выгрузкой: в конфигураторе «Администрирование» → «Выгрузить информационную базу» (*.dt), затем в пустой серверной базе — «Загрузить информационную базу».
Серверу нужна своя лицензия (варианты ПРОФ и КОРП, для 32 и 64 бит), пользователям — клиентские. Клиентские удобно держать на сервере: у базы включают «Разрешить выдачу лицензий сервером 1С:Предприятия». Программная лицензия привязана к параметрам компьютера: после замены оборудования или переноса виртуальной машины её активируют заново. Что именно требует КОРП, уточняйте у партнёра.
Консоль «Администрирование серверов 1С Предприятия» — оснастка MMC для Windows: в ней добавляют центральный сервер (порт 1540), смотрят базы, сеансы и процессы, блокируют сеансы и регламентные задания. После обновления платформы консоль не подключится, пока не зарегистрирован radmin.dll новой версии (первый листинг).
Сразу заведите администраторов агента и кластера: без них любой, кто видит порт 1540, может удалить базу из кластера.
rac умеет то же из командной строки и на любой ОС, но работает через ras (порт 1545) — сначала запустите его.
# rac лежит рядом с ragent (на Windows — ...\bin\rac.exe)
RAC=/opt/1cv8/x86_64/8.3.27.1786/rac
RAS=srv01:1545
$RAC $RAS cluster list
CL=$($RAC $RAS cluster list | awk '$1 == "cluster" { print $3; exit }')
# базы, сеансы и лицензии, выданные рабочими процессами
$RAC $RAS infobase summary list --cluster=$CL
$RAC $RAS session list --cluster=$CL
$RAC $RAS process list --cluster=$CL --licenses
# новая база в PostgreSQL; пароли — из переменных окружения, а не в тексте скрипта;
# --cluster-user/--cluster-pwd — только если заведены администраторы кластера
$RAC $RAS infobase create --cluster=$CL \
--cluster-user="$CL_ADMIN" --cluster-pwd="$CL_PWD" \
--create-database --name=buh_test --dbms=PostgreSQL \
--db-server=pg01 --db-name=buh_test --db-user=postgres --db-pwd="$PG_PWD" \
--locale=ru --license-distribution=allow --scheduled-jobs-deny=on
# завершить сеанс (идентификатор — из session list)
$RAC $RAS session terminate --cluster=$CL --session=$SID --error-message="Обновление конфигурации"
ragent, rmngr и хотя бы один rphost; порты 1540 и 1541 слушаются.rac cluster list видят кластер, в нём — рабочий сервер с правильным именем компьютера.Программисту нужны две вещи: понимать, в каком варианте работает база, и видеть сеансы кластера. Вариант виден по строке соединения: у серверной базы в ней есть Srvr и Ref, у файловой — File.
// Общий модуль с флагом «Сервер». Разбирает строку соединения текущей базы:
// серверная — Srvr="srv01:1541";Ref="buh"; файловая — File="D:\Bases\buh";
Функция ПараметрыСоединенияБазы() Экспорт
Результат = Новый Структура("Серверная, Сервер, ИмяВКластере, Каталог", Ложь, "", "", "");
Для Каждого Часть Из СтрРазделить(СтрокаСоединенияИнформационнойБазы(), ";", Ложь) Цикл
Позиция = СтрНайти(Часть, "=");
Если Позиция = 0 Тогда
Продолжить;
КонецЕсли;
Ключ = НРег(СокрЛП(Лев(Часть, Позиция - 1)));
Значение = СтрЗаменить(СокрЛП(Сред(Часть, Позиция + 1)), """", "");
Если Ключ = "srvr" Тогда
Результат.Серверная = Истина;
Результат.Сервер = Значение;
ИначеЕсли Ключ = "ref" Тогда
Результат.ИмяВКластере = Значение;
ИначеЕсли Ключ = "file" Тогда
Результат.Каталог = Значение;
КонецЕсли;
КонецЦикла;
Возврат Результат;
КонецФункции
// Защита тяжёлой операции от запуска на файловой базе.
// В конфигурациях на БСП то же проверяет ОбщегоНазначения.ИнформационнаяБазаФайловая().
Процедура ПроверитьКлиентСерверныйВариант() Экспорт
Соединение = ПараметрыСоединенияБазы();
Если Не Соединение.Серверная Тогда
ВызватьИсключение СтрШаблон("Операция рассчитана на сервер 1С, а база файловая: %1", Соединение.Каталог);
КонецЕсли;
КонецПроцедуры
Сеансы кластера на Windows получают через COM-объект V83.COMConnector. БСП при ошибке подключения перерегистрирует comcntr.dll для текущего пользователя: regsvr32.exe /n /i:user /s comcntr.dll.
// Сервер на Windows или толстый клиент. Нужен зарегистрированный comcntr.dll
// той же версии и разрядности, что и процесс, в котором выполняется код.
Функция СеансыКластераЧерезCOM(Знач АдресАгента = "tcp://srv01:1540",
Знач АдминистраторКластера = "", Знач ПарольАдминистратора = "") Экспорт
ТипСтрока = Новый ОписаниеТипов("Строка");
Таблица = Новый ТаблицаЗначений;
Таблица.Колонки.Добавить("База", ТипСтрока);
Таблица.Колонки.Добавить("Номер", Новый ОписаниеТипов("Число"));
Таблица.Колонки.Добавить("Пользователь", ТипСтрока);
Таблица.Колонки.Добавить("Приложение", ТипСтрока);
Таблица.Колонки.Добавить("Компьютер", ТипСтрока);
Таблица.Колонки.Добавить("Начат", Новый ОписаниеТипов("Дата"));
Попытка
Коннектор = Новый COMОбъект("V83.COMConnector");
Агент = Коннектор.ConnectAgent(АдресАгента);
Исключение
ВызватьИсключение "Нет связи с агентом сервера " + АдресАгента + ": "
+ КраткоеПредставлениеОшибки(ИнформацияОбОшибке());
КонецПопытки;
Для Каждого Кластер Из Агент.GetClusters() Цикл
// Пустые имя и пароль, если администраторы кластера не заведены
Агент.Authenticate(Кластер, АдминистраторКластера, ПарольАдминистратора);
Для Каждого Сеанс Из Агент.GetSessions(Кластер) Цикл
НоваяСтрока = Таблица.Добавить();
НоваяСтрока.База = Сеанс.InfoBase.Name;
НоваяСтрока.Номер = Сеанс.SessionID;
НоваяСтрока.Пользователь = Сеанс.UserName;
НоваяСтрока.Приложение = Сеанс.AppID;
НоваяСтрока.Компьютер = Сеанс.Host;
НоваяСтрока.Начат = Сеанс.StartedAt;
КонецЦикла;
КонецЦикла;
Таблица.Сортировать("База, Начат");
Возврат Таблица;
КонецФункции
На Linux COM нет. В конфигурациях на БСП 3.1 общий модуль АдминистрированиеКластера с типом подключения "RAS" вызывает rac и разбирает его вывод, а программный интерфейс тот же, что и для COM.
// Конфигурация на БСП 3.1, тот же общий модуль. Тип подключения "RAS": БСП вызывает rac
// из каталога платформы на сервере, поэтому код работает и с сервером на Linux.
Функция ФоновыеСеансыТекущейБазы() Экспорт
ИмяВКластере = ПараметрыСоединенияБазы().ИмяВКластере; // функция из первого листинга
Если ПустаяСтрока(ИмяВКластере) Тогда
ВызватьИсключение "База файловая: сеансов кластера у неё нет";
КонецЕсли;
ПараметрыКластера = АдминистрированиеКластера.ПараметрыАдминистрированияКластера();
ПараметрыКластера.ТипПодключения = "RAS";
ПараметрыКластера.АдресСервераАдминистрирования = "srv01";
ПараметрыКластера.ПортСервераАдминистрирования = 1545;
ПараметрыКластера.ПортКластера = 1541;
// Если в кластере заведены администраторы, заполните ИмяАдминистратораКластера
// и ПарольАдминистратораКластера (пароль держите в безопасном хранилище БСП)
ПараметрыИБ = АдминистрированиеКластера.ПараметрыАдминистрированияИнформационнойБазыКластера();
ПараметрыИБ.ИмяВКластере = ИмяВКластере;
Фильтр = АдминистрированиеКластера.ФильтрСеансов();
Фильтр.Свойство = "ИдентификаторКлиентскогоПриложения";
Фильтр.Значение = "BackgroundJob";
Попытка
Сеансы = АдминистрированиеКластера.СеансыИнформационнойБазы(ПараметрыКластера, ПараметрыИБ, Фильтр);
Исключение
ЗаписьЖурналаРегистрации("Администрирование кластера", УровеньЖурналаРегистрации.Ошибка, , ,
ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
ВызватьИсключение;
КонецПопытки;
Для Каждого Сеанс Из Сеансы Цикл
Сообщить(СтрШаблон("Фоновый сеанс %1: %2, начат %3",
Сеанс.Номер, Сеанс.ИмяПользователя, Сеанс.МоментСозданияСеанса));
КонецЦикла;
Возврат Сеансы;
КонецФункции
У фоновых заданий приложение BackgroundJob, у тонкого клиента — 1CV8C: так удобно искать зависшие фоновые задания перед обновлением конфигурации.
hosts. То же бывает после переименования сервера: в реестре кластера осталось старое имя.srvinfo и место на диске, а сеансовые данные чистите по статье про кэш сервера.rac process list --licenses.rac.Ref).Технически да. Для тестов и маленького офиса это рабочий вариант, но для продуктива берите серверную ОС: в ней проще управлять обновлениями и перезагрузками.
Несколько, если у каждого агента свои порты и свой srvinfo (второй листинг). Базу переводят на новую версию, регистрируя в новом кластере с тем же подключением к СУБД и удаляя из старого без удаления базы данных.
Функции почти те же, но rac работает на Linux и запускается из скриптов и планировщика: блокировка сеансов перед обновлением, завершение зависших. Консоль удобнее для ручной работы на Windows.
Если сервер нужен срочно или переезд с файлового варианта нельзя растягивать дольше выходных, установку кластера и СУБД проще поручить специалисту — см. услуги по 1С. Опишите задачу и сроки в форме размещения задания.
Станьте частью сообщества!
Войдите или зарегистрируйтесь, и вы сможете участвовать в обсуждениях.