Настройка терминального сервера под Ubuntu Linux и связки 1С+RX@Etersoft+Wine@Etersoft+PostgreSQL for 1C+Сервер 1С 8.2+Apache
Задача:
Настроить сервер 1С 8.2 на Linux,
Использовать СУБД PostgreSQL, создать базу Postgres в каталоге /bases
Обеспечить терминальный доступ к серверу и запуск 1С в терминальном сеансе, подобно серверу терминалов Windows
Обеспечить Web-доступ к базе 1С 8.2
Имеем:
Локальная сеть 192.168.1.0/255.255.255.0
Железный сервер, само собой.
Ключ от сервера "1С:Предприятие 8" 32-х битный
Платформа 1С:Предприятие 8
Многопользовательский ключ от "1С:Предприятие 8" на 20 пользователей
Диск 1С:ИТС DVD
- Локальный репозиторий Ubuntu 10.04 у нас в офисе по адресу ftp://bainov/os/linux/ubuntu/main-repo
Локальное зеркало значительно ускоряет установку.
У вас должен быть другой путь к репозиторию. Например, стандартный: http://ru.archive.ubuntu.com/ubuntu/
Поехали:
1. Установить Linux Ubuntu Server 32 битный.
Почему именно 32-битный Linux? Т.к. сервер 1С у нас 32-битный, то на 64-битной платформе он откажется работать.
В случае, если в нашем распоряжении ключ от 64-битного сервера 1С, то следует устанавливать 64-битную ОС. На 32-битной ОС 32-битный сервер будет работать с 64-битным ключом, но возможностей 64-битной версии конечно же не предоставит.
2. Настроить сетевой адрес:
правим файл /etc/network/interfaces
выставим ему адрес 192.168.1.210 временно
Пример:
auto lo
iface lo inet loopback
auto eth1
iface eth1 inet static
address 192.168.1.210
netmask 255.255.255.0
network 192.168.1.0
gateway 192.168.1.1
3. правим файл /etc/hosts
делаем так, чтобы имя bainov указывало на адрес 192.168.1.9
С этого адреса будем делать апдейт, т.к. на нем лежит копия репозитория убунты и доступна через анонимный ftp
Пример:
127.0.0.1 localhost
192.168.1.9 bainov.rbsoft.local bainov
# The following lines are desirable for IPv6 capable hosts
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
ff02::3 ip6-allhosts
4. При настройке внутри нашей сетки не трогаем файл /etc/resolv.conf
Для переноса сервера в сеть клиента надо будет настроить уже под их сеть
Пример:
# Generated by NetworkManag
nameserver 192.168.1.1
5. настраиваем список источников ПО для дальнейшей установки пакетов и апдейтов.
Для ускорения работы делаем это не с официальных серверов, а с нашего внутреннего репозитория. (только при работе в офисе РБ-Софт! Не трогаем, если работаем со стандартным репозиторием.)
nano /etc/apt/sources.list
#RBSoft repositories
deb ftp://bainov/os/linux/ubuntu/main-repo lucid main restricted universe multiverse
deb ftp://bainov/os/linux/ubuntu/main-repo lucid-updates main restricted universe multiverse
deb ftp://bainov/os/linux/ubuntu/main-repo lucid-security main restricted universe multiverse
Записываем файл: Ctrl-X и на запрос о записи файла отвечаем Y
Не забываем, что репозиторий здесь указан наш, локальный. Если ставим не в офисе "РБ-Софт", то пишем вместо ftp://bainov/os/linux/ubuntu/main-repo например адрес общедоступного репозитория http://ru.archive.ubuntu.com/ubuntu/ или другого локального репозитория.
Даем команду на апдейт:
Обновление списка пакетов из наших источников
apt-get update
Обновление пакетов установленной системы из новых источников
apt-get upgrade
6. Устанавливаем наш любимый Midnight Commander:
apt-get install mc
ставим виндовые шрифты:
aptitude install ttf-mscorefonts-installer
7. Будем делать из нашего сервера аналог терминального сервера Windows с крутящимся внутри 1С. Поэтому нам понадобится графическая оболочка.
Поставим Gnome:
apt-get install ubuntu-desktop
8. Закачиваем с сервера http://www.etersoft.ru продукты RX@Etersoft и WINE@Etersoft SQL
Первый из низ реализует терминальный сервер под Линукс
Второй - позволяет запускать 1С под Линукс и SQL приложения
Для закачки софта на сервер я использовал ftp (proftpd), поднятый на моей рабочей машине.
То есть выкачиваю софт с инета и кладу в папку ftp-сервера на своей машине. На сервере, зайдя по ssh запускаю mc и пользуясь встроенным в него ftp-клиентом выкачиваю софт со своей машинки на сервер.
9. Предварительная настройка SSH-сервера
Изменяем файл /etc/ssh/sshd_config
В ssh-сервере должна включена авторизация по ключу (PubkeyAuthentication yes).
Если вы используете директиву AllowUsers в Вашем ssh-сервере, добавьте туда пользователя nx.
Если используется авторизация с помощью ssh-сервера, а не с помощью passdb, необходимо также включить авторизацию по паролю (PasswordAuthentication yes)
делаем рестарт сервера ssh:
/etc/init.d/ssh restart
логинимся заново к нашему серверу уже на 32 порт:
ssh -l administrator -p 32 192.168.1.210
10.Установка freenx-server
Я записал скачанные с Etersoft пакеты в каталог /etc/install/Etersoft
apt-get install expect
Переходим в каталог с софтом для терминального сервера
cd /install/Etersoft/TermServer/RX
Ставим то, что там есть:
dpkg -i freenx-server*.deb nx*.deb
Производим инициализацию:
nxsetup --setup-nomachine-key --install
команда выдает кучу предупреждений:
----> Testing your nxserver configuration ...
Warning: Invalid value "KDE_PRINTRC=/root/.kde/share/config/kdeprintrc". ENABLE_KDE_CUPS will not work.
For root it's normal. Try to run 'nxloadconfig --check' by user.
Warning: Warning: Invalid permissions on "/usr/lib/cups/backend/ipp". Valid permissions are 711.
Users will not be able to enable printing.
Warning: Invalid value "CUPS_ETC=/etc/cups/"
Users will not be able to enable printing.
Warning: Invalid value "DEFAULT_X_SESSION=/etc/X11/xdm/Xsession"
Users might not be able to request a default X session.
Warning: Invalid value "COMMAND_START_KDE=startkde"
Users will not be able to request a KDE session.
Warning: Invalid value "COMMAND_START_CDE=cdwm"
Users will not be able to request a CDE session.
Warning: Invalid permissions on "/sbin/mount.cifs". Valid permissions are "4711". You'll not be able to use SAMBA.
Warning: Invalid permissions on "/sbin/umount.cifs". Valid permission are "4711". You'll not be able to use SAMBA.
выставляем требуемые права на /sbin/mount.cifs:
chmod 4711 /sbin/mount.cifs
и аналогично:
chmod 4711 /sbin/umount.cifs
chmod 711 /usr/lib/cups/backend/ipp
chmod 755 /usr/sbin/cupsd
На сообщения про KDE и CDE забиваем - у нас их не установлено
Меняем /etc/nxserver/node.conf:
SSHD_PORT=32
NX_LOG_LEVEL=1 #Это на первое время, чтобы анализировать ошибки
перeзапускаем сервер:
nxserver --restart
При подключении клиента не забываем снять галочку в настройках подключения: Disable encryption of all traffic
поскольку с описанными здесь настройками соединение у нас будет шифрованным
11. Устанавливаем WINE Etersoft
Если стоял до этого родной Wine - удаляем его. Причем смотрим чтобы папочки wine не оставались ни в /etc ни в каталоге пользователя
Установка ничем не примечательна
ставим командой dpkg -i wine*.deb
dpkg -i hasp*.deb
dpkg -i font*.deb
dpkg -i etercifs*.deb
dpkg -i dkms*.deb
После установки копируем файл лицензии WINE_ETERSOFT.LIC в каталог /etc/wine
Запускаем под обычным юзером wine
под рутом не запустится - будет ругаться, причем по английски
12. Установка 1С
Заходим терминальным клиентом в графическую оболочку.
Запускаем терминал
Включаем загрузку hasp драйвера в wine:
winecfg
откроется окно программы
на закладке "Ключи защиты" будет список поддерживаемых ключей.
выделяем строку с HASP HL
жмем кнопку "Загружать"
жмем ОК
Втыкаем ключи защиты HASP в сервер
Они должны распознаться и загореться.
Копируем дистрибутив 1С в папку wine_c в домашнем каталоге - это теперь диск C для wine-программ
Включаем программу "Командная строка Wine" или "Менеджер файлов", переходим в каталог с дистрибутивом 1С и запускаем setup.exe
Далее установка как обычно, за исключением того, что не надо устанавливать драйвер ключа защиты - он уже загружен wine.
После установки 1С можно запустить, перейдя в меню Приложения/Wine/Программы/1С Предприятие 8.2
Программа администрирования серверов 1С у меня не запустилась, но 1С 8.2 запустилась в файловом режиме нормально.
13. Установка сервера PostgreSQL для 1C
1С предоставляет пакеты для линукс в rpm-пакетах
Надо переделать в deb-пакеты для установки в наш Ubuntu.
ставим сначала chkconfig и alien
apt-get install chkconfig
apt-get install alien
теперь перейдем в каталог с дистрибутивом PostgreSQL от 1С
у меня длинный путь... у вас может быть короче, если вы положили дистрибутив "поближе"
cd /install/1c/82/PLATFORM/postgresql/8.4.3-3.1C/linux/i386
Переделка пакетов:
alien --scripts --to-deb *.rpm
ругается error: incorrect format: unknown tag
установка все равно нормально проходит
groupadd -g 5026 -o -r postgres
useradd -g postgres -o -r -d /var/lib/pgsql -s /bin/bash -c "PostgreSQL Server" -u 5026 postgres
Переходим в каталог сервера 1С
cd /install/1c/82/PLATFORM/8.2.11.236/linux/debian/i386
ставим сервер
dpkg -i *.deb
14. Теперь надо сделать ссылки на библиотеки, которые нужны 1с-совскому постгресу , почему то старые
cd /lib
ln -s libreadline.so.5.2 libreadline.so.4
ln -s libncurses.so libtermcap.so.2
ln -s libssl.so.0.9.8 libssl.so.4
ln -s libldap-2.4.so.2 libldap-2.2.so.7
ln -s libldap_r-2.4.so.2 libldap_r-2.2.so.7
15. Добавляем настройки для postgres
echo 134217728 >/proc/sys/kernel/shmmax
echo 134217728 >/proc/sys/kernel/shmall
echo kernel.shmmax=134217728 >>/etc/sysctl.conf
echo kernel.shmall=134217728 >>/etc/sysctl.conf
/usr/share/locales/install-language-pack en_US
16. Настройка
создаем папку для базы данных и даем на нее права
mkdir /bases
mkdir /bases/monroe
chown -R postgres:postgres /bases
17. Теперь сама инициализация
su postgres
initdb -D /bases
ЗДЕСЬ ВОЗМОЖНА ПРОБЛЕМА:
Выдается ошибка:
fgets failure: Победа
Программа "postgres" нужна для initdb, но она не найдена в
той же директории, что и "/usr/bin/initdb".
Оказалось, что сообщение выдается из-за того, что postgres не может запуститься из-за отсутствия необходимой библиотеки.
пытаемся запускать его командой postgres
Выдается ошибка:
postgres: error while loading shared libraries: libldap-2.2.so.7: cannot open shared object file: No such file or directory
В нашей системе присутствует более новая библиотека libldap-2.4.so.2
Делаем вывод: надо сделать символическую ссылку на необходимое имя библиотеки:
ln -s libldap-2.4.so.2 libldap-2.2.so.7
Эту проблему я уже учел выше при создании ссылок. Но в будущем могут быть и другие подобные проблемы.
В общем решение такое:
1)запускаем постгрес командой,
2)смотрим чего ему не хватает,
3)находим у нас в системе файл с текущей версией
4)делаем с него символическую ссылку на тот файл, который нужен 1Совскому постгресу
Повторяем до тех пор, пока не получим при инициализации такой текст:
postgres@nxsrv:/usr/lib$ initdb -D /bases
Файлы, сопутствующие этой системе баз данных, будут
принадлежать пользователю "postgres". Этот пользователь
также должен быть владельцем процесса сервера.
Кластер баз данных будет инициализирован с локалью ru_RU.UTF-8.
Кодировка базы по умолчанию установлена в UTF8.
Конфигурация полнотекстового поиска по умолчанию установлена в "russian".
исправление прав на существующую директорию /bases ... ок
создание поддиректорий ... ок
выбирается значение по умолчанию для max_connections ... 100
выбирается значение по-умолчанию для shared_buffers ... 32MB
создание конфигурационных файлов ... ок
создание базы template1 в /basesbase/1 ... ок
инициализация pg_authid ... ок
инициализация зависимостей ... ок
создание системных представлений ... ок
загрузка системных описаний объектов ... ок
создание конверсий ... ок
создание словарей ... ок
установка привилегий для встроенных объектов ... ок
создание информационной схемы ... ок
сборка мусора в базе template1 ... ок
копирование template1 в template0 ... ок
копирование template1 в postgres ... ок
ВНИМАНИЕ: используется аутентификация "trust" для локальных подключений.
Вы можете её поменять, отредактировав pg_hba.conf или используя опцию -A,
при следующем выполнении initdb.
Успех. Вы теперь можете запустить сервер баз данных:
postgres -D /bases
или
pg_ctl -D /bases -l logfile start
18. стартуем postgres
pg_ctl -D /bases -l /bases/pg.log start
19. Сервер 1с запускается обычно
/etc/init.d/srv1cv81 start
Проверяем
netstat -atu
если вот такие строки видно, то значит все должно быть хорошо.
tcp 0 0 *:1560 *:* LISTEN
tcp 0 0 *:postgresql *:* LISTEN
tcp 0 0 *:1561 *:* LISTEN
tcp 0 0 *:1562 *:* LISTEN
tcp 0 0 *:1563 *:* LISTEN
20. Запуск утилиты конфигурирования сервера 1С
cd /opt/1C/v8.2/i386/utils
./config_server
ругается:
No truetype conversion utility found!
Please install ttf2afm or ttf2pt1!
скачиваем и устанавливаем пакет ttf2pt1_3.4.4-1.1_i386.deb . Для 64 битной системы можно взять здесь: ftp://rbsoft.ru/1c/linux/ttf2pt1_3.4.4-1.4_amd64.deb
dpkg -i ttf2pt1_3.4.4-1.1_i386.deb
опять запускаем ./config_server
если призадумалось - значит запустилось
после минуты работы программа молча завершается.
21. Делаем скрипт запуска:
nano /etc/init.d/postgresql
Копируем туда текст скрипта:
#!/bin/sh
case $1 in
restart)
sudo -u postgres -H pg_ctl -D /bases -l /bases/pg.log stop
sudo -u postgres -H pg_ctl -D /bases -l /bases/pg.log start
;;
start)
sudo -u postgres -H pg_ctl -D /bases -l /bases/pg.log start
;;
stop)
sudo -u postgres -H pg_ctl -D /bases -l /bases/pg.log stop
;;
*)
echo start|stop|restart
return 1;
;;
esac
Жмем Ctrl-X, сохраняем
Делаем файл исполняемым
22. И последний штрих - настраиваем автозапуск скриптов
update-rc.d postgresql defaults
update-rc.d srv1cv82 defaults
23. останавливаем сервер SQL
/etc/init.d/postgresql stop
стартуем сервер SQL
/etc/init.d/postgresql start
останавливаем сервер 1С
/etc/init.d/srv1cv82 stop
стартуем сервер 1С
/etc/init.d/srv1cv82 start
24. делаем рестарт железного сервера
reboot
25. после перезапуска проверяем все ли взлетело автоматом.
netstat -atn|grep 0.0.0.0:15
Должны увидеть что типа:
root@nxsrv:/install/1c/82/PLATFORM/8.2.11.236/linux/debian/ubuntu_addon# netstat -atn|grep 0.0.0.0:15
tcp 0 0 0.0.0.0:1541 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:1560 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:1561 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:1562 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:1563 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:1564 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:1565 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:1566 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:1567 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:1568 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:1569 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:1540 0.0.0.0:* LISTEN
если так, то идем дальше, нет, ищем ошибки и устраняем.
ps xau | grep post
Далее необходимо задать пароль для пользователя, который будет соединяться с нашей БД. Для этого в сначала в файл /bases/monroe/pg_hba.conf следует добавить строку local all all trust - доверие ко всем локальным пользователям, перезагрузить сервер postgresql, а затем выполнить команду
service postgresql restart
psql -U postgres -d template1 -c "ALTER USER postgres PASSWORD 'ваш пароль'"
26. Теперь необязательное редактирование postgresql.conf .
Значения , устанавливаемые в этом файле зависят от многих факторов и собственно служат для настройки оптимальной производительности.
nano /bases/monroe/postgresql.conf
listen_addresses = '127.0.0.1'
если соединения с базой будут только с локального хоста, то надежнее сделать именно так, чтобы порт 5432 слушался только на адресе 127.0.0.1
если же соединения не только с локального хоста - оставить значение по умолчанию
fsync = off
значение on сильно снижает производительность, поскольку все транзакции непосредственно пишутся на жесткий диск без использования кэширования, но повышается надежность.
Значение off есть смысл устанавливать, когда установлены надежные диски и надежный же UPS .
effective_cache_size = 2048MB
На нашем сервере 8Гб ОЗУ, но система 32 битная.
Поэтому я предположил, что этот параметр надо выставить в половину доступного ОЗУ (4Гб), как рекомендует 1С для постгреса 8.2
work_mem = 16MB
Насколько я понимаю, этот параметр зависит от среднего размера таблиц, в любом случае, для тонкой настройки надо тестировать на конкретном сервере с конкретной базой.
26. Запускаем на своей машине консоль управления серверами 1С
Создаем администраторов кластера серверов
При создании базы данных на сервере 1С будет запрос авторизации. Необходимо будет авторизоваться администратором сервера 1С.
27. Создаем новую базу данных 1С.
Запускаем 1С на своей машине, создаем базу.

