1C 8.2 + PostgreSQL + CentOS 6.1

Имеем фаршированный сервер HP DL380G6 с установленным на нем гипервизором VMware ESXi 4.1
Будем ставить 64 битный сервер 1С версии 8.2.15-289 + PostgreSQL 9.0.4 от Etersoft на x86_64 CentOS 6.1 (сервер 1C 8.2.14.540 не заработал без костылей. Постоянно отваливался ragent и в ТЖ писал всяческую чушь про Address already in use…)
Качаем http://mirror.yandex.ru/centos/6.1/isos/x86_64/CentOS-6.1-x86_64-minimal.iso
Создаем виртуальную машину в гипервизоре и ставим.
Затем:

yum update

ставим все жизненно необходимое:

yum install crontabs tmpwatch sudo wget file

Подправим файл /etc/hosts (Клиент 1С и сам сервер исключительно общается только по именам) оставим там только строки:

127.0.0.1   localhost
192.168.1.1 buxsrv

отключаем файервол, дабы не мешался пока:

chkconfig iptables off
service iptables stop
chkconfig ip6tables off
service ip6tables stop

отключаем SELinux (1C предыдущих версий не работал с ним, да и нам на сервере в локальной сети он особо не нужен)
правим файл /etc/sysconfig/selinux

SELINUX=disabled

Теперь добавляем необходимые репозитории и ставим все, что потребуется серверу 1С:

rpm -ivh http://dl.atrpms.net/el6.1-x86_64/atrpms/stable/atrpms-repo-6-4.el6.x86_64.rpm
rpm -ivh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
rpm -ivh http://elders.princeton.edu/data/puias/unsupported/5/x86_64/msttcorefonts-2.0-1.noarch.rpm
yum install xorg-x11-xfs chkfontpath ttf2pt1 unixODBC
yum install ImageMagick

По зависимостям на сервер свалится куча всякого. Возможно, возникнет ошибка вида:
/usr/bin/update-gdk-pixbuf-loaders: line 54: /etc/gtk-2.0/x86_64-unknown-linux-gnu/gdk-pixbuf.loaders: No such file or directory
если так, то делаем небольшой изврат:

cd /etc/gtk-2.0/
ln -s x86_64-redhat-linux-gnu x86_64-unknown-linux-gnu
yum reinstall gtk2
rm x86_64-unknown-linux-gnu

Теперь все готово для установки постгреса и сервера 1С.
перезагружаемся и скачиваем все rpm кроме postgre-etersoft9.0-seltaaddon-9.0.4-eter8rhel.x86_64.rpm отсюда:
http://updates.etersoft.ru/pub/Etersoft/Postgres@Etersoft/stable/x86_64/CentOS/6/
далее напускаем на скаченное:

yum localinstall --nogpgcheck *.rpm

инициализируем базу:

su postgres
initdb -D /var/lib/pgsql/data --locale=ru_RU.UTF-8
exit

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

chkconfig postgresql on
service postgresql start

Задаем пароль для пользователя постгреса:

su postgres
psql postgres
postgres=# alter user postgres with password 'YOUR_PASSWORD';
ALTER ROLE
postgres=# \q
exit

с базой будем соединяться локально, поэтому подправим файл /var/lib/pgsql/data/pg_hba.conf
раскомментируем строку

host    all         all         127.0.0.1/32          trust

и заменим trust на md5

host    all         all         127.0.0.1/32          md5

Далее правим /var/lib/pgsql/data/postgresql.conf

listen_addresses = '127.0.0.1' # будем конектиться только локально
effective_cache_size = 16384MB # выставим в половину от установленной на сервер памяти (в моем случае под виртуалку выделил 32 гига)
fsync = on # оставил как есть, т.к. у меня SCSI контроллер с включенным write-back. fsync = off дает прирост в 1 попугай в тесте Гилёва, поэтому посчитал надежность важнее.

остальные настройки требуют детального изучения и ставяться исходя из вашего железа и базы 1С.
Все, постгрес настроен, переходим к установке сервера 1С:
качаем технологическую платформу 8.2 http://dl01.v8.1c.ru/get/Info/Platform/8_2_15_289/rpm64.tar.gz (нужно авторизоваться на сайте http://users.v8.1c.ru)
распаковываем архив и ставим

