Поднимаем сервер 1C 8.x (Ubuntu Server + PostgreSQL)

17
28

Ранее, я уже делал обзор посвящённый установке 1С8 на CentoOS, теперь пришла очередь не менее популярной линукс-оси Ubuntu. На момент написания статьи, стабильной версией убунты является 12.04, ее и будем использовать.

Итак, в данной заметке будем настраивать связку Ubuntu Server x64 + Postgre@Etersoft9 + 1C 8.2.15.301. Не будем вдаваться в подробности установки операционной системы, там все предельно понятно, за исключением разве, что возможных граблей с некорректным отображением русских символов в командных диалогах (если во время установки был выбран русский язык). Но решение имеется. Так же во время установки, надо не забыть отметить чекбокс напротив устанавливать ssh-сервер (если нужен) и samba-server (нужен 1С-у) :)

1) Подготовка: 

Настроем сеть, будем использовать статическую адресацию:

auto eth0
iface eth0 inet static
address 192.168.1.8
netmask 255.255.255.0
broadcast 192.168.1.255
gateway 192.168.1.1
dns-nameservers 192.168.1.4 192.168.1.6

где, auto eth0 — говорит системе, что интерфейс eth0 необходимо включать автоматически при загрузке системы с нижеуказанными параметрами.

iface eth0 inet static — указывает на то, что eth0 использует статический интерфейс. Если используется DHCP-сервер, то пишем  вместо  static — dhcp.

С 12.04 за конфигурацию DNS отвечает программа resolvconf (вместо файла /etc/resolv.conf) поэтому, если не используется DHCP-сервер, DNS-сервера для статических интерфейсов необходимо вносить в /etc/network/interfaces используя параметры  dns-nameservers, dns-search и dns-domain, соответствующие параметрам nameserver, search и domain в resolv.conf.

Рестарт службы:

Обновляемся:

Ставим Midnight Commander (mc)

2. Установка и настройка сервера баз данных PostgreSQL

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

Ставим пакеты необходимые для правильной работы PostgreSQL:

Качаем последнию стабильную версию PostgreSQL отсюда.

Ставим пакеты командой:

После этого в системе появится пользователь postgres, будет создан скрипт /etc/init.d/postgresql для старта и остановки СУБД.

После, даем права на папку pgsql пользователю и группе postgres:

Задаем пароль пользователю postgres:

Редактируем /etc/group, где существующий id группы tape:x:26: меняем на какой-нибудь другой, например 27 :). В итоге, должны быть следующие строки:

postgres:x:26:
tape:x:27:

Стартуем сервис командой, указываем значение переменной LANG. Необходимо для первичного создания базы:

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

SHMMAX — это максимальный размер (в байтах) на сегменте shared memory равный половине всей доступной памяти на сервере.

SHMALL — общее количество разделяемой памяти (в страницах), какое все процессы на сервере могут использовать.

Затем пропишем полученные значения с помощью команды:

Или пропишем в /etc/sysctl.conf вручную. Для того что бы изменения вступили в силу, набираем:

Авторизуемся под пользователем Postgres и назначим пароль внутреннему пользователю PostgreSQL:

Набираем \q что бы выйти из консоли.

Файл  /var/lib/pgsql/data/pg_hba.conf приводим к виду:

#IPv4 local connections:
host        all          postgres          0.0.0.0/0       md5

Главный конфиг /var/lib/pgsql/data/postgresql.conf редактируем в соответствии со следующими данными: Усредненная настройка наиболее важных параметров:

shared_buffers = 1/8 RAM или больше (но не более 1/4)
work_mem = в 1/20 RAM
maintenance_work_mem = в 1/4 RAM
max_fsm_relations = в планируемое кол-во таблиц в базах * 1.5
max_fsm_pages в max_fsm_relations * 2000;
fsync = true
wal_sync_method = fdatasync
commit_delay = от 10 до 100
commit_siblings = от 5 до 10
effective_cache_size = 0.9 от значения cached, которое показывает free
random_page_cost = 2 для быстрых cpu, 4 для медленных
cpu_tuple_cost = 0.001 для быстрых cpu, 0.01 для медленных
cpu_index_tuple_cost = 0.0005 для быстрых cpu, 0.005 для медленных

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

Переходим в каталог с pgtune, выполняем команду:

где,

-i — путь до входного, текущего файла настроек postgresql.conf,

-o — путь до выходного, нового файла настроек postgresql.conf.

В результате выполнения команды получим идентичный исходному файл настроек, за исключением нескольких новых pg_tune-параметров в самом конце файла.

