Нюансы установки 1С: Сервера взаимодействия в рабочем контуре на примере CentOS 7, CentOS 8, RedOS 7.3

Украли американские шпионы чертежи МИГ-29.
Собрали у себя, получается паровоз.Снова собрали-опять паровоз!
Ничего понять не могут. Решили сознаваться.
На нашем заводе собирают-стоит МиГ-29!
Спрашивают рабочего:"Как же ты его собрал, по чертежам?"
Он им отвечает:"Внизу, мелкими буквами написано:
"После сборки-обработать напильником!".

©анекдот времен СССР

Руководств как установить 1С: Сервер взаимодействия превеликое множество, как на официальном ресурсе ИТС, так и профильных сайтах.

Однако и эта статья имеет место быть. Поясню почему.

Есть простой вопрос: Вовочке дали два яблока, одно он отдал Машеньке, сколько яблок осталось у Вовочки?

Ответ: одно яблоко, может дать только гуманитарий, технарь ответит, что неизвестно, сколько яблок у Вовочки было изначально.


Так и язык инструкций, либо неизвестно начальное состояние системы, либо затеряется сноска мелким шрифтом, из-за которой затеряется ваш рабочий день.

Инструкции сайта ИТС методически грамотные и приятные глазу, в них единый стиль именования, если хотите культура кода и однозначно, они обязательны к прочтению.

Про них можно сказать уверенно — по ним вы точно не соберете работающий сервер с первого раза.

Есть еще академический язык, отличный курс от преподавателя УЦ 1С Арутюнова Сергея Рафаэльевича.

Там вы закопаетесь в кроличью нору максимально глубоко, однако на промышленную систему из нее не выйдете, уткнувшись в философскую фразу: Здесь вам не курсы по Linux.

К тому же академическое обучение в течении восьми часов дается нелегко.



Как и любое академическое образование, курс в первую очередь учит вас думать, а не только шашкой махать. По возможности запишитесь и посмотрите.

На это уйдет три дня по 8+ часов.

Но большинству не хочется такого длинного пути, хочется



немного подумать, немного скопипастить и чтобы все взлетело, отсюда все остальные опусы и мой в том числе.

В части просмотренных мной статей автор то запустит службы из-под рута, по брандмауэр отключит.

В это время грустит один сотрудник службы безопасности, если она есть в вашей компании или совесть, если накатывают воспоминания Win9x.CIH…

Зато радуются +100500 хацкеров. Напрасно думать, что в корпоративной сети их нет. Вы просто не представляете, на что способны скучающие менеджеры по продажам. Если кто не в курсе, то пароль пользователя БД в текущей версии 1С: Сервера взаимодействия лежит в текстовом файле и если это postgres, то безопасности хана.

А хочется, чтобы и быстро и хорошо. Поэтому и пишу эти строки.

Кратко:

Повторив построчно команды из этой публикации вы с очень высокой степенью гарантии получите рабочий 1С: Сервер взаимодействия, который можно использовать в рабочем контуре.



Полностью команды под катом, чтобы не запутаться в простыне текста, далее в публикации будут рассмотрены моменты на которые не заостряется внимание в официальной инструкции ИТС.

Все ссылки внизу статьи.

Установка 1С: Сервер взаимодействия 24 идет на CentOS 7, CentOS 8, RedOS 7.3 облачных серверов одинаковой конфигурации







Одновременно, чтобы три раза не бегать рассмотреть все актуальные системы сразу.
В тексте инструкции строки, которые касаются только одной системы будут выделены комментариями, жирным шрифтом показаны отличия от инструкции ИТС.

В каталоге /install лежат установочные пакеты сервера взаимодействия и java загруженные с сайта ИТС


  • CentOS 7 — классика, у кого есть доступ на kb.1c.ru, найдет там взятые с боевых контуров инструкции установки, которые сработают, но год выпуска наводит на размышления
  • CentOS 8 — уже теплее, но актуальным ядром может похвастаться наш родной
  • RedOS 7.3. Не буду здесь разводить дискуссий про отечественного производителя. Его кстати каждый может увидеть в зеркале. Кто не разу не прибивал в печатной форме хардкодом ФИО главного бухгалтера, может кинуть в меня камнем.

    Чего не хватает на мой взгляд, это форума поддержки, чтобы не приходилось утекать на stackoverflow.

Те, кто не любит читать буквы, может посмотреть видео

Полный листинг установки:
#осмотреться в отсеках 

uname -a
ip addr
# или кто к нему привык ifconfig 
#при установке из образа dvd вариант сервер без графической оболочки его не будет
#устанавливаем yum install net-tools -y

