Для работы с 1С сейчас не обязательно использовать Windows на сервере, можно и Linux. Более того, нет необходимости ставить и графическое окружение, если работа с базами будет по протоколу http. Я расскажу, как настроить сервер для 1С и опубликовать файловую базу на сервере Centos 8, не устанавливая саму платформу и графическое окружение. Нам понадобится только web сервер Apache и некоторые компоненты сервера приложений 1С для Linux.
На углубленном курсе "Архитектура современных компьютерных сетей" вы с нуля научитесь работать с Wireshark и «под микроскопом» изучите работу сетевых протоколов. На протяжении курса надо будет выполнить более пятидесяти лабораторных работ в Wireshark.
Введение
Ранее я уже рассказывал, как публиковать файловые базы 1С. Схема простая и рабочая, но ее можно упростить еще больше, исключив систему Windows вообще. Все, что нужно для публикации баз 1С, есть в Linux. Рассказываю подробно, как это сделать. Вот что нам понадобится для публикации 1С баз:
- Операционная система Linux. В моем случае это будет Centos 8 или любой ее форк.
- Cервер 1С:Предприятия (64-bit) для RPM-based Linux-систем.
- Веб сервер Apache, который в rpm дистрибутивах носит имя httpd.
- Шрифты Microsoft's Core Fonts.
Собственно и все. Набор софта простой и достаточно узкий. Ничего лишнего. Отдельно не забываем про клиентские лицензии 1С. Они могут быть установлены как на сервере, так и у клиентов. В моем примере лицензии будут клиентские, так что на сервер я их устанавливать не буду. Я проверял данное решение как на аппаратных usb ключах в локальной сети, так и софтовых по одной на каждом клиенте.
Установка компонентов 1С:Предприятия на Linux
Приступаем к настройке. Первым делом нам надо скачать и установить Cервер 1С:Предприятия (64-bit) для RPM-based Linux-систем. Идем на https://releases.1c.ru и скачиваем нужную вам версию.
Передаем архив на сервер и распаковываем.
# mkdir 1c-rpm # tar -C 1c-rpm/ -xzvf rpm64_8_3_18_1289.tar.gz
Нам нужно установить только следующие компоненты:
- 1c-enterprise-8.3.18.1289-server-8.3.18-1289.x86_64.rpm
- 1c-enterprise-8.3.18.1289-common-8.3.18-1289.x86_64.rpm
- 1c-enterprise-8.3.18.1289-ws-8.3.18-1289.x86_64.rpm
Делаем это:
# cd 1c-rpm/ # dnf install 1c-enterprise-8.3.18.1289-{common,server,ws}-8.3.18-1289.x86_64.rpm
Сервер 1С предприятия установили на Centos, переходим к настройке веб сервера для публикации баз.
Настройка apache для публикации баз 1с
Нам необходимо установить непосредственно web сервер apache.
# dnf install httpd
Запустите его и убедитесь, что веб сервер работает. Для этого перейдите по ip адресу сервера в браузере. Вы должны увидеть стартовую страницу apache.
# systemctl enable --now httpd
Если страница не открывается, скорее всего у вас включен и не настроен firewalld. Откройте необходимые порты:
# firewall-cmd --permanent --zone=external --add-port=80/tcp # firewall-cmd --permanent --add-port=80/tcp --add-port=443/tcp # firewall-cmd --reload
Сразу же настроим однопоточную работу apache. Для этого открываем конфиг /etc/httpd/conf.modules.d/00-mpm.conf и добавляем туда:
StartServers 1 MinSpareThreads 1 MaxSpareThreads 1
Проверяем конфигурацию apache и перезапускаем его:
# apachectl -t # apachectl restart
У нас почти все готово к публикации баз 1С. Необходимо только установить шрифты Microsoft's Core Fonts.
Установка шрифтов Microsoft's Core Fonts в Centos
Подробная инструкция и информация по установке Microsoft's Core Fonts представлена на странице http://mscorefonts2.sourceforge.net.
# dnf install epel-release # dnf install xorg-x11-font-utils fontconfig # dnf install https://downloads.sourceforge.net/project/mscorefonts2/rpms/msttcore-fonts-installer-2.6-1.noarch.rpm
Все подготовительные действия сделали. Осталось опубликовать саму 1С базу.
Публикация баз 1С в Centos
В директории /opt/1cv8/x86_64 хранятся бинарники от установки 1С. С их помощью опубликуем файловую базу. Но перед этим нам надо скопировать сам файл с базой в какую-то директорию. Например, в /opt/1Cbase. Выставляем полные права на эту директорию и файлы в ней для веб сервера:
# mkdir -p /opt/1Cbase # chown -R apache. /opt/1Cbase
Так же создадим директорию для веб сервера, где будет располагаться файл для веб публикации базы:
# mkdir -p /var/www/1Cbase # chown -R apache. /var/www/1Cbase
Публикуем файловую базу:
# /opt/1cv8/x86_64/8.3.18.1289/webinst -publish -apache24 -wsdir 1cbase -dir /var/www/1Cbase -connstr "File=/opt/1Cbase;" -confpath /etc/httpd/conf/httpd.conf
Публикуем базу с сервера 1С:
# /opt/1cv8/x86_64/8.3.18.1289/webinst -publish -apache24 -wsdir 1cbase -dir /var/www/1Cbase -connstr "Srvr=1CSRV;Ref=1cbase;" -confpath /etc/httpd/conf/httpd.conf
1cbase | алиас, который нужно будет добавить к адресу сервера для доступа к этой базе |
/var/www/1Cbase | путь к публикации базы, где будет располагаться .vrd файл с описанием подключения к базе через web |
File=/opt/1Cbase; | строка подключения файловой базы |
Srvr=1CSRV;Ref=1cbase; | строка подключения серверной базы |
Если все сделали правильно, должны увидеть сообщение Publication successful.
После этого осталось только перезапустить веб сервер и идти проверять публикацию.
# apachectl restart
Если используете клиентские лицензии на компьютерах, а не на сервере, то через браузер скорее всего получите ошибку получения лицензии. В таком случае используйте установленную платформу, подключая базу через публикацию в web.
Запустится стандартная платформа, которая без проблем найдет локальную или сетевую лицензию, если она установлена.
Error when loading component 'help'
Очень распространенная ошибка, которую вы можете получить - Error when loading component 'help'.
Ее проблема в том, что текст ошибки совершенно не информативен. Но чаще всего она связана с правами доступа к файлам с базой. У вас скорее всего не стоит владельцем файла с базой веб сервер apache. Второй вариант - работает SELinux. В контексте данной задачи я не разбирался с его настройкой, поэтому просто отключал.
Во время написания статьи как раз столкнулся с проблемой SELinux, так как не заметил, что он остался включен на тестовой машине. Все перепроверил и только потом вспомнил про него. Отключил временно в консоли и сразу все заработало:
# setenforce 0
Обновление опубликованной через web базы 1с
Подключившись к опубликованной базе через web, нет возможности обновить ее. Если у вас база на сервере 1С, то это не проблема. Просто подключаетесь толстым клиентом и делаете все, что нужно. Если у вас файловая база, настроенная по предложенному в статье способу, вам нужно будет каким-то образом подключаться к ней через толстого клиента. Проще всего это сделать напрямую, через Samba.
Подойдет любой способ ее настройки. У меня есть статья - быстрая и простая настройка samba. Можете взять подходящий вам способ аутентификации и все сделать. Далее подключаетесь к файловой базе как обычно по сети толстым клиентом и обновляете ее.
Заключение
Не забудьте в таком режиме публикации 1с баз добавить побольше памяти и процессора виртуальной машине с веб сервером. Рекомендую не менее 4CPU и 8G Ram. С каждым релизом 1С хочет все больше и больше ресурсов. Еще во время тестов заметил такую вещь, что виртуалка с 1С не запрашивала больше оперативной памяти, несмотря на то, что было включено динамическое выделение. При этом все жутко тормозило и памяти явно не хватало. Пришлось отключить динамическую память и жестко задать 8G, чтобы все зашевелилось более ли менее быстро.
Для безопасности и удобства, перед Apache можно настроить Nginx в режиме proxy_pass.
На углубленном курсе "Архитектура современных компьютерных сетей" вы с нуля научитесь работать с Wireshark и «под микроскопом» изучите работу сетевых протоколов. На протяжении курса надо будет выполнить более пятидесяти лабораторных работ в Wireshark.
satenfoce 0 забыли указать, без него будет ошибка выходить
ошибка при загрузке компоненты backbas
Добрый день! Я правильно понимаю, что при такой архитектуре придется использовать однопользовательские лицензии 1с? Успешно опубликовал файловую базу по приведенной выше статье. При первом подключении толстым клиентом появляется окно активации программы. При правильном заполнении всех полей программная лицензия привязывается к машине, на которой запущен толстый клиент, а не к серверу с БД. Получится ли сделать так, чтобы использовалась одна многопользовательская лицензия, привязанная к серверу? Спасибо.
Я все нюансы не помню, но веб сервер на каждое подключение использует одну пользовательскую лицензию. Какая она будет вроде бы не принципиально. Последний раз помню, использовал обычные софтовые лицензии на сервере. А толстый клиент разве по web работает? Для этого используется либо браузер, либо тонкий клиент.
Благодарю за ответ. Для подключения толстым клиентом я расшарил папку с базой через Samba. Просто не совсем понимаю, как в сценарии использования 1с, описанном в статье, применить софтовую многопользовательскую лицензию именно к машине, на которой запущен веб-сервер...
Так Вы через расшаренную папку подключаетесь не через веб сервер, поэтому тратится лицензия толстого клиента на компьютере пользователя. Чтобы веб сервер использовал софтовую лицензию, установленную на сервере, надо и подключаться через веб к опубликованной базе.
Подскажите пожалуйста, публикую базу 1С документооборот 3.0. и через web все отлично, база загружается и пользователи логинятся, но при использовании мобильного приложения "1C документооборот МК" выдает ошибку:
HTTP: Not found
Error working with resource
../e1cib/login
Добрый день. Большое спасибо за ресурс. Очень много полезного для себя узнал.
По теме. Настроил, опубликовал базу. Открываю в браузере. Но всё что вижу, это белый экран. И заголовок страницы: 1C:Enterprise
Не подскажите, в какую сторону смотреть?
небольшое уточнение:
/opt/1cv8/x86_64/8.3.19.1351/webinst -publish -apache24 -wsdir StateAccounting -dir /web/sites/1sweb.lan/www -connstr "File=/opt/1c-db;" -confpath /etc/httpd/conf.d/1sweb.lan.conf
/opt/1cv8/x86_64/8.3.19.1351/webinst -publish -apache24 -wsdir StateAccounting -dir /web/sites/1sweb.lan/www -connstr "Srvr=IP сервера;Ref=StateAccounting;" -confpath /etc/httpd/conf.d/1sweb.lan.conf
Откройте инструменты разработчика в браузере и посмотрите. Иногда это помогает решить подобную проблему. Там может быть видна ошибка.
You cannot use this browser to work with 1C:Enterprise software
1C:Enterprise
BODY
{
margin: 0;
padding: 0;
border: 0;
font-family: 'MS Sans Serif';
color: #594304;
}
var BASE = "/bgu/ru";
var LANG = "ru";
var REDIRECT = true;
var OPENIDRELYINGPARTY = false;
var SPLASHTOPBRANDINGIMAGE = false;
var SPLASHBOTTOMBRANDINGIMAGE = false;
var HASBRANDING = false;
var EXITURL = "";
var OIDCALLOWSTANDARDAUTHENTICATION = "";
var VERSION = "8.3.19.1351"
var VENDORPREFIX = "1c.";
var ANSQUERY = undefined;
var MSGNOTSUPPORTED = "You cannot use this browser to work with 1C:Enterprise software"
К предыдушему посту
chown: invalid user: 'apache'
Получается у меня нету такого юзера, так кому должен дать права не подскажете?
В Ubuntu веб сервер работает под юзером www-data. Вот тут есть хорошее руководство по Ubuntu и 1С - https://ubuntu-admin.ru/ustanovka-i-nastrojka-1s-na-ubuntu-s-postgresql/
Спасибо
Добрый день!
Делая тоже самое только на ubuntu
И у меня там где права даете на папку выходит такая ошибка.
chown -R apache. /var/www/1Cbase
P.S.
У меня apt install apache2
так как httpd не смог поставить на убунту
Здравствуйте, возник такой вопрос поставил 1С 8.3.19-1150 , все хорошо вебморда работает и показывает картинку логина и пароля. Как я понял я базу 1C заливаю в 1Cbase, но почему то все равно пишет что базы нет или не существует? Куда хотя б копать?
Проверьте сначала не через web, а толстым клиентом, работает ли у вас база.
Привет! В статье есть один непонятный момент:
Srvr=1CSRV;Ref=1cbase; | строка подключения серверной базы
что за серверная база? откуда имя? спасибо за ответ
Это имя базы в Сервере 1С. Ее видно в консоли управления кластером.
Владимир! А есть инструкция для NGINX?
У меня просто везде последний, да и с индейцем я имел дело последний раз лет шесть назад.
Не хочется лишний раз разводить зоопарк без надобности
Для nginx я не видел модуля 1С. Я всегда на apache настраивал. Если нужен nginx, он ставится в качестве reverse proxy, а запросы все равно потом на apache уходят.
Добрый вечер! можете чуть дополнить статью и рассказать про установку сервера 1с на Centos, столкнулся с проблемой, а куда копать не пойму. на убунте все получается, а надо на centos. спасибо
Так а что не получается? Разницы принципиальной нет, что centos, что ubuntu. Отличаются только пакеты, которые ставить надо. Настройки все одинаковые.
уже в принципе разобрался. но не совсем до конца, облазил весь инет в поисках ответа, но если делать все как написано в типовых статьях, то сервер 1с не хочет стартовать на centos 8 после чистой установки. не хватает библиотек, случайно поставил пакет, где эти библиотеки были, но какие точно так и не понял, вроде что то связанно с этой "libicu", после все стартует прекрасно, если есть желание помочь разобраться, то можно на почту.
А если нужно опубликовать с ws и httpService ?
"Сразу же настроим однопоточную работу apache"
Скажите, пожалуйста, с какой целью?
Сам нашел ответ на свой же вопрос:
"модуль 1с для веб-сервера — однопоточный. Соответственно, все пользователи 1с, подключенные к этому веб-серверу, встают в единую «очередь» серверных вызовов"
А если нагородить что-то вроде: балансировщик (haproxy или тот же nginx) --> в docker-ах несколько apache-ей c web-модулем 1С слушающих на разных портах --> база данных 1С
Не уверен, что это хорошая идея для файловых баз. Web публикация хорошо страхует от одновременного изменения и блокировки одних и тех же объектов при одновременной работе нескольких пользователей в одной базе. Она все запросы выстраивает в единую очередь. Если мы запустим несколько таких очередей, то могут начаться проблемы.
Как это все будет работать с серверной базой, не знаю. Там подобных проблем с блокировкой и одновременным доступом нет. Так что возможно будет рабочее решение.
https://releases.1c.ru/ - нужен логин и пароль, без этого не скачаешь ничего
Это очевидно. А зачем вам все это настраивать, если у вас нет учетки и лицензии 1С? Все равно работать не будет.