yum --nogpgcheck localinstall *.rpm

затем запускаем скрипт config_server

cd /opt/1C/v8.2/x86_64/utils/
./config_server

если выдаст ls: cannot access /lib/libc-*.so: No such file or directory
то поставим 32 битные либы glibc

yum install glibc.i686

также может ругнуться на отсутствие libglib (потому что ищет его в /usr/lib64, а он находится в /lib64)
делаем символьную ссылку

ln -s /lib64/libglib-2.0.so.0.2200.5 /usr/lib64/libglib-2.0.so

запускаем скрипт еще раз и если он призадумался и ничего не выдал, то все ОК!
результатом должен быть файл type.xml созданный в /opt/1C/v8.2/x86_64/conf/grcmncfg
Т.к. клиент 1С-ки соеденяется с сервером только по имени, то ставим самбу (можно как вариант прописать соответствие IP к имени на клиентских машинах в файл hosts)

yum install samba

Правим /etc/samba/smb.conf под свою сеть
Ставим на автостарт демон nmbd (если нужно только NETBIOS имя)

chkconfig nmb on

На этом сервер готов (1С-ка покупалась с софтварными лицензиями, тем самым избежал увлекательного приключения с HASP ключами), переходим к клиентским машинам.
Ставим клиент с компонентом «Администрирование сервера 1С:Предприятия»
Запускаем «Администрирование серверов 1С Предприятия» Кликаем правой кнопкой по «Central 1C:Enterprise 8.2 servers» и создаем «Центральный сервер 1С:Предприятия 8.2»
Запускаем «1C Предприятие» и создаем базу:
В диалоге «Добавление информационной базы/группы» выбираем «Тип СУБД:» PostgreSQL
в поле «Сервер баз данных» прописываем 127.0.0.1
пользователь: postgres и соответственно ваш пароль, который задавали после инициализации базы постгреса.

На последок можно задействовать простенькие правила файервола:

#!/bin/bash

# Очищаем предыдущие записи
iptables -F

# Установка политик по умолчанию
iptables -P INPUT DROP
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT

# Разрешаем локальный интерфейс
iptables -A INPUT -i lo -j ACCEPT

# Закрываемся от кривого icmp
iptables -I INPUT -p icmp -f -j DROP

# REL, ESTB allow
iptables -A INPUT -p tcp -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -p udp -m state --state RELATED,ESTABLISHED -j ACCEPT

# Защита сервера SSH от брутфорса
iptables -A INPUT -p tcp --syn --dport 22 -m recent --name root --set
iptables -A INPUT -p tcp --syn --dport 22 -m recent --name root --update --seconds 30 --hitcount 3 -j DROP

# Разрешаем рабочие порты
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -p udp --dport 137 -j ACCEPT
iptables -A INPUT -p tcp --dport 1540 -j ACCEPT
iptables -A INPUT -p tcp --dport 1541 -j ACCEPT
iptables -A INPUT -m multiport -p tcp --dports 1560:1591 -j ACCEPT

# Разрешение главных типов протокола ICMP
iptables -A INPUT -p icmp --icmp-type 0 -j ACCEPT
iptables -A INPUT -p icmp --icmp-type 3 -j ACCEPT
iptables -A INPUT -p icmp --icmp-type 8 -j ACCEPT
iptables -A INPUT -p icmp --icmp-type 11 -j ACCEPT
iptables -A INPUT -p icmp --icmp-type 12 -j ACCEPT

ну и кинуть в /etc/cron.daily скрипт бэкапа/оптимизации базы.
Я бэкаплю базу на виндовую шару (для монтирования шары нужно поставить cifs-utils командой yum install cifs-utils).

#!/bin/sh

OLDDAYS=60
DATE=`date +%F`
BACKUPDIR=/mnt/tmp.grnt/base_main/daily
BACKUPNAME=$BACKUPDIR/main.psql.$DATE
PGSQLOG=/home/pgsql/data/pg_log

T1V=`date +%H:%M:%S`
vacuumdb -d main -z -f -q -U postgres
T2V=`date +%H:%M:%S`
/usr/bin/logger -t PGSQL "Vacuum MAIN base is DONE. Start at $T1V and stop at $T2V"