hostname

#+CentOS 8
cd /etc/yum.repos.d/
sed -i 's/mirrorlist/#mirrorlist/g' /etc/yum.repos.d/CentOS-*
sed -i 's|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g' /etc/yum.repos.d/CentOS-*
#-CentOS 8
yum update -y
#обновляемся

yum install mc -y
#пригодится, если он вам не нужен, то зачем вы читаете эти строки?
#отключаем ipv6
#+CentOS 8, RedOS 7.3
nmtui
#-CentOS 8, RedOS 7.3
#+CentOS 7
echo 'net.ipv6.conf.all.disable_ipv6 = 1' >> /etc/sysctl.conf
echo 'net.ipv6.conf.default.disable_ipv6 = 1' >> /etc/sysctl.conf
#-CentOS 7

#установка java
cd /install
yum install *.rpm -y
#установка сервера взаимодействия
tar xvzf *.tar.gz
./1ce-installer-cli install --ignore-signature-warnings

#установка postgresql

#+CentOS 8
dnf module list postgresql
dnf module enable postgresql:12
#-CentOS 8
yum install postgresql-server -y
yum install postgresql-contrib -y

postgresql-setup initdb
systemctl enable postgresql.service --now
systemctl status postgresql.service --now

#+CentOS 7
yum -y install https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm 
yum list -y postgre*-server*
yum install postgresql12-server postgresql12-contrib -y

postgresql-12-setup initdb
systemctl enable postgresql-12.service --now
systemctl status postgresql-12.service
#-CentOS 7

#создание базы postgresql

passwd postgres
su postgres
psql
ALTER USER postgres WITH PASSWORD '123456';
CREATE USER db_user WITH PASSWORD '123456';
CREATE DATABASE cs_db OWNER db_user;
\c cs_db
CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
\q
exit

#переключаем ident на md5 для postgresql
cat /var/lib/pgsql/data/pg_hba.conf
perl -i.orig -pE 's/(^host.*127.0.0.1\/32\s+)ident/$1 md5/i' /var/lib/pgsql/data/pg_hba.conf
cat /var/lib/pgsql/data/pg_hba.conf

systemctl restart postgresql.service
systemctl status postgresql.service --no-pager

#+CentOS 7
cat /var/lib/pgsql/12/data/pg_hba.conf
perl -i.orig -pE 's/(^host.*127.0.0.1\/32\s+)ident/$1 md5/i' /var/lib/pgsql/12/data/pg_hba.conf
cat /var/lib/pgsql/12/data/pg_hba.conf

systemctl restart postgresql-12.service
systemctl status postgresql-12.service --no-pager
#-CentOS 7

#в этой точке, чтобы была видна утилита ring желателен 
reboot

#но можно 
bash
source ~/.bashrc

#или 
mc

#проверяем существование и устанавливаем переменную JAVA_HOME
ls /usr/lib/jvm/bellsoft-java11-full.x86_64/
export JAVA_HOME=/usr/lib/jvm/bellsoft-java11-full.x86_64/

#создаем сервисы
useradd hc_user
mkdir -p /var/cs/hc_instance
chown hc_user:hc_user /var/cs/hc_instance
ring hazelcast instance create --dir /var/cs/hc_instance --owner hc_user
ring hazelcast --instance hc_instance service create --username hc_user --stopped --java-home $JAVA_HOME

useradd es_user
mkdir -p /var/cs/es_instance
chown es_user:es_user /var/cs/es_instance
ring elasticsearch instance create --dir /var/cs/es_instance --owner es_user
ring elasticsearch --instance es_instance service create --username es_user --stopped --java-home $JAVA_HOME

useradd cs_user
mkdir -p /var/cs/cs_instance
chown cs_user:cs_user /var/cs/cs_instance
ring cs instance create --dir /var/cs/cs_instance --owner cs_user
ring cs --instance cs_instance service create --username cs_user --stopped --java-home $JAVA_HOME

#прописываем настройки БД
ring cs --instance cs_instance jdbc pools --name common set-params --url jdbc:postgresql://localhost:5432/cs_db?currentSchema=public
ring cs --instance cs_instance jdbc pools --name common set-params --username db_user
ring cs --instance cs_instance jdbc pools --name common set-params --password '123456'
ring cs --instance cs_instance jdbc pools --name privileged set-params --url jdbc:postgresql://localhost:5432/cs_db?currentSchema=public
ring cs --instance cs_instance jdbc pools --name privileged set-params --username db_user
ring cs --instance cs_instance jdbc pools --name privileged set-params --password '123456'

