Difference between revisions of "Product Opener/Installation"

From Open Food Facts wiki
Jump to navigation Jump to search
(Replaced content with "Category:ProductOpener Category:Developer Installation instructions for Product Opener (see Product Opener). The newest installation instructions are on https...")
 
Line 3: Line 3:
 
Installation instructions for Product Opener (see [[Product Opener]]).
 
Installation instructions for Product Opener (see [[Product Opener]]).
  
== Before you start ==
+
The newest installation instructions are on https://en.wiki.openfoodfacts.org/Infrastructure#Server_configuration
 
 
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 <code>brew install</code> or <code>apt-get install</code> 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).
 
 
 
<pre>
 
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
 
</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 ==
 
Product Opener requires [https://www.mongodb.com/ 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:
 
 
 
<pre>
 
 
 
<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>
 
 
 
</pre>
 
 
 
=== 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 ====
 
 
 
In /home/obf/apache/conf/httpd.conf:
 
 
 
Change the port:
 
 
 
<code>Listen 19000</code>
 
 
 
Add at the end:
 
 
 
<pre>
 
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
 
</pre>
 
 
 
== 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.
 

Latest revision as of 11:59, 12 April 2020

Installation instructions for Product Opener (see Product Opener).

The newest installation instructions are on https://en.wiki.openfoodfacts.org/Infrastructure#Server_configuration