За основу взята чистая система Debian 10, дистрибутив сервера взаимодействия 24.0.28 и рекомендованные версии java и PostgreSQL.
УСТАНОВКА БАЗОВАЯ, НАСТРОЙКУ УЖЕ ТРЕБУЕТСЯ ДЕЛАТЬ ПО ВАШЕЙ СИТУАЦИИ!
Этап 1. Установка основного сервера, Java и PostgreSQL
Сначала поставим все зависимости:
apt update
apt upgrade -y
#для debian 10/11 (основные зависимости)
apt install wget sudo ca-certificates gnupg gawk curl net-tools libicu libllvm
#для debian 12
apt install wget sudo software-properties-common apt-transport-https ca-certificates gnupg gawk curl net-tools \
libasound2 libfreetype6 libfontconfig1 libx11-6 libxdmcp6 libxext6 libxrender1 libxtst6 libxi6 libxau6 libxcb1
Добавим репозиторий java и установим его:
#для debian 10/11
wget -q -O - https://download.bell-sw.com/pki/GPG-KEY-bellsoft | sudo apt-key add -
echo "deb [arch=amd64] https://apt.bell-sw.com/ stable main" | sudo tee /etc/apt/sources.list.d/bellsoft.list
sudo apt-get update
sudo apt-get install bellsoft-java11
#для debian 12 из репозитория пока нормально не поставить, ставим deb
wget https://download.bell-sw.com/java/11.0.20.1+1/bellsoft-jdk11.0.20.1+1-linux-amd64.deb
sudo dpkg -i bellsoft-jdk11.0.20.1+1-linux-amd64.deb
Добавляем переменную JAVA_HOME глобально для всех юзеров:
#открываем на редактирование файл
nano /etc/environment
#пишем в него строчку
export JAVA_HOME="/usr/lib/jvm/bellsoft-java11-amd64/"
#применяем
source /etc/environment
Добавим репозиторий для PostgreSQL и установим его:
#для debian 10/11
wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
echo "deb http://apt.postgresql.org/pub/repos/apt/ buster-pgdg main" | sudo tee /etc/apt/sources.list.d/pgdg.list
sudo apt-get update
sudo apt-get install postgresql-12 postgresql-contrib-12
#для debian 12
curl -fsSl https://www.postgresql.org/media/keys/ACCC4CF8.asc | gpg --dearmor | sudo tee /usr/share/keyrings/postgresql.gpg > /dev/null
echo deb [arch=amd64,arm64,ppc64el signed-by=/usr/share/keyrings/postgresql.gpg] \
http://apt.postgresql.org/pub/repos/apt/ $(lsb_release -cs)-pgdg main | sudo tee /etc/apt/sources.list.d/postgresql.list
sudo apt update
sudo apt install postgresql-12 postgresql-contrib-12
Сразу произведем первичную настройку ии создание базы данных:
#логинимся в систему и подключаемся к SQL
sudo -u postgres -i
psql
#меняем пароль для пользователя postgres, у меня он будет passwordSQL
\password postgres
#создаем и настраиваем базу данных
\c cs_db
CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
#выходим
\q
exit
Качаем дистрибутив сервера с сайта ИТС или грузим в консоль с моего сервера командой ниже (ссылка на ИТС клик)
#качаем дистрибутив от меня
wget https://cloud.vlytkin.ru/s/rkDJsQnFj8qT7n5/download/1c_cs_24.0.28_linux_x86_64.tar.gz
#распаковываем инсталлятор
tar xvzf 1c_cs_24.0.28_linux_x86_64.tar.gz
#запускаем установку
sudo ./1ce-installer-cli install
Начинаем установку компонентов
#сервера
useradd cs_user
mkdir -p /var/cs/cs_instance
chown cs_user:cs_user /var/cs/cs_instance
/opt/1C/1CE/components/1c-enterprise-ring-0.19.5+12-x86_64/ring cs \
instance create --dir /var/cs/cs_instance --owner cs_user
/opt/1C/1CE/components/1c-enterprise-ring-0.19.5+12-x86_64/ring cs \
--instance cs_instance service create --username cs_user --java-home $JAVA_HOME --stopped
#Hazelcast
useradd hc_user
mkdir -p /var/cs/hc_instance
chown hc_user:hc_user /var/cs/hc_instance
/opt/1C/1CE/components/1c-enterprise-ring-0.19.5+12-x86_64/ring hazelcast \
instance create --dir /var/cs/hc_instance --owner hc_user
/opt/1C/1CE/components/1c-enterprise-ring-0.19.5+12-x86_64/ring hazelcast \
--instance hc_instance service create --username hc_user --java-home $JAVA_HOME --stopped
#Elasticsearch
useradd elastic_user
mkdir -p /var/cs/elastic_instance
chown elastic_user:elastic_user /var/cs/elastic_instance
/opt/1C/1CE/components/1c-enterprise-ring-0.19.5+12-x86_64/ring elasticsearch \
instance create --dir /var/cs/elastic_instance --owner elastic_user
/opt/1C/1CE/components/1c-enterprise-ring-0.19.5+12-x86_64/ring elasticsearch \
--instance elastic_instance service create --username elastic_user --java-home $JAVA_HOME --stopped
Производим настройку подключения к базе данных (пароль пишем свой):
/opt/1C/1CE/components/1c-enterprise-ring-0.19.5+12-x86_64/ring cs \
--instance cs_instance jdbc pools --name common set-params --url jdbc:postgresql://localhost:5432/cs_db?currentSchema=public
/opt/1C/1CE/components/1c-enterprise-ring-0.19.5+12-x86_64/ring cs \
--instance cs_instance jdbc pools --name common set-params --username postgres
/opt/1C/1CE/components/1c-enterprise-ring-0.19.5+12-x86_64/ring cs \
--instance cs_instance jdbc pools --name common set-params --password passwordSQL
/opt/1C/1CE/components/1c-enterprise-ring-0.19.5+12-x86_64/ring cs \
--instance cs_instance jdbc pools --name privileged set-params --url jdbc:postgresql://localhost:5432/cs_db?currentSchema=public
/opt/1C/1CE/components/1c-enterprise-ring-0.19.5+12-x86_64/ring cs \
--instance cs_instance jdbc pools --name privileged set-params --username postgres
/opt/1C/1CE/components/1c-enterprise-ring-0.19.5+12-x86_64/ring cs \
--instance cs_instance jdbc pools --name privileged set-params --password passwordSQL
Указываем порт и хост, я буду работать на localhost, так как потом направлю подключение через NGINX:
/opt/1C/1CE/components/1c-enterprise-ring-0.19.5+12-x86_64/ring cs \
--instance cs_instance websocket set-params --hostname localhost
/opt/1C/1CE/components/1c-enterprise-ring-0.19.5+12-x86_64/ring cs \
--instance cs_instance websocket set-params --port 9094
Запускаем системы:
/opt/1C/1CE/components/1c-enterprise-ring-0.19.5+12-x86_64/ring \
hazelcast --instance hc_instance service start
/opt/1C/1CE/components/1c-enterprise-ring-0.19.5+12-x86_64/ring \
elasticsearch --instance elastic_instance service start
/opt/1C/1CE/components/1c-enterprise-ring-0.19.5+12-x86_64/ring \
cs --instance cs_instance service start
Проверяем работу командой:
curl http://localhost:8087/rs/health
Если все ок, ответ будет такой:
{
"status": "UP",
"mainDbOk": true,
"allShardsOk": true,
"hazelcast": {
"available": true,
"members": [
"127.0.0.1:5701"
]
},
"elasticsearchOk": true,
"mediaClusterOk": false,
"mediaServers": {},
"pushOk": false,
"services": {
"available": true,
"unsatisfied": []
}
}
Если что не так, то логи тут:
/var/cs/cs_instance/logs/
/var/cs/hc_instance/logs/
/var/cs/elastic_instance/logs/
Инициируем базу данных (пароль пишите свой):
curl -Sf -X POST -H "Content-Type: application/json" \
-d "{ \"url\" : \"jdbc:postgresql://localhost:5432/cs_db\", \"username\" : \"postgres\", \"password\" : \"passwordSQL\", \"enabled\" : true }" \
-u admin:admin http://localhost:8087/admin/bucket_server
О том что все хорошо, скажет ответ типа:
{
"id": "c5e5f69a-8fa8-48eb-a24d-bc23b888f5e5",
"url": "jdbc:postgresql://localhost:5432/cs_db",
"username": "postgres",
"password": "passwordSQL",
"lastUsedAt": null,
"enabled": true,
"deleted": false
}
Если надо в фаерволе открываем порт:
firewall-cmd --zone=public --add-port=9094/tcp --permanent
firewall-cmd --reload
На этом этапе мы можем уже подключить 1С к серверу. Но у нас не будут прикрепляться файлы, однако сами сообщения уже будут работать.
Этап 2: установка и подключение хранилища, для работы с файлами:
Замечаение!
Я буду использовать MinIO S3, однако можно подключить любое совместимое хранилище. Официально сервер работает с системами:
- Amazon
- Amazon CDN
- Google Cloud
- Google Cloud CDN
- Croc Cloud
- Техносерв
Как подключать облачное хранилище, смотрите в документации на ИТС.
Выдержка из доки
В данном примере будет использоваться хранилище Amazon
- В браузере открыть ссылку https://console.aws.amazon.com/s3
- Войти или создать аккаунт.
- Нажать кнопку Create bucket.
- Задать имя хранилища, например 1c-cs-bucket-2.
- Перейти по ссылке https://console.aws.amazon.com/iam/home
- В верхнем правом углу нажать на логин и в выпадающем меню выбрать My Security Credentials.
- Раскрыть пункт: Access keys (access key ID and secret access key).
- Нажать Create New Access Key.
- Нажать Show Access Key.
- Скопировать себе Access Key ID и Secret Access Key. Эти данные понадобятся в запросе на добавление хранилища в базу данных.
Если вы планируете работать в web-клиенте, то необходимо настроить CORS:
- Откройте хранилище в браузере (или перейдите по ссылке https://console.aws.amazon.com/s3/buckets/<имя_хранилища>/?region=eu-west-1)
- Permissions / CORS Configuration
- Настройка с максимальным уровнем доступа:
*
GET
POST
DELETE
* - На сервере взаимодействия выполните команду:
$ curl -Sf -X POST -H 'Content-Type: application/json' -d '{ "type": "AMAZON", "baseUrl": "https://s3.amazonaws.com", "containerUrl": "https://${container_name}.s3.${region}.amazonaws.com", "containerName": "Имя хранилища", "region": "eu-west-1", "accessKeyId": "Access Key ID", "secretKey": "Secret Access Key", "signatureVersion": "V4", "uploadLimit": 1073741824, "downloadLimit": 1073741824, "fileSizeLimit": 104857600, "bytesToKeep": 104857600, "daysToKeep": 31, "pathStyleAccessEnabled": false }' -u admin:admin http://localhost:8087/admin/storage_server
Начинаем установку хранилища:
useradd minio
sudo mkdir -p /opt/minio
sudo chown minio:minio /opt/minio
sudo mkdir -p /var/minio
sudo chown minio:minio /var/minio
cd /opt/minio
wget https://dl.min.io/server/minio/release/linux-amd64/minio
sudo chmod +x minio
Для доступа к серверу хранилища, необходимо задать логин и пароль в переменных среды MINIO_ACCESS_KEY и MINIO_SECRET_KEY, соответственно. Чтобы значения этих переменных устанавливались при старте, занесем их инициализацию в /etc/default.
# nano /etc/default/minio
MINIO_ACCESS_KEY=minioACCESS
MINIO_SECRET_KEY=minioSECRET
MINIO_VOLUMES="/var/minio/"
MINIO_OPTS="--address :9000"
Создаем службу:
# nano /etc/systemd/system/minio.service
[Unit]
Description=MinIO
Documentation=https://docs.min.io
Wants=network-online.target
After=network-online.target
AssertFileIsExecutable=/opt/minio/minio
[Service]
WorkingDirectory=/var/minio
User=minio
Group=minio
EnvironmentFile=-/etc/default/minio
ExecStart=/opt/minio/minio server $MINIO_OPTS $MINIO_VOLUMES
TimeoutStopSec=20
StandardOutput=journal
StandardError=journal
[Install]
WantedBy=multi-user.target
Запускаем:
systemctl daemon-reload
sudo systemctl enable minio.service
sudo systemctl start minio.service
http://IP-адрес-сервера-хранилища:9000
Создайте новое хранилище, например cs-bucket
Логин: значение переменной MINIO_ACCESS_KEY,
Пароль: значение переменной MINIO_SECRET_KEY
Для хранилища укажите, что оно работает в режиме "Read and Write".
На сервере взаимодействия выполните команду, только внимательно подправьте под свою конфигурацию:
curl -Sf -X POST -H 'Content-Type: application/json' \
-d '{
"apiType": "AMAZON",
"storageType": "DEFAULT",
"baseUrl": "http://ИМЯ_СЕРВЕРА_ИЛИ_IP:9000",
"containerUrl": "http://ИМЯ_СЕРВЕРА_ИЛИ_IP:9000/${container_name}",
"containerName": "cs-bucket",
"region": "eu-west-1",
"accessKeyId": "minio",
"minioACCESS": "minioSECRET",
"signatureVersion": "V2",
"uploadLimit": 1073741824,
"downloadLimit": 1073741824,
"fileSizeLimit": 104857600,
"bytesToKeep": 104857600,
"daysToKeep": 31,
"pathStyleAccessEnabled": true
}' \
-u admin:admin http://localhost:8087/admin/storage_server
Если не цепляется, можно попробовать подключить напрямую через базу
sudo -u postgres psql
\c cs_db
INSERT INTO public.storage_server(
id,
type,
base_url,
container_url,
container_name,
region,
access_key_id,
secret_key,
signature_version,
is_deleted,
upload_limit,
download_limit,
file_size_limit,
created_at,
updated_at,
cdn_url,
cdn_key_id,
cdn_secret_key,
state,
cdn_enabled,
path_style_access_enabled,
bytes_to_keep,
days_to_keep,
pricing_url,
api_type,
storage_type
) VALUES (
uuid_generate_v4(),
'AMAZON',
'http://ИМЯ_СЕРВЕРА_ИЛИ_IP:9000',
'http://ИМЯ_СЕРВЕРА_ИЛИ_IP:9000/${container_name}',
'cs-bucket',
'eu-west-1',
'minio',
'youpass',
'V2',
false,
1073741824,
1073741824,
104857600,
CURRENT_TIMESTAMP,
CURRENT_TIMESTAMP,
NULL,
NULL,
NULL,
'ACTIVE',
false,
true,
0,
0,
NULL,
'AMAZON',
'DEFAULT'
);
На этом этапе мы получили полностью работающую систему взаимодействия, где работают звонки, сообщения и вложения.
Тонкую настройку уже сами разбираемся как делать. Как разгрузить звонки комп при звонках, тоже можно посмотреть на ИТС. (гуглить как медиасервера для проведения видеоконференций, применяют в качестве него WebRTC Server «Janus».
Далее, я уже занимаюсь баловством и то что я буду делать, дает мне возможность спрятать за одним портом весь сервер с его хранилищем, чтоб база подключалась только по WSS (веб-сокет с шифрованием) и работала как с базами опубликованными по HTTPS, так и с простыми базами, при этом работающая даже там, где блокируются все порты кроме 80 и 443.
Немного упростим работу с ring, чтоб не писать постоянно весь путь
#открываем на редактирование файл
nano /etc/environment
#пишем в него строчку
export PATH=$PATH:"/opt/1C/1CE/components/1c-enterprise-ring-0.19.5+12-x86_64/"
#применяем
source /etc/environment
Этап 3. Экспериментальная настройка для работы через SSL:
Как упомянул в начале, я хочу в данной системе задействовать NGINX. Я прекрасно понимаю что обеспечить работу по WSS можно и без него, но я не хочу конвертировать сертификат в формат для java и я не хочу открывать более одного порта. Хочу просто домен третьего уровня, который будет работать как надо)
Приступим и начнем с установки NGINX и CertBot (да, да. Я хочу бесплатные сертификаты с автоматическим обновлением):
apt install nginx python3-certbot-nginx
Создаем конфиг нашего "сайта" для того чтоб хранилище было по пути /storage, а в корне наш сервер взаимодейтвия
#nano /etc/nginx/sites-enabled/examlpe.com.conf
server {
listen 80;
server_name examlpe.com;
location /storage/ {
proxy_pass http://localhost:9000/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# Аутентификация MinIO сервера
proxy_set_header Authorization "Basic base64_encoded_access_key:secret_key";
}
location / {
proxy_pass http://localhost:9094/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
#делаю фри серт по классике
certbot --nginx
Переходим к правке сервера, рабочим хост в файле nano /var/cs/cs_instance/config/websocket.yml и указываем localhost. На этом этапе если перезапустить сервер взаимодействия 1С уже можно подключить по WSS, но за пределами сети не будут работать файлы.
Далее надо подцепиться к скулю (я буду юзать туннель и HeidiSQL) и там отредактировать подключение к хранилищу.
Правим в нашей базе данных таблицу public.storage_server, указываем адрес к серверу с полным путем и меняем версию с 2 на 4.
Профит)
Вот у нас и получился сервер взаимодействия с WSS и работающий на одном хостнейме без дополнительных портов.
Дополнил для возможности поставить на debian 11/12
Если что, пишите коммент, поправлю/отвечу)
У вас ошибка, если в конфигурации службы minIO оставить AssertFileIsExecutable=/usr/local/bin/minio вылезет ошибка
Assertion failed on job for minio.service.
Корректный путь такой
AssertFileIsExecutable=/usr/local/minio/minio