Пошаговое руководство по установке 1С и PostgreSql на Ubuntu в облаке DigitalOcean

Администрирование - Системное

Пошаговое руководство по установке 1С и PostgreSql на Ubuntu

Добрый день!

Я давно хотел попробовать поставить 1С 8.3.9 на Linux сервер. Обычно я работал либо с файловой конфигурацией, либо со стандартной Windows+MsSql. Но хотелось попробовать развернуть базу самому и посмотреть, насколько это сложно. 

Сразу скажу, что на Инфостарте была уже похожая публикация по установке на CentOs, но во-первых я делал установку несколько по-другому, во-вторых я рассмотрел вопрос включения отладки по http, и в-третьих я хотел сделать более пошаговую иструкцию, с нуля. Кстати сказать, остальные инструкции которые я находил, были либо устаревшими либо недостаточно подробными. А уж вопрос отладки серверных процедур по http для Linux-сервера я очень долго решал, и думаю он будет очень полезен. 


Шаг 1. Установка сервера DigitalOcean


Оказывается, у облачного провайдера DigitalOcean можно получить 10$ по реф ссылке.

И всего за 5$ развернуть Droplet с установленной Ubuntu 16.04 x64.

И вот ваша виртуальная машина уже готова.

Шаг 2. Установка Putty 

Немного непривычно, но с сервером придется работать через консольные команды. Для этого лучше всего подойдет утилита Putty. Среди прочих достоинств, она умеет вставлять в консоль текст по клику правой кнопки мышки или по нажатию shift-insert, что поможет в дальнейшей работе.

шаг 3. установка PostgreSQL 9.5 пропатченного

Пропатченная для 1С сборка PostgreSql лежит на сайте авторов PostgresPro, я взял версию 9.5. Также там есть и инструкции по установке, я их просто скопировал в окно putty.

sudo sh -c 'echo "deb http://1c.postgrespro.ru/deb/ $(lsb_release -cs) main" > /etc/apt/sources.list.d/postgrespro-1c.list'
wget --quiet -O - http://1c.postgrespro.ru/keys/GPG-KEY-POSTGRESPRO-1C-92 | sudo apt-key add - && sudo apt-get update 
sudo apt-get install postgresql-pro-1c-9.5

После установки в консоли будет видно в каких папках установился PostgreSql, запомните где находится папка config.

в

Проверить работу сервера Postgresql можно с помощью команды

service postgresql status

Если установка была успешна, то вы увидите зеленую надпись "Active".

Шаг 4. установка Listen_adresses для соединения с pgAdmin.

 После установки PostgreSql мне понадобилось проверить как он работает, и я  стал соединяться с ним с помощью PgAdmin 1.22.1. Однако, соединиться не вышло, оказалось, нужно указать в конфигурации listen_addresses='*'. И тут меня встретил консольный(!) текстовый редактор vi. Это вам не нежно любимый Notepad++ с дополнениями. Впрочем, после небольшого чтения мануалов, оказалось что с редактором просто работать: по умолчанию файл открывается на чтение; для редактирования нужно перейти в insert mode нажав i; после редактирования нажать Esc и набрать две команды :w - для сохранения и команду :q для выхода из редактора. Итак, выполним команду открытия postgresql.conf

sudo vi /etc/postgresql/9.5/main/postgresql.conf


Найдем в этом файле listen_addresses='' и поменяем на listen_addresses='*'. После чего перезапустим postgresql с помощью команды 

service postgresql restart

Проверить какие сервисы сейчас слушают порты можно с помощью команды 

netstat -tlp

И у вас должна быть примерно такая картина: (здесь у меня уже включен сервер 1с и отладка)

Шаг 5. установка пароля на пользователя postgres

Далее получилось так, что сервер был запущен и listen_addresses были установлены, но возникала ошибка авторизации типа "пользователь postgres не прошел проверку подлинности по паролю". Как оказалось, по умолчанию у него пароль не установлен. Для его установки я поменял пользователя с root на postgresql , зашел в терминал postgresql  и выполнил команду \password.

su postgres
psql
\password

Шаг 6. Соединение через pgadmin 3 (ver 1.22.1)

После  всех этих настроек, соединение удалось. Как позже оказалось, базу на этом этапе через pgadmin создавать не надо! Главное что есть возможность подключиться и посмотреть таблицы БД. Проверьте что у базы postgres стоит сопоставление(collation) ru_RU.UTF8

Шаг 7. Установка необходимых пакетов для 1с

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

imagemagick
unixodbc
ttf-mscorefonts-installer
t1utils
libgsf-bin

Вот тут обычно могут быть проблемы, но у меня все установилось гладко. Кстати, при установке 1С конфигурирование шрифтов с помощью выполнения config_system  больше не нужно, так как Утилита конфигурирования для работы в ОС Linux config_system удалена из состава поставки и шрифты должны подхватываться автоматически из каталогов типа /usr/share/fonts/msttfcorefonts

Шаг 8. Передача на сервер и установка 1С.

Для передачи скачанных deb пакетов на сервер, я воспользовался входящей в Putty утилитой PSFTP. Положил все deb файлы в папку d:\deb_83\ и далее выполнил команды:

mkdir /root/onec/
cd /root/onec/
put -r d:\deb_83\
sudo dpkg -i 1c-enterprise83-common_8.3.9-2170_amd64.deb

Для установки пакетов я просто копировал их имена из Свойств файла в Windows в putty.
После установки проверяем запуск сервера 1С командой

service srv1cv83 status

Также должна быть зеленая надпись "Active". Нужно дать права на папки  созданному при установке пользователю usr1cv8:

chown -R usr1cv8:grp1cv8 /opt/1C/
chown -R usr1cv8:grp1cv8 /home/usr1cv8/

Шаг 9. Создание базы из консоли администрирования 1С

В консоли администрирования под Windows я долго не мог подлючиться к своему серверу, так как появлялась ошибка "этот хост неизвестен". Оказалось, нужно в hosts файле в моей windows7 прописать адрес сервера кластера, где 207.0.0.0 - ваш IP Lunix-сервера

207.0.0.0 ubuntu-512mb-fraOnec-01

Далее я стал создавать базу 1С, и, как говорилось выше, надо создавать новую базу данных, для этого введите новое имя в поле "База данных", например db1cnew и не забудьте галочку "создать базу данных в случае ее отсутствия". Иначе может появиться ошибка "type mvarchar does not exist", если создавали из pgadmin базу.

Шаг 10. Отладка серверных модулей.

Естественно, после запуска базы, хочется ее отладить, но не все так просто. Для начала нужно запустить сервер с флагом отладки. Для этого открываем файл запуска сервера:

sudo vi /etc/init.d/srv1cv83

И раскомментируем там параметр SRV1CV8_DEBUG=1. 

Перезапустим сервер 1С , для просмотра его статуса выполним команду 

ps aux |grep 1с

Флаг -debug появился, но дальше после него стоит флаг -tcp. При режиме tcp отладки зайти в точку останова в серверных процедурах не получится, и нужно разбираться дальше. Включение отладки по http оказалось непростой задачей, потому что нигде я не смог найти рабочего решения. Как оказалось, нужно добавить флаг -http в скрипт запуска сервера в функции buildCommmandLine:

sudo vi /etc/init.d/srv1cv83
добавить в функции buildCommmandLine после -debug флаг -http
"$cmdline -debug -http"

Вот так это должно выглядеть:

Теперь для просмотра флагов процесса опять вызовем команду

ps aux |grep 1с

И увидим, что теперь процессы сервера 1С запущены с флагом http и добавился процесс сервера отладка dbgs:

После этого нужно в Конфигураторе в меню Сервис->Параметры->Отладка поставить "Отладка по протоколу HTTP",  и отладка заработает:

Шаг 11. Нагрузочный тест Гилева

Также я решли провести нагрузочный тест от Гилева. Скачал dt, поставил на свою базу. Естественно, на 512 мегабайт он не работал, я в панели управления Digital Ocean сделал Resize своего сервера на 1 гигабайт оперативки, и поменял настройки PostgreSQL (возможно, что я сделал это неоптимально и буду рад прочитать в комментариях какие настройки нужны были).

shared_buffers = 256MB
temp_buffers = 64MB  
work_mem = 512MB 
maintenance_work_mem = 192MB
autovacuum_work_mem = -1 

Тест все равно вываливался с ошибкой "превышен максимальный расход памяти сервера за один вызов" и я поменял параметр "Безопасный расход памяти за один вызов" на -1 в настройках сервера 1С. это помогло, и тест завершился с оценкой 7.76. Еще один Resize сервера на 4GB и 2CPU  и оценка стала 12.41

Выводы

Разворачивание сервера с нуля и установка необходимых пакетов не занимает много времени. Как видно, работа с Linux может представлять вполне достойную альтернативу серверу на Window, особенно учитывая огромное количество облачных провайдеров и легкость развертывания сервера.

В этой статье я не рассмотрел такие интересные вопросы, как оптимизация настроек PostgreSQL, и создание из сервера с Ubuntu контейнера для Docker - это оставлю на будущее.

См. также

Комментарии
1. Егор Иванов (Infactum) 218 16.02.17 15:47 Сейчас в теме
Это вы с включенным флагом отладки мерили производительность? Какой толк то?
2. Иван Коротеев (kiv1c) 325 16.02.17 17:29 Сейчас в теме
(1) Да, что-то я не учел влияние отладки на производительность. после выключения отладки даже на 512 МБ тест выдал оценку в 7.92
3. Александр Немцов (pythonchik) 17.02.17 09:17 Сейчас в теме
С учетом того, что сервер торчит в интернет, рекомендация listen_addresses='' и поменяем на listen_addresses='*' выглядит сомнительной. Зачем все адреса слушать? Чтобы извне этот сервер долбили постоянно всякий "кулхацкеры"?
Достаточно, чтобы он по локальному адресу отвечал лишь на запросы сервера 1С.
awk; baracuda; +2 Ответить
4. Олег Дмитров (baracuda) 3 17.02.17 10:12 Сейчас в теме
Вопрос с лицензиями как решили?
detro; 19077; kuntashov; Ivan_Sol; spock; fominov.a; awk; +7 Ответить 1
5. Максим Шадрин (mixperm) 53 17.02.17 13:30 Сейчас в теме
Отличная статья. Теперь не буду тратить времени на такой эксперимент т.к. 12 баллов плохо. Мне надо как минимум 45. И вообще мечтаю когда скорость SQL баз сравняется с файловыми. Сейчас если в файловой 90 производительность, то на SQL со всеми разгонами около 40-50.
6. Иван Коротеев (kiv1c) 325 17.02.17 14:52 Сейчас в теме
(5) а файловая у вас на SSD лежит? если проблем с блокировками нет, то действительно быстрее получается)
7. Максим Шадрин (mixperm) 53 18.02.17 12:14 Сейчас в теме
(6)на PCI - E SSD. на sql тоже куча блокировок бывает
8. Артем Артеменко (dock) 24 19.02.17 12:06 Сейчас в теме
Пропатченная для 1С сборка PostgreSql лежит на сайте авторов PostgresPro

почему именно эта сборка, а не с официального сайта 1С ?

сам же и отвечу :
ВЕРСИИ PostgreSQL и 1С

Начиная с версии 8.3 платформа 1С поддерживает PostgreSQL версии 9.4. Для этого фирмой 1С был выпущен набор патчей для PostgreSQL 9.4.2. В предлагаемых пакетах используется более новый PostgreSQL 9.4.10. Эта версия СУБД имеет множество улучшений, прежде всего связанных с отказоустойчивостью.
9. Виктор Шишов (vshish) 77 20.02.17 05:09 Сейчас в теме
Пробовал все тоже самое.
В качестве испытуемых дистрибутивов были: OpenSUSE, Debian, Ubunttu, CentOS, AltLinux
Во всех дистрибутивах кроме АльтЛинукс приходилось для нормальной полноценной установки танцевать с бубнами.
В АльтЛинукс у меня все проходит просто.
Установил минималку, установил из репозитария АльтЛинукса пакеты Постгреса 9.4 1С, 1С-преинсталл и еще парочку, и установил 1С и ВСЕ
ну еще конечно есть маленькая хитрость перед установкой 1С нужно в файл hosts прописать имя компьютера на 127.0.0.1, иначе 1с-сервер не запускается почему-то, ну и на клиентах нужно либо прописывать адрес и имя сервера 1С в hosts, или прописывать его в DNS.
Как минимум пять таких серверов нормально работают, на производительность на жалуюсь. Инструкция по установке сервера 1С на ALTLinux есть на вики-сайте AltLinux. короче рекомендую отечественного производителя. С хаспом тоже проблем нет.
10. Виктор Шишов (vshish) 77 20.02.17 05:16 Сейчас в теме
А вообще плюсую. Побольше таких инструкций, как для чайников.
Но с линуксовыми серверами, у меня лично проявилась одна проблема.
У клиента есть ЭДО с провайдером ТЕНЗОР. У них есть 1С обработка для интеграции с системой. Так вот она не работает с Линукс серверами.
1. кое-что сохраняет на диск(слешы виндовые)
2. настройки в архиве в макете (имена файлов в архиве на кирилице) в Линуксе Некорректная перекодировка имен.
ну и еще некоторые моменты. и добиться их исправления у разработчика не получилось.
Пришлось исправлять самому, но явно исправил не все и на исправление следующей версии их обработки не стоит
11. Иван Коротеев (kiv1c) 325 20.02.17 10:11 Сейчас в теме
(9)
1С на ALTLinux
я сам был удивлен что всё прошло достаточно гладко, обычно самая частая проблема - не ставились какие-то пакеты, особенно libgsf или шрифты. За Альтлинукс - плюсую, у них тоже хорошая инструкция
12. Михаил Петухов (oldfornit) 20.02.17 10:45 Сейчас в теме
4. sudo apt-get install nano
sudo nano /etc/postgresql/9.5/main/postgresql.conf