$PGDATA — переменная указывающая на /var/lib/pgsql/data. Если не задана, указать можно в /etc/environment.

Более полную информацию по настройке postgresql.conf смотрим у Etersoft или применительно к 1С на сайте Вечеслава Гилева. Для тех, кто хочет углубится более подробно в процесс изучения PostgreSQL существует замечательный, подробный мануал от Алексея Васильева. :)

Наиболее часто используемые команды Postgresql:

Изменить root-пароль:

Shell-команда

Интерактивный режим psql

Описание

createdb name

CREATE DATABASE name;

Создание новой базы данных

ALTER DATABASE name;

Изменение параметров БД

dropdb

DROP DATABASE name;

Удаление базы данных

createuser

CREATE USER name [ [ WITH ] option [ … ] ]

Создание нового пользователя

ALTER USER name [ [ WITH ] option [ … ] ]

Изменение параметров пользователя

 dropuser

DROP USER [ IF EXISTS ] name [, …]

Удаление пользователя

vacuumdb

VACUUM

Дефрагментация БД

GRANT

Назначение привилегий

REVOKE

Отмена привилегий

3. Установка 1С Предприятие 8

Для правильной работы сервера 1С Предприятие, установим следующие пакеты:

Качаем технологическую платформу 1С8.2 для Linux (Debian/Ubuntu) с сайта .

Установку пакетов необходимо производить в следующем порядке, т.к. существуют зависимости.

Если устанавливать всё сразу по маске, могут возникнуть ошибки.

1) 1c-enterprise82-common_8.2.15-319_amd64.deb // общие компоненты сервера
2) 1c-enterprise82-common-nls_8.2.15-319_amd64.deb // национальные ресурсы для общих компонент
3) 1c-enterprise82-server_8.2.15-319_amd64.deb // сервер 1С:предприятие 8.2 для Linux
4) 1c-enterprise82-server-nls_8.2.15-319_amd64.deb // Национальные ресурсы для сервера 1С
5) 1c-enterprise82-ws_8.2.15-319_amd64.deb // адаптер для публикации Web—сервисов 1С:Предприятия 8 на веб-сервере на основе Apache HTTP Server 2.0 или Apache HTTP Server 2.2;
6) 1c-enterprise82-ws-nls_8.2.15-319_amd64.deb // Национальные ресурсы для компонент веб-сервисов 1с8.2

Добавляем в автозагрузку:

Пользователю usr1cv82 разрешаем писать в /opt/1C и /home/usr1cv82

Перезапускаем сервер. Проверяем корректность старта службы:

Должно высветится:

На файрволе, если используется, для работы сервера 1С должны быть открыты следующие порты: tcp:1540 — агент сервера (ragent) tcp:1541 — главный менеджер кластера (rmngr) tcp:1560-1591 — диапазон сетевых портов для динамического распределения рабочих процессов. (достаточно открыть tcp:1560)

Проверка работоспособности рабочих процессов сервера:

Должны получить примерно такую картинку:

Но, получаем следующее:

Так же просмотреть запущенные процессы можно с помощью команды:

Должны получить примерно следующее:

Но запускается только ragent:

К сожалению танцы с бубном ни к чему не привели, и права выставлены везде корректно и сеть настроена должны образом. Нагуглил, что с 15 релизом у многих похожие проблемы, а у меня как раз  8.2.15-319. А 318 Помнится работал :)  Решил попробовать самый последний на момент написания обзора 8.2.16.362 и о чудо, с первого раза все завелось как надо.

Теперь необходимо  проверить корректность установки компонентов, которые мы установили в самом начале  с помощью проверяющего скрипта:

Если, не получаем не каких сообщений, а в директории /opt/1C/v8.2/x86_64/conf/grcmncfg появился файлик type.xml то значит все ок, в моем случае, скрипт выдает кучу ошибок. В первом сообщение говорится, что невозможно получить доступ к какому-то файлу libc.

Посмотрим, где этот файл на самом деле сидит:

Получаем следующий выхлоп:

Неудивительно что скрипт его не находит, делаем поочередно два симлинка:

После чего, снова запускаем скрипт. Ошибка с «доступом» исчезает, но остается следующая:

В 193 строке содержится следующая запись, которая указывает на опрос переменной $SYSTEM_LIB_PATH, где видимо должны содержаться нужные 1су библиотеки.

[ ! -e $aliasFullName ] && return 1

Посмотрим, что конкретно не может обнаружить скрипт, запускаем:

