Запуск веб-сервера 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 с модулем веб-сервера не вижу смысла, там все достаточно тривиально. С оф. сайта скачиваете дистрибутив для 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, то создаем под каждую версию файл конфигурации.
<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
с содержимым.
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
с содержимым.
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С, то описание нескольких сервисов будет выглядеть так.
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"
Создаем каталог с именем публикуемой базы данных или любым удобным именем для размещения в нем файла настроек подключения 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
.
Если у кого какие замечания и предложения по статье, прошу в комментарии, дельные советы отразим в статье.
Обсуждение
Нет комментариев.