#прописываем настройки веб-сокета
ring cs --instance cs_instance websocket set-params --hostname <ваше_имя или IP>
ring cs --instance cs_instance websocket set-params --port 9094

ring -l trace -x hazelcast --instance hc_instance service start
ring -l trace -x hazelcast --instance hc_instance service status 

#стартуем

#в этой точке если вы нигде не ошиблись при копипасте в CentOS 7 сервис запустится, а в CentOS 8 и RedOS 7.3 нет
#посмотреть ошибки
journalctl -xe --no-pager
#проверяем настройки selinux
getenforse #может отсутствовать
sestatus
#если selinux включен, временно отключаем его
setenforce 0

#стартуем еще раз
systemctl start 1ce-cs_instance 
systemctl start 1ce-hc_instance 
systemctl start 1ce-es_instance 

#проверяем что все запустилось
systemctl status 1ce-cs_instance --no-pager
systemctl status 1ce-hc_instance --no-pager
systemctl status 1ce-es_instance --no-pager

curl http://localhost:8087/rs/health

#если все хорошо то переходим к настройке selinux, понадобится audit2allow, ищем в каком она пакете

#+CentOS 8, RedOS 7.3
setenforce 1

yum provides audit2allow 
yum install policycoreutils-python-ххх.ххх -y

systemctl restart 1ce-hc_instance

#создаем правила selinux на основе записей лога 
cd /var/cs/cs_instance
grep systemd /var/log/audit/audit.log | audit2allow -M my-systemd
#как вариант ausearch -c 'systemd' --raw | audit2allow -M my-systemd

#применяем созданные правила
semodule -i my-systemd.pp
semodule -R

#проверяем что все запустилось при включенном selinux
systemctl restart 1ce-hc_instance 
systemctl restart 1ce-es_instance 
systemctl restart 1ce-cs_instance 
curl http://localhost:8087/rs/health
#-CentOS 8, RedOS 7.3

#инициализируем БД
curl -Sf -X POST -H "Content-Type: application/json" -d "{ \"url\" : \"jdbc:postgresql://localhost:5432/cs_db\", \"username\" : \"db_user\", \"password\" : \"123456\", \"enabled\" : true }" -u admin:admin http://localhost:8087/admin/bucket_server

#добавляем  правила в firewall
firewall-cmd --zone=public --add-port=9000/tcp --permanent
firewall-cmd --reload

#можно подключаться из баз 1С и штатно работать

#бонус 1 - включение wss
#создаем хранилище keystore java
mkdir /var/cs/cs_instance/data/security
cd mkdir /var/cs/cs_instance/data/security
keytool -keystore /var/cs/cs_instance/data/security/websocket-keystore.jks -genkey -alias RedOS-7.3.local
#экспорт приватного ключа из keystore java
keytool -importkeystore -srckeystore /var/cs/cs_instance/data/security/websocket-keystore.jks -srcstorepass 123456 -srckeypass 123456 -srcalias RedOS-7.3.local -destalias RedOS-7.3.local -destkeystore identity.p12 -deststoretype PKCS12 -deststorepass 123456 -destkeypass 123456
openssl pkcs12 -in identity.p12 -nodes -nocerts -out private_key.pem
openssl pkcs12 -in identity.p12 -nokeys -out cert.pem

ring cs --instance <cs_instance> websocket set-params --wss true
ring cs --instance <cs_instance> websocket set-params --keystore-path /var/cs/cs_instance/data/security/websocket-keystore.jks
ring cs --instance <cs_instance> websocket set-params --keystore-password 123456
ring cs --instance <cs_instance> websocket set-params --keystore-format JKS

systemctl restart 1ce-cs_instance 

#бонус 2 - приятная глазу утилита мониторинга в замену top
yum install epel-release -y
yum install glances -y

glances


Купила группа РеноНиссан завод АвтоВАЗ.
Перенастроили производство, запускают конвейер.На выходе Жигули!
Демонтируют оборудование, пригнали новое из Японии.Снова Жигули!
Привозят работников из Франции.- Жигули!
Около завода холм, на нём отдыхают бывшие гл. инженер и директор завода.
Инженер директору:
— А я тебе говорил — место проклятое. А ты всё — руки не оттуда растут…
©анекдот.ру


Нюансы установки


Даже чистые системы, только что развернутые в облаке, будут возможно отличаться друг от друга и от установки из образа загруженного с сайта производителя, поскольку их образы заранее подготовили админы, которых в народе зовут системными.

