Введение
Если кратко – то в этой статье я попробую рассказать как опубликовать базу 1С на web-сервер апач, расположенном на сервере с Linux (Ubuntu).
Зачем нужна такая схема? По большей части это связано с безопасностью. Если вы скажете системному администратору, что вам нужно «выпустить сервер 1С в интернет», то от нормального специалиста вы получите кучу возражений (ну а от грамотного специалиста – еще и альтернативные пути). Одним из таких путей и является предложенная схема.
В предложенной варианте – «снаружи» будет доступен только сервер на Ubuntu и апач. Таким образом, в случае атаки – пострадает только этот один сервер, заменить который не составит труда (например перенаправив входящие соединения на его резервную копию), а ваша драгоценная 1С останется не тронутой. Не спорю, для серьезных компаний с армией бородатых админов эта схема покажется не серьезной и для них безопасность будет ассоциироваться только с DMZ (желающие могут погуглить), но для средней руки конторы это будет вполне приемлемый вариант. Конечно, от Anonymous это вас не спасет, но обычным «хацкерам» довольно сильно затруднит задачу.
Исходные данные
Для реализации такой схемы нам потребуется сервер А: Ubuntu 12 c Apache2 и сервер В: Windows 2008, MS SQL, платформа 1С 8.3. В моих экспериментах я использовал арендованные виртуальные сервера.
Нюанс: В качестве сервера А выступал Xeon 2600 series, 1 ядро, 512 Мб RAM, 16Гб SSD (250р/мес), в качестве сервера В выступал Xeon 2600 series, 2 ядра 4096 Мб RAM 128 Гб SSD (2800руб/мес). Белые статически IP. Оплата посуточная. Вы можете развернуть подобный сервер, поиграться с ним пару дней, потратив 200р. Время на разворачивание нового сервера – 5 мин, доступ по RDP (Windows) SSH-клиент (Linux). Здесь указывать, каким именно хостингом пользовался, я не буду (чтобы не сочли за рекламу). Но если спросите в комментариях – отвечу.
Решение задачи
1. Начнем с настройки сервера А
Подключаемся к серверу. Для подключения можно использовать SSH-клиент Putty (предупреждаю, работать придется через командную строку).
В моем случае сервер Ubuntu был развернут с предустановленным апачем, поэтому процедуру установки описывать не буду (мануалы есть в гугле).
Единственно что я сделал сразу при подключении (по совету админа) – это выполнил две команды:
apt-get update
apt-get upgrade
Так же установил клиент (что-то типа коммандера, намного облегчит работу в дальнейшем):
apt-get mc
Запуск выполняется просто командой:
mc
Дальше проверяем работу апача:
service apache2 start
service apache2 restart
Нюанс: при разворачивании нового сервера среди предустановленного ПО я указал Apache, MySQL, nginx. Так вот, апач упорно не хотел стартовать, ругаясь на занятый порт. При помощи гугла выяснил что на 80 порту сидел тот самый nginx. Менять порт не хотел, поэтому просто удалил этот виртуальный сервер и за 2 минуты получил новый, уже без nginx.
Проверяем работу апача из-вне, набираем в браузере http://ВашВнешнийИПАдресСервера/
Видим заветное «It works!»
Дальше устанавливаем компоненты 1С на сервер Ubuntu. Вам понадобится платформа для Linux, а точнее архив вида 8.3.5.1119_deb, с двумя файлами внутри 8.3.5.1119_deb.tar.gz и 8.3.5.1119_deb64.tar.gz (в моем случае Ubuntu 64-битная, поэтому я беру второй файл). Где их взять объяснять не буду, а вот как скачать на сервер расскажу. Качаем при помощи команды:
Wget http://www.сайтфайлобменника.com/8.3.5.1119_deb64.tar.gz
8.3.5.1119_deb64.tar.gz – это тоже архив. Распаковать его можно либо командой tar, либо открыть MC, открыть архив как папку, и скопировать из этой папки-архива нужные нам файлы в нужное нам место. А нужны нам следующие файлы:
1c-enterprise83-common_8.3.5-1119_amd64.deb
1c-enterprise83-server_8.3.5-1119_amd64.deb
1c-enterprise83-ws_8.3.5-1119_amd64.deb
Эти файлы можно также открыть в MC и запустить файлы INSTALL. Устанавливать нужно в таком же порядке, как указаны здесь. По сути нам нужен только последний пакет, но гугл и форумы сказали, что для пакета ws рекомендуется пакет server, а для server рекомендуется common. Так что ставим все.
После установки 1С службу агента 1С можно остановить:
service srv1cv83 stop
Нюанс: на самом деле, если не ошибаюсь, для апача нужен всего один файл wsap22.so, который можно найти в самом пакете 1c-enterprise83-ws_8.3.5-1119_amd64.deb, не устанавливая саму 1С. Нужно достать его оттуда, положить в специальную папку (можно даже в папку апача) и указать к нему путь в файле httpd.conf. Однако у меня это не сработало. При старте апача возникала ошибка:
root@vm88265:/etc/apache2# service apache2 restart
apache2: Syntax error on line 214 of /etc/apache2/apache2.conf: Syntax error on line 1 of /etc/apache2/httpd.conf: Cannot load /etc/apache2/wsap22.so into server: nuke83.so: cannot open shared object file: No such file or directory
Action 'configtest' failed.
Возможно, было дело в правах на файл, возможно в чем-то еще, а возможно одного такого файла не достаточно. Если у вас получится прикрутить wsap22.so к апачу без установки 1С – расскажите.
2. На время отвлечемся от сервера А и проверим, что сервер В соответствует нашим требованиям.
На сервер В у вас должна быть развернута клиент-серверная тестовая база (почему не файловая – расскажу дальше, хотя и файловая тоже возможна). Также в брандмауэре у вас должны быть открыты порты на входящие подключения (1540,1541,1560-1590).
3. Продолжаем настройку Ubuntu.
В файле host (находится по адресу /etc/host) мы должны прописать:
ВнутреннийИПАдресСервера1С ИмяСервера1С
10.10.1.12 MainServer1C
В корне создайте папку wwwroot (название по желанию), в ней создайте папку TestPub (это виртуальная папка, в которой будет храниться файл default.vrd)
Теперь идем по адресу
/opt/1c/v8.3/x86_64/
Нас интересует файл webinst. Можете его запустить – увидите какие параметры командной строки он использует:
root@vm88136:/opt/1C/v8.3/x86_64# ./webinst
1C:Предприятие 8. Утилита публикации веб-клиента
Публикация:
webinst [-publish] websrv -wsdir VirtualDir -dir Dir -connstr connStr [-confPath confPath]
Публикация на основе существующего vrd файла:
webinst [-publish] websrv [-wsdir VirtualDir] -descriptor vrdPath -dir Dir [-connstr connStr] [-confPath confPath]
Удаление публикации:
webinst -delete websrv -wsdir VirtualDir [-dir Dir] [-connstr connStr] [-confPath confPath]
Удаление публикации по существующему vrd файлу:
webinst -delete websrv [-wsdir VirtualDir] -descriptor vrdPath [-dir Dir] [-connstr connStr] [-confPath confPath]
Ключи:
-publish: опубликовать, ключ по умолчанию
-delete: удалить публикацию
websrv
-apache2: публикация Веб-клиента для Apache 2.0
-apache22: публикация Веб-клиента для Apache 2.2
-wsdir VirtualDir: виртуальный каталог
-dir Dir: физический каталог, в который будет отображен виртуальный
-descriptor vrdPath: путь к существующему vrd файлу
-connstr connStr: строка соединения ИБ
-confPath confPath: полный путь к конфигурационному файлу
Пример строки для публикации базы:
./webinst -apache22 -wsdir test -dir /wwwroot/TestPub -connstr "Srvr=10.7.12.108;Ref=test;" -confPath /etc/apache2/httpd.conf
Разберем мой случай:
«./webinst» - запуск на исполнение
«-apache22» - публикуем на апаче
«-wsdir test» - имя, по которому будет доступна ваша база из-вне, в данном случае адрес будет выглядеть http://ВашИПАдрес/test
«-dir /wwwroot/TestPub» - пусть к папке, где будет располагаться файл default.vrd
«-connstr "Srvr=10.7.12.108;Ref=test;" – строка подключения к информационной базе
«-confPath /etc/apache2/httpd.conf» - путь к конфигурационному файлу апача
Результатом будет «Publication successful»
Нюанс: бился с этой строкой долго. Судя по всему чувствительна к регистру и еще фиг к чему. Единственно что могу порекомендовать – вводить все параметры внимательно.
Нюанс: чуть ранее я упоминал, что с базами в файлом варианте у вас могут быть проблемы. Суть – вы должны расшарить папку базы для линукса. А это само по себе не простое действие. Да и не безопасное.
В результате этого в файле /etc/apache2/httpd.conf (конфигурационный файл апача) будут выполнены следующие изменения:
LoadModule _1cws_module "/opt/1C/v8.3/x86_64/wsap22.so"
# 1c publication
Alias "/test" "/wwwroot/TestPub/"
<Directory "/wwwroot/TestPub/">
AllowOverride All
Options None
Order allow,deny
Allow from all
SetHandler 1c-application
ManagedApplicationDescriptor "/wwwroot/TestPub/default.vrd"
</Directory>
А также в папке /wwwroot/TestPub/ мы видим файл 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"
ib="Srvr=10.7.12.108;Ref=test;"/>
Перезапускаем апач и пробуем подключиться по адресу:
http://ВашВнешнийИПАдрес/test
Для использования веб-сервисов и хттп-сервисов и отладки 1С в файл 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"
ib="Srvr=10.7.12.108;Ref=test;">
<debug enable="true"
url="10.7.12.108"/>
<ws pointEnableCommon="false">
<point name="Exchange"
alias="exchange.1cws"
enable="false"/>
<point name="Exchange_2_0_1_6"
alias="exchange_2_0_1_6.1cws"
enable="false"/>
<point name="InterfaceVersion"
alias="InterfaceVersion.1cws"
enable="false"/>
<point name="DataTransfer"
alias="DataTransfer.1cws"
enable="true"/>
</ws>
<httpServices>
<service name="GetString"
rootUrl="main"
enable="true"/>
</httpServices>
</point>
Нюанс: в разделе
<debug enable="true"
url="10.7.12.108"/>
мы указываем, на каком компьютере искать предметы отладки. Так вот. Строка подключения конфигуратора (в котором будет ловить отладку) – должна быть тоже «srvr=10.7.12.108;ref=test;», т.е. подключения конфигуратора к базе должно быть тоже по ип.
Ну вот и все. Уверен у вас получится повторить этот эксперимент. А если нет – то гугл ответит на 90% ваших вопросов. А если и он не поможет – спрашивайте здесь)