Заметки сисадмина
Назад

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

Опубликовано: 28.06.2012
Время на чтение: 89 мин
17
3140

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

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

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

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

sudo vi /etc/network/interfaces
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.

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

sudo /etc/init.d/networking restart

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

sudo apt-get update && apt-get dist-upgrade

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

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

sudo -i

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

apt-get install  libicu-dev libxslt1.1 libxml2 libossp-uuid16 libreadline5

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

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

dpkg -i *.deb

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

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

chown postgres:postgres /var/lib/pgsql

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

passwd postgres

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

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

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

LANG=ru_RU.utf—8
service postgresql start

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

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

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

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

echo "kernel.shmmax = 521981952" >> /etc/sysctl.conf
echo "kernel.shmall = 127437" >> /etc/sysctl.conf

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

sysctl -p

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

su postgres
psql postgres
alter user postgres with password 'YOUR_PASSWORD';

Набираем \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.

Вбиваем свои данные и получаем на выходе правильный postgresql.conf

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

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

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

ALTER USER postgres WITH PASSWORD ‘newpassword’;

 

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С Предприятие, установим следующие пакеты:

sudo apt-get install imagemagick libglib2.0-dev libgsf-1-dev texlive-base ttf-mscorefonts-installer libfreetype6 libfreetype6-dev unixodbc unixodbc-dev

Качаем технологическую платформу 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

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

update-rc.d srv1cv82 defaults

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

chown -R usr1cv82:grp1cv82 /opt/1C
chown -R usr1cv82:grp1cv82 /home/usr1cv82

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

service srv1cv82 status

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

init script: STARTED
Ragent: RUNNING

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

-A INPUT -p tcp -m state --state NEW -m tcp --dport 1540 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 1541 -j ACCEPT
-A INPUT -p tcp -m multiport --dports 1560:1591 -j ACCEPT

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

netstat -tlnp | grep :15

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

tcp 0 0 0.0.0.0:1560 0.0.0.0:* LISTEN 2814/rphost
tcp 0 0 0.0.0.0:1540 0.0.0.0:* LISTEN 2799/ragent
tcp 0 0 0.0.0.0:1541 0.0.0.0:* LISTEN 2802/rmngr

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

tcp 0 0 0.0.0.0:1540 0.0.0.0:* LISTEN 960/ragent

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

ps aux|grep 1C

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

usr1cv82 931 0.0 1.8 338376 18612 ? Ssl Jul04 0:41 /opt/1C/v8.2/x86_64/ragent -daemon
usr1cv82 935 0.1 3.0 790496 31376 ? Sl Jul04 2:31 /opt/1C/v8.2/x86_64/rmngr -port 1541 -range 1560:1591
usr1cv82 948 0.4 11.5 720804 117412 ? Sl Jul04 6:21 /opt/1C/v8.2/x86_64/rphost -range 1560:1591 -reghost ubuntus12 -re

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

usr1cv82 931 0.0 1.8 338376 18612 ? Ssl Jul04 0:41 /opt/1C/v8.2/x86_64/ragent -daemon

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

Теперь необходимо  проверить корректность установки компонентов, которые мы установили в самом начале  с помощью проверяющего скрипта /opt/1C/v8.2/x86_64/utils/*config_server

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

Cannot access /lib/libc-*.so: No such file or directory
Cannot access /lib64/libc-*.so: No such file or directory

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

find / -name "libc-*.so" -print

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

/lib/x86_64-linux-gnu/libc-2.15.so

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

ln -s /lib/x86_64-linux-gnu/libc-2.15.so /lib/libc-2.15.so
ln -s /lib/x86_64-linux-gnu/libc-2.15.so /lib64/libc-2.15.so

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

./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

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

[ ! -e $aliasFullName ] && return 1

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

echo $aliasFullName

Получаем:

Can't detect SYSTEM_LIB_PATH, please set this environment variable manually!/libWand.so
Can't detect SYSTEM_LIB_PATH, please set this environment variable manually!/libfreetype.so
Can't detect SYSTEM_LIB_PATH, please set this environment variable manually!/libgsf-1.so
Can't detect SYSTEM_LIB_PATH, please set this environment variable manually!/libglib-2.0.so
Can't detect SYSTEM_LIB_PATH, please set this environment variable manually!/libodbc.so

Как я понял,  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. Соответственно снова делаем смлинки:

ln -s /usr/lib/x86_64-linux-gnu/libfreetype.so /usr/lib/libfreetype.so
ln -s /usr/lib/x86_64-linux-gnu/libglib-2.0.so /usr/lib/libglib-2.0.so
ln -s /usr/lib/x86_64-linux-gnu/libodbc.so /usr/lib/libodbc.so

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

/usr/lib/libWand.so
/usr/lib/libfreetype.so
/usr/lib/libgsf-1.so
/usr/lib/libglib-2.0.so
/usr/lib/libodbc.so

На клиенте, если 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.

apt-get install ia32-libs

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

dpkg -i http://download.etersoft.ru/pub/Etersoft/HASP/stable/x86_64/Ubuntu/12.04/
dpkg -i http://download.etersoft.ru/pub/Etersoft/HASP/stable/x86_64/Ubuntu/12.04/

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

sudo service haspd status

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

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

Ставим apache:

apt-get install apache2

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

ServerName "ubuntus12"

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

httpd: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1 for ServerName

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

mkdir /var/www/base

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

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

./webinst -apache22 -wsdir base -dir '/var/www/base' -connStr 'Srvr="ubuntus12";Ref="base";' -confPath /etc/apache2/httpd.conf

Проверяем корректность внесенных изменений. В  /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:

chown -R www-data:www-data /var/www/base
service apache2 restart

Переходим на сайт, предварительно отключив всплывающие окна. http://ubuntus12/base

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

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

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

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

chown postgres:postgres /mnt/net

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

mount -t smbfs -o username=test,password=11111111,iocharset=utf8 //192.168.1.8/distr /mnt/net

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

umount -l /mnt/net

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

pg_dump -U postgres -Fc -Z9 dbname -f /mnt/net/Backup/Base/dbname.dump

где:

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

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

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

createdb -T template0 newdb

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

pg_restore -d newdb db.dump

Например:

createdb -T template0 mynewbase
pg_restore -d mynewbase /mnt/net/my_old_base.dump

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

pg_dump -Fc -Z9 dbname -f dbname.dump
dropdb dbname
pg_restore -C -d anydbname dbanme.dump

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

Например:

pg_dump -Fc -Z9 mybase -f /mnt/net/mybase.dump
dropdb mybase
pg_restore -C -d postgres /mnt/net/mybase.dump

Здесь -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&gt;/dev/null // - можно не указывать, если предварительно создать директорию и выставить права.
(pg_dump mydb &lt;"${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
, ,
Поделиться
Похожие записи