Как отобразить мое приложение Wt на моем локальном сервере Apache?

Я очень новичок в Wt и CGI. Я пытаюсь написать веб-приложение на С++. Это возможно благодаря библиотеке Wt:

https://www.webtoolkit.eu/wt

Судя по всему есть два режима: http и fastcgi. Первый прост в использовании: я компилирую свой код и запускаю корзину. Это запускает какой-то веб-сервер (вероятно, моя лексика не точна, так как я большой нуб в этой области) и выводит адрес и порт сервера. Ввод всего этого в моем любимом браузере приводит к отображению веб-страницы, которую я закодировал на C++.

У меня есть большая проблема с последним, и это очень раздражает, потому что это единственный способ развернуть программное обеспечение на размещенном удаленном сервере.

Чтобы развернуть тестовый веб-сервер, я взял пример приветствия из библиотеки Wt и связал его с wtfcgi, определив переменную cmake EXAMPLES_CONNECTOR=wtfcgi.

После этого я установил apache2 и настроил его. Я сделал следующее:

Я установил следующие пакеты Ubuntu:

libapache2-mod-fastcgi
apache2
apache2-bin
apache2-data
apache2-utils

Потом,

  1. включить mod_fastcgi для Apache с помощью a2enmod
  2. измените файл конфигурации fastcgi.conf следующим образом:

<IfModule mod_fastcgi.c>; AddHandler fastcgi-script .wt FastCgiIpcDir /var/lib/apache2/fastcgi FastCgiConfig -idle-timeout 100 -maxClassProcesses 1 -initial-env WT_APP_ROOT=/tmp FastCgiServer /var/www/wt/hello.wt </IfModule>

  1. создайте новый файл конфигурации сайта для приложений wt, /etc/apache2/sites-available/wt.conf:

<Directory /var/www/wt/> Allow from all Options +ExecCGI </Directory>

  1. скопируйте мой код примера Wt в папку /var/www/wt/hello.wt

  2. включить сайт и перезагрузить апач

a2ensite wt service apache2 reload

Затем, после этого, /var/log/apache2/error.log дал мне

[Fri Jun 16 22:52:30.176846 2017] [core:notice] [pid 1676:tid 139808785006080] AH00094: Command line: '/usr/sbin/apache2'
[Fri Jun 16 22:52:30.177041 2017] [:warn] [pid 1678:tid 139808785006080] FastCGI: server "/var/www/wt/hello.wt" started (pid 1682)
[2017-Jun-16 22:52:30.328742] 1682 - [info] "WServer/wtfcgi: initializing relay server"
[2017-Jun-16 22:52:30.332011] 1682 - [info] "config: reading Wt config file: /etc/wt/wt_config.xml (location = '/var/www/wt/hello.wt')"
[2017-Jun-16 22:52:30.334308] 1682 - [info] "wtfcgi: spawned session process: pid = 1737"
[2017-Jun-16 22:52:30.334383] 1682 - [error] "wtfcgi: fatal: cannot create run directory '/var/run/wt'"
[Fri Jun 16 22:52:30.337635 2017] [:warn] [pid 1678:tid 139808785006080] FastCGI: server "/var/www/wt/hello.wt" (pid 1682) terminated by calling exit with status '1'
[2017-Jun-16 22:52:30.375392] 1737 - [info] "config: reading Wt config file: /etc/wt/wt_config.xml (location = '/var/www/wt/hello.wt')"
[2017-Jun-16 22:52:30.375519] 1737 - [info] "WServer/wtfcgi: initializing shared wtfcgi session process"
[2017-Jun-16 22:52:30.375708] 1737 - [error] "wtfcgi: fatal: bind(): No such file or directory"

После этого я последовал совету, данному на этой веб-странице:

http://redmine.webtoolkit.eu/projects/wt/wiki/Fastcgi_on_apache

Например, я сам создал /var/run/wt и сменил его владельца на www-data. Затем я получил этот журнал:

AH00112: Warning: DocumentRoot [/var/www/html] does not exist
AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1. Set the 'ServerName' directive globally to suppress this message
[Fri Jun 16 23:15:53.355484 2017] [:notice] [pid 1994:tid 139719627398656] FastCGI: process manager initialized (pid 1994)
[Fri Jun 16 23:15:53.355544 2017] [mpm_event:notice] [pid 1656:tid 139719627398656] AH00489: Apache/2.4.18 (Ubuntu) mod_fastcgi/mod_fastcgi-SNAP-0910052141 configured -- resuming normal operations
[Fri Jun 16 23:15:53.355554 2017] [core:notice] [pid 1656:tid 139719627398656] AH00094: Command line: '/usr/sbin/apache2'
[Fri Jun 16 23:15:53.355676 2017] [:warn] [pid 1994:tid 139719627398656] FastCGI: server "/var/www/wt/hello.wt" started (pid 1995)
[2017-Jun-16 23:15:53.365485] 1995 - [info] "WServer/wtfcgi: initializing relay server"
[2017-Jun-16 23:15:53.365675] 1995 - [info] "config: reading Wt config file: /etc/wt/wt_config.xml (location = '/var/www/wt/hello.wt')"
[2017-Jun-16 23:15:53.365878] 1995 - [info] "wtfcgi: spawned session process: pid = 2052"
[2017-Jun-16 23:15:53.365942] 1995 - [info] "wtfcgi: reading FastCGI stream from stdin"
[2017-Jun-16 23:15:53.373121] 2052 - [info] "config: reading Wt config file: /etc/wt/wt_config.xml (location = '/var/www/wt/hello.wt')"
[2017-Jun-16 23:15:53.373243] 2052 - [info] "WServer/wtfcgi: initializing shared wtfcgi session process"

что тогда выглядит нормально. Однако, когда я теперь отображаю адрес 127.0.1.1 в своем браузере Firefox, я все еще вижу веб-страницу apache2 по умолчанию. Почему я не вижу пример приветствия? Как это исправить? Нужно ли мне писать специальную html-страницу, которая вызывает hello.wt? Как это работает?

Вроде что-то запустилось, но не работает. Где я могу найти журналы этого?

Заранее спасибо!


person Laurent Michel    schedule 18.06.2017    source источник


Ответы (1)


Мне удалось заставить его работать, выполнив следующие действия:

  1. убедитесь, что папка /var/www/html существует и скопируйте туда мое приложение wt

  2. измените файл конфигурации fastcgi.conf следующим образом:

<IfModule mod_fastcgi.c> AddHandler fastcgi-script .wt FastCgiIpcDir /var/lib/apache2/fastcgi FastCgiConfig -idle-timeout 100 -maxClassProcesses 1 -initial-env WT_APP_ROOT=/tmp FastCgiServer /var/www/html/hello.wt </IfModule>

  1. избавьтесь от файла конфигурации сайта для приложений wt:

    /etc/apache2/sites-enabled/wt.conf

потому что это не влияет на процесс

  1. перезагрузить апач

    служба apache2 перезагрузить

Теперь, когда я набираю адрес

localhost/hello.wt

в моем браузере я вижу отображаемый пример, предполагая

/var/run/wt

может быть создан пользователем www-data.

person Laurent Michel    schedule 21.06.2017