Кластер 1С 8.3 на Ubuntu 25.04: main, worker, PostgreSQL, RAS/RAC и Apache
База данных - Администрирование СУБД
Кластер серверов 1С:Предприятие 8.3 на Ubuntu Server 25.04
Разбираем кластер серверов 1С:Предприятие 8.3 на Ubuntu Server 25.04: главный узел и worker, PostgreSQL на отдельной машине, администрирование через RAS/RAC и веб-доступ через Apache. Ставим платформу из деб-пакетов, поднимаем службы systemd (srv1cv8, ras) и управляем кластером утилитой rac - конфигуратор на сервере не нужен. Дальше шаги для администратора 1С или DevOps: поднять main и worker, PostgreSQL и веб-доступ с понятными именами хостов, портами и порядком команд. В примерах релиз 8.3.27.1850. Перед продакшеном сверьте его с матрицей ОС на releases.1c.ru и в ITS. Если Ubuntu 25.04 для вашей сборки не указана, берите ближайший поддерживаемый LTS или ждите дистрибутив платформы под эту версию Ubuntu.
serv1c83 - main: управление кластером, сессии, RAS, Apache с публикацией. serv1c83w - worker под rphost и нагрузку. servpg - только PostgreSQL. Тонкий и толстый клиент подключаются к кластеру через serv1c83; веб - по URL на main. Записи в /etc/hosts согласуйте на всех трёх хостах до установки: при сервер insert RAC на main резолвит agent-host по этому файлу, а не «красивому» DNS, если он указывает на другой адрес.
Пример блока для одинаковых имён (IP подставьте свои; строки дублируют на serv1c83, serv1c83w и servpg):
10.0.0.11 serv1c83
10.0.0.12 serv1c83w
10.0.0.13 servpg
Архитектура стенда и требования
Два сервера 1С: на main - управление кластером и RAS, на worker - rphost под нагрузку. Рабочий узел регистрируют в кластере с режимом using=normal и своим диапазоном портов rphost. Третий хост - PostgreSQL; клиентские компоненты 1С на serv1c83 и serv1c83w не ставим.
На Ubuntu Server 25.04 обновляем пакеты и ставим зависимости под серверный deb по списку из readme к setup-full-*.run вашего релиза (ICU, при необходимости ImageMagick и fontconfig). Номера пакетов ICU от версии Ubuntu отличаются - не копируйте чужой apt install вслепую.
sudo apt update
sudo apt upgrade -y
sudo apt install -y imagemagick fontconfig
# Пакеты ICU и остальные зависимости — по списку в readme к setup-full-*.run для вашей Ubuntu
Данные кластера выносим на отдельный том или LVM: каталог /1C/1cv8 в службе srv1cv8 задаётся переменной SRV1CV8_DATA. Бэкапы reg и сеансов не смешиваем с системным корнем. Владелец каталога - пользователь из readme релиза и из unit srv1cv8 (часто usr1cv8:grp1cv8): ему нужна запись в reg и каталоги сеансов.
sudo mkdir -p /1C/1cv8
sudo chown usr1cv8:grp1cv8 /1C/1cv8
sudo chmod 755 /1C/1cv8
Установку начинаем с рун-инсталлятора setup-full-8.3.27.1850-*.run на каждом узле 1С: в мастере отмечаем только сервер 1С:Предприятие, клиенты и лишние компоненты не включаем. На serv1c83 дополнительно ставим компонент веб-сервера платформы (модуль для Apache, webinst); на serv1c83w - только сервер. Один номер релиза на обоих узлах. После мастера ставим полученные deb, в том числе пакет сервера и на main - пакет веб-сервера платформы (имя смотрите в каталоге, куда run распаковал deb).
chmod +x setup-full-8.3.27.1850-x86_64.run
sudo./setup-full-8.3.27.1850-x86_64.run
# Мастер: только «Сервер 1С:Предприятие»; на serv1c83 — компонент веб-сервера платформы; клиент не отмечать
sudo dpkg -i 1c-enterprise83-server_8.3.27.1850-*.deb
# На serv1c83 дополнительно deb веб-сервера платформы из каталога run (имя в readme)
sudo apt -f install -y
После установки платформа лежит в /opt/1cv8/x86_64/8.3.27.1850/: rac, ragent, rmngr, rphost, webinst, шаблоны служб systemd. Проверка: ls -la /opt/1cv8/x86_64/8.3.27.1850/rac.
Порты удобно зафиксировать до первого insert (на схеме стенда выше - та же сводка):
- ragent - 1540/tcp на каждом узле 1С;
- менеджер кластера (rmngr) - 1541/tcp локально на main и на worker;
- диапазон rphost на main - 1560–1591 (пример); на serv1c83w - 1592–1623, без пересечения с main;
- RAS - 1545/tcp по умолчанию на main;
- PostgreSQL на servpg - 5433/tcp в примере (или 5432);
- Apache на main - 80/tcp, позже 443 при HTTPS.
Между serv1c83 и serv1c83w в firewall нужна связность и на 1540, и на 1541: cluster-port - это порт менеджера на этом узле (1541 локально на main и на worker), не «один общий порт кластера». С servpg на оба узла 1С открываем порт СУБД. В ufw или nftables разрешаем трафик из подсети клиентов и между узлами кластера; пример ufw: ufw allow from 10.0.0.0/8 to any port 1540 proto tcp.
Синхронизацию времени (NTP) на всех узлах имеет смысл включить сразу - иначе логи ragent и PostgreSQL плохо стыкуются при разборе ошибок.
Установка сервера 1С на Ubuntu 25.04 (оба узла кластера)
Подключаем шаблон службы srv1cv8@… из каталога установки через systemctl link. Перед enable правим drop-in: SRV1CV8_DATA и при необходимости SRV1CV8_DEBUG для контура разработки.
Открываем редактор drop-in:
sudo systemctl edit srv1cv8-8.3.27.1850@default.service
В секции [Service] задаём, например:
Environment=SRV1CV8_DATA=/1C/1cv8
Environment=SRV1CV8_DEBUG=-debug -http
Строку SRV1CV8_DEBUG добавляю только на main и только на время диагностики; точный набор ключей сверяю с readme релиза. На worker debug без причины не включаю.
На main и worker одна и та же последовательность (экземпляр @умолчанию - единственный контур srv1cv8 на узле):
sudo systemctl link /opt/1cv8/x86_64/8.3.27.1850/srv1cv8-8.3.27.1850@.service
sudo systemctl daemon-reload
sudo systemctl enable srv1cv8-8.3.27.1850@default.service
sudo systemctl start srv1cv8-8.3.27.1850@default.service
sudo systemctl status srv1cv8-8.3.27.1850@default.service
Нужны статусы active (running) и enabled. Служба падает после смены каталога данных - смотрим права на /1C/1cv8 и journalctl -u srv1cv8-8.3.27.1850@default.service. После правки unit всегда daemon-reload и restart.
Worker получает тот же деб-сервер, что и main; патчи 8.3.27.1688 и 8.3.27.1850 на разных узлах кластера смешивать нельзя.
Занятый 1540 при старте видно через ss -lntp | grep 1540. Частые причины - второй экземпляр srv1cv8 или старый ragent от прошлой установки.
RAS на главном сервере и сборка кластера через RAC
RAS (Remote Administration Server) принимает удалённые команды администрирования. RAC - утилита rac в каталоге платформы; шлёт команды локальному ragent или на RAS другого хоста.
RAS включаем на main; для этой схемы на worker RAS не нужен.
sudo systemctl link /opt/1cv8/x86_64/8.3.27.1850/ras-8.3.27.1850.service
sudo systemctl daemon-reload
sudo systemctl enable ras-8.3.27.1850.service
sudo systemctl start ras-8.3.27.1850.service
sudo systemctl status ras-8.3.27.1850.service
Дальше работаем на main: cd /opt/1cv8/x86_64/8.3.27.1850/. Из SSH на main хватает локального ./rac без указания RAS. С другой машины к командам добавляют cluster --host serv1c83 --port 1545.
UUID кластера берём из list:
./rac cluster list
Строку cluster из вывода сохраняем - она понадобится во всех рас-командах. Worker добавляем через insert (диапазон rphost другой, чем на main):
./rac server --cluster=a1b2c3d4-e5f6-7890-abcd-ef1234567890 insert \
--agent-host=serv1c83w --agent-port=1540 \
--port-range=1592:1623 --name=serv1c83worker \
--using=normal --cluster-port=1541
В insert agent-host - имя из /etc/hosts, agent-port 1540, уникальный port-range, понятное name, using normal, cluster-port 1541 на этом узле. С main имя worker должно пинговаться и резолвиться так же, как в команде.
Контроль после insert - две отдельные команды:
./rac server --cluster=a1b2c3d4-e5f6-7890-abcd-ef1234567890 list./rac process --cluster=a1b2c3d4-e5f6-7890-abcd-ef1234567890 list
В сервер list видим main и serv1c83worker с типами main и normal. Сразу после insert список процессов часто пустой - это нормально, пока никто не подключился к базе; rmngr и rphost появятся после первого сеанса.
Конфликт port-range лечится сервер remove, новым диапазоном и повторным insert. Если rac пишет, что агент недоступен, я почти всегда нахожу причину в /etc/hosts, firewall или в том, что на worker не крутится srv1cv8.
Узел main платформа создаёт при первом запуске ragent; worker попадает в кластер только через insert. Имя name видно в консоли - задайте его осмысленно для мониторинга.
Порт cluster-port на worker с main должен быть достижим: по нему менеджер управляет rphost. При жёстком ufw добавьте правило между IP serv1c83 и serv1c83w на 1541/tcp, а не только на агент 1540.
PostgreSQL и создание информационной базы в кластере
На servpg учётную запись для 1С готовим до rac infobase create: отдельный пользователь, без superuser.
Роль и права - по шаблону из readme PostgreSQL для 8.3.27 и платформы, чтобы сработал ключ create-database (не претендуем на «полное администрирование» СУБД):
CREATE ROLE usr1c_app LOGIN PASSWORD 'задайте_сложный_пароль';
ALTER ROLE usr1c_app CREATEDB;
COMMENT ON ROLE usr1c_app IS 'Учётная запись 1С для кластера demo';
После скрипта в psql роль usr1c_app должна быть в списке \du с правом Create DB. В postgresql.conf задаём listen_addresses на адрес, видимый с main и worker; в изолированной лаборатории иногда включают прослушивание на всех интерфейсах. Нестандартный порт прописываем в postgresql.conf (например 5433) и тот же номер указываем в rac в параметре db-server.
В pg_hba.conf разрешаем serv1c83 и serv1c83w - scram-sha-256 или md5 по вашей политике. После правок перезагружаем конфигурацию PostgreSQL (pg_ctl reload или restart службы).
Пароль СУБД в history оболочки не кладу: держу в файле с правами 600, в rac подставляю через переменную окружения в одной сессии.
export IB_DB_PWD='задайте_сложный_пароль'
cd /opt/1cv8/x86_64/8.3.27.1850./rac infobase --cluster=a1b2c3d4-e5f6-7890-abcd-ef1234567890 create \
--create-database \
--name=demo_pg \
--dbms=PostgreSQL \
--db-server="servpg port=5433" \
--db-name=demo_pg \
--locale=ru \
--db-user=usr1c_app \
--db-pwd="$IB_DB_PWD"
Для PostgreSQL на нестандартном порту db-server задают одной строкой по документации: имя хоста, пробел, слово port, знак равенства и номер (в командной строке для servpg и 5433: "servpg port=5433" - синтаксис смотрите в readme к релизу). Отдельного ключа только для порта в rac нет. locale ru задаёт русскую локаль при создании базы.
После успешного create:
./rac infobase --cluster=a1b2c3d4-e5f6-7890-abcd-ef1234567890 list./rac infobase --cluster=a1b2c3d4-e5f6-7890-abcd-ef1234567890 summary --name=demo_pg
Команды list и summary покажут имя ИБ и строку db-server. Если нужно жёстко отдать ИБ на worker, смотрите rac infobase update в документации к вашему релизу. Без явного назначения менеджер кластера сам разводит сеансы - для учебного стенда этого хватает.
Логи ragent, rmngr и rphost ищите в /var/log/1C и в каталогах из readme платформы. При ошибке create-database сначала смотрю лог ragent на main, затем log PostgreSQL на servpg. Меняли SRV1CV8_DATA или SRV1CV8_DEBUG - restart srv1cv8 на каждом затронутом узле.
С main проверьте psql на servpg с тем же портом и пользователем, что пойдут в rac. Нет подключения из psql - create тоже упадёт.
Сообщение «база не существует» чаще всего - опечатка в db-name или create-database не выполнился из-за прав usr1c_app. connection refused - listen_addresses или firewall на servpg.
Для баз 1С на PostgreSQL берут кодировку UTF8. С флагом create-database платформа сама создаёт структуру таблиц. Пустую базу можно подготовить вручную без флага, но на первой установке create-database снимает лишние шаги.
Apache и публикация базы для веб-клиента
На main ставим Apache2 из репозитория Ubuntu, включаем автозапуск и проверяем, что служба apache2 в состоянии active.
sudo apt update
sudo apt install -y apache2
sudo systemctl enable apache2
sudo systemctl status apache2
Публикацию выполняет webinst из каталога платформы с ключом -apache24 (модуль wsap24 ставился вместе с компонентом веб-сервера на этапе setup-full):
cd /opt/1cv8/x86_64/8.3.27.1850
sudo./webinst -publish -apache24 \
-wsdir demo_pg \
-dir /var/www/demo_pg \
-connstr "Srvr=\"serv1c83\";Ref=\"demo_pg\";"
Ключ -wsdir задаёт УРЛ-путь веб-клиента (в примере demo_pg). -dir - каталог файлов публикации на диске (часто под /var/www/…). -connstr связывает веб-точку с ИБ в кластере; для PostgreSQL используйте рабочую строку из readme, как в примере с Srvr и Ref. Alias в URL, -wsdir, -dir и имя базы в rac должны совпадать по смыслу; после webinst - reload Apache и проверка URL. Шаблоны и модули 1С лежат в подкаталоге apache24 дерева платформы; vhost смотрите в sites-enabled.
sudo systemctl reload apache2
С рабочей станции откройте HTTP: страница веб-клиента по пути /demo_pg или по вашему -wsdir.
Ответ 404 обычно значит, что в конфиге Apache нет alias или симлинка. Страница клиента открывается, а базы в списке нет - connstr не совпадает с именем ИБ в кластере. HTTPS выносят на reverse proxy или mod_ssl отдельным шагом.
webinst подключает LoadModule для модуля 1С (имя вроде mod_1c_wsap24 - сверьте с readme вашего релиза). Сменили релиз платформы - снова запустите webinst -publish или сравните конфиги с эталоном из нового каталога.
Веб-клиент ходит на rphost через прокси-модуль Apache. Под нагрузкой rphost может оказаться на worker - для кластера это штатно. В строке соединения Srvr указывайте serv1c83, а не IP одного rphost.
Проверка работоспособности и типовые ошибки установки
# Тонкий клиент на рабочей станции: Srvr=serv1c83, Ref=demo_pg — как --name в rac create
На main одним басн-скриптом проверяю службы, порты и rac - после каждой правки firewall или unit так быстрее, чем вручную снимать status:
#!/bin/bash
set -e
systemctl is-active srv1cv8-8.3.27.1850@default.service
systemctl is-active ras-8.3.27.1850.service
systemctl is-active apache2
ss -lntp | egrep '1540|1541|1545|80' || true
cd /opt/1cv8/x86_64/8.3.27.1850./rac cluster list./rac server --cluster=a1b2c3d4-e5f6-7890-abcd-ef1234567890 list./rac infobase --cluster=a1b2c3d4-e5f6-7890-abcd-ef1234567890 list
Ожидаемый результат: srv1cv8 и ras в active, на main слушают 1540, 1541 и 1545, в rac infobase list есть demo_pg. Веб - URL из -wsdir.
Два узла с режимом normal и одним port-range - rac или rphost не стартуют. Исправление: уникальный диапазон на каждом worker (в примере main 1560–1591, worker 1592–1623) и restart srv1cv8 там, где меняли диапазон.
«БД не существует» при create: у usr1c_app нет CREATEDB или политика запрещает create-database. Агент недоступен при insert: srv1cv8 на worker не запущен, ошибка в hosts или ufw режет 1540 с main.
RAC «сервер not found» при удалённом вызове: не запущен ras или не переданы --host и --port. После смены SRV1CV8_DATA - restart srv1cv8 на обоих узлах 1С.
rac сеанс list после входа тонким клиентом показывает, на каком rphost висит сеанс - так проверяют, что worker обрабатывает нагрузку, а не только числится в сервер list.
После проверки rac и веб-УРЛ стенд готов; дальше по регламенту - бэкапы PostgreSQL, мониторинг сеансов и плановое обновление платформы 1С.
Что почитать дальше
Комплект документации к вашему релизу 8.3: «Установка на Linux», «Кластер серверов», «Публикация на веб-сервере». На releases.1c.ru - матрица поддерживаемых ОС перед следующим обновлением платформы.
Материалы ITS по rac: infobase update, резервное копирование, ограничение числа сеансов. Для PostgreSQL - регламент pg_dump и контроль autovacuum на базах 1С после выхода в нагрузку.
Вступайте в нашу телеграмм-группу Инфостарт
Вы можете заказать платную адаптацию этой статьи под ваши задачи на «Бирже заказов».
- 0% комиссии — оплата напрямую исполнителю;
- Исполнители любого масштаба — от отдельных специалистов до команд под проект;
- Прямой обмен контактами между заказчиком и исполнителем;
- Безопасная сделка — при необходимости;
- Рейтинги, кейсы и прозрачная система откликов.