Приветствую, коллеги!

Я занимаюсь разработкой 1С, поэтому, регулярно, на выходных исcледую различные варианты развёртывания серверов 1С под разработку (различные версии или комбинации)

В этот раз решил провести эксперимент с Raspberry PI 5. К этому времени у меня был развернут на ней сервер хранилищ данных для нескольких версий 1С, опубликованный через apache2 и база разработки файловая, опубликованная через apache2.

Решил добавить клиент-серверную архитектуру для доступа с рабочего места для импорта проекта в EDT. Для этого развернуть сервер 1С 8.3.24.1548 и сервер PostgresPro-std-16.

Описание процесса ниже

Установка Postgres* на ubuntu 22.04 ARM64

Конфигурация платформы: Архитектура ARM64, BCM2712Cortex-A76, 2,4 ГГц * 4 ядра, LPDDR4X-4267 SDRAM 8GB, графика VideoCore VII, 800 МГцOpenGL ES 3.1, Vulkan 1; установлена SSD Class 10 64Gb + USB3 SSD Netac 256 (560 чтение, 530 запись).

Для установки в тестовой среде на базе Proxmox 8 для Raspberry Pi создал контейнер Ubuntu 22.04, размещаю виртуальный диск на диске USB-SSD (в моей системе Proxmox он примонтирован /opt и настроен как хранилище дисков виртуальных машин и дисков контейнеров). Так как в контейнере не установлен OpenSSH сервер, дополнительно ставлю все необходимое, используя консоль браузера к контейнеру Proxmox.

apt update && apt upgrade -y
apt install -y wget curl mc openssh-server
systemctl enable --now sshd
reboot

Копирую инструкции по установке PostgresPro-Std-16 с сайта производителя для архитектуры aarch64(arm64), предварительно войдя в свой аккаунт. Приводить их тут не буду, однако упомяну, что перед началом установки необходимо указать локаль ru_RU.UTF8, иначе 1С не сможет создать базу в postgres:

dpkg-reconfigure locales

В мастере выбираем необходимые локали чекбоксом, обычно это en_EN.UTF8 и ru_RU.UTF8, остальные локали можно отключать. Дефолтной всегда ставлю ru_RU.UTF8.

Создание базы данных PostgresPro для 1С

После установки и настройки автозапуска рекомендую создать базу не по дефолтному пути в /var/lib/pgpro, а на отдельном виртуальном диске, который будет удобно бекапить, например. Я делаю /opt дополнительной точкой монтирования, далее исправляю файл /etc/defaults/postgrespro-std-16 с единственной строчкой "PGDATA=/opt/pgdata-16". Внимание, каталог "/opt/pgdata-16" не должен к моменту создания существовать, он будет создан и будет иметь права postgres:postgres на запись, чтение, запуск. Создаю базу командой ниже:

/opt/pgpro/std-16/bin/pg-setup initdb --tune=1c

Обычно все проходит без ошибок. Если ошибки есть - внимательно читаю, исправляю.

Так как в контейнере ubuntu 22.04 нет пользователя postgres, а есть только root, задаю пароль пользователя postgres следующим образом:

  1. Перехожу в каталог базы данных, в моем примере это "/opt/pgdata-16"

  2. редактирую файл "/opt/pgdata-16/pg_hba.conf" таким образом:

Замена: 
local   all             all                                     peer
# IPv4 local connections:
host    all             all             127.0.0.1/32            md5
# IPv6 local connections:
host    all             all             ::1/128                 md5
#
На 
local   all             all                                     trust
# IPv4 local connections:
host    all             all             127.0.0.1/32            trust
# IPv6 local connections:
host    all             all             ::1/128                 trust
#
systemctl restart postgrespro-std-16
  1. Вхожу от имени postgres

psql -U postgres -w -h 127.0.0.1

После чего могу задать пароль пользователя постгрес командой:

ALTER USER 'postgres' WITH PASSWORD 'StrongPass123-$';

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

  1. Возвращаю "/opt/pgdata-16/pg_hba.conf" в исходное состояние

# TYPE  DATABASE        USER            ADDRESS                 METHOD

# "local" is for Unix domain socket connections only
local   all             all                                     peer
# IPv4 local connections:
host    all             all             127.0.0.1/32            md5
# IPv6 local connections:
host    all             all             ::1/128                 md5
# Allow replication connections from localhost, by a user with the
# replication privilege.
local   replication     all                                     peer
host    replication     all             127.0.0.1/32            md5
host    replication     all             ::1/128                 md5
host            all             all             0.0.0.0/0       md5

Готово, можно пользоваться

