Product Opener/Installation: Difference between revisions
No edit summary |
mNo edit summary |
||
Line 22: | Line 22: | ||
It contains a path that needs to be updated: | It contains a path that needs to be updated: | ||
# Needs to be configured | |||
# Needs to be configured | use lib "/home/obf/cgi/"; | ||
use lib "/home/obf/cgi/"; | |||
==== Config.pm ==== | ==== Config.pm ==== | ||
Line 33: | Line 31: | ||
Contains info about the domain, database and path. This is separated from Config.pm so that it is easy to create test instance that share the same configuration in Config.pm but are on other domains. | Contains info about the domain, database and path. This is separated from Config.pm so that it is easy to create test instance that share the same configuration in Config.pm but are on other domains. | ||
# server constants | |||
# server constants | $domain = "openbeautyfacts.org"; | ||
$domain = "openbeautyfacts.org"; | |||
# server paths | |||
$www_root = "/home/obf/html"; | |||
$data_root = "/home/obf"; | |||
$mongodb = "obf"; | |||
=== Libraries === | === Libraries === | ||
Either | Either <code>brew install</code> or <code>apt-get install</code> these dependencies as appropriate: | ||
zbar imagemagick graphviz tesseract | |||
zbar imagemagick graphviz tesseract | |||
=== Required Perl modules === | === Required Perl modules === | ||
The following Perl modules need to be installed (some of them might be included with Perl). | The following Perl modules need to be installed (some of them might be included with Perl). | ||
<pre> | <pre> | ||
Line 82: | Line 68: | ||
LWP::Authen::Digest | LWP::Authen::Digest | ||
</pre> | </pre> | ||
To install a module, you can sometimes use packages. | |||
e.g. on Debian / Ubuntu :Β <code>apt-get install libdatetime-perl</code> | |||
Or you can use ''cpan'': <code>cpan install DateTime</code> | |||
Or ''cpanm'': <code>perl cpanm --installdeps .</code> | |||
== MongoDB database == | == MongoDB database == | ||
Product Opener requires [https://www.mongodb.com/ MongoDB] to run. | |||
Install | * Install MongoDB. | ||
The | * The MongoDB database name is configured in PROJECTROOT/cgi/Config.pm | ||
The | * The MongoDB database is created when the first product is added. | ||
=== MongoDB indexes === | === MongoDB indexes === | ||
Line 99: | Line 94: | ||
In production we use a light weight Apache web server for static files (e.g. images) that does reverse proxying to a modperl Apache server that dynamically generates the HTML pages. | In production we use a light weight Apache web server for static files (e.g. images) that does reverse proxying to a modperl Apache server that dynamically generates the HTML pages. | ||
If the | If the traffic is low or moderate, you can use only one Apache mod_perl server that also serves images etc. | ||
In the example below, the Apache mod_perl server listens on port 19000. | In the example below, the Apache mod_perl server listens on port 19000. | ||
Line 165: | Line 160: | ||
=== modperl Apache server for dynamic pages === | === modperl Apache server for dynamic pages === | ||
# Download the latest version of the source of the Apache httpd server from the 2.2 branch (2.2.29 when writing this) | |||
* | #* Do not use the 2.4 branch as mod_perl is not yet compatible with it | ||
# Extract the source | |||
# <code>./configure --with-mpm=prefork --prefix=/home/obf/apache --enable-rewrite --enable-proxy --enable-proxy_http --enable-deflate --disable-userdir --enable-headers</code> | |||
# <code>make</code> | |||
# <code>make install</code> | |||
Β | # Download the latest version of mod_perl from http://perl.apache.org/ | ||
# Extract the source | |||
# <code>perl Makefile.PL MP_APXS=/home/obf/apache/bin/apxs</code> | |||
# <code>make</code> | |||
# <code>make install</code> | |||
==== Configuration ==== | ==== Configuration ==== | ||
Line 184: | Line 178: | ||
Change the port: | Change the port: | ||
Listen 19000 | <code>Listen 19000</code> | ||
Add at the end: | Add at the end: |
Revision as of 15:42, 26 May 2019
Installation instructions for Product Opener (see Project:Product Opener).
Before you start
Product Opener is not yet released as open source. The instructions below are for reference and for early testers of Product Opener. They are very likely to change as the code will be restructured, made more independent of proprietary code and specific Open Food Facts uses etc.
When it is released, Product Opener will have much easier to use install scripts and instructions.
Install directory
Instructions below use /home/obf for the install directory, replace with your install dir.
Product Opener code
Configuration
startup.pl
This file is used to preload Perl module in Apache. It contains a path that needs to be updated:
# Needs to be configured use lib "/home/obf/cgi/";
Config.pm
Config2.pm
Contains info about the domain, database and path. This is separated from Config.pm so that it is easy to create test instance that share the same configuration in Config.pm but are on other domains.
# server constants $domain = "openbeautyfacts.org"; # server paths $www_root = "/home/obf/html"; $data_root = "/home/obf"; $mongodb = "obf";
Libraries
Either brew install
or apt-get install
these dependencies as appropriate:
zbar imagemagick graphviz tesseract
Required Perl modules
The following Perl modules need to be installed (some of them might be included with Perl).
Cache::Memcached::Fast Crypt::PasswdMD5 DateTime DateTime::Format::Mail Digest::MD5 Digest::SHA1 Encode::Punycode File::Copy File::Path Geo::IP Getopt::Long GraphViz2 Hash::Util HTML::Defang HTML::Entities Image::Magick Image::OCR::Tesseract IPC::Open3 JSON LWP::Authen::Digest
To install a module, you can sometimes use packages.
e.g. on Debian / Ubuntu : apt-get install libdatetime-perl
Or you can use cpan: cpan install DateTime
Or cpanm: perl cpanm --installdeps .
MongoDB database
Product Opener requires MongoDB to run.
- Install MongoDB.
- The MongoDB database name is configured in PROJECTROOT/cgi/Config.pm
- The MongoDB database is created when the first product is added.
MongoDB indexes
See Product Opener mongodb indexes
Apache servers
In production we use a light weight Apache web server for static files (e.g. images) that does reverse proxying to a modperl Apache server that dynamically generates the HTML pages.
If the traffic is low or moderate, you can use only one Apache mod_perl server that also serves images etc.
In the example below, the Apache mod_perl server listens on port 19000.
Light-weight reverse proxy for static files
Compile:
./configure --prefix=/home/xyz/proxy --enable-rewrite --enable-proxy --enable-proxy_http --disable-userdir --enable-headers --enable-expires --enable-mime --enable-so --with-included-apr
Add to httpd.conf:
<VirtualHost *> DocumentRoot /home/obf/html ServerName world.openbeautyfacts.org ServerAlias *.openbeautyfacts.org ErrorLog /home/obf/logs/proxy_error_log CustomLog /home/obf/logs/proxy_access_log combined ServerAdmin stephane@openbeautyfacts.org <Directory "/home/obf/html"> Options -Indexes FollowSymLinks Order allow,deny Allow from all </Directory> ProxyPreserveHost On RewriteEngine on RewriteCond %{REQUEST_URI} !/./ RewriteRule ^(/cgi/.*)$ http://localhost:19000$1 [P,L] RewriteMap escape int:escape RewriteRule ^/favicon.ico$ /favicon.ico [L] RewriteCond %{REQUEST_URI} !^/images/ RewriteCond %{REQUEST_URI} !^/js/ RewriteCond %{REQUEST_URI} !^/rss/ RewriteCond %{REQUEST_URI} !^/robots RewriteCond %{REQUEST_URI} !^/clicks/ RewriteCond %{REQUEST_URI} !^/data/ RewriteCond %{REQUEST_URI} !^/files/ RewriteRule ^(.*)$ http://localhost:19000/cgi/display.pl?${escape:$1} [P,L,QSA] </VirtualHost> <VirtualHost *> DocumentRoot /home/obf/html ServerName openbeautyfacts.org ErrorLog /home/obf/logs/proxy_error_log CustomLog /home/obf/logs/proxy_access_log combined DirectoryIndex index.html index.shtml <Directory "/home/obf/html"> Options -Indexes FollowSymLinks Includes Order allow,deny Allow from all </Directory> RewriteEngine on RewriteCond %{HTTP_HOST} ^openbeautyfacts\.org RewriteRule ^/products$ /products.shtml [L] </VirtualHost>
modperl Apache server for dynamic pages
- Download the latest version of the source of the Apache httpd server from the 2.2 branch (2.2.29 when writing this)
- Do not use the 2.4 branch as mod_perl is not yet compatible with it
- Extract the source
./configure --with-mpm=prefork --prefix=/home/obf/apache --enable-rewrite --enable-proxy --enable-proxy_http --enable-deflate --disable-userdir --enable-headers
make
make install
- Download the latest version of mod_perl from http://perl.apache.org/
- Extract the source
perl Makefile.PL MP_APXS=/home/obf/apache/bin/apxs
make
make install
Configuration
In /home/obf/apache/conf/httpd.conf:
Change the port:
Listen 19000
Add at the end:
LoadModule perl_module modules/mod_perl.so PerlWarn Off PerlRequire /home/obf/cgi/startup.pl <Location /cgi> SetHandler perl-script PerlResponseHandler ModPerl::Registry PerlOptions +ParseHeaders Options +ExecCGI Order allow,deny Allow from all </Location> <VirtualHost *> DocumentRoot /home/obf/html ServerName world.openbeautyfacts.org ErrorLog /home/obf/logs/error_log CustomLog /home/obf/logs/access_log combined ScriptAlias /cgi/ "/home/obf/cgi/" </VirtualHost> PerlPostReadRequestHandler My::ProxyRemoteAddr
Installation issues
Depending on your environment (in particular different versions of Linux, Apache, MongoDB, Perl, Perl modules etc.), you may encounter some issues when installing or running Product Opener.
Product Opener installation issues lists those issues and steps to resolve them.