Поэтому в любом случае надо осмотреться, обновить систему, проверить наличие нужных пакетов и отключить ipv6, если вы его не используете.

Создаем отдельного пользователя БД postgres.

su postgres
psql
ALTER USER postgres WITH PASSWORD '123456';
CREATE USER db_user WITH PASSWORD '123456';
CREATE DATABASE cs_db OWNER db_user;

\c cs_db
CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
\q
exit


Перед установкой сервисов 1С: Сервера взаимодействия проверяем существование каталога и устанавливаем переменную JAVA_HOME:

export JAVA_HOME=/usr/lib/jvm/bellsoft-java11-full.x86_64/

Далее ее используем в строке создания сервисов.

ring hazelcast --instance hc_instance service create --username hc_user --stopped --java-home $JAVA_HOME

ring elasticsearch --instance es_instance service create --username es_user --stopped --java-home $JAVA_HOME

ring cs --instance cs_instance service create --username cs_user --stopped --java-home $JAVA_HOME

На корпоративе к программисту подошла симпатичная бухгалтерша и предложила:
— Может быть мы уединимся и займемся непозволительным?
-Ух ты! Будем делить на ноль!
обрадовался программист
©анекдот.ру

Можно конечно запустить все службы с правами суперпользователя, отключить брандмауэр, отключить встроенные средства безопасности ОС, для верности записать пароли в текстовый файл и ждать пока мимо проплывет зарплата премию…

Да еще пароль везде использовать 123456 :)

Не забудьте поменять его на надежный при копипасте из листинга публикации!



При включенном selinux сервисы 1С: Сервера взаимодействия запустятся только в CentOS 7, в его старших (младших?) братьях будет таймаут запуска с не совсем информативным сообщением ошибки.

Это отрабатывает selinux.

Если безопасность вам не важна то идем в cd /etc/selinux изменяем в файле config
SELINUX=enforcing на SELINUX=disabled или SELINUX=permissive
.

Если здоровье и рассудок вам дороги, то не отключаем selinux, а создаем правила для него.

Понадобится утилита audit2allow.

С ее помощью можно легко преобразовать записи лога файла аудита в правила selinux:

ausearch -c 'systemd' --raw | audit2allow -M my-systemd — так рекомендуют разработчики CentOS.

grep systemd /var/log/audit/audit.log | audit2allow -M my-systemd — такой пример на сайте RedHat и на мой взгляд он отрабатывает лучше.

Остается только применить и перечитать правила:

semodule -i my-systemd.pp

semodule -R

После этого все сервисы запустятся при включенном selinux:



С брандмауэром еще проще:

firewall-cmd --permanent --zone=public --add-port=9094/tcp

firewall-cmd --reload

Для полного фен-шуя остается переключиться на защищенный канал, к тому же, если для доступа к базе 1С используется веб-клиент по HTTPS, то сервер взаимодействия должен использовать протокол WSS в обязательном порядке.

Некоторая проблема в том что админы, откликающиеся на системных, привыкли и будут просить закрытый ключ сгенерированный openssl, а хранилище ключей у вас keystore java, управляемое утилитой keytool.

Сработает такой путь:

Cоздаем хранилище:

mkdir /var/cs/cs_instance/data/security

cd mkdir /var/cs/cs_instance/data/security

keytool -keystore /var/cs/cs_instance/data/security/websocket-keystore.jks -genkey -alias RedOS-7.3.local

RedOS-7.3.local — нужно заменить на ваш алиас, путь к хранилищу — рекомендованный 1С.

Экспортируем и конвертируем закрытый ключ:

keytool -importkeystore -srckeystore /var/cs/cs_instance/data/security/websocket-keystore.jks -srcstorepass 123456 -srckeypass 123456 -srcalias RedOS-7.3.local -destalias RedOS-7.3.local -destkeystore identity.p12 -deststoretype PKCS12 -deststorepass 123456 -destkeypass 123456

openssl pkcs12 -in identity.p12 -nodes -nocerts -out private_key.pem

openssl pkcs12 -in identity.p12 -nokeys -out cert.pem

Любезнейше прошу извинить, за допущенные опечатки.

Кто их найдет или у кого не получится установка по полному листингу, пишите в комментариях или возмущайтесь любым другим образом.

Огромная благодарность облачному провайдеру © Serverspace за предоставленное оборудование, без них видео не получилось бы записать.


Желающие проверить/разобраться во всем самостоятельно, вам предлагается список ссылок:



Надеюсь, статья вам сэкономит больше времени, чем вы потратите на ее прочтение.

И останется минутка поставить плюс или минус.

Комментарии (0)