Идея появилась следующая - взять пару таких Raspberry и развернуть на одном Сервер Postgres, на другом сервер 1С с веб-публикациями и проверить такую конфигурацию на боевой базе УТ11.5, нагрузить задачами. По моим прикидкам на 35 человек должно заработать.

Скрытый текст

Установка 1С-сервера пошагово:

  1. Скачиваем и размещаем в другом аналогичном описанному выше контейнере, с обновленными repo и установленным ssh - сервером дистрибутив 1С нужного релиза архитектуры ARM64 для DEB-based (ubuntu, debian) операционных систем. Если планируется веб-публикация, то необходимо установить клиента 1С (не тонкого, а обычного)

  2. Выбираем все дистрибутивы *.deb из архива, в которых нет nsl в наименовании и копируем их в отдельный каталог, у меня /opt/dst/8.3.24.1548.installdir

Если в каталоге есть файл: "v8-install-deps.sh" запускаем его на выполнение:
/bin/bash /opt/dst/8.3.24.1548.installdir/v8-install-deps.sh
apt install /opt/dst/8.3.24.1548.installdir/*.deb
  1. Удаляем файл "libstdc++.so.6" в каталоге установленного 1С, затем подкидываем туда линк на файл системы:

rm /opt/1cv8/arm64/8.3.24.1548/libstdc++.so.6
mklink /usr/lib/aarch64-linux-gnu/libstdc++.so.6.0.30 
может быть изменена версия в следующих релизах ОС, поэтому ищем файл "libstdc++.so.6" в каталоге "/usr/lib/aarch64-linux-gnu" и смотрим на что ссылается
  1. Линкуем службы 1С в systemctl и включаем автозапуск

systemctl link /opt/1cv8/arm64/8.3.24.1548/srv1cv8-8.3.24.1548@.service
systemctl link /opt/1cv8/arm64/8.3.24.1548/ras-8.3.24.1548.service
ВИМАНИЕ, тут запускается дефолтный сервер 1С а не @.service. Будьте внимательны
systemctl enable --now srv1cv8-8.3.24.1548@default ras-8.3.24.1548.service
reboot
  1. Если планируется публиковать базы данных поставим apache2 + xrdp (для удобства публикации)

apt install -y xrdp xfce4 apache2
systemctl enable --now xrdp 
(возможно,если при подключеии RDP выдает черный экран, придется добавить пользователя xrdp в группу ssl-cert)
adduser xrdp ssl-cert

Публикация баз данных в этом случае будет происходить из RDP-сеанса сервера 1С от пользователя root с использованием клиента 1С и перезапуском apache2 после публикации. Каталоги публикации должны иметь права доступа www-data:www-data 0766

В результате, после загрузки, сервер 1С работает и существует возможность им управлять

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


  1. VenbergV
    09.09.2024 01:17

    Хотелось бы услышать от вас уточнения по некоторым моментам:
    1. Не совсем понял про связь xrdp, xfce4 и публикацию баз. Хотелось бы чуть подробнее. Т.к. всегда считал достаточным apache2. И дальше тонким клиентом, или браузером мы входим в базу.
    2. libstdc++.so.6 вроде бы достаточно только удалить. Т.к. она есть в системных библиотеках. И она же нужна только для локального запуска 1С клиента на Linux. А вы вроде бы про сервер 1С рассказываете?
    3. Использование .run установщика разве не более правильно для последних версий 1С? Он большинство зависимостей сам разрешает и доставляет необходимое.
    4. Хотелось бы услышать о полученных результатах на RP5. Если ARM не сама цель, то пара NUC10 под proxmox могут оказаться существенно производительнее, при схожем бюджете.
    P.S. Спасибо за ваш труд и что делитесь результатами.


    1. Bessome Автор
      09.09.2024 01:17
      +1

      1. Рдп с клиентом 1с в графическом режиме. Запускаем конфигуратор и публикуем. В прочее время в контейнере иксы не запущены и на производительность не влияют

      2. Можно и так, просто удалить.

      3. Релиз 8.3.24.1548 не содержит run установщика для arm

      4. Цель про arm


      1. HomeMan
        09.09.2024 01:17

        Для пункта 1. ни какой графический конфигуратор не нужен (ни Вин, ни Лин).

        Все делается из ком.строки, включая раздачу ключей сервером и регламентные задания.


  1. Denis_Andreevich
    09.09.2024 01:17

    Мне тоже хотелось бы прочитать про некое решение проблемы, которая обычным путём работает, а на ARMах даёт какие-нибудь глюки. Потому что в моих экспериментах с OrangePi PC и заканчивая PC 4 не было ничего супер необычного, кроме формфактора и потребляемого электричества. Всё, что можно установить из репозитория или имло сборку armf было запущено и нормально эксплуатировалось. Единственный вывод, который я для себя сделал, нужно покупать дорогую sd карту иначе просадка чтений записи видна невооружённым взглядом.


    1. Bessome Автор
      09.09.2024 01:17
      +2

      Решаю проблему вечно включенного компа (читай гудящего) с публикацией веб-баз и хранилища 1с

      Описал установку именно в среде ARM64 релиза платформы 1С, в котором необходимо убрать файл из развернутого дистрибутива чтобы запустить релиз
      Описал задачу установки суперадмину postgres пароля без наличия пользователя postgres linux (su postgres && psql обычно открывают командную строку без ввода данных) в контейнере.


  1. Testman2023
    09.09.2024 01:17
    +2

    установлена SSD Class 10 64Gb + USB3 SSD Netac 256
    взять пару таких Raspberry и развернуть на одном Сервер Postgres, на другом сервер 1С с веб-публикациями

    https://www.raspberrypi.com/products/raspberry-pi-5/
    "SSD Class 10 64Gb" - видимо microSD card slot(support for high-speed SDR104 mode). Сколько проживет microSD с Proxmox ve или с Postgres? Ну и скорость SDR104 mode - 104 Мб/с
    Почему не поставить M.2 Hat+ - плату для подключения NVMe-накопителей? Разных модификаций несколько штук, даже на 2 диска(Raspberry Pi 5 PCIe to 2CH M.2 NVMe SSD Adapter Board HAT (B) Pi5-PCIe-2280-2242-2230 for PI5)
    NVMe SSD boot with the Raspberry Pi 5
    https://wiki.geekworm.com/NVMe_SSD_boot_with_the_Raspberry_Pi_5
    Using the M.2 HAT+ with Raspberry Pi 5
    https://www.raspberrypi.com/news/using-m-2-hat-with-raspberry-pi-5/


    1. Bessome Автор
      09.09.2024 01:17

      Да, в планах есть. Вопрос не срочный, скорее финансовый. Идея - взять еще + 1 малинку и сделать кластер 1с + postgres на usb внешних дисках 2000+ под проекты.

      Пока производительность для личной разработки вполне устраивает
      Естественно Proxmox на такой конфигурации уже не будет.


  1. Ulrih
    09.09.2024 01:17

    На выходных надо отдыхать а то выгорание не дремлет


    1. Bessome Автор
      09.09.2024 01:17

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


      1. Ulrih
        09.09.2024 01:17

        Разом сломалась вся сантехника? Что за отстой ты закупаешь?


        1. Bessome Автор
          09.09.2024 01:17

          Дом 1960-х годов постройки с технологической водой.


  1. Dynasaur
    09.09.2024 01:17

    Напомнило статьи про запуск Дума на очередной кофеварке :-) А вообще, наверное, пора привыкать, что одноплатники стали вполне себе альтернативой ПК.


    1. Bessome Автор
      09.09.2024 01:17

      Энергоэффективность + небольшой размер. В условиях рабочего кабинета можно в 1 корпус запихать целую кучу малинок и свитч. Запитать от БП на 350-400 ватт.
      В условиях микро-организации организовать выделенный сервер на паре или более (если кластеризация) малинок.
      А еще малинка и Эверест на одной архитектуре работают, а в планах приобретение решений Эверест у меня нет


      1. Advisers
        09.09.2024 01:17

        Интересный опыт, побольше бы таких, тренд на оптимизацию правильный.


        1. Bessome Автор
          09.09.2024 01:17

          Спасибо!


  1. VenbergV
    09.09.2024 01:17

    По мотивам вашей статьи.
    Если устанавливать чистый сервер 1С версии платформы 8.3.25.1374 на Ubuntu Server 24.04.1, то удаление libstdc++.so.6 теперь крайне обязательно. Иначе печатать из тонкого клиента на принтеры Kyocera более одной копии документа превратиться в ад! Принтер печатает произвольное количество копий.


    1. Bessome Автор
      09.09.2024 01:17

      Принято, но странно. Не ловил такого на продакшен, хотя сервера обновляются каждую субботу

      Не сталкивались с тем, что на веб-клиенте windows 11 отображаются некорректно формы при установленных шрифтах TTF и прочих зависимостях клиента Linux+apache2?


      1. VenbergV
        09.09.2024 01:17
        +1

        Пока нет. Может шрифты побились при установке? Один два файла шрифтов качались через раз. Ловил эту проблему в 2022 году.
        Я в ansible их насильно переставляю, через shell, после установки всех пакетов и настройки сервисов.