Рабочее место 1С на Linux через WSL. Часть 4 - Управление кластером без Windows: Сервер администрирования RAS и утилита RAC
В первой лабораторной работе для администрирования и создания информационных баз мы использовали графическую оснастку под Windows. Однако этот подход имеет существенные ограничения: он требует наличия Windows-машины, не поддается автоматизации и неприменим в сценариях построения современных CI/CD конвейеров или автоматического развертывания тестовых сред. В операционной системе Linux (включая работу в WSL) прямое использование COM-объектов Windows для администрирования невозможно. Для решения задач кросс-платформенного администрирования компания 1С предоставляет альтернативный, гораздо более мощный стек инструментов - службу администрирования RAS (Remote Administration Server) и консольную утилиту RAC (Remote Administration Client). В этой работе мы разберем архитектуру бесконсольного администрирования 1С, настроим службу RAS как постоянный демон в Linux, научимся управлять кластером из командной строки и напишем Bash-скрипт для автоматического создания баз в 1С и PostgreSQL.
Теоретическая часть
Архитектура удаленного администрирования 1С:Предприятие Классическая консоль администрирования кластера 1С в Windows представляет собой оснастку MMC (Microsoft Management Console), которая под капотом общается с процессами кластера через COM-интерфейсы. В Linux-системах СОМ-технологии отсутствуют, поэтому архитектура администрирования была переработана на основе сетевого взаимодействия: +------------------------+ | Скрипты / CI-CD / | | Администратор (RAC) | +-----------+------------+
|
| (Сетевой протокол TCP/IP, порт 1545)
v
+------------------------+
| Сервер администрирования| | 1С (RAS) | +-----------+------------+
|
| (Внутренний протокол 1С, порт 1540)
v
+------------------------+
| Менеджер кластера | | (rmngr) | +------------------------+
- Сервер администрирования (RAS): Служит сетевым мостом. Он запускается на стороне сервера Linux, подключается к локальному или удаленному менеджеру кластера (процесс rmngr, по умолчанию слушающий порт 1540) и предоставляет стандартизированный TCP-интерфейс на порту 1545 для внешних подключений.
- Клиент администрирования (RAC): Кросс-платформенная консольная утилита командной строки. Она может быть запущена на любой машине (Windows, Linux, macOS), подключается к серверу RAS по порту 1545 и передает команды управления кластером (создание баз, управление сеансами, блокировками и т. д.). Преимущества автоматизации через RAC/RAS
- Полная автоматизация: Позволяет одной командой создавать, обновлять и удалять информационные базы. Это фундамент для DevOps-практик в 1С.
- Отсутствие графической зависимости: Администрирование выполняется в чистой консоли Linux.
- Безопасность: Можно гибко разграничить доступ к администрированию кластера, не предоставляя пользователям прямой доступ к серверу по SSH.
Пошаговая инструкция
Шаг 1. Локализация утилит RAS и RAC в файловой системе Linux
В зависимости от версии платформы 1С:Предприятие, пути к исполняемым файлам могут различаться.
- Для старых версий платформ (например, использованной в первой работе 8.3.16.1148): /opt/1cv8/x86_64/8.3.16.1148/ras и /opt/1cv8/x86_64/8.3.16.1148/rac
- Для современных версий платформ 1С (начиная с 8.3.20+): /opt/1C/v8.3/x86_64/ras и /opt/1C/v8.3/x86_64/rac Убедитесь, что файлы присутствуют на вашем сервере в WSL. Запустите терминал и выполните поиск:
ls -l /opt/1cv8/x86_64/8.3.16.1148/ras
(Если вы используете другую версию платформы, скорректируйте путь соответствующим образом).
Шаг 2. Ручной тестовый запуск сервера RAS
Перед тем как регистрировать RAS как службу, проверим её работоспособность в интерактивном режиме.
- Запустите RAS, указав ему порт публикации (1545) и адрес менеджера кластера, к которому нужно подключиться (по умолчанию локальный менеджер работает на localhost:1540):
/opt/1cv8/x86_64/8.3.16.1148/ras cluster --port=1545 localhost:1540
- Терминал «зависнет» - это нормально, процесс запущен в фокусе.
- Откройте вторую вкладку терминала ConEmu и проверьте, что порт 1545 начал прослушиваться:
ss -tuln | grep 1545
Вы должны увидеть строку, подтверждающую, что порт открыт.
- Вернитесь в первую вкладку и прервите процесс сочетанием клавиш Ctrl + C.
Шаг 3. Регистрация RAS как системной службы в Linux
Запускать RAS вручную неудобно. В Лабораторной работе №2 мы настраивали автозапуск служб. Настроим запуск RAS в качестве демона. Вариант А. Настройка через systemd (для современных дистрибутивов и WSL с поддержкой systemd):
- Создайте конфигурационный файл службы:
sudo nano /etc/systemd/system/ras1cv83.service
- Вставьте следующее содержимое:
[Unit]
Description=1C:Enterprise Remote Administration Server
After=network.target srv1cv83.service
Requires=srv1cv83.service
[Service]
Type=simple
User=usr1cv8
ExecStart=/opt/1cv8/x86_64/8.3.16.1148/ras cluster --port=1545 localhost:1540
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.target
- Сохраните файл [Ctrl + O -> Enter] и выйдите [Ctrl + X].
- Перезапустите менеджер systemd и активируйте службу:
sudo systemctl daemon-reload
sudo systemctl enable ras1cv83.service
sudo systemctl start ras1cv83.service
Вариант Б. Запуск через SysVinit (если systemd в вашей WSL отключен): Для WSL без systemd мы можем добавить запуск RAS в наш автоматический планировщик Windows, настроенный во второй лабораторной работе:
- Разрешите беспарольный запуск RAS. Откройте sudoers через visudo:
sudo visudo
- Добавьте строку для вашего пользователя (например, pen):
pen ALL=(ALL) NOPASSWD: /opt/1cv8/x86_64/8.3.16.1148/ras *
- Измените аргументы в созданной ранее задаче Планировщика Windows WSL_1C_Services_AutoStart, добавив команду запуска RAS в фоновом режиме через символ & (амперсанд) или запустив его в качестве демона:
-u pen sudo service postgresql start && sudo service srv1cv83 start && nohup sudo
/opt/1cv8/x86_64/8.3.16.1148/ras cluster --daemon --port=1545 localhost:1540
Шаг 4. Подключение через RAC и получение UUID кластера
Теперь научимся отправлять команды управления. Все действия выполняются через утилиту rac.
- Проверим связь с сервером администрирования и запросим список доступных кластеров 1С:
/opt/1cv8/x86_64/8.3.16.1148/rac cluster list localhost:1545
- На выходе утилита вернет структуру данных с параметрами вашего кластера:
cluster : d3b07384-d113-11eb-bc86-00155d011303
host : PEN-PC
port : 1541
name : "PEN-Cluster"
Важно: Строка cluster : <UUID> содержит уникальный идентификатор вашего кластера. Он потребуется для любых последующих команд. Сохраните этот UUID.
Практическое задание
Цель работы: Написать полностью автоматизированный скрипт на Bash, который без использования Windows-интерфейсов будет создавать новую базу данных в PostgreSQL и регистрировать ее в кластере серверов 1С:Предприятие. Технические требования:
- ☐ Скрипт должен принимать один параметр - имя создаваемой базы данных (например, AutoTestDB).
- ☐ Скрипт должен самостоятельно определять UUID работающего кластера 1С.
- ☐ База данных в СУБД PostgreSQL должна создаваться автоматически от имени пользователя postgres с паролем 1111.
- ☐ Информационная база должна успешно регистрироваться в кластере 1С с использованием типа СУБД PostgreSQL, адреса сервера localhost и имени базы СУБД, совпадающим с именем базы в 1С. Пример реализации скрипта (/home/pen/create_db.sh): Создайте файл скрипта:
nano ~/create_db.sh
Вставьте следующий код (адаптируйте пути под вашу версию платформы 1С): #!/bin/bash # Проверяем, передан ли параметр с именем базы if [ -z "$1" ]; then echo "Ошибка: Не указано имя информационной базы!" echo "Использование: $0 <Имя_Базы>"
exit 1
fi
DB_NAME=$1
RAC_PATH="/opt/1cv8/x86_64/8.3.16.1148/rac"
RAS_ADDR="localhost:1545"
echo "=== Этап 1. Получение UUID кластера ===" # Получаем UUID первого активного кластера из списка CLUSTER_UUID=$($RAC_PATH cluster list $RAS_ADDR | grep "cluster" | head -n 1 | awk '{print $3}') if [ -z "$CLUSTER_UUID" ]; then echo "Ошибка: Не удалось подключиться к RAS или найти активный кластер!"
exit 1
fi
echo "Найден кластер UUID: $CLUSTER_UUID" echo "=== Этап 2. Создание базы данных в PostgreSQL ===" # Чтобы psql не запрашивал пароль интерактивно, передаем его через переменную окружения
export PGPASSWORD="1111"
# Создаем базу в PostgreSQL (кодировка UTF8 обязательна для 1С) createdb -h localhost -p 5432 -U postgres -E UTF8 -O postgres $DB_NAME if [ $? -ne 0 ]; then echo "Ошибка создания базы данных в PostgreSQL!"
exit 1
fi
echo "База данных $DB_NAME в СУБД создана успешно." echo "=== Этап 3. Регистрация информационной базы в 1С ===" # Регистрируем базу в кластере серверов 1С $RAC_PATH infobase --cluster=$CLUSTER_UUID create \
--name=$DB_NAME \
--dbms=PostgreSQL \
--db-server=localhost \
--db-name=$DB_NAME \
--db-user=postgres \
--db-pwd=1111 \
--create-database=N \
$RAS_ADDR
if [ $? -ne 0 ]; then
echo "Ошибка регистрации информационной базы в кластере 1С!" # Откатываем создание базы в PostgreSQL в случае неудачи
dropdb -h localhost -p 5432 -U postgres $DB_NAME
exit 1
fi
echo "=== Информационная база $DB_NAME успешно создана и зарегистрирована! ===" Сделайте скрипт исполняемым и запустите его:
chmod +x ~/create_db.sh
~/create_db.sh AutomatedDB
Проверка результата: Выполните команду получения списка зарегистрированных информационных баз: /opt/1cv8/x86_64/8.3.16.1148/rac infobase --cluster=<Ваш_UUID_Кластера> summary list localhost:1545 В выведенном списке вы должны увидеть созданную базу AutomatedDB. Также вы можете запустить pgAdmin под Windows и убедиться, что физическая база данных появилась в списке баз PostgreSQL.
Проверьте себя
- Какую роль играет сервер администрирования RAS в архитектуре 1С на Linux? Ответ: RAS выступает в роли сетевого моста. Он преобразует сетевые запросы утилиты RAC, отправляемые по стандартному порту 1545, во внутренний протокол взаимодействия с менеджером кластера rmngr (порт 1540).
- Как получить UUID кластера, необходимый для выполнения большинства административных команд в RAC? Ответ: С помощью команды rac cluster list localhost:1545. Полученный UUID копируется из свойства cluster выведенной структуры.
- Почему при автоматизации создания баз данных через RAC рекомендуется создавать физическую базу в СУБД PostgreSQL отдельной командой (например, createdb), а не доверять это серверу 1С параметром --create-database=Y? Ответ: В Linux-системах, особенно в WSL, системный пользователь usr1cv8 (под которым работает сервер 1С) часто не имеет беспарольного доступа к сокету PostgreSQL или прав на создание баз. Прямое разделение шагов (создание базы средствами СУБД от имени postgres и последующая регистрация в 1С с флагом --create-database=N) гарантирует стабильность и полный контроль над параметрами кодировки (UTF-8) и владельца базы.
- Какой порт используется по умолчанию службой RAS, и можно ли его переопределить? Ответ: По умолчанию используется порт 1545. Его можно переопределить при запуске службы с помощью параметра --port=XXXX (например, для запуска нескольких независимых серверов администрирования на одном хосте).
- В чем заключается ключевое отличие утилит RAC и RAS с точки зрения места их запуска? Ответ: Сервер администрирования RAS должен быть запущен непосредственно на той же машине (или иметь прямой доступ к ней), где работает менеджер кластера 1С. Консольный клиент RAC является полностью кросс-платформенным инструментом и может запускаться удаленно на любой рабочей станции администратора (включая Windows или macOS), имеющей сетевой доступ к порту RAS.
Попробовать НОПик →
Проверить свой уровень бесплатно →