gifts2017

Публикация базы 1С на веб-сервере Apache на сервере Linux

Опубликовал Ildar Gabdrakhmanov (spezc) в раздел Администрирование - Системное

В отличие от других подобных публикаций здесь будет описано как опубликовать базу (располагающуюся на сервере windows) на веб-сервере apache (расположенном на соседнем сервере под linux).


Введение

Если кратко – то в этой статье я попробую рассказать как опубликовать базу 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% ваших вопросов. А если и он не поможет – спрашивайте здесь)

См. также

PowerTools от 1 000
Подписаться Добавить вознаграждение
Комментарии
1. Виталий (python.pm) 24.09.14 18:54
Каким хостингом пользовались?
Хочется сначала на тестовом сервере опробовать.
2. Ildar Gabdrakhmanov (spezc) 24.09.14 21:33
3. Андрей Овсянкин (Evil Beaver) 08.10.14 18:51
Записал в блокнотик. Спасибо.
4. haz haz (hazd) 12.10.14 00:46
был опыт настройки web сервиса, хотели с планшета 1с-ку запустить, теперь ясно где мы прокололись((
5. Роман Антонов (ronhard) 20.10.14 14:57
Насколько помню nginx это веб сервер, так же как и апач. Так что не удивительно, что он так же занимал 80 порт. За статью спасибо.
6. Ildar Gabdrakhmanov (spezc) 20.10.14 15:04
(5) ronhard, так и есть. просто он был в списке предустановленных и я на это не обратил внимание (не знал что это). а так как я хотел именно на апаче, nginx был для меня лишним
7. Роман Якубов (Romany) 06.11.14 11:09
Запустил все по инструкции. Только столкнулся с тем, что имя базы было на русском, еще из двух слов)). Естественно, что ничего сразу не заработало. Решение такое - в месте команды публикации -«-connstr "Srvr=10.7.12.108;Ref=test;" – строка подключения к информационной базе надо написать так. «-connstr "Srvr=10.7.12.108;Ref='Имя мой базы';" – строка подключения к информационной базе. Все заработало.
Seneka7608; +1 Ответить 1
8. Ildar Gabdrakhmanov (spezc) 06.11.14 11:21
(7) Romany, спасибо за полезный комментарий)
9. serge_focus (serge_focus) 24.11.14 16:04
Спасибо большое за труды!
10. serge_focus (serge_focus) 16.12.14 09:04
Всем привет!
Развернул похожую систему на ubuntu-14.04.1-server-i386.
1С сервер 8.3.5.1336
Работает отлично
Хочу добавить несколько ньюансов
для теста ставил 1с и "Апач" на одном сервере.
1- Правельная настройка сетевых имен
Начнем с файла /etc/hosts, для того чтобы 1с-ка правильно создала свои конфиги из него нужно убрать любое упоминание об IPv6 и правильно задать соотношение IP адреса и имени сервера.

127.0.0.1 localhost
192.168.15.3 ubsrv.mydomain.local your-web-server
# The following lines are desirable for IPv6 capable hosts
#::1 localhost ip6-localhost ip6-loopback
#ff02::1 ip6-allnodes
#ff02::2 ip6-allrouters


Проверяем содержимое файла /etc/hostname после редактирования : your-web-server

После этих действий нужно перезагрузить сервер или выполнить:
/etc/init.d/hostname restart
И выполнить 2 команды:
hostname
hostname -f

Если всё правильно, система должна выдать одинаковые имена в обоих случаях: your-web-server
ставим набор "джентельмена"
пакеты
apt-get install libt1-5 t1utils imagemagick ttf-mscorefonts-installer
Дополнительн ищем на просторах нета
dpkg -i ttf2pt1_3.4.4-1.4_i386.deb
ставим сервер 1С
tar zxf 8.3.5.1336_deb.tar.gz
dpkg -i 1c-enterprise83-common_8.3.5-1336_i386.deb 1c-enterprise83-server_8.3.5-1336_i386.deb 1c-enterprise83-ws_8.3.5-1336_i386.deb

даунгрейтим Апач до версии 2.2

Создаем файл /etc/apt/preferences.d/apache22 с содержимым:
Package: apache*
Pin: release a=precise
Pin-Priority: 500

Создаем файл ubuntu1204.list в папке /etc/apt/sources.list.d/ubuntu1204.list с содержимым:
deb http://ru.archive.ubuntu.com/ubuntu/ precise main
Далее выполняем
apt-get update
apt-get dist-upgrade
apt-get install apache2

Публикуем базу как описано в статье
/opt/1C/v8.3/i386/webinst -apache22 -wsdir test -dir /mnt/www/TestPub -connstr "Srvr= your-web-server;Ref=WebTest;" -confPath /etc/apache2/httpd.conf

перезапускаем
service apache2 restart
и вуаля -все работает ;)
11. siyayushhij asinxral (siyayushhijasinxral@mail.ru) 14.09.15 17:52
Подскажите пжлникак не пойму. Мы с сис админом настроили связку апач на линуксе - 1С на виндовс. Как по статье.
Как я понял из статьи ничего публиковать из 1С на виндовс не нужно ибо файл с публикой defauld.vrd лежит на линуксе под ту часть 1С чтомыустанавливали отдельно под линукс. Там мы прописали
<?xml version="1.0" encoding="UTF-8"?>
<point xmlns="http://v8.1c.ru/8.3/virtual-resource-system"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
base="/cat"
ib="Srvr='109.10.10.122:1641'; Ref='DB_TE'; Usr='***'; Pwd='***';">

