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

18.07.21

Администрирование - Администрирование веб-серверов

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

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

Эта статья написана в апреле 2018 года и проверена на версии платформы 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-систем

Скачается файл с расширением .tar.gz - переименуем его в 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/1cv8/x86_64/8.3.19.1229/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 \
  # и устанавливаем пакеты 1С в систему внутри контейнера
  && dpkg -i /dist/*.deb \
  # и тут же удаляем исходные 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.

В файле httpd.conf обновляем путь в строке: LoadModule _1cws_module /opt/1cv8/x86_64/8.3.19.1229/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.

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

Apache Linux Docker веб-сервисы

См. также

Путь самурая. Ставим локальный Сервер взаимодействия

Сервера Администрирование веб-серверов Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Подробная пошаговая инструкция (как делал я) установки Сервера взаимодействия версия 22.0.26 на Windows Server 2022. Установка собственного объектного хранилище с помощью системы MinIO (https://min.io/). Настройка Сервера взаимодействия для обмена файлами в сообщениях.

1 стартмани

07.04.2023    12596    VPanin56    40    

72

Публикатор 1С. Как публиковать базы с комфортом

Администрирование веб-серверов Платформа 1С v8.3 Бесплатно (free)

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

20.03.2023    6710    72    Segate    4    

26

Midnight Commander, установленный с Entware, не выполняет команды и не запускает файлы

Администрирование веб-серверов Linux Бесплатно (free)

Столкнулся с проблемой, установил на роутер Midnigt Commander с репозитория Entware, при попытке выполнения команды программа пишет ошибку "The shell is already running a command". Данная публикация описывает способ решения этой проблемы.

20.03.2023    3399    Eugen-S    2    

3

Публикация 1С на Apache SSL в локальной среде разработки

Администрирование веб-серверов Платформа 1С v8.3 Бесплатно (free)

В статье описывается установка и настройка веб-сервера Apache для работы с 1С через https.

09.02.2023    5359    lone_mayson    4    

41

Контейнер Docker для размещения публикации базы 1С на разных платформах

Администрирование веб-серверов Платформа 1С v8.3 1С:ERP Управление предприятием 2 Россия Бесплатно (free)

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

02.02.2023    3380    Sney_Kice    1    

21

Быстрое конфигурирование серверов с Ansible

Администрирование веб-серверов Сервера Бесплатно (free)

Всю рутину по обновлению платформы, настройке веб-серверов и серверов хранилищ на всем парке серверов компании можно автоматизировать с помощью удобочитаемых YAML-скриптов Ansible. О том, как написать сценарии такой автоматизации, чтобы запускать их параллельно для группы серверов, на митапе «Инструменты автоматизации рутины в 1С-разработке» рассказал ведущий разработчик компании ПИК Digital Павел Комаров.

26.01.2023    4911    lopatrik    4    

22
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. rusmil 262 04.04.18 18:08 Сейчас в теме
Почему обошли вниманием файловые базы? Их можно также развернуть через Docker и Apache или нет?
2. petr.myazin 129 04.04.18 20:40 Сейчас в теме
(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>
Показать


Эти примеры кода с файловым вариантом я не проверял, могут быть нюансы, о которых сейчас не догадываюсь.
3. rusmil 262 04.04.18 20:42 Сейчас в теме
(2) Спасибо, что задали направление в каком копать дальше.
26. пользователь 17.05.18 05:54
Сообщение было скрыто модератором.
...
4. bosenok 05.04.18 01:31 Сейчас в теме
postgres ставить не нужно?
8. petr.myazin 129 05.04.18 12:09 Сейчас в теме
(4) Не нужно. Весь 1С сервер с его базой находится на каком-то внешнем хосте. Это вообще может быть Windows с MS SQL, для веб-сервера Apache разницы никакой нет.
5. blackhole321 1303 05.04.18 07:40 Сейчас в теме
Какие преимущества имеет данный подход перед традиционным?
6. asved.ru 36 05.04.18 07:58 Сейчас в теме
Зачем докер - не понятно.
Зачем отдельный хост апачу в клиент-серверном варианте - не понятно.

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


mordaha:
Флудить так флудить!! :)
Картинка: http://mordaha.com/sc2l.jpg
Это старкон2, запущенный в DosBox, под иксами в Дебиане, который запущен в VMWare, которая в WinXP
Куда мне вопрос о неработающем звуке задавать? )))))

gregory_777:
Санитарам.
FlexSSM; slauter77; pfilyk; jaroslav.h; Soloist; Yakud3a; ogre2007; farraf; torbeev; +9 5 Ответить
7. petr.myazin 129 05.04.18 12:07 Сейчас в теме
(5)
(6)
Эта статья не отвечает на вопрос "Зачем?", о чём я в самом начале и написал. Эта статья отвечает лишь на вопрос "Как?".
DJ_Codebase; IT_Avito; ZeratulAyuris; for_sale; +4 Ответить
10. blackhole321 1303 05.04.18 14:42 Сейчас в теме
(7)
Ну Вы с какой целью это делали?
Какие технические или иные проблемы пытались решить?
Почему решение предложенным способом лучше/дешевле/что-то еще традиционного?
Дмитрий74Чел; +1 Ответить
13. petr.myazin 129 05.04.18 16:41 Сейчас в теме
(10) Моя цель использования Docker была в унификации способа запуска различных частей инфраструктуры. Помимо веб-сервисов 1С, в эксплуатации находятся ещё десяток других систем и сервисов (не связанных с 1С): для каких-то приложений нужен PHP с определённым набором модулей, для других Python на сервере. Есть просто статически скомпилированные бинарники (приложения на Go) и для их запуска не хочется настраивать systemd.

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

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

В данном материале сознательно делаю фокус исключительно на технической стороне вопроса.
JetBrain; StreamLVM; artbear; IT_Avito; AlexK_2012; +5 Ответить
15. blackhole321 1303 05.04.18 17:37 Сейчас в теме
(13)
Спасибо за развернутый ответ!
Есть еще несколько вопросов:
Как происходит добавление/удаление публикации информационных баз?
Как происходит обновление платформы?
Я правильно понимаю, что live migration на другой хост не поддерживается?
16. petr.myazin 129 05.04.18 18:37 Сейчас в теме
(15) Про добавление/удаление информационных баз и обновление платформы - это я описал в статье, хоть и кратко, посмотрите последние две глав "Что с обновлениями платформы 1С?" и "А если несколько информационных баз?".

Насчёт live migration хороший вопрос, не озадачивался, не знаю.
17. blackhole321 1303 05.04.18 19:59 Сейчас в теме
(16) Сколько по времени длится build в случае удаления изменения vrd?
Каков размер папки проекта и сколько времени занимает копирование?
Каково downtime при изменениях?
Какова разница в производительности между контейнером и обычной системой, виртуальной машиной?
21. petr.myazin 129 05.04.18 21:52 Сейчас в теме
(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 контейнера.
AlexK_2012; +1 Ответить
22. blackhole321 1303 05.04.18 22:32 Сейчас в теме
9. petr.myazin 129 05.04.18 12:33 Сейчас в теме
(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
14. asved.ru 36 05.04.18 16:41 Сейчас в теме
23. swimdog 765 07.04.18 00:32 Сейчас в теме
(14) Цитата: Не запускайте ничего важного в Докере
Докер ОБЯЗАТЕЛЬНО сломается. Докер УНИЧТОЖИТ всё, к чему притронулся.

))))
CSiER; aparinp; comol; +3 Ответить
11. ildary 21 05.04.18 14:56 Сейчас в теме
Извините, у Вас в тексте вкралась очепятка - "запукать".
12. petr.myazin 129 05.04.18 16:22 Сейчас в теме
18. Gilev.Vyacheslav 1910 05.04.18 20:06 Сейчас в теме
19. petr.myazin 129 05.04.18 21:36 Сейчас в теме
(18) Про SSL кратко упомянул в конце статьи разделе "Что осталось за кадром?" - в целом тема установки SSL для Apache известная, не раз описанная, не стал углубляться, в этой статье сделал фокус в первую очередь на описании взаимодействия с Docker.
20. Gilev.Vyacheslav 1910 05.04.18 21:43 Сейчас в теме
(19) в 2.4 внесены изменения, статей много по 2.2, а не по 2.4
24. comol 5051 10.04.18 00:32 Сейчас в теме
(0) (1) Ну ка ну ка... Как раз с файловыми базами то и интересно... Собственно контейнер с Apache и досутпом к файловой базе надо бы разворачивать при обращении к нему.... и тогда видимо с учетом выхода долбаного (потому как у меня уже был разработан аналог) сервера администрирования "до свидания 1С:fresh"... Не хочется довести труд всё-таки до используемого варианта и сделать вердикт?
25. NoRazum 29 15.05.18 15:18 Сейчас в теме
Если сервер 1с 64 битный то смысл разворачивать docker нету.
А вот если 32 битный и пожадничали на 64. То тогда как хорошо docker помогает.

За остальное за статью спасибо. Год назад до этого сам дошел.
34. for_sale 971 24.02.19 22:53 Сейчас в теме
(25)
Если сервер 1с 64 битный то смысл разворачивать docker нету.

почему?
35. NoRazum 29 25.02.19 11:25 Сейчас в теме
(34)
apache 64 битный и так подружиться с 1с 64 битной.
docker будет нужен уже по другим соображениям.
36. for_sale 971 25.02.19 11:48 Сейчас в теме
(35)
Смысл докера не в том, чтобы дружить кого-то с кем-то, а в быстрой развёртке и в одинаковой среде. Если задача - просто что-то установить один раз на одном месте с одной конфигурацией и больше никогда это не повторять, то докер вообще не нужен, более того, непонятно, зачем его вообще в таких ситуациях использовать - проще не станет, станет сложнее и ещё и лишнее звено, где может что-то пойти не так
37. NoRazum 29 25.02.19 14:02 Сейчас в теме
27. slax 22.06.18 22:18 Сейчас в теме
Может у кого-то была такая проблема?

После Шага 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
28. пользователь 22.06.18 22:47
Сообщение было скрыто модератором.
...
29. пользователь 22.06.18 22:48
Сообщение было скрыто модератором.
...
31. kuld 248 03.02.19 12:05 Сейчас в теме
(27) Я поймал такую проблему. И это единственная страница, которая гуглится по описанию ошибки.
Как я понял, уши у этой ошибки растут из одновременного использования i386 пакетов для сервера 1С:Предприятия и x86_64 пакета для модуля wsap24.so при использовании на одном аппаратном сервере [и программной защите 1С].
При попытке одновременного запуска на одном сервере пакетов разных архитектур появляется такой вот спецэффект, более нигде не описанный.
И, собственно, спасибо автору статьи за наводку на Docker - это то, что доктор прописал и не надо шаманить с предварительной установкой x86_64 версий, копированием папок, удалением, переустановкой и вот этим всем. Ставим Docker, и запускаем в нем 64-разрядный Apache с 64-разрядным wsap24.so при полностью легальном 32-разрядном сервере 1С на той же железяке.
42. user721201 06.06.21 18:09 Сейчас в теме
(27)
Тоже поймал данную проблему. Временное решение:
/opt/1cv8/x86_64/8.3.18.1289/ras --daemon cluster
30. maksaimer 12.09.18 18:43 Сейчас в теме
Насколько мне известно есть проблема с применением програмных лицензий для 1с на виртуальных машинах, так как лицензия привязывается в железу.

Как с этим обстоят дела в контейнеризации? Как вы это сделали в Docker?
32. kuld 248 03.02.19 12:13 Сейчас в теме
(30) В Docker отправляется только веб-сервер с модулем 1С. Сам сервер 1С остается работать без визуализации. Настраиваем выдачу клиентских лицензий сервером - и никаких проблем.
33. ru_hawk 15.02.19 14:19 Сейчас в теме
Немного не по теме вопрос, но может кто сталкивался.

Развернул на 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"
38. romanex 15.04.19 17:46 Сейчас в теме
Добрый день, сделал все по инструкции, заходя на сайт получаю ошибку
Connection error
by reason:
server_addr=srv1c descr=-2(0xFFFFFFFE): Name or service not known line=1068 file=./src/DataExchangeCommon.cpp
В хостах на линуксе прописал соответствие имени и адреса, что примечательно, я нигде не указывал имя, а только айпи адрес.
39. пользователь 07.07.20 00:32
Сообщение было скрыто модератором.
...
40. Paradise.87 26.01.21 01:50 Сейчас в теме
В 8.3.18 (может и чуть раньше) изменился путь к wsap24.so и его требуется менять в т.ч. при минорных апдейтах платформы.

в httpd.conf должно быть так:
LoadModule _1cws_module /opt/1cv8/x86_64/8.3.18.1289/wsap24.so (с поправкой на вашу версию)
41. user721201 06.06.21 18:05 Сейчас в теме
(27) Тоже поймал данную проблему. Временное решение
./ras --daemon cluster
43. yaroslavkravets 24 19.11.21 15:51 Сейчас в теме
Для решения проблемы с большим количеством контейнеров где на каждую базу свой, можно решить путем установки контейнера nginx перед апачами.

Nginx будет выступать в роли маршрутизатора. А если нужно прикрутить SSL - то можно это сделать на уровне Nginx+Certbot.
Описания такого решения уже есть на просторах интернета.
44. user1830795 19.08.22 21:36 Сейчас в теме
Установил апач в докере, сервер 1с на локалке.
Как отладку запускать (мобильная платформа, мобильный клиент, веб-клиент)?
Есть инструкция или ссылка где это объясняется?
45. vskubriev 04.11.23 17:18 Сейчас в теме
(27)

Коллеги я разобрался с этой проблемой почти: "error determining whether the client and the server processes belong to the same computer"

Я собираю сервер в докер контейнере и запускаю на своей тачке.

Если использовать обычный режим bridge докера и публиковать хосты то к сожалению выдается эта ошибка если клиента запускать на той же машине где развёрнут докер контейнер.

Только в network=host режиме сервер открывается и локально на докер хосте и по сети.

Я подозреваю что это связано с тем, что контейнер сервера ras запущен условно в какой то внутренней бриджовой сетке вида 172.16.X.0/24, а когда с наружи он работает через docker-proxy IP у него становится как у хоста. И вот видимо где то в самом сервере это считается не верным и выдается ошибка в клиенте.

Также для информации чтобы подключиться клиентом, начиная с версии 8.3.23 достаточно активировать на докер хосте (в моем случае) моей рабочей машине комьюнити лицензию и сервер будет открываться, платформа заработает. Ни какой лицензии я не устанавливал. Слышал что линкус сервер поддерживает без лицензии до 12 подключений - но ещё не получил этому подтверждения.
Оставьте свое сообщение