Я пытаюсь развернуть приложение Django на сервере CentOS 7 с Apache и mod_wsgi. Приложение использует библиотеку plotly для создания графиков, а plotly использует orca приложение для экспорта созданного графика в изображение. Тестировал приложение на встроенном веб-сервере django - все работает отлично. Итак, я настроил Apache и mod_wsgi в соответствии с официальной документацией. Когда я подключаюсь к Apache, приложение работает, но экспорт графиков невозможен. Браузер выдает ошибку тайм-аута шлюза. Я вставил сообщения регистратора в код, который создает и экспортирует графики. Код работает до этой строки:
static_image_bytes = plotly.io.to_image(figure, format='png', width=800, height=450)
Эта строка должна запускать локальное приложение Orca и преобразовывать объект figure
в байты изображения PNG. Orca требует сервер отображения X11, а CentOS устанавливается без графического интерфейса. Я использую Xvfb для эмуляции X11 (согласно странице Orca на github). Приложение Orca - это AppImage, загруженный с github.
/ bin / orca
#!/bin/bash
echo "`date` - ORCA STARTING with $@" >> /tmp/orca.log
xvfb-run /usr/u/s/orca-1.2.1-x86_64.AppImage "$@"
echo "`date` - ORCA FINISHED" >> /tmp/orca.log
Кроме того, я попытался связать /bin/orca
напрямую с AppImage, используя:
ln -s /usr/u/s/orca-1.2.1-x86_64.AppImage /bin/orca
и добавив эту строку в свой код:
plotly.io.orca.config.use_xvfb = True
error_log Apache:
[Thu Jul 11 14:15:27.353433 2019] [wsgi:info] [pid 6289] mod_wsgi (pid=6289): Attach interpreter ''.
[Thu Jul 11 14:15:27.356811 2019] [wsgi:info] [pid 6290] mod_wsgi (pid=6290): Attach interpreter ''.
[Thu Jul 11 14:15:27.373538 2019] [wsgi:info] [pid 6282] mod_wsgi (pid=6282, process='myapp', application=''): Loading Python script file '/usr/u/s/myapp/myapp/wsgi.py'.
[Thu Jul 11 14:15:27.380468 2019] [wsgi:info] [pid 6285] mod_wsgi (pid=6285): Adding '/usr/u/s/myapp' to path.
[Thu Jul 11 14:15:27.400423 2019] [wsgi:info] [pid 6283] mod_wsgi (pid=6283): Adding '/usr/u/s/myapp' to path.
[Thu Jul 11 14:15:27.401219 2019] [wsgi:info] [pid 6283] mod_wsgi (pid=6283, process='myapp', application=''): Loading Python script file '/usr/u/s/myapp/myapp/wsgi.py'.
[Thu Jul 11 14:15:27.419272 2019] [wsgi:info] [pid 6284] mod_wsgi (pid=6284): Adding '/usr/u/s/myapp' to path.
[Thu Jul 11 14:15:27.420060 2019] [wsgi:info] [pid 6284] mod_wsgi (pid=6284, process='myapp', application=''): Loading Python script file '/usr/u/s/myapp/myapp/wsgi.py'.
[Thu Jul 11 14:15:27.422329 2019] [wsgi:info] [pid 6285] mod_wsgi (pid=6285, process='myapp', application=''): Loading Python script file '/usr/u/s/myapp/myapp/wsgi.py'.
[Thu Jul 11 14:15:33.050402 2019] [wsgi:info] [pid 6419] mod_wsgi (pid=6419): Initializing Python.
[Thu Jul 11 14:15:33.077239 2019] [wsgi:info] [pid 6419] mod_wsgi (pid=6419): Attach interpreter ''.
[Thu Jul 11 14:25:38.116842 2019] [wsgi:error] [pid 6287] [client 192.168.1.12:57406] Timeout when reading response headers from daemon process 'myapp': /usr/u/s/myapp/myapp/wsgi.py, referer: http://192.168.1.13/myapp/reports/new/
[Thu Jul 11 14:25:38.116918 2019] [reqtimeout:info] [pid 6287] [client 192.168.1.12:57406] AH01382: Request body read timeout
Apache httpd.conf
LogLevel info
TimeOut 600
LoadModule wsgi_module modules/mod_wsgi.so
WSGISocketPrefix /var/run/httpd/wsgi
WSGIDaemonProcess myapp python-home=/usr/u/s/env/myapp python-path=/usr/u/s/myapp threads=1 processes=32
WSGIScriptAlias /myapp /usr/u/s/myapp/myapp/wsgi.py process-group=myapp application-group=%{GLOBAL}
<Directory /usr/u/s/myapp>
Require all granted
</Directory>
SELinux установлен в разрешающий режим.
Я гуглил и искал stackoverflow часами, пробуя различные решения и конфигурации для mod_wsgi, но ни одно из них, похоже, ничего не меняет. Пожалуйста помоги. Спасибо за любые идеи.