mount -t cifs -o user=garupd,pass=your_password "//192.168.1.50/backups41C" /mnt/tmp.grnt
if [ -d /mnt/tmp.grnt/base_main/daily ] ; then
        T1D=`date +%H:%M:%S`
        pg_dump -U postgres -Fc -Z9 -c -f $BACKUPNAME main
        T2D=`date +%H:%M:%S`
        /usr/bin/logger -t PGSQL "Dumping MAIN base is DONE. Start at $T1D and stop at $T2D"
        # Deleting old backups and postgres logs
        find $BACKUPDIR $PGSQLOG -mtime +$OLDDAYS -delete
        umount /mnt/tmp.grnt
    else
        /usr/bin/logger -t PGSQL "Backup base MAIN FAILED!!!"
fi

## RESTORE COMMAND ##
##
## pg_restore -U postgres -c -d DATABASE_NAME -Fc DATABASE_BACKUP_FILE
##
#####################

P.S. На моем сервере тест Гилёва выдает в среднем 30 попугаев. Помимо 1С 8.2 на сервере в вируалках крутиться терминальный Windows 2003 R2 с 1С 7.7 с 20 активными пользователями и два web сервера под Ubuntu с CMS-ками.

39 Comments on "1C 8.2 + PostgreSQL + CentOS 6.1"

  1. К сожалению на данный момент ваша инструкция не работоспообна. После такой настройки скрипт ./config_server выдает некоторое количество внутренних ошибок. Запустить типовую UT 11.0.8.13 на таком сервере не возможно. Происходит «Ошибка инициализации графической подсистеамы.»

  2. Вот такая вот прелесть:
    [root@1CSERVER utils]# ./config_server
    ./config_server: line 148: file: command not found
    ./config_server: line 149: [: =: unary operator expected
    ./config_server: line 148: file: command not found
    ./config_server: line 149: [: =: unary operator expected
    ./config_server: line 193: [: too many arguments
    ./config_server: line 193: [: too many arguments
    ./config_server: line 193: [: too many arguments
    ./config_server: line 193: [: too many arguments
    ./config_server: line 193: [: too many arguments

  3. Инструкцию подправил. вышеуказанные ошибки сыплются из-за отсутствия в минимальной установке CentOS пакета file
    просто установите его и все будет ОК.
    yum install file

  4. В момент запуска скрипта config_server, выдает Ca not detect font directory, please specify it!
    Файл type.xml не создается! libglib-2.0.so — такого файла вообще нет в системе, хотя glib x86 и x64 установлен!?

    • Проверьте есть ли в системе установленный пакет msttcorefonts-2.0-1.noarch
      Можно еще указать скрипту явный путь к шрифтам:
      ./config_server /usr/share/fonts/msttcorefonts

      в статье написано, что нужно сделать символьную ссылку
      ln -s /lib64/libglib-2.0.so.0.2200.5 /usr/lib64/libglib-2.0.so
      и будет вам libglib-2.0.so

  5. Очень хотелось бы увидеть ваш postgres.conf

    • собрал по вашей инструкции, железо подобное
      по тесту гилева больше 12 очков набрать не получается… хотя железо явно простаивает. Может направление укажите куда копать? 🙂

    • Желательно иметь шуструю дисковую подсистему ну и обязательно поиграться с параметрами postgresql.conf
      Мой postgresql.conf
      Мое железо:
      Proliant DL380R06 Product ID: 470065-082
      CPU E5520 (2×2.26 GHz)
      Memory DDR3-1333 64Gb (8x8Gb)
      RAID P410i wBBWC 512Mb RAID10 8x146Gb SAS 10k HDD SFF
      Гипервизор VMware ESXi 4.1.0 348481
      Под виртуалку с 1С выделено 32Gb оперативы.
      Клиенты подключены по гигабитной сети (Используются две интегрированные сетевые объедененные для балансировки нагрузки средствами гипервизора)
      Скрин теста Гилева

  6. ОГРОМНОЕ СПАСИБО за Ваш труд!!!!
    Вы очень помогли!
    Ставил Centos 6.2 + (8.2.15.301) + УТ 11.
    Все пошло, единственно:
    — повозился с начальным паролем postgres (при первом запуске «su postgres» запросило пароль — по альтернативным источника нашел как сбросить)
    — при первом запуске клиента из-под винды выдало «Ошибка инициализации графической подсистемы».
    Доустановил glibc.i686 и перезагрузил сервер. Не уверен, что было связано с glibc.i686, но после этого клиент запустился без ошибок.

    Вижу, что Вы «сильно в теме», а не подскажете: в чем отличия Postgres от Etersoft и 1С? И почему Вы выбрали Etersoft, а не 1С-овский Postgres?

    • Выбрал Postgres от Ethersoft т.к. версия посвежее 9.0.4
      Отличия от Postgres с сайта 1С здесь.
      У меня крутится БГУ 1.0 проблем не возникает.

    • Вы упомянули о сбросе пароля у postgres и каких-то источников. Может для удобства остальных сообщите способ сброса, дабы народ не искал в недрах интернета.
      Желательно с сылкой на статью и кратком описании.
      Типо переустановите postgres с пустым паролем 🙂
      Спасибо.

    • Обновляем Сервер 1С Centos:
      # Скачиваем новые rpm пакеты 1С (users.v8.1c.ru)
      # Обновляем 1С сервер (в той папке, куда скачали), переконфигурируем
      service srv1cv82 stop
      yum —nogpgcheck localinstall *.rpm
      cd /opt/1C/v8.2/x86_64/utils/
      ./config_server
      service srv1cv82 start

      # Кому надо (как мне) — обновляем веб-публикацию
      cd /opt/1C/v8.2/x86_64/
      ./webinst -apache22 -wsdir ut -dir /var/www/html/ut -connstr File=/ххх/ххх/1c/ххх_ut11 -confpath /etc/httpd/conf/httpd.conf
      service httpd restart

      Postgres не трогал.

      Проверено на:
      Centos 6.2 Linux 2.6.32-220.17.1.el6.x86_64
      1С:Предприятие 8.2 (8.2.15.301)->(8.2.15.317) (Linux Server)

      • Ремарка к фразе «Postgres не трогал.»:
        У меня сервер работает в файловой версии.

  7. Есть вопрос:
    centos 6.2(final)+postgre 9.0(9.0.4)+ 1c8.2.15
    серверная часть (хоть и не с первого пинка) завелась и вроде все ок.
    Подцепился консолью управления 1с, создал инфобазу.
    запустил 1С — подключиться к существующей базе Postgre и все. висит экран 1с (сплэш) с надписью Loading configuration. Уже много часов. Не подскажете куда копать?

    • Можно попробовать создать базу не через административную консоль, а стандартным способом добавления базы:
      запустить 1С Предприятие > Добавить > (Создание новой информационной базы) Далее > (Создание информационной базы без конфигу…) Далее > (На сервере 1С:Предприятия) Далее > (там все указать и галочка — Создать базу данных в случае ее отсутствия должна стоять)
      Потом зайти в конфигуратор и загрузить конфу из dt файла.

      • Извиняюсь что не отвечал так долго — разбирался с Centos.
        Действительно если сделать именно таким образом все ок. Пока что еше не импортировал то что у нас в файловой лежит — но уже напорядок лучше.

        А есть объяснение этому феномену?

  8. все установил, вроде ьез проблем, но когда конектюсь через ммс выдает ошибку сетевого доступа к серверу, подключение не установлено, так как конечный компьютер отверг запрос на подключение,
    смотрел netstat порт 1540 сервак слушает, фаервол и селинукс отключены, в чем может быть проблема?

    • возможны варианты:
      — локальный файервол у клиента (типа касперский, аутпост и т.п.)
      — проверить выключено ли защищенное соединение (указывается при добавлении базы)
      — проверить пингуется ли сервер по имени
      — проблема с сетью (попробовать пинговать сервер большими пакетами)
      — кривизна самой 1С (встречаются проблемы при назначении специфических прав юзерам; также можно попробовать остановить сервер 1С и удалить /home/usr1cv82/.1cv82/1C/1Cv82/reg_1541/snccntx)

    • Губка Боб | 03.05.2012 at 17:54 | Ответить

      в с:\windows\system32\drivers\etc\ в файле hosts пропиши resolv для твоего сервера

      ip_address domain_name

  9. не вешается демон на порт 1541, куда рыть?

  10. Александр | 16.05.2012 at 17:11 | Ответить

    Ребят выручайте, не могу установить chkfontpath, ругается на это — chkfontpath-1.10.1-6mdv2010.0.x86_64 requires xfs. Что делать подскажите?

    • Ругается на зависимости…
      Если качнул пакет chkfontpath, то ставь так:
      yum localinstall твой_пакет_chkfontpath.rpm

  11. А какова скорость вашей дисковой подсистемы??? А то у меня более 20 попугаев Гилева не получаетя.

    • контроллер HP Smart Array P410i, стоят 8 (SAS) SFF 6G Dual Port 10K HDD в RAID10
      вывод hdparm из виртуалки с 1С-кой
      hdparm -t /dev/sda
      /dev/sda:
      Timing buffered disk reads: 1172 MB in 3.00 seconds = 390.66 MB/sec

      hdparm -T /dev/sda
      /dev/sda:
      Timing cached reads: 14974 MB in 2.00 seconds = 7498.45 MB/sec

  12. Александр | 06.08.2012 at 08:55 | Ответить

    Подскажите пожалуйста, в скрипте бэкапа Main base это название своей базы?

    • Если имеете ввиду это
      echo `date +%b' '%d' '%T` `hostname` Begin vacuum MAIN BASE >> /var/log/cron

      то это просто любой текст ни на что не влияющий.

  13. Александр | 11.11.2012 at 15:29 | Ответить

    Добрый день. Подскажите пожалуйста, после включения правил файрвола 1с через некоторое время перестаёт запускаться, а у тех у кого запущена жутко тормозит. Всё делал по этой инструкции, только у меня USB ключ на 5 пользователей.

    • Правила те, которые указаны в статье выше? С ними никаких проблем не может быть.
      Копируем из статьи, вставляем в текстовый файл, делаем его исполняемым, затем выполняем.
      Далее сохраняем правила:
      /etc/init.d/iptables save

      Вывод команды /etc/init.d/iptables status должен выглядеть так:
      Table: filter
      Chain INPUT (policy DROP)
      num target prot opt source destination
      1 DROP icmp -f 0.0.0.0/0 0.0.0.0/0
      2 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
      3 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
      4 ACCEPT udp -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
      5 tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:22 flags:0x17/0x02 recent: SET name: root side: source
      6 DROP tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:22 flags:0x17/0x02 recent: UPDATE seconds: 30 hit_count: 3 name: root side: source
      7 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:22
      8 ACCEPT udp -- 0.0.0.0/0 0.0.0.0/0 udp dpt:137
      9 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:1540
      10 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:1541
      11 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 multiport dports 1560:1591
      12 ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0 icmp type 3
      13 ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0 icmp type 8
      14 ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0 icmp type 11
      15 ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0 icmp type 12

      Chain FORWARD (policy ACCEPT)
      num target prot opt source destination

      Chain OUTPUT (policy ACCEPT)
      num target prot opt source destination

  14. Здравствуйте, у меня 1С нормально стартанула, все вроде бы работает, но почему-то не происходит обмен заказами — заказы нормально выгружаются, но не загружаются — пишет, что не может прочитать xml файл (та же база, но на винде в файловом варианте все выгружает/загружает как надо)

  15. Добрый день. Не подскажите как быть. В одной из фирм стояла виртуальная машина на Hyperv. На ней была установлена CentOS + PostgresSQL. Виртуалка остановилась. Что там делал их специалист не знаю. Но сейчас на руках имею после него Папку с образами жестких дисков от виртуалки и папку с Postgres извлеченную оттуда. Бекапов никаких нет. Т.е. базы из папки Postgres надо подключить ко вновь установленному Postgres. Пробовал заменять папку Data, не проходит. Заменял файлы БД во вновь созданной базе из старой, тоже не идет. Решил помучать образы из HyperV, подключил их в Virtual Box, система загрузилась, но там командный интерфейс, что то можно сделать, что бы хоть бекап сделать из Virtual box, а потом во вноб установленном Postgres загрузить эти бекапы? Объясните как новичку в Postgres. СПецов нет соответствующих.

    • Можно сделать дамп базы комндой:
      pg_dump -U postgres -Fc -Z9 -c -f dump_name base
      где:
      postgres — имя пользователя базы
      dump_name — файл создаваемого дампа
      base — имя базы

      и потом восстановить на другом хосте:
      pg_restore -U postgres -c -d base -Fc dump_name

Leave a comment

Your email address will not be published.