Работа автономного сервера 1С с файловой базой
Создание базы
Про автономный сервер я писал в этой статье , а здесь попрактикуемся в работе с ним на примере файловой базы. Инструкция по автономному серверу есть на сайте ИТС .
Автономный сервер (ibsrv) и утилита для управления им (ibcmd) будут установлены вместе с сервером 1С. Про установку сервера 1С я писал здесь . И так, если у вас уже установлен сервер 1С, то начинаем.
Создадим в своём домашнем каталоге следующие подкаталоги:
base1/data— для хранения служебных файлов базы;base1/db— для хранения файловой базы.
$ mkdir -p base1/{data,db}
Перейдем в каталог установленной платформы:
$ cd /opt/1cv8/x86_64/8.3.25.1374/
И с помощью утилиты ibcmd создадим конфиг для базы, который назовём conf.yml:
$ ./ibcmd server config init \
--name=base1 \
--base=/base1 \
--port=8080 \
--address=192.168.0.25 \
--db-path='/home/alex/base1/db' \
> /home/alex/base1/conf.yml
Посмотрим на созданный конфиг:
$ cat /home/alex/base1/conf.yml
server:
address: 192.168.0.25
port: 8080
database:
path: /home/alex/base1/db
infobase:
id: d4f34069-6731-4c0c-b791-148a4174b6b7
name: base1
distribute-licenses: yes
schedule-jobs: allow
disable-local-speech-to-text: no
http:
base: /base1
Разберём его:
- server: — параметры автономного сервера
- address: — адрес сервера
- port: — порт сервера (по нему база будет доступна по протоколу http)
- database: — параметры базы данных
- path: — путь к каталогу, в котором находится файловая база
- infobase: — параметры информационной базы
- id: — идентификатор базы
- name: — имя базы
- distribute-licenses: (yes/ no) — управление раздачей лицензий
- schedule-jobs: (deny / allow) — управление регламентными заданиями
- disable-local-speech-to-text: (yes / ne) — управление распознаванием речи
- http: — параметры публикации базы на встроенном веб сервере
- base: — имя публикации базы на встроенном веб сервере
При запуске автономного сервера необходимо указать каталог служебных файлов и конфиг:
$ ./ibsrv --data='/home/alex/base1/data' --config /home/alex/base1/conf.yml
Так как мы запустили сервер в обычном (интерактивном) режиме, то мы можем выключить его нажав Ctrl+c.
Создание службы SystemD
Для удобства можем сделать службу SystemD, с помощью которой будем включать и выключать автономный сервер . Теорию написания юнитов для служб SystemD я описывал — здесь . И так, создадим файл службы:
$ sudo nano /etc/systemd/system/1c-base1.service
[Unit]
Description=Standalone server 1C for base1
Requires=network.target
[Service]
ExecStart=/opt/1cv8/x86_64/8.3.25.1374/ibsrv --daemon --data='/home/alex/base1/data' --config /home/alex/base1/conf.yml
Type=forking
User=alex
Group=alex
Restart=on-failure
RestartSec=1
[Install]
DefaultInstance=default
WantedBy=multi-user.target
После создания службы применим изменения и запустим службу:
$ sudo systemctl daemon-reload
$ sudo systemctl start 1c-base1.service
Затем, посмотрим её статус:
$ sudo systemctl status 1c-base1.service
● 1c-base1.service - Standalone server 1C for base1
Loaded: loaded (/etc/systemd/system/1c-base1.service; disabled; preset: enabled)
Active: active (running) since Wed 2024-09-11 11:32:21 MSK; 17min ago
Process: 31624 ExecStart=/opt/1cv8/x86_64/8.3.25.1374/ibsrv --daemon --data=/home/alex/base1/data --config /home/alex/base1/conf.yml (code=exited, status=0/SUCCESS)
Main PID: 31625 (ibsrv)
Tasks: 203 (limit: 4644)
Memory: 326.5M
CPU: 9.963s
CGroup: /system.slice/1c-base1.service
├─31625 /opt/1cv8/x86_64/8.3.25.1374/ibsrv
└─31729 /opt/1cv8/x86_64/8.3.25.1374/jre/bin/java
Как видим, запускается процесс автономного сервера ibsrv и java.
Теперь, если нам нужно что-то поменять, например выключить регламентные задания, то просто редактируем конфиг ( в моём случае — /home/alex/base1/conf.yml) и перезапускаем службу.
Доступ к базе по http
Для проверки подключимся к базе с помощью тонкого клиента (у вас должна быть клиентская лицензия 1С). При добавлении базы, говорим что она у нас располагается на веб-сервере:

