Запуск Apache 2.4 с модулем 1С внутри Docker контейнера

Про Apache и про Linux слышали, наверное, все. А вот про Docker пока нет, но он сильно набирает популярность последнее время и не зря. Поделюсь своим опытом и дам пошаговую инструкцию настройки веб-сервера Apache с модулем 1С внутри Docker контейнера на Linux хосте. При этом сам сервер 1С может находиться совсем на другой машине и на другой операционной системе. Это не важно, главное чтобы Apache смог достучаться до сервера 1С по TCP. В статье дам подробное пояснение по каждой используемой команде со ссылками на документацию по Docker, чтобы не создавалось ощущение непонятной магии. Также прилагаю git репозиторий с описанием всей конфигурации, можете попробовать развернуть у себя буквально за 10 минут.

Недавно я настраивал веб-сервер Apache в связке с 1С. Причём веб-сервер находился на отдельном Linux хосте внутри Docker контейнера. Поделюсь своим опытом и дам пошаговую инструкцию.

Эта статья написана в апреле 2024 года и проверена на версии платформы 1С 8.3.11.3034. Далее рассматриваю подключение к информационной базе 1С в серверном варианте, не в файловом.

Почему именно Apache, именно под Linux и именно в Docker? Оставлю этот вопрос за рамками данной статьи.

Про Apache и про Linux слышали, наверное, все. А вот про Docker, который сильно набирает популярность последнее время, поделюсь кратким руководством на русском для общего понимания: http://guides.hexlet.io/docker/

Взаимодействие Apache и сервера 1С

В двух словах напомню схему взаимодействия веб-сервера Apache и сервера 1С, которая отлично описана в документации к 1С и миллионе статей, аналогичных этой.

Мы устанавливаем веб-сервер Apache и добавляем в его настройки (в файл httpd.conf) специальный модуль wsap24.so. Этот модуль разработан компанией 1С и он доступен в дистрибутиве сервера 1С под Linux.

Далее всё в том же httpd.conf мы даём указания веб-серверу, что все запросы начинающиеся с определённого пути (например /BuhBase) нужно обрабатывать с помощью специального обработчика 1c-application, реализованного в модуле wsap24.so.

Соответственно, когда на веб-сервер Apache приходит входящий HTTP запрос удовлетворяющий заданному пути, например, http://<ip>/BuhBase/, в дело вступает обработчик 1c-application. Оно в свою очередь заглядывает в некий файл .vrd, внутри должны быть настройки подключения к 1С.

Обычно vrd файл генерируется в процессе выполнения процедуры «публикации на веб сервере» из конфигуратора или с помощью консольной утилиты webinst. В данном случае конфигуратор нам не поможет, ведь мы планируем запускать веб-сервер Apache совсем на другом хосте, нежели сервер 1С, да ещё и внутри Docker контейнера. Консольную утилиту webinst тоже трогать не будем, опишем файл default.vrd вручную, благо там нужно всего несколько строк в минимальном варианте, нет смысла заморачиваться с запуском чего-бы то ни было дополнительного.

Итак, если default.vrd файл есть и в нём присутствуют верные настройки подключения к серверу 1С, то модуль запущенный внутри Apache подключается по TCP к серверу 1С.

При этом сам сервер 1С может находиться совсем на другой машине и на другой операционной системе. Это не важно, главное чтобы Apache смог достучаться до сервера 1С по TCP.

Соберём всю конфигурацию по шагам

Шаг 1.

Устанавливаем Docker на локальную машину разработчика (для удобства проверки и отладки) и на целевую Linux машину, где мы собственно и хотим запустить веб-сервер.

Docker работает и на Linux, и на macOS и на Windows. Скорее всего, на машине разработчика (на вашей машине) стоит Windows. Я лично не проверял описанные ниже шаги под Windows, теоретически всё должно сработать, но что-то пойдёт не так, можно не тратить силы и нервы и сделать всё непосредственно на Linux сервере или в локальной виртуальной машине (например, с помощью VirtualBox).

Подробные инструкции по установке Docker: https://docs.docker.com/install/

На сервер будем ставить Docker CE (Community Edition), в частности для Ubuntu инструкция здесь: https://docs.docker.com/install/linux/docker-ce/ubuntu/

При установке на Linux не забудем про этот важный шаг, который описан на отдельной странице в документации: https://docs.docker.com/install/linux/linux-postinstall/

