УСТАНОВКА СЕРВЕРА ВЗАИМОДЕЙСТВИЯ 1С В DOCKER
Если вы ещё не знакомы с сервером взаимодействия 1С — начните с обзора: что это и из каких компонентов состоит. Здесь — только про установку в Docker.
Когда ставить в Docker, а не на голый сервер. Docker удобен, если вы уже используете контейнеризацию для остальной инфраструктуры, хотите быстро поднимать одинаковые окружения (dev/staging/prod) или переносить сервер между машинами одной командой. Если изоляция не нужна и вы хотите управлять каждым сервисом напрямую через systemd — см. установку на голый Ubuntu Server.
Привет программисты 1С, с вами Низамов Илья. Сегодня я покажу, как установить сервер взаимодействия 1с в docker. Напишем конфиг dockerfile для сборки сервера взаимодействия 1С. Напишем конфиг docker compose для запуска нескольких сервисов.
В этой части мы вынесем в отдельный контейнер только PostgreSQL, а сервер взаимодействия 1С, вместе с elasticsearch и hazelcast будут работать в одном контейнере.
Подготовка проекта: структура папок и БД
Структура папок и файлов для сборки сервера взаимодействия 1с в docker
Скачать архив проекта (сервер взаимодействия 1С docker)
Создаем папку нашего проекта sv . Внутри ее создаем папки db, srv
В папке db создать sql файл init-cs-db.sql
\c cs_db
CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
\q
В папку srv скопировать файлы deb сервера взаимодействия.
Так же разместить там отредактированный скрипт ring
Создать в папке srv 2 скрипта
init.sh
#!/bin/bash
set -e
sudo useradd cs_user
sudo mkdir -p /var/cs/cs_instance
sudo chown cs_user:cs_user /var/cs/cs_instance
sudo /opt/1C/1CE/x86_64/ring/ring cs instance create --dir /var/cs/cs_instance --owner cs_user
sudo /opt/1C/1CE/x86_64/ring/ring cs --instance cs_instance service create --username cs_user --java-home $JAVA_HOME --stopped
sudo useradd hc_user
sudo mkdir -p /var/cs/hc_instance
sudo chown hc_user:hc_user /var/cs/hc_instance
sudo /opt/1C/1CE/x86_64/ring/ring hazelcast instance create --dir /var/cs/hc_instance --owner hc_user
sudo /opt/1C/1CE/x86_64/ring/ring hazelcast --instance hc_instance service create --username hc_user --java-home $JAVA_HOME --stopped
sudo useradd elastic_user
sudo mkdir -p /var/cs/elastic_instance
sudo chown elastic_user:elastic_user /var/cs/elastic_instance
sudo /opt/1C/1CE/x86_64/ring/ring elasticsearch instance create --dir /var/cs/elastic_instance --owner elastic_user
sudo /opt/1C/1CE/x86_64/ring/ring elasticsearch --instance elastic_instance service create --username elastic_user --java-home $JAVA_HOME --stopped
sudo /opt/1C/1CE/x86_64/ring/ring cs --instance cs_instance jdbc set-params --url jdbc:postgresql://db:5432/cs_db?currentSchema=public
sudo /opt/1C/1CE/x86_64/ring/ring cs --instance cs_instance jdbc set-params --username postgres
sudo /opt/1C/1CE/x86_64/ring/ring cs --instance cs_instance jdbc set-params --password postgres
sudo /opt/1C/1CE/x86_64/ring/ring cs --instance cs_instance jdbc-privileged set-params --url jdbc:postgresql://db:5432/cs_db?currentSchema=public
sudo /opt/1C/1CE/x86_64/ring/ring cs --instance cs_instance jdbc-privileged set-params --username postgres
sudo /opt/1C/1CE/x86_64/ring/ring cs --instance cs_instance jdbc-privileged set-params --password postgres
sudo /opt/1C/1CE/x86_64/ring/ring cs --instance cs_instance websocket set-params --hostname cs
sudo /opt/1C/1CE/x86_64/ring/ring cs --instance cs_instance websocket set-params --port 8087
start.sh
#!/bin/bash
set -e
sudo /opt/1C/1CE/x86_64/ring/ring hazelcast --instance hc_instance service restart
sudo /opt/1C/1CE/x86_64/ring/ring elasticsearch --instance elastic_instance service restart
sudo /opt/1C/1CE/x86_64/ring/ring cs --instance cs_instance service restart
echo "ALL START"
sh
Создаем Dockerfile для образа сервера взаимодействия 1С
В папке srv создать файл Dockerfile
FROM ubuntu:21.04
RUN apt-get update && apt-get -y install sudo curl nano openjdk-8-jdk mc && rm -rf /var/lib/apt/lists/*
ENV JAVA_HOME /usr/lib/jvm/java-1.8.0-openjdk-amd64
WORKDIR /app
COPY . .
RUN sudo dpkg -i *.deb && rm -rf *.deb
COPY ring /opt/1C/1CE/x86_64/ring/
RUN chmod 777 *.sh && ./init.sh
В корне проекта создать docker-compose.yml
version: "3.8"
services:
cs:
build: ./srv
stdin_open: true
tty: true
command: ./start.sh
restart: unless-stopped
ports:
- "8087:8087"
depends_on:
- db
db:
image: postgres:12-alpine
restart: always
environment:
- POSTGRES_DB=cs_db
- POSTGRES_USER=postgres
- POSTGRES_PASSWORD=postgres
ports:
- "5432:5432"
volumes:
- ./storage/postgres-data:/var/lib/postgresql/data
- ./db/init-cs-db.sql:/docker-entrypoint-initdb.d/init-cs-db.sql
Сборка сервера взаимодействия 1С в docker
docker-compose build
docker-compose up
Подключаемся к запущенному контейнеру
docker exec -it sv_cs_1 sh
Первый раз выполняем команды инициализации базы данных и проверяем, что все поднялось.
sudo curl -Sf -X POST -H "Content-Type: application/json" -d "{ \"url\" : \"jdbc:postgresql://db:5432/cs_db\", \"username\" : \"postgres\", \"password\" : \"postgres\", \"enabled\" : true }" -u admin:admin http://localhost:8087/admin/bucket_server
sudo curl http://localhost:8087/rs/health
Обновление образа сервера взаимодействия
Когда выходит новая версия дистрибутива сервера взаимодействия, замените deb-файлы в папке srv на новые и пересоберите образ без кеша, чтобы точно подтянулись новые пакеты:
docker-compose build --no-cache
docker-compose up -d
PostgreSQL при этом не трогаем — его том (./storage/postgres-data) остаётся на месте, данные не теряются.
Чек-лист портов и сети
- 8087 — WebSocket сервера взаимодействия, должен быть открыт для клиентов 1С.
- 5432 — PostgreSQL, наружу пробрасывать не обязательно (используется только контейнером cs внутри общей docker-сети).
- Оба сервиса должны быть в одной docker-сети (в этом docker-compose она создаётся автоматически) — иначе cs не найдёт хост db по имени.
Дальше по теме сервера взаимодействия
Установка в Docker — не единственный сценарий. Вот остальные статьи кластера «сервер взаимодействия 1С»:
- Ставите сервер взаимодействия без контейнеров — установка на голый Ubuntu Server: каждый сервис управляется напрямую через systemd.
- Переносите уже работающий сервер в облако — переезд в Yandex Cloud (Windows → Ubuntu).
- Нужен обмен файлами через объектное хранилище — настройка Amazon S3.
- Хотите показать пользователю прогресс длительной операции 1С в реальном времени — взаимодействие сервера и клиента через WebSocket.