SCROLL
Среднее время на прочтение: 4 мин.

Запуск веб-сервера Apache с модулем 1C (webinst) в Docker контейнере на Debian

По работе появилась необходимость реализовать схему публикации баз данных 1C на веб-сервере Apache с использованием Docker, чтобы была возможность в рамках одного сервера публиковать базы данных с использованием различных версий платформы 1C.

Опишу как я реализовал данную схему. Все ниже описанное выполнялось на Debian 11 с использованием Docker + Apache.

Установка Docker

Устанавливаем необходимые пакеты зависимостей.

sudo apt-get update
sudo apt-get install ca-certificates curl

Установка Docker супер простая, буквально в две команды.

curl -fsSL https://get.docker.com -o get-docker.sh  
sudo sh get-docker.sh

Для проверки что Docker успешно установился, можно запустив образ hello-world:

sudo docker run hello-world

Установка 1C (модуль веб-сервера)

Скачать необходимую версию 1C можно с оф. сайта — https://releases.1c.ru/total

Описывать подробно установку 1C с модулем веб-сервера не вижу смысла, там все достаточно тривиально. С оф. сайта скачиваете дистрибутив для Linux, в моем случае это либо deb пакет, либо run файл и выполняете установку.

** если у кого либо сложности с установкой 1С в Linux, то напиши об этом в комментариях, я опишу процесс установки пошагово.

В случае если нужна лишь веб публикация, то достаточно поставить common + server + ws deb пакеты, либо в случае выполнении run скрипта, то устанавливаем только модуль веб-сервера. Приложение 1C устанавливается в /opt/1cv8, с ним и будем в дальнейшем работать.

Настройка Docker контейнера

Описание структуры

Вот такая структура у меня получилась. Пояснения по структуре ниже.

docker/
└── apache-1c
    ├── conf
    │   ├── 8.3.23.1865.conf
    │   └── 8.3.24.1548.conf
    ├── docker-compose.yml
    ├── dockerfile
    └── www
        ├── 8.3.23.1865
        │   └── test_database1
        │       └── default.vrd
        └── 8.3.24.1548
            └── test_database2
                └── default.vrd

Каталог conf — расположение файлов конфигурации виртуальных хостов Apache. Для удобства файлы конфигурации именуем номером версии 1C под которую будет запускаться инстанс Apache.

Каталог www — расположение файлов default.vrd. Так же как и для файлов Apache, для удобства публикуемые базы данных помешаем в каталоги с номером версии 1C под которой эти базы работают.

Файл dockerfile — описание создания образа Docker.

Файл docker-compose.yml — описание запуска сервисов, для каждого инстанс Apache и версию 1C.

Создание структуры, публикация базы данных 1С

В примере ниже я буду описывать с учетом что у меня установлена версия 1C — 8.3.24.1548

Создаем структуру каталогов Docker контейнера.

mkdir -p /opt/docker/apache-1c/{conf,www}
mkdir -p /opt/docker/apache-1c/www/8.3.24.1548
Вместо 8.3.24.1548 указываем вашу версию 1C. Если версий 1С предполагается несколько, то создаем каталоги под каждую версию.

Создаем файл конфигурации /opt/docker/apache-1c/conf/8.3.24.1548.conf Apache под версию 1C, если предполагается использование нескольких версий 1C, то создаем под каждую версию файл конфигурации.

/opt/docker/apache-1c/conf/8.3.24.1548.conf
<VirtualHost *:80>
    ServerName contoso.com
    DocumentRoot /var/www

    LogLevel warn
    ErrorLog /var/log/apache2/docker.error.log
    CustomLog /var/log/apache2/docker.access.log combined
</VirtualHost>
В ServerName указываем свое используемое DNS имя.

Создаем /opt/docker/apache-1c/dockerfile с содержимым.

/opt/docker/apache-1c/dockerfile
FROM debian:bullseye

RUN apt-get update && apt-get install -y apache2 vim-tiny

CMD ["apachectl", "-D", "FOREGROUND"]

Создаем /opt/docker/apache-1c/docker-compose.yml с содержимым.

/opt/docker/apache-1c/docker-compose.yml
services:
  apache_8.3.24.1548:
    build:
      context: .
      dockerfile: dockerfile
    restart: always  
    volumes:
      - /opt/docker/apache-1c/conf/8.3.24.1548.conf:/etc/apache2/sites-available/000-default.conf
      - /opt/docker/apache-1c/www/8.3.24.1548:/var/www
      - /opt/1cv8/x86_64/8.3.24.1548:/opt/1cv8/x86_64/8.3.24.1548
    ports:
      - "8081:80"

Описание по строкам:

  • 2 — понятное название сервиса.
  • 9-11 — описание монтирование каталогов в запускаемый docker-контейнер.
  • 12 — маппинг портов host - container.

Если предполагается использование нескольких версий 1С, то описание нескольких сервисов будет выглядеть так.