Шаг 2.

Создадим директорию для нашего проекта и скачаем в неё дистрибутив 1С Сервер для Linux: https://releases.1c.ru -> Технологическая платформа 8.3 -> Cервер 1С:Предприятия (64-bit) для DEB-based Linux-систем

Получим файл deb64.tar.gz, оставляем его пока как есть.

Шаг 3.

Создадим файл с настройками подключения к 1С: default.vrd

Я привожу пример минимального vrd файла в котором по умолчанию опубликованы все веб-сервисы, все http сервисы и стандартный REST интерфейс (OData).

<?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="/BuhBase"
ib="Srvr=Serv1C;Ref=BuhBase"
enableStandardOData="true">
<ws publishExtensionsByDefault="true" />
<httpServices publishByDefault="true" publishExtensionsByDefault="true"/>
</point>

Обратите внимание на строку подключения, замените имя сервера 1С (Serv1C) и имя информационной базы (BuhBase) на свои.

Если вы ранее уже публиковали свою базу на веб-сервере (не важно на каком: IIS или Apache, Windows или Linux, с помощью конфигуратор или с помощью webinst), у вас точно должен быть .vrd файл, поищите в публичных директориях веб-сервера и используйте его.

Шаг 4.

Возьмём стандартный конфиг от Apache (httpd.conf) и добавим к нему несколько строк в конец (полный пример: https://github.com/pqr/docker-apache-1c-example/blob/master/httpd.conf)

LoadModule _1cws_module /opt/1C/v8.3/x86_64/wsap24.so

# 1c publication
Alias "/BuhBase" "/usr/local/apache2/htdocs/BuhBase/"
<Directory "/usr/local/apache2/htdocs/BuhBase/">
AllowOverride All
Options None
Require all granted
SetHandler 1c-application
ManagedApplicationDescriptor "/usr/local/apache2/htdocs/BuhBase/default.vrd"
</Directory>

Таким образом мы указываем веб-северу, что запросы по пути /BuhBase нужно обслуживать с помощью обработчика (SetHandler) 1c-application.

Тут же указывается и путь к default.vrd. На данном этапе всех этих путей пока нет (и не будет, они будут внутри Docker контейнера).

Шаг 4.

Создадим файл с именем Dockerfile (без расширения) со следующим содержанием:
 

FROM httpd:2.4
# Данный образ базируется на стандартном образе Debian+Apache 2.4: https://store.docker.com/images/httpd

# Копируем дистрибутив в директорию dist
COPY deb64.tar.gz /dist/deb64.tar.gz

# Разархивируем дистрибутив
RUN tar -xzf /dist/deb64.tar.gz -C /dist \r
# и устанавливаем пакеты 1С в систему внутри контейнера
&& dpkg -i /dist/*.deb \r
# и тут же удаляем исходные deb файлы дистрибутива, которые нам уже не нужны
&& rm /dist/*.deb

# Копируем внутрь контейнера заранее подготовленный конфиг от Apache
COPY httpd.conf /usr/local/apache2/conf/httpd.conf

# Копируем внутрь контейнера заранее подготовленный конфиг с настройками подключения к серверу 1С
COPY default.vrd /usr/local/apache2/htdocs/BuhBase/default.vrd

Шаг 5.

Собираем образ командой:

docker build -t my-apache-1c .

Опция -t my-apache-1c присваивает собранному образу имя, чтобы в дальнейшем его было удобнее запуcкать. Если не указать -t, то запускать придётся по сгенерированному уникальному ID образа, что не очень удобно.

Также обратите внимание, что в конце идёт пробел и точка. Эта точка обязательна — это так называемый «контекст». В данном случае мы указываем, что контекстом является текущая директория. Более подробно, что такое контекст и зачем он нужен подробно описано в документации: https://docs.docker.com/engine/reference/builder/

Шаг 6.

Запускаем контейнер из только что созданного образа командой:

docker run --add-host Serv1C:192.168.1.15 --publish 80:80 my-apache-1c

Разберём эту строку по частям:

—add-host Serv1C:192.168.1.15 – здесь мы явно указали докеру, что за именем сервера Serv1C скрывается IP адрес 192.168.1.15 (подставьте свои значения). Имя сервера Serv1C мы использовали выше в default.vrd. Этот эквивалентно тому, как если бы мы прописали эту связь в знаменитый hosts файл. Но внутри контейнера нельзя поправить hosts файл, нужно действовать через параметр командной строки —add-host.

А почему бы сразу не указать IP адрес в default.vrd? Я пробовал, но при проверке в браузере платформа 1С выдавала ошибку и, честно говоря, я не разобрался в проблеме. При подключении по имени хоста (Serv1C) проблем не было.

—publish 80:80 – сообщаем докеру, запросы к хост-машине на порт 80 нужно перенаправлять в контейнер на порт 80 (внутри контейнера слушает Apache). Иногда на хост-машине порт 80 может быть уже занят, например, на этом же Linux сервере запущен какой-то сайт или на машине разработчика стоит локальный веб-сервер, тогда делаем так: —publish <любой свободный порт на хост-машине>:80, например: —publish 8000:80

Последним параметром идёт имя образа (my-apache-1c) на основе которого запускать контейнер. Образ с таким именем мы уже создали на предыдущем шаге.

После запуска этой команды в окне терминала появятся логи процесса Apache. Терминал не закрываем. Если закрыть, контейнер будет остановлен.

Шаг 7.

Проверяем.

Сначала проверяем Apache в целом: http://localhost – должны увидеть сообщение «It Works!»

Почему localhost? Мы сейчас находимся на своей собственной машине (на компьютере разработчика) где запустили Docker контейнер, соответственно для нас он запущен локально.

Если все эксперименты проводятся сразу на Linux сервере, то пробовать нужно, соответственно, по адресу Linux сервера, например, http://192.168.1.10 или http://linux-host

Если при запуске контейнера был указан какой-то особый порт для хост-машины, то проверять нужно на нём, например, http://localhost:8000

Далее проверим как открывается пользовательский веб-интерфейс информационной базы: http://localhost/BuhBase/

Проверим стандартный REST интерфейс (OData): http://localhost/BuhBase/odata/standard.odata/

Попробуем какой-нибудь веб-сервис (если в конфигурации такие есть): http://localhost/BuhBase/ws/MyWebService?wsdl

Всё должно отработать!

Теперь можно останавливать контейнер: Ctrl+C

Шаг 8.

Мы только что развернули Apache с модулем 1С в Docker контейнере на локальной машине (на машине разработчика). На деле это всё должно крутиться где-то на специально отведённом Linux сервере в виде демона.

Удобнее всего запускать контейнер на сервере с помощью утилиты docker-compose. Но для начала протестируем этот docker-compose опять же на локальной машине.

Устанавливаем docker-compose: https://docs.docker.com/compose/install/

Всё в той же директории проекта (где у нас уже есть Dockerfile, httpd.conf, и др.) создаём файл docker-compose.yml:

version: '3.4'
services:
apache-1c:
build: .
restart: always
ports:
- 80:80
extra_hosts:
- "Serv1C:192.168.1.15"

По сути здесь всё те же параметры, которые мы передавали в команду docker run.

Отличий три:

  1. Мы больше не придумываем и не указываем имя для нашего образа типа (my-apache-1c), вместо этого используем параметр build: . , т.е. docker-compose будет собирать образ на основе текущей директории (помните про контекст?) и тут же запускать контейнер на основе собранного образа
  2. restart: always — если по каким-то причинам Apache упадёт или весь сервер перезагрузится, то Docker автоматически перезапустит контейнер
  3. extra_hosts — это тоже самое, что и —add-host в параметрах команды docker run. Да, есть некая неконсистентность.

И запускаем контейнер с помощью новой для нас команды:

docker-compose up -d

Контейнер должен запуститься и уйти в фоновый режим (флаг -d). Проверяем все адреса в браузере как на предыдущем шаге.

Останавливаем контейнер (эту команду нужно выполнять в терминале, находясь в директории проекта):

docker-compose down

Шаг 9.

В реальности, пока мы тестировали сборку образов, меняли настройки, запускали контейнеры, мы наверняка прошли по шагам 3-7 много раз. При этом docker не удаляет с жесткого диска старые версии образов и контейнеров, они копились всё это время и теперь занимают место. Пришло время прибраться на машине (подробности в документации https://docs.docker.com/config/pruning/)

docker system prune

Шаг 10.

Важная часть любого проекта — это документация! Обязательно напишем README.md, например, такой: https://github.com/pqr/docker-apache-1c-example/blob/master/README.md

Поместим все файлы, кроме deb64.tar.gz, под систему контроля версий git, отправим в корпоративный репозиторий, чтобы не потерялось.

Шаг 11.

Копируем получившуюся директорию проекта на Linux сервер, заходим туда по ssh и, находясь в целевой директории, выполняем команду docker-compose up -d, проверяем в браузере.

Всё готово и работает на Linux сервере!

Что с обновлениями платформы 1С?

Качаем новый дистрибутив deb64.tar.gz в директорию проекта.

Если был переход с версии 8.3 на версию 8.4, то внутри httpd.conf нужно поправить путь к wsap24.so.

Далее копируем новый deb64.tar.gz и обновлённый httpd.conf на Linux на сервер в директорию проекта, останавливаем запущенный контейнер и тут же запускаем заново со специальным флагом —build:

docker-compose down && docker-compose up -d --build

А если несколько информационных баз?

Вариант А.

Значит нам понадобится подготовить несколько .vrd файлов, добавить инструкции по их копированию в Dockerfile и описать пути для веб-сервера в httpd.conf: на каждую базу свой путь, своя директория, свой .vrd файл.

Закидываем изменённый Dockerfile, httpd.conf и новые vrd файлы на сервер, останавливаем контейнер и запускаем заново с флагом —build:

docker-compose down && docker-compose up -d --build

Вариант Б.

На каждую информационную базу можно поднять свой отдельный контейнер. Это значит что директорию проекта нужно будет размножить по числу баз, внутри каждой сделать свои настройки в .vrd файле. Но при таком подходе не получится все контейнеры запустить одновременно на одному порту, придётся в каждом docker-compose.yml прописать свои порты, например, 8001:80 для первой базы, 8002:80 для второй базы и т.д.

У этого подхода, кстати, есть другое полезное свойство — внутри этих контейнеров могут быть различные версии модуля 1С (это нужно если у вас и серверов 1С несколько с разными версиями платформы).

Нужно поменять настройки подключения к 1С серверу в default.vrd?

Меняем .vrd, и перезапускаем Docker контейнер с пересборкой образа:

docker-compose down && docker-compose up -d --build

 

Что осталось за кадром?

  • В этой статье не описано как быть с  файловыми базами. Черновой пример настроек привёл в комментариях под статьёй, но на деле его не проверял.
  • После переноса файлов проекта с локальной машины на сервер всё может не заработать. Например, на сервере может быть закрыт порт 80 — надо проверять правила firewall, iptables и т.п. Могут быть и другие причины — как это всё отлаживать и куда смотреть (где логи?) остаётся за рамками статьи
  • Если этот веб-сервер должен смотреть в интернет то нам обязательно нужен SSL сертификат для https соединения. Про то как настраивать https в Apache написано много статей. При использовании Apache внутри Docker по большому счёту всё настраивается точно также. Либо можно поставить reverse proxy с терминацией SSL, например, Træfik или Nginx. Вот этот Docker образ ещё и сертификаты от Let’s Encrypt автоматически установит: https://hub.docker.com/r/umputun/nginx-le/
  • В качестве базового образа мы использовали официальный httpd на базе Debian. Можно попробовать поиграться с более лёгким образом на базе Alpine.

Исходный код

Все файлы конфигурации описанные в этой статье можно найти в git репозитории: https://github.com/pqr/docker-apache-1c-example/ — принимаются Pull Requests.

Есть вопросы? Напишите мне, с удовольствием дополню статью, если что-то не понятно, есть пробелы в рассуждениях или какие-то шаги в вашем случае не сработали — попробуем разобраться вместе и дополним материал.

35 Comments

  1. rusmil

    Почему обошли вниманием файловые базы? Их можно также развернуть через Docker и Apache или нет?

    Reply
  2. petr.myazin

    (1) Я не пробовал, но теоретически развернуть файловые базы в Docker и Apache можно.

    Для этого у веб-сервера Apache должен быть доступ к файлам файловой базы.

    С помощью настроек в docker-compose.yml можно прокинуть папку с хоста внутрь контейнера. Параметр конфигурации volumes (https://docs.docker.com/storage/volumes/), пример:

    version: ‘3.4’
    services:
    apache-1c:
    build: .
    restart: always
    ports:
    — 80:80
    volumes:
    — «/path/on/host/InfoBase:/inside/container/InfoBase»
    

    Показать

    В 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=»/BuhBase»
    ib=»File=/inside/container/InfoBase»
    enableStandardOData=»true»>
    <ws publishExtensionsByDefault=»true» />
    <httpServices publishByDefault=»true» publishExtensionsByDefault=»true»/>
    </point>
    

    Показать

    Эти примеры кода с файловым вариантом я не проверял, могут быть нюансы, о которых сейчас не догадываюсь.

    Reply
  3. rusmil

    (2) Спасибо, что задали направление в каком копать дальше.

    Reply
  4. bosenok

    postgres ставить не нужно?

    Reply
  5. blackhole321

    Какие преимущества имеет данный подход перед традиционным?

    Reply
  6. asved.ru

    Зачем докер — не понятно.

    Зачем отдельный хост апачу в клиент-серверном варианте — не понятно.

    Нотация KISS — не, не слышали?


    mordaha:

    Флудить так флудить!! 🙂

    Картинка: http://mordaha.com/sc2l.jpg

    Это старкон2, запущенный в DosBox, под иксами в Дебиане, который запущен в VMWare, которая в WinXP

    Куда мне вопрос о неработающем звуке задавать? )))))

    gregory_777:

    Санитарам.

    Reply
  7. petr.myazin

    (5)

    (6)

    Эта статья не отвечает на вопрос «Зачем?», о чём я в самом начале и написал. Эта статья отвечает лишь на вопрос «Как?».

    Reply
  8. petr.myazin

    (4) Не нужно. Весь 1С сервер с его базой находится на каком-то внешнем хосте. Это вообще может быть Windows с MS SQL, для веб-сервера Apache разницы никакой нет.

    Reply
  9. petr.myazin

    (5) Какие преимущества и зачем использовать докер — это тема для отдельной большой статьи.

    И такие статьи уже есть, поделюсь ссылками:

    http://guides.hexlet.io/docker/#%D0%B7%D0%B0%D1%87%D0%B5%D0%BC-%D0%B2%D1%81%D0%B5-%D1%8D%D1%82%D0%BE

    https://habrahabr.ru/post/309556/

    https://toster.ru/q/262879

    Reply
  10. blackhole321

    (7)

    Ну Вы с какой целью это делали?

    Какие технические или иные проблемы пытались решить?

    Почему решение предложенным способом лучше/дешевле/что-то еще традиционного?

    Reply
  11. ildary

    Извините, у Вас в тексте вкралась очепятка — «запукать».

    Reply
  12. petr.myazin

    (11) Спасибо, поправил!

    Reply
  13. petr.myazin

    (10) Моя цель использования Docker была в унификации способа запуска различных частей инфраструктуры. Помимо веб-сервисов 1С, в эксплуатации находятся ещё десяток других систем и сервисов (не связанных с 1С): для каких-то приложений нужен PHP с определённым набором модулей, для других Python на сервере. Есть просто статически скомпилированные бинарники (приложения на Go) и для их запуска не хочется настраивать systemd.

    Docker в моём случае просто спасение! Я один раз разобрался с форматом Dockerfile и docker-compose.yml, завернул все приложения в образы, сохранил все конфиги в репозиториях. Если нужно что-то перенести на другой сервер (перераспределить нагрузку или вообще какой-то сервер умирает/устарел, требуется переустановка) мне не нужно вспоминать, что и как устанавливать и с какими зависимостями, всё уже упаковано и готово к запуску в две команды: git clone … и docker-compose up -d

    Есть и другие аргументы «за», так и аргументы «против», у каждого своя история, не претендую на роль евангелиста Docker’а. Ниже в комментариях привёл несколько ссылок на статьи отвечающие на вопрос «зачем и в каких случаях полезен Docker?».

    В данном материале сознательно делаю фокус исключительно на технической стороне вопроса.

    Reply
  14. asved.ru

    (9)

    Есть еще вот такая статья:

    https://habrahabr.ru/post/332450/

    Reply
  15. blackhole321

    (13)

    Спасибо за развернутый ответ!

    Есть еще несколько вопросов:

    Как происходит добавление/удаление публикации информационных баз?

    Как происходит обновление платформы?

    Я правильно понимаю, что live migration на другой хост не поддерживается?

    Reply
  16. petr.myazin

    (15) Про добавление/удаление информационных баз и обновление платформы — это я описал в статье, хоть и кратко, посмотрите последние две глав «Что с обновлениями платформы 1С?» и «А если несколько информационных баз?».

    Насчёт live migration хороший вопрос, не озадачивался, не знаю.

    Reply
  17. blackhole321

    (16) Сколько по времени длится build в случае удаления изменения vrd?

    Каков размер папки проекта и сколько времени занимает копирование?

    Каково downtime при изменениях?

    Какова разница в производительности между контейнером и обычной системой, виртуальной машиной?

    Reply
  18. Gilev.Vyacheslav

    чего без ssl?

    Reply
  19. petr.myazin

    (18) Про SSL кратко упомянул в конце статьи разделе «Что осталось за кадром?» — в целом тема установки SSL для Apache известная, не раз описанная, не стал углубляться, в этой статье сделал фокус в первую очередь на описании взаимодействия с Docker.

    Reply
  20. Gilev.Vyacheslav

    (19) в 2.4 внесены изменения, статей много по 2.2, а не по 2.4

    Reply
  21. petr.myazin

    (17) Проверил сейчас на своём ноутбуке: при изменении только vrd сборка происходит чуть больше 2 секунд (измерял командой time docker build .)

    Если же обновлять дистрибутив 1С на новую версию, то тут дольше, т.к. происходит установка deb пакетов, у меня сейчас вышло 17 секунд.

    Размер папки проект по сути равен размеру дистрибутива 1С deb64.tar.gz (240Мб), остальные файлы это просто текстовые файлы конфигурации Dockerfile, docker-compose.yml, default.vrd, httpd.conf — они занимают считанные килобайты.

    А вот когда образ собран, он уже занимает 1Gb (посмотреть можно командой docker images).

    Контейнер стартует меньше чем за секунду.

    В статье я приводил пример команды для пересборки и перезапуска: docker-compose down && docker-compose up -d —build

    это в худшем случае (при обновлении дистрибутива 1С) даст downtime в 17 секунд. Но можно уменьшить downtime, если сначала сделать сборку нового образа, а потом уже остановить старый контейнер и запустить новый на основе нового образа, тогда downtime будет около секунды.

    >Какова разница в производительности между контейнером и обычной системой, виртуальной машиной?

    Я не измерял, тут лучше погуглить, думаю зависит от профиля нагрузки. В разных статьях пишут про разницу в единицы процентов между запуском приложения на голой системе и внутри docker контейнера.

    Reply
  22. blackhole321

    (21)Спасибо большое!

    Reply
  23. swimdog

    (14) Цитата: Не запускайте ничего важного в Докере

    Докер ОБЯЗАТЕЛЬНО сломается. Докер УНИЧТОЖИТ всё, к чему притронулся.

    ))))

    Reply
  24. comol

    (0) (1) Ну ка ну ка… Как раз с файловыми базами то и интересно… Собственно контейнер с Apache и досутпом к файловой базе надо бы разворачивать при обращении к нему…. и тогда видимо с учетом выхода долбаного (потому как у меня уже был разработан аналог) сервера администрирования «до свидания 1С:fresh»… Не хочется довести труд всё-таки до используемого варианта и сделать вердикт?

    Reply
  25. NoRazum

    Если сервер 1с 64 битный то смысл разворачивать docker нету.

    А вот если 32 битный и пожадничали на 64. То тогда как хорошо docker помогает.

    За остальное за статью спасибо. Год назад до этого сам дошел.

    Reply
  26. slax

    Может у кого-то была такая проблема?

    После Шага 6 при попытке открыть в браузере locahost/my_base получаю сообщение:

    1C:Enterprise 8 application error:

    Connection error

    by reason:

    Error determining whether the client and the server processes belong to the same computer.

    Докер и сервер 1С на одной и той же машине. Поиск по названию ошибки провалился. Куда смотреть? В какие логи?

    Докер установлен на windows 10.

    Логи apache в докере:

    172.17.0.1 — — [22/Jun/2018:19:11:28 +0000] «GET /my_base/ HTTP/1.1» 200 14731

    172.17.0.1 — — [22/Jun/2018:19:11:28 +0000] «GET /my_base/ru_RU/ HTTP/1.1» 200 14732

    172.17.0.1 — — [22/Jun/2018:19:11:28 +0000] «GET /my_base/ru_RU/e1csys/mngsrv/favicon.ico HTTP/1.1» 502 313

    172.17.0.1 — — [22/Jun/2018:19:11:28 +0000] «GET /my_base/e1csys/mngsrv/favicon.ico HTTP/1.1» 502 313

    172.17.0.1 — — [22/Jun/2018:19:11:28 +0000] «GET /my_base/ru_RU/mainform.html?sysver=8.3.12.1440 HTTP/1.1» 502 313
    Reply
  27. maksaimer

    Насколько мне известно есть проблема с применением програмных лицензий для 1с на виртуальных машинах, так как лицензия привязывается в железу.

    Как с этим обстоят дела в контейнеризации? Как вы это сделали в Docker?

    Reply
  28. kuld

    (27) Я поймал такую проблему. И это единственная страница, которая гуглится по описанию ошибки.

    Как я понял, уши у этой ошибки растут из одновременного использования i386 пакетов для сервера 1С:Предприятия и x86_64 пакета для модуля wsap24.so при использовании на одном аппаратном сервере [и программной защите 1С].

    При попытке одновременного запуска на одном сервере пакетов разных архитектур появляется такой вот спецэффект, более нигде не описанный.

    И, собственно, спасибо автору статьи за наводку на Docker — это то, что доктор прописал и не надо шаманить с предварительной установкой x86_64 версий, копированием папок, удалением, переустановкой и вот этим всем. Ставим Docker, и запускаем в нем 64-разрядный Apache с 64-разрядным wsap24.so при полностью легальном 32-разрядном сервере 1С на той же железяке.

    Reply
  29. kuld

    (30) В Docker отправляется только веб-сервер с модулем 1С. Сам сервер 1С остается работать без визуализации. Настраиваем выдачу клиентских лицензий сервером — и никаких проблем.

    Reply
  30. ru_hawk

    Немного не по теме вопрос, но может кто сталкивался.

    Развернул на CentOS 7 64 битную платформу, 64 битный apahe 2.4. Предприятие запускается в режиме веб-клиента, но не отображает никакие мои картинки (реквизит УФ с типом ПолеКартинки). access_log от apache показывает, что запросы ресурсов картинки не проходят и завершаются 404 ошибкой:

    *.*.*.* — — [15/Feb/2019:11:04:46 +0300] «GET /people/ru_RU/e1cib/tempstorage/0c5da7b4-30f6-11e9-5383-d00d78c3b9d8?rnd=0.35396317870772576 HTTP/1.1» 404 785 «http://*.*.*.*/people/ru_RU/» «Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.109 Safari/537.36»

    При этом встроенные картинки прекрасно отображаются:

    *.*.*.* — — [15/Feb/2019:10:48:16 +0300] «GET /people/ru_RU/e1cib/pictureCollection/picture/0_08a45a70-c221-4339-b3b1-9f11cb22147d?confver=fdc2d3f2188b7f409077ae639a9a84a000000000&scale=100&interfaceVar=16&fg=333333 HTTP/1.1» 200 521 «http://*.*.*.*/people/ru_RU/» «Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.109 Safari/537.36»
    
    Reply
  31. for_sale

    (25)

    Если сервер 1с 64 битный то смысл разворачивать docker нету.

    почему?

    Reply
  32. NoRazum

    (34)

    apache 64 битный и так подружиться с 1с 64 битной.

    docker будет нужен уже по другим соображениям.

    Reply
  33. for_sale

    (35)

    Смысл докера не в том, чтобы дружить кого-то с кем-то, а в быстрой развёртке и в одинаковой среде. Если задача — просто что-то установить один раз на одном месте с одной конфигурацией и больше никогда это не повторять, то докер вообще не нужен, более того, непонятно, зачем его вообще в таких ситуациях использовать — проще не станет, станет сложнее и ещё и лишнее звено, где может что-то пойти не так

    Reply
  34. NoRazum

    (36)

    Развернутый ответ!!!

    Reply
  35. romanex

    Добрый день, сделал все по инструкции, заходя на сайт получаю ошибку

    Connection error

    by reason:

    server_addr=srv1c descr=-2(0xFFFFFFFE): Name or service not known line=1068 file=./src/DataExchangeCommon.cpp

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

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *