Недавно мы рассматривали установку довольно интересной CMS с открытым исходным кодом — Odoo.
К ней прилагается огромное количество модулей. Один из таких модулей — py3o_report. Этот модуль используя опять таки открытое программное обеспечение позволяет генерировать отчеты в формате ODT, XLS, PDF, HTML, DOC, DOCX и т.д. В действительности все форматы, которые поддерживает LibreOffice.
В официальной документации коротко описаны основные шаги по установке модуля и компонентов. И то для системы Debian.
Я же адаптировал инструкцию под CentOS и добавил автоматизации от себя. Выношу материал на ваш суд.
Сперва устанавливаем необходимые зависимости:
yum -y install epel-release yum -y install java-1.7.0-openjdk libreoffice-writer python2-pip gcc libffi-devel python-devel openssl-devel python2-pip python2-jpype
После этого обновляем pip до последней версии
pip install --upgrade pip
Теперь устанавливаем python-модули, необходимые для работы отчетов
pip install Twisted==16.4.1 pysftp py3o.template py3o.formats py3o.fusion service-identity py3o.renderers.juno py3o.renderserver
Если ошибок не возникло, то можно проверить корректность установки выполнив 2 команды.
Первая команда:
/usr/bin/python /usr/bin/start-py3o-fusion --debug -s localhost
Терминал будет заблокирован.
После запуска нужно открыть в браузере ссылку http://Your_IP:8765
Должна быть примерно следующая картинка
Если вы это увидели, то можно вернуться в терминал и нажать Ctrl+C что бы прервать процесс.
Вторая команда:
/usr/bin/python /usr/bin/start-py3o-renderserver --java=/usr/lib/jvm/jre-openjdk/lib/amd64/server/libjvm.so --ure=/usr/share --office=/usr/lib64/libreoffice --driver=juno --sofficeport=8997
Тут проще. Если не посыпались ошибки то установка выполнена корректно.
Сперва я запустил оба эти процесса в screen, но после первой же перезагрузки сервера решил что это не дело и нужно добавить команды в автозапуск.
Для этого были созданы 2 файла-демона.
cat /etc/systemd/system/odoo_render.service [Unit] Description=Renderserver for Odoo reports [Service] Type=simple PIDFile=/var/run/odoo_render.pid User=root ExecStart=/usr/bin/python /usr/bin/start-py3o-renderserver --java=/usr/lib/jvm/jre-openjdk/lib/amd64/server/libjvm.so --ure=/usr/share --office=/usr/lib64/libreoffice --driver=juno --sofficeport=8997 ExecStop=/usr/bin/ps aux | /usr/bin/grep [r]enderserver | /usr/bin/awk '{print $2}' | /usr/bin/xargs kill -9 TimeoutSec=300 Restart=always [Install] WantedBy=multi-user.target
и
cat /etc/systemd/system/odoo_fusion.service [Unit] Description=Fusion for Odoo reports [Service] Type=simple PIDFile=/var/run/odoo_fusion.pid User=root ExecStart=/usr/bin/python /usr/bin/start-py3o-fusion -s localhost ExecStop=/usr/bin/ps aux | /usr/bin/grep [f]usion | /usr/bin/awk '{print $2}' | /usr/bin/xargs kill -9 TimeoutSec=300 Restart=always [Install] WantedBy=multi-user.target
И последнее. Перечитываем конфиг systemd, добавляем скрипты в автозапуск и запускаем
systemctl daemon-reload systemctl enable odoo_render.service systemctl enable odoo_fusion.service systemctl start odoo_render.service systemctl start odoo_fusion.service
Проверка была выполнена перезагрузкой сервера. После неё обе команды успешно запустились и генерация отчетов работала корректно.