Вот скриншот запущенной базы:

Доступ к базе по tcp
При запуске автономного сервера, по умолчанию, он слушает стандартные порты: 1541 и 1560:1591 для доступа по tcp. Поэтому мы можем подключиться к автономному серверу указав расположение базы на сервере:

Дальше можем подключаться хоть клиентом, хоть конфигуратором:

Изменение диапазона портов
Чтобы изменить диапазон портов, нужно поправить параметры запуска автономного сервера. К сожалению в конфиг это прописать пока нельзя. Отредактируем службу SystemD добавив в параметр запуска опции: --direct-regport=1641 и --direct-range=1660:1691.
$ sudo nano /etc/systemd/system/1c-base1.service
[Unit]
Description=Standalone server 1C for base1
Requires=network.target
[Service]
ExecStart=/opt/1cv8/x86_64/8.3.25.1374/ibsrv --daemon --data='/home/alex/base1/data' --config /home/alex/base1/conf.yml --direct-regport=1641 --direct-range=1660:1691
Type=forking
User=alex
Group=alex
Restart=on-failure
RestartSec=1
[Install]
DefaultInstance=default
WantedBy=multi-user.target
Применим изменения, перезапустим службу и посмотрим какие порты слушает наш сервер:
$ sudo systemctl daemon-reload
$ sudo systemctl restart 1c-base1.service
$ sudo ss -t4lpn | grep ibsrv
LISTEN 0 4096 192.168.0.25:8080 0.0.0.0:* users:(("ibsrv",pid=1454,fd=63))
LISTEN 0 128 0.0.0.0:1660 0.0.0.0:* users:(("ibsrv",pid=1454,fd=72))
LISTEN 0 128 0.0.0.0:1661 0.0.0.0:* users:(("ibsrv",pid=1454,fd=308))
LISTEN 0 128 0.0.0.0:1641 0.0.0.0:* users:(("ibsrv",pid=1454,fd=60))
Теперь, чтобы подключиться по tcp нужно явно указать порт — 1641:

Вот скриншот запущенной базы:

Загрузка с помощью ibcmd
Для загрузки и выгрузки архива (dt) вы можете использовать конфигуратор или утилиту ibcmd. Но для этой операции, перед использованием ibcmd нужно выключать экземпляр автономного сервера.
Выключим службу:
$ sudo systemctl stop 1c-base1.service
Загрузим архив:
$ ./ibcmd infobase restore --config /home/alex/base1/conf.yml --data="/home/alex/base1/data" /home/alex/base1/1Cv8new.dt
Включим службу:
$ sudo systemctl start 1c-base1.service
Выгрузка с помощью ibcmd
Выключим службу:
$ sudo systemctl stop 1c-base1.service
Выгрузим архив:
$ ./ibcmd infobase dump --config /home/alex/base1/conf.yml --data="/home/alex/base1/data" /home/alex/base1/1C-archive.dt
Включим службу:
$ sudo systemctl start 1c-base1.service
Работа с сессиями с помощью ibcmd
Для того, чтобы посмотреть список сессий, подключенных к базе, необходимо знать PID сервера. Его можно узнать посмотрев на статус службы:
$ systemctl status 1c-base1.service | grep PID
Main PID: 2341 (ibsrv)
Теперь можем посмотреть список сессий:
$ ./ibcmd --pid=2341 session list
Каждая сессия имеет множество параметров, значения которых выводятся. Я не показываю вывод так как он слишком большой.
Чтобы завершить сессию нужно смотреть на параметр сессии session. Вот пример завершения сессии:
$ ./ibcmd --pid=2341 session terminate --session=09141b18-92d2-4a97-8e5e-3640974aa423
Если понравилась статья, подпишись на мой канал в VK или Telegram .