11. Рекомендую ознакомиться с http://infostart.ru/public/325482/
Далее - повысить уровень логов и читать рекомендации самого postgres в логах. Точнее не рекомендации, а диагностические сообщения.
13. Кирилл Иконников (spock) 561 22.02.17 08:03 Сейчас в теме
Присоединяюсь к вопросу из (4)
14. Андрей Уваров (oldcopy) 62 22.02.17 08:13 Сейчас в теме
Я бы вообще очень долго и сильно бы думал, прежде чем выставлять сервер 1С в интернет. Никакой аутентификации сервер не предусматривает: достаточно знать имя информационной базы. А аутентификация средствами 1С вызывает много вопросов, обычно зная какие пароли ставят сотрудники (либо не ставя никаких).

По хорошему было бы неплохо завернуть все соединения в VPN.

Также стоит упомянуть про локали, автору повезло, у него из коробки была ru_RU-UTF8, в противном случае Postgres окажется непригодным к работе с 1С.

15. Сергей Крымов (СергейК) 50 22.02.17 10:14 Сейчас в теме
(7) Подскажите а в файловой базе на SSD какая конфигурация 1С8 объем базы и количество пользователей?
16. Александр (AlkB) 21 22.02.17 16:36 Сейчас в теме
Не описано как установить лицензии для 2 вариантов:
1) если ключ USB
2) если ключ электронный
17. Максим Шадрин (mixperm) 53 22.02.17 17:20 Сейчас в теме
(15) файловая база УТ11.3, объем 10 ГБ. Платформа 8.3.9 с размером таблиц 64К. Пользователей нет т.к. эта база резервная копия sql версии для тестирования обмена с бух и она явно быстрей работает раза в 2
18. Сергей Крымов (СергейК) 50 24.02.17 11:26 Сейчас в теме
(17)
...Платформа 8.3.9 с размером таблиц 64К....

1.А что за параметр "Размер таблиц" 64К? Или имеете ввиду размер кластера раздела NTFS?

2. А не тестировали как влияет на производительность сжатие БД 1Cv8.1CD средствами NTFS?
У меня на тестовой БД сжатый файл УТ11 размером 14 Гб занимает физически 4,75 Гб. У меня SSD-шка маленькая, экономлю место.
19. Максим Шадрин (mixperm) 53 25.02.17 08:56 Сейчас в теме
(18) почитайте про нововведения в 8.3.8. Именно из-за увеличенных таблиц в файловой базе и возможность изменять размер таблиц базу созданную на 8.3.8 и выше нельзя открыть на старых платформах.
20. Сергей Крымов (СергейК) 50 26.02.17 11:47 Сейчас в теме
21. Ildar Gabdrakhmanov (spezc) 297 07.04.17 06:43 Сейчас в теме
А вы пробовали установить Apache и опубликовать базу?
22. Nelson666 14.04.17 12:33 Сейчас в теме
Спасибо автору. Очень полезная статья!
Но прошу помощи участников. Хотел бы отлаживать серверные процедуры на такой системе, но после включения параметра HTTP
"$cmdline -debug -http"
не запускается корректно процесс ragent с вытекающими. Подробности
тут
23. Nelson666 18.04.17 10:35 Сейчас в теме
(22) Отвечу сам себе:
не запускается корректно процесс ragent
Установил 8.3.10.2168. Все что было описано тут в шаге 10 - заработало!
24. Иван Коротеев (kiv1c) 325 18.04.17 11:56 Сейчас в теме
(23) возможно дело было в Astra Linux. я вот пробовал только на Убунту 16.04, как писал в начале.
25. Alina P (user721182) 18.04.17 12:09 Сейчас в теме
Спасибо за инструкцию, будем пробовать. Один косяк есть, в случае если хранится база клиентов в 1с, то сервер по закону должен быть в РФ.
Оставьте свое сообщение