Имеется windows-сервер c 1С 8.3 (БД — MSSQL).
Задача — настроить публикацию базы на линуксовом web-сервере.
Тонкости — модуль 1С для апача работает только с 2.0 и 2.2, а текущая версия в большинстве дистрибутивов — 2.4+
Пишется больше для себя, чтобы не забыть. Ну и мало ли, вдруг пригодится еще кому — не придется бегать по форумам в поисках нужных команд.
Железо — дал гигабайт оперативки, одно ядро и 20 гигабайт диска. Увеличить никогда не поздно.
ОС: Debian Stable, привык я к нему.
Ставлю минимум, включая ssh-сервер, но не включая web. К этому еще вернемся.
После установки базовая настройка по вкусу, я обычно ставлю локаль utf8, ставлю sudo, mc и vim, остальное по потребностям.
Дальше надо поставить apache 2.2. Причем сделать это правильным способом, а не просто скачав deb-пакет. :)
Сперва добавляем в /etc/apt/sources.list строчки со ссылкой на предыдущую версию дистрибутива.
deb http://mirror.yandex.ru/debian/ wheezy main
deb-src http://mirror.yandex.ru/debian/ wheezy main
Можно, конечно, написать oldstable — в настоящий момент тоже будет правильно. Но только в настоящий, потому рано или поздно выйдет новая стабильная версия и в oldstable и тогда вместо apache 2.2 там будет 2.4. Хотя, надеюсь, к тому времени 1С обновится и заработает с более новыми версиями апача. Но кто их знает? :)
Где mirror.yandex.ru — там пишется имя вашего любимого сервера с репозиторием.
Потом обновляем индексы — apt-get update — и смотрим, что у нас тут есть по apache командой apt-cache showpkg apache2
Там много всего выводится, но нас интересует только начало вывода:
Package: apache2
Versions:
2.4.10-10+deb8u3 (/var/lib/apt/lists/mirror.yandex.ru_debian_dists_stable_main_binary-i386_Packages)
Description Language:
File: /var/lib/apt/lists/mirror.yandex.ru_debian_dists_stable_main_binary-i386_Packages
MD5: d02426bc360345e5acd45367716dc35c
Description Language: en
File: /var/lib/apt/lists/mirror.yandex.ru_debian_dists_stable_main_i18n_Translation-en
MD5: d02426bc360345e5acd45367716dc35c
Description Language: ru
File: /var/lib/apt/lists/mirror.yandex.ru_debian_dists_stable_main_i18n_Translation-ru
MD5: d02426bc360345e5acd45367716dc35c
2.4.10-10+deb8u1 (/var/lib/apt/lists/security.debian.org_dists_stable_updates_main_binary-i386_Packages)
Description Language:
File: /var/lib/apt/lists/mirror.yandex.ru_debian_dists_stable_main_binary-i386_Packages
MD5: d02426bc360345e5acd45367716dc35c
Description Language: en
File: /var/lib/apt/lists/mirror.yandex.ru_debian_dists_stable_main_i18n_Translation-en
MD5: d02426bc360345e5acd45367716dc35c
Description Language: ru
File: /var/lib/apt/lists/mirror.yandex.ru_debian_dists_stable_main_i18n_Translation-ru
MD5: d02426bc360345e5acd45367716dc35c
2.2.22-13+deb7u6 (/var/lib/apt/lists/mirror.yandex.ru_debian_dists_wheezy_main_binary-i386_Packages)
Description Language:
File: /var/lib/apt/lists/mirror.yandex.ru_debian_dists_wheezy_main_binary-i386_Packages
MD5: d24f049cd70ccfc178dd8974e4b1ed01
Description Language: en
File: /var/lib/apt/lists/mirror.yandex.ru_debian_dists_wheezy_main_i18n_Translation-en
MD5: d24f049cd70ccfc178dd8974e4b1ed01
Description Language: ru
File: /var/lib/apt/lists/mirror.yandex.ru_debian_dists_wheezy_main_i18n_Translation-ru
MD5: d24f049cd70ccfc178dd8974e4b1ed01
Видим, что кроме 2.4.10 имеется версия 2.2.22-13+deb7u6 — то, что нужно.
Ставим: apt-get install apache2=2.2.22-13+deb7u6
Или, точнее: apt-get install apache2=2.2.22-13+deb7u6 apache2-mpm-worker=2.2.22-13+deb7u6 apache2.2-common=2.2.22-13+deb7u6 apache2.2-bin=2.2.22-13+deb7u6, а остальные зависимости уже подтянутся автоматом.
После этого ставим апачей на холд, чтобы не обновить случайно.
apt-mark hold apache2 apache2-mpm-worker apache2.2-common apache2.2-bin
apache2 помечен как зафиксированный.
apache2-mpm-worker помечен как зафиксированный.
apache2.2-common помечен как зафиксированный.
apache2.2-bin помечен как зафиксированный.
Можно запустить service apache2 start и стукнуть телнетом на 80 порт для проверки, если лень браузер запускать.
telnet localhost 80
Trying ::1... Connected to localhost. Escape character is '^]'. 1 <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> <html><head> <title>501 Method Not Implemented</title> </head><body> <h1>Method Not Implemented</h1> <p>1 to /index.html not supported.<br /> </p> <hr> <address>Apache/2.2.22 (Debian) Server at 1cweb Port 80</address> </body></html> Connection closed by foreign host.
Ругается — значит работает.
Теперь ставим 1С.
Нужны только веб-сервисы 1С (пакет 1c-enterprise83-ws). И 1c-enterprise83-common, который в зависимостях прописан. И 1c-enterprise83-server, который в зависимостях не прописан, но без него утилита публикации пишет «Ошибка сегментирования».
В принципе, необходим только модуль для апача wsap22.so из пакета 1c-enterprise83-ws, а всё остальное можно через текстовый редактор сделать. Но я человек ленивый и лучше потрачу несколько мегабайт на 1С, чем буду руками вбивать строчки в конфиги. :)
Дальше надо создать папку для хранения настроек опубликованных БД 1С. Можно в дереве вебсервера, но я лучше отдельно сделаю, прямо в корне, /1с.
После этого из папки с установленными файлами 1С (/opt/1C/v8.3/i386) запускаем утилиту публикации webinst со следующими параметрами (публикую нашу тестовую базу):
./webinst -apache22 -wsdir testlitupp -dir /1c/testlitupp -connstr "Srvr=10.0.0.4;Ref=testlitupp;" -confPath /etc/apache2/apache2.conf
Публикация выполнена
-apache22 — наша версия вебсервера
-wsdir testlitupp — папка на вебсервере, в которой будет доступна опубликованная база (http://вашсервер/testlitupp)
-dir /1c/testlitupp — папка, в которой будет храниться файл default.vrd с настройками публикации
-connstr «Srvr=10.0.0.4;Ref=testlitupp;» — ip сервера 1С и имя публикуемой базы данных
-confPath /etc/apache2/apache2.conf — путь к конфигу apache
Если было написано «Публикация выполнена», значит всё прошло удачно. Если пишет «Ошибка сегментирования», то вы, скорее всего, забыли поставить 1c-enterprise83-server.
По результатам имеем файл 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="/testlitupp" ib="Srvr=10.0.0.4;Ref=testlitupp;"/>
И несколько новых строк в файле конфигурации веб-сервера:
LoadModule _1cws_module "/opt/1C/v8.3/i386/wsap22.so" # 1c publication Alias "/testlitupp" "/1c/testlitupp/" <Directory "/1c/testlitupp/"> AllowOverride All Options None Order allow,deny Allow from all SetHandler 1c-application ManagedApplicationDescriptor "/1c/testlitupp/default.vrd" </Directory>
Перезапускаем апач (service apache2 restart) и идём смотреть, что там опубликовалось.
Опубликовалось, просит пароль.
И впускает в базу.
Работает. Дополнительные настройки публикации делаются через редактирование vrd-файлов (к примеру, включение отладки), а допиливанием интерфейса веб-клиента должны заниматься ваши программисты 1С.
Если будете дописывать опции, к примеру, с подключением сервисов руками, то не забудьте удалить последний / в строчке «base="/testlitupp" ib="Srvr=10.0.0.4;Ref=testlitupp;"/>», я с этим долго возился. Если не удалить и что-то дописать после, то вылетает «ошибка 500» без дополнительной информации.
Какая будет нагрузка на вебсервер — я ещё не знаю, у нас это пока в тестовом режиме работает и хватает выделенных ресурсов. Но добавить памяти или ядер по мере увеличения потребностей проблем не составит.
В целом, в других дистрибутивах linux всё делается аналогично, различия только в способах установки старой версии apache.