Видим ошибку:

Лечение:
Входим рутом на наш сервер Linux и даем команду:
locale-gen en_US
Пробуем снова создание базы... Получаем работающую базу.
Я сначала создавал пустую базу. Загрузил в нее базу из файла выгрузки 1С (dt-файл)
28. Установка http-сервера apache
Реализовываем доступ к 1С из интернет-браузера
Ставим веб-сервер апач:
apt-get install apache2
все, апач установлен и уже работает ,
проверяем зайдя браузером по адресу http://192.168.1.210
если вэб-сервер не планируется использовать для других целей, то он готов к работе с 1с.
Запомним строку подключения Srvr="nxsrv";Ref="base1c";
Идем в любимый терминал под рутом.
mkdir /var/www/base1c
/opt/1C/v8.2/i386/webinst -apache22 -wsdir monroe -dir '/var/www/base1c/' -connStr 'Srvr="nxsrv";Ref="base1c";' -confPath /etc/apache2/httpd.conf
Убедимся в правильности внесенных изменений
nano /etc/apache2/httpd.conf
LoadModule _1cws_module "/opt/1C/v8.2/i386/wsap22.so"
# 1c publication
Alias "/base1c" "/var/www/base1c/"
<Directory "/var/www/base1c/">
AllowOverride None
Options None
Order allow,deny
Allow from all
SetHandler 1c-application
ManagedApplicationDescriptor "/var/www/base1c/default.vrd"
</Directory>
Теперь посмотрим что вписалось в файле default.vrd
nano /var/www/base1c/default.vrd
<?xml version="1.0" encoding2="UTF-8"?>
<point xmlns="http://v8.1c.ru/8.2/virtual-resource-system"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
base="/base1c"
ib="Srvr="nxsrv";Ref="base1c";"/>
chown -R www-data:www-data /var/www/base1c
Отключаем в браузере блокировку всплывающих окон, иначе мы ничего не увидим. Вносим сайт в список довереных в Explorer
Рестартуем апач
/etc/init.d/apache2 restart
и заходим браузером на адрес http://192.168.1.210
получаем

Теперь желательно провести работы:
- каталог /bases примонтировать к отдельному тому LVM
- написать скрипт для автоматического резервного копирования тома по расписанию в течение рабочего дня
- написать скрипт резервного копирования средствами СУБД
- смоделировать ситуации сбоя и восстановления базы данных
- провести нагрузочное тестирование сервера при 30 и 40 активно работающих пользователях