Получаем:

Как я понял,  SYSTEM_LIB_PATH должен обнаруживать искомые файлы в трех возможных директориях:

/usr/lib
/usr/lib32
/usr/lib64

Так же, необходимо вручную задать  SYSTEM_LIB_PATH в /etc/environment. Например пускай ищет библиотеки только в /usr/lib/

SYSTEM_LIB_PATH="/usr/lib"

Перезапускаем сервер, снова запускаем скрипт, получаем следующее:

/usr/lib/libWand.so
/usr/lib/libfreetype.so
Please install following package: FreeType
/usr/lib/libgsf-1.so
/usr/lib/libglib-2.0.so
Please install following package: libglib
/usr/lib/libodbc.so
Please install following package: UnixODBC

Файлы libWand.so и libgsf-1.so находятся там где нужно. Остальные файлы libfreetype.so, libglib-2.0.so и libodbc.so находятся в /usr/lib/x86_64-linux-gnu. Соответственно снова делаем смлинки:

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

На клиенте, если Windows, заходим в консоль управления 1CV8 Servers (Администрирование серверов 1С Предприятия). Жмем, добавить Центральный сервер 1С:Преприятия 8.2, добавляем по имени. Во вкладке рабочие серверы должна появится запись.  Создаем новую базу, либо прямо с помощью консоли управления, либо в самом клиенте 1С выбираем опцию:

Добавить новую информационную базу.

Запускаем 1С. Тест Гилева выдает 13,05 балов.

По поводу HASP-ключей, если до 12 пользователей то нужен только сетевой ключ с маркировкой типа NETXX ORGL8, где XX — количество клиентских лицензий. Если более 12 пользователей, но необходим так же локальный ключ для сервера. Фиолетовый ключ HASP HL с маркировкой типа ENSR8 для 32x-битного сервера или зеленый ключ HASP HL Max маркировкой ENS8SA для 64-битного. Ключ HASP HL Max поддерживает так же 32-битный сервер.

Для нормальной работы HASP-ключей необходимо установить два пакета включающих драйвер ключа aksusbd и менеджер лицензий hasplm. Имеет смысл ставить модифицированные варианты драйверов от Entersoft. Для нормальной работы haspd, требуются поддержка 32-битных программ.

Поэтому добавляем ее установкой пакета ia32-libs.

Теперь сам HASP и менеджер лицензий:

Вставляем ключ, перегружаем сервер. Работоспособность ключей проверяем командой:

Должны быть запущенны: aksusbd, winehasp, hasplm, hasplmd.

4. Публикация на веб-сервере

Ставим apache:

Редактируем /etc/apache2/apache2.conf , где задаем директиву ServerName указывающую на имя сервера.

В противном случае при запуске apach’a получим сообщение:

В корневом каталоге сайта, создаем директорию base, где base — имя базы к которой мы будем предоставлять доступ.

Теперь нам необходимо, запустить специальный скрипт для публикации базы на веб-сервере:

Переходим в /opt/1C/v8.2/x86_64/ Запускаем скрипт со следующими параметрами:

Проверяем корректность внесенных изменений. В  /etc/apache2/httpd.conf  должны быть следующие строки:

LoadModule _1cws_module "/opt/1C/v8.2/i386/wsap22.so"

# 1c publication
Alias "base" "/var/www/base/"
<Directory "/var/www/base/">
AllowOverride None
Options None
Order allow,deny
Allow from all
SetHandler 1c-application
ManagedApplicationDescriptor "/var/www/base/default.vrd"

В /var/www/base/ так же должен появится файл default.vrd две последние строчки которого должны выглядеть примерно так:

base="/base"
ib="Srvr="ubuntus12";Ref="base";

Выдаем права на директорию, перезапускаем Apache:

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

http://ubuntus12/base

И получаем следующее сообщение:

Оно, и понятно, без специального сетевого ключа, работать не будет :)

5. Резервное копирование и восстановление:

Даем права пользователю postgres на тут папку куда будем выгружать backup.

В /mnt/net у меня смонтирована виндовая шара, с помощью команды:

Отмонтировать, принудительно закрыв все подключения, если нужно:

Резервное копирование (Backup):

где:

-U (пользователь)
-F (формат извлекаемого файла)
с (custom — внутренний формат сжатия pg_dump, возможны так же варианты tar и plain text)
-Z (установить режим сжатия)
0 — 9 (0 — без сжатия, 9 — максимальный режим)
-f (извлекать в этот файл)