/opt/docker/apache-1c/docker-compose.yml
services:
  apache_8.3.23.1865:
    build:
      context: .
      dockerfile: dockerfile
    restart: always  
    volumes:
      - /opt/docker/apache-1c/conf/8.3.23.1865.conf:/etc/apache2/sites-available/000-default.conf
      - /opt/docker/apache-1c/www/8.3.23.1865:/var/www
      - /opt/1cv8/x86_64/8.3.23.1865:/opt/1cv8/x86_64/8.3.23.1865
    ports:
      - "8081:80"
      
  apache_8.3.24.1548:
    build:
      context: .
      dockerfile: dockerfile
    restart: always  
    volumes:
      - /opt/docker/apache-1c/conf/8.3.24.1548.conf:/etc/apache2/sites-available/000-default.conf
      - /opt/docker/apache-1c/www/8.3.24.1548:/var/www
      - /opt/1cv8/x86_64/8.3.24.1548:/opt/1cv8/x86_64/8.3.24.1548
    ports:
      - "8082:80"
Важно помнить что при использовании нескольких сервисов нужно учитывать что на одном порту может работать только один docker-контейнер, поэтому нужно выполнять меппинг портов как показано в примере.

Создаем каталог с именем публикуемой базы данных или любым удобным именем для размещения в нем файла настроек подключения 1C — default.vrd. К примеру опубликовывать будем базу — test_database2 для версии 1С 8.3.24.1548.

mkdir -p /opt/docker/apache-1c/www/8.3.24.1548/test_database2
touch /opt/docker/apache-1c/www/8.3.24.1548/test_database2/default.vrd

В файле default.vrd прописываем базовые параметры.

<?xml version="1.0" encoding="UTF-8"?>
<point xmlns="http://v8.1c.ru/8.2/virtual-resource-system"
                xmlns:xs="http://www.w3.org/2001/XMLSchema"
                xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                base="/test_database2"
                ib="Srvr=<SERVER_NAME>;Ref=test_database2;">
        <ws pointEnableCommon="true"/>
        <standardOdata enable="false"
                        reuseSessions="autouse"
                        sessionMaxAge="20"
                        poolSize="10"
                        poolTimeout="5"/>
        <analytics enable="true"/>
</point>
Обращаю внимание что в отмеченных полях указываем свои данные!

В файле конфигурации виртуального хоста apache — /opt/docker/apache-1c/conf/8.3.24.1548.conf и добавим в конец.

LoadModule _1cws_module "/opt/1cv8/x86_64/8.3.24.1548/wsap24.so"

# 1c publication
Alias "/test_database2" "/var/www/test_database2/"
<Directory "/var/www/test_database2/">
    AllowOverride All
    Options None
    Require all granted
    SetHandler 1c-application
    ManagedApplicationDescriptor "/var/www/test_database2/default.vrd"
</Directory>
Где test_database2 это имя опубликованной базы данных.

На этом подготовка Docker контейнера закончена, можно переходить к его запуску. Переходим в каталог Docker контейнера — /opt/docker/apache-1c/, собираем Docker контейнер и запускаем его, командой.

docker compose up -d --build

Если в выводе видите нечто подобное, то значит Docker контейнер успешно запустился.

[+] Building 473.9s (8/8) FINISHED
...
[+] Running 2/2
 ✔ Network apache-1c_default                 Created
 ✔ Container apache-1c-apache_8.3.24.1548-1  Started

Опубликованная база данных 1C будет доступна по указанному в конфигурации виртуального хоста адресу, в моем случае это http://contoso.com:8180/test_database2

Управление Docker Compose

Основные команды управления Docker Compose, чтобы было понимание как им управлять.

  • docker compose up — запускает приложение со всеми контейнеры, информация о которых есть в docker-compose.yml. Если файл не указан, по умолчанию используется файл в текущем каталоге;
  • docker compose down — останавливает и удаляет все контейнеры, а также тома, связанные с ними;
  • docker compose start — запускает остановленные контейнеры;
  • docker compose stop — останавливает работу запущенных контейнеров без их удаления;
  • docker compose restart — перезапускает контейнеры;
  • docker compose build — позволяет обновить образы или создать их заново, если они были изменены;
  • docker compose logs — выводит журналы состояния;
  • docker compose ps — отображает текущее состояние контейнеров;
  • docker compose pull — загружает последние версии образов для сервисов, описанных в файле docker-compose.yml.

В случае если вы внесли какие то изменения в файлы относящиеся к Docker контейнеру, то перед его запуском необходимо сделать build.

Резюме

По итогу получается плюс\минус универсальная схема публикации баз данных 1C на веб-сервере apache. Плюсом считаю то что в рамках одного сервера можно публиковать базы данных для различных платформ 1С. Из минусов, наверное то что первоначальная подготовка к работе займет какое то время, ну и публикация самих баз получается в ручном режиме, в отличие от использовании утилиты webinst.

Если у кого какие замечания и предложения по статье, прошу в комментарии, дельные советы отразим в статье.

Обсуждение

0 комментариев

Нет комментариев.