все 1С-ка по ссылке открывается, профит.
Теперь в базу что на 1Свиндовс дописал простенький веб-сервис HelloWorld, иду на линукс в наш файлик default.vrd дописываю далее к пред тексту

<debug enable="true"
url="109.10.10.122:1641"/>
<ws pointEnableCommon="false">
<point name="HelloWorld"
alias="ws1.1cws"
enable="true"/>
</ws>
</point>

все после этого и ссылка 1С не открывается и веб сервис не работает, что я делаю не так ?

Кстати если из1С-виндовсе нажать на Администрирование - публикация на веб-сервере пишет webсервер не обнаружен
12. Ildar Gabdrakhmanov (spezc) 15.09.15 07:08
приведите полносью текст файла врд.

Кстати если из1С-виндовсе нажать на Администрирование - публикация на веб-сервере пишет webсервер не обнаружен

все верно, ведь в том окружении где запущен конфигуратор (а именно виндус) - вебсервера нет - он установлен на соседнем сервере на линуксе.
13. Ildar Gabdrakhmanov (spezc) 15.09.15 07:20
у вас порядок закрытия тегов нарушен

<ws
<point
</ws>
</point>
14. siyayushhij asinxral (siyayushhijasinxral@mail.ru) 15.09.15 17:09
Спасибо, но все равно не пашет, пишет

Error loading [http://109.10.10.122:1641/cat/ws/HelloWorld?wsdl]: org.apache.xmlbeans.XmlException: org.apache.xmlbeans.XmlException: error: Unexpected element: TAG_END

И еще момент нужно ли апач после смены vrd файла рестартить ?
15. Ildar Gabdrakhmanov (spezc) 16.09.15 07:09
(14) siyayushhijasinxral@mail.ru,
да, перезапускать нужно.
приведите текст файла врд
16. barsuk829 gggg (barsuk829) 19.09.15 16:17
Доброго времени суток всем! На днях столкнулся со следующей проблемой.
У меня есть три сервера, на всех установлена Ubuntu 12.04 и соответственно по ним распределены СУБД PostgreSQL 9.3 от 1С, сервер 1С Предприятие 8.3.6 и Web сервер Apache 2.2. Схема похожа на описанную автором.
Публикую на Apache web сервер информационную базу , ws и hs сервисы конфигурации по описанной методике.
В результате база через web клиент работает превосходно, но ws и hs сервисы apache не видит!!!
Что примечательно, при расположении сервера 1С и apache на одном сервере при абсолютно тех же настройках публикации все работает отлично!
Если возникала похожая проблема, поделитесь решением! Заранее благодарен!
17. Григорий Русаков (GregRusakov) 07.10.15 12:03
Есть интересная статья с пошаговой инструкцией по установке 1С 8.3 на Ubuntu.
Может кому-то пригодится:
http://документооборот.net/faq/1s-doc-postgre-sql-vps.html
18. Андрей Уваров (oldcopy) 15.11.15 22:04
(17) GregRusakov, статья сумбурная и содержит кучу неточностей и недостатков. Видно, что автор плохо знает линукс. Много избыточных команд, а способ понижения версии apache вообще не выдерживает критики - это будет работать до первого обновления. Также есть вопросы по Postgres, сборка от 1С прибита гвоздями к libicu48 и с libicu52 работать не будет. Ну и рекомендации, если не заработало, то снесите все и установите заново - улыбают.
19. Sergey Andreev (starik-2005) 10.03.16 22:42
А как интерфейс OData опубликовать?
20. andrey P (andrey314) 07.06.16 14:47
(19) starik-2005,
Присоединяюсь к вопросу. Хотелось бы узнать тоже.
21. Sergey Andreev (starik-2005) 13.06.16 15:43
(20) andrey314, все просто:
<httpServices>
<service name="HSWS"
rootUrl="HSWS"
enable="true"/>
</httpServices>

Дальше хост/база/hs/HSWS/параметр1/параметр2/параметр3?пар1=ххх?пар2=ууу?пар3=zzz...
22. Надежда Гри (NadyaGri) 10.08.16 15:00
(19) starik-2005,
В файле default.vrd соответствует атрибуту enableStandardOData элемента point.
укажите enableStandardOData="true"
23. Константин (user635769_setiks) 07.11.16 14:01
Доброе время суток!
Нужна помощь с публикацией базы данных на Windows server R2 2008 + Apache 2.2. 1С сервер крутится на другом серваке вместе с SQL. Поднимали отдельный сервер для публикации.
Все сделано и запускается, но при аутентификации в окне 1С открытое через браузер появляется ошибка: МодульСеанса(65):Вам не разрешен доступ к программе через веб-сервер (имя сервера) Обратитесь к администратору.
Буду признателен за помощь.
24. Азат (mar82) 07.11.16 14:08
(23) так закомментируйте эту строку и все :) это же на уровне кода 1С сообщение
25. Константин (user635769_setiks) 07.11.16 15:13
26. Михаил Петров (MIhail_MR) 05.12.16 18:27
публикую веб сервис, сделал все по инструкции, порт ничем не занят, апачь отвечает, а публикация не работает, ошибка:

1C:Enterprise 8 application error:

Ошибка установки соединения
by reason:
server_addr=tcp://192.168.1.10:8585 descr=Сервер недоступен (Не отвечает, завершается аварийно или порт занят другим приложением) line=1073 file=./src/DataExchangeTcpClientImpl.cpp

Строка публикации http://192.168.1.10:8585/ws/web.1cws