Если выгружаем на виндовую шару, необходимо полный доступ для Users.

Востановление (только из под пользователя postgres): В новую базу:

где, template0 — шаблон означающий, что это абсолютно пустая база

Например:

С удалением базы и восстановлением ее из дампа:

где, С — создать базу

Например:

Здесь -d postgres — указание на любую базу данных существующую в кластере база данных. pg_restore использует ее только чтобы выполнить команду CREATE DATABASE для mydb (mybase)

Скрипт автобэкапа:

В .gz

#!/bin/sh
BKPDIR="/mnt/net"
DATEYMD=`date "+%Y-%m-%d-%a"` // а - указывает на день недели в формате Пн, Вт, Ср...пишет по русски?
mkdir -p ${BKPDIR}/PostgreSQL 2>/dev/null // - можно не указывать, если предварительно создать директорию и выставить права.
(pg_dump mydb <"${BKPDIR}/PostgreSQL/${DATEYMD}-mydb-PostgreSQL.gz"
EOF

В .dump

#!/bin/sh
BKPDIR="/mnt/net/PostgreSQL"
DATEYMD=`date "+%Y-%m-%d"`
pg_dump -Fc -Z9 mydb -f "${BKPDIR}/${DATEYMD}-mydb-PostgreSQL.dump"

Запись в crontab (из под пользователя postgres):
su postgres
crontab -e //добавить задание
crontab -l //просмотр заданий
crontab -r //удалить задание

# запустить в 18:50 минут

50 18 * * * sh /home/scripts/backup.sh

# запускать каждые 15 минут

*/15 * * * * sh /home/scripts/backup.sh

17 КОММЕНТАРИИ

  1. Пытаюсь опубликовать базу 1С на вебсервере Apache
    Сделал:

    ./webinst -apache22 -wsdir test -dir ‘/var/www/base’ -connStr ‘Srvr=»192.168.1.107″;Ref=»test»;’ -confPath /etc/apache2/httpd.conf

    chown -R www-data:www-data /var/www/base
    Изменил порт на 8012, пробросил его в модеме.
    Ввожу в браузере http://85.175.218.107/test:8012 Получаю

    Ошибка 403: Доступ запрещён!
    Что я делаю не так?

    • хм, ну для начала введенное в строке адреса имеет не верный синтаксис, поскольку номер порта всегда идет после адреса, а затем уже внутренняя ссылка (имя базы), т.е. правильная запись, должна быть http://85.175.218.107:8012/test. Локально тоже не пускает, например http://192.168.0.5/test ? или просто http://192.168.0.5 должен показать работающий apache!?

  2. И правда, ве дело было в неправильном написании адреса. Спасибо
    Не подскажите как настроить программных ключей веб серверу? Может быть есть статейка? В офисе пользуемся эмулятором но ключи есть, жаль на андройд не поставишь эмулятор

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

  4. Использовал большую часть этого гайда для поднятия связки CentOS 7 + 1C 8.3.7.1776 x32 Server + PostgreSQL-9.4.2-1.1C
    Кое- что не подходило, пользовался другими источниками.
    В случае если выскакивал ошибка об отсутствии libWand.so после суточных мучений, помогла просто команда yum install -y ImageMagick.i686

    Автору большое спасибо за руководство. Реально много отсюда почерпнул.

  5. Уважаемый автор, спасибо огромное за Вашу статью!
    Смог запустить 1С 8.3.17.1901 на Ubuntu 12.04
    Правда не без траблов, а именно:
    взяв вот этот код «./webinst -apache22 -wsdir base -dir ‘/var/www/base’ -connStr ‘Srvr=»ubuntus12″;Ref=»base»;’ -confPath /etc/apache2/httpd.conf» пытался методом администрирования 1С добавить БД, но с другим именем, следовательно 1С тупо не находила БД с ошибкой «Информационная база не найдена» (ну или что-то в этом духе).
    После того как создал базу через 1С администрирование с именем «base» все завелось.
    Теперь есть вопрос: как добавить несколько БД 1С? Тупо насоздавать в апаче каталогов и соответственно пользоваться этим же webinst, только с подправленными путями и названиями БД? или как?
    Буду весьма благодарен Вам за ответ!

    • Приветствую, спасибо за отзыв. Корректнее все таки сначала создавать базу в консоли 1С администрирование (если речь идет о клиент-серверном варианте), а потом уже добавлять в самой программе 1C. Соответственно создаем нужное количество баз таким способом, как можно автоматизировать этот процесс не в курсе, но наверно нужно копать в сторону экспорта/импорта нужных веток реестра, а вот что касаемо публикации множества баз на веб-сервере, то да, создавать несколько каталогов с нужными названиями в /var/www/ и запуском скрипта ./webinst для каждой базы. Насколько я помню это документированный способ от 1С. Можно при помощи bash-скрипта автоматизировать это дело, если у вас огромное количество баз.

      • Еще раз спасибо за Ваш комментарий.
        Возник следующий вопрос, если конечно есть у Вас возможность ответить на него.
        Была БД 8.2 файловая
        Выгрузил ее в *.dt
        Загрузил через конфигуратор обратно но уже на сервер в вэб-версию 8.3, про которую я описывал.
        Захожу на веб, а там пусто. Ну точнее голый рабочий стол тонкого клиента. Подцепился тонким клиентом к БД на сервере, то же самое. Захожу толстым клиентом — все ок, БД рабочая, но естественно как 8.2
        Можете подсказать в чем дело? И как это можно вылечить, если конечно можно?
        Заранее благодарен за ответ!

        • Т.е. я правильно понял через браузер вам так и не удалось подцепится к базе и поработать в ней?

          • Как раз база подцепилась, здесь все ок, но работать не могу, т.к. вот что в итоге (см. скриншот)

            подцепляюсь толстым клиентом на сервер, все ок — могу работать, но как в базе версии 8,2, а я ставил 8,3

          • Я вот с ваших слов, не могу понять в чем по вашему разница должна быть между базой 8.2 и 8.3 ? Меняется только платформа, база остается. Версию так же можно задать в окошке программы (8.2 или 8.3). Скриншот надо на хостинг выкладывать какой-нибудь сначала и потом ссылку отправлять. Или можете мне скинуть на почту admin@sanotes.ru

  6. В общем если через веб, то только как тонкий клиент и на рабочем столе 1с только 2 кнопки: «Рабочий стол» и «Интернет поддержка пользователей»

  7. вот что выяснил: если делаешь БД в 8.3, то все видно, все работает. Если же делаешь базу в 8.2, то фига там — только эти две кнопки

  8. Спасибо за статью, очень подробно. Воспользовался вашим методом публикации базы.

  9. Качаем последнию стабильную версию PostgreSQL отсюда.

    Ставим пакеты командой:

    Немного не понял новичек , качаем зачем , а поставить sudo apt-install PostgreSQL нельзя ?
    просто я так сделал дальше ошибка:
    [19:09] [31-131-23-30 ~] # dpkg -i *.deb
    dpkg: error processing archive *.deb (—install):
    cannot access archive: No such file or directory
    Errors were encountered while processing:
    *.deb
    )))))

    • Немного не понял новичек , качаем зачем , а поставить sudo apt-install PostgreSQL нельзя ? 

      Потому что мы ставим специальным образом профиксинную версию PostgreeSQL от Etersoft а не просто PostgreeSQL который к слову работать нормально не будет или не будет работать ваще с 1С. Не знаю как сейчас, но во времена Ubuntu 12.04 это было так.

      просто я так сделал дальше ошибка:
      [19:09] [31-131-23-30 ~] # dpkg -i *.deb
      dpkg: error processing archive *.deb (--install):
      cannot access archive: No such file or directory
      Errors were encountered while processing:
      *.deb

      Запись «dpkg -i *.deb» означает что можно установить, сразу все пакеты, но только если они скачаны и находятся в одной директории. Т.е. сначала, закачиваем все пакеты по ссылке, например при помощи ‘wget’

      wget http://updates.etersoft.ru/pub/Etersoft/Postgres%40Etersoft/stable/Ubuntu/12.04/postgre-etersoft9.2_9.2.14-eter3ubuntu_i386.deb
      wget http://updates.etersoft.ru/pub/Etersoft/Postgres%40Etersoft/stable/Ubuntu/12.04/postgre-etersoft9.2-contrib_9.2.14-eter3ubuntu_i386.deb
      ....
      wget http://updates.etersoft.ru/pub/Etersoft/Postgres%40Etersoft/stable/Ubuntu/12.04/postgre-etersoft9.2_9.2.14-eter3ubuntu_i386.deb

      Затем последовательно устанавливаем каждый пакет:

      dpkg -i postgre-etersoft9.2_9.2.14-eter3ubuntu_i386.deb

      либо все сразу, по маске, что проще и быстрее:

      dpkg -i *.deb

Оставьте комментарий

Войти с помощью: 
Please enter your comment!
Please enter your name here