Changes

Jump to navigation Jump to search
no edit summary
Line 1: Line 1:  +
Installation instructions for Product Opener (see [[Project:Product Opener]]).
    +
== Before you start ==
   −
* My [[User:Javichu/To-do list|To-do list]]
+
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.
   −
'''Merging & updating categories:'''
+
== Install directory ==
   −
* [[User:Javichu/Temp 5|Foods]]
+
Instructions below use /home/obf for the install directory, replace with your install dir.
** Animal-based foods
  −
** [[User:Javichu/Temp 6|Plant-based foods]]
  −
*** [[User:Javichu/Temp 4|Cereals and their products]]
  −
*** [[User:Javichu/Temp 7|Legumes and their products]]
  −
*** [[User:Javichu/Temp 2|Fruits and their products]]
  −
*** [[User:Javichu/Temp 8|Nuts and their products]]
  −
*** [[User:Javichu/Temp 9|Vegetables and their products]]
  −
*** [[User:Javichu/Temp 10|Mushrooms and their products]]
  −
*** [[User:Javichu/Temp 11|Algae and their products]]
  −
*** [[User:Javichu/Temp 12|Culinary herbs and spices and their products]]
  −
*** [[User:Javichu/Temp 13|Other plants and their products]]
  −
*** Oilseeds and oilfruits and their products
  −
*** Coffee, cocoa, tea and herbal ingredients
  −
** Microbiological cultures --> Yeasts
  −
** [[User:Javichu/Temp 3|Sweetening agents]]
  −
** [[User:Javichu/Temp 14|Mixed origin or composite foods]] (recipe based)
  −
*** [[User:Javichu/Temp 15|Sauces]]
  −
*** [[User:Javichu/Temp 16|Chocolates]]
  −
*** [[User:Javichu/Temp 17|Pastas]]
  −
*** [[User:Javichu/Temp 18|Puffed cereal cakes]]
  −
*** .....
      +
== Product Opener code ==
    +
=== Configuration ===
   −
* [[User:Javichu/Temp 1|Merging & updating vegetable drinks]]
+
==== startup.pl ====
 +
 
 +
This file is used to preload Perl module in Apache.
 +
It contains a path that needs to be updated:
 +
 
 +
<pre>
 +
# Needs to be configured
 +
use lib "/home/obf/cgi/";
 +
</pre>
 +
 
 +
==== 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.
 +
 
 +
<pre>
 +
# server constants
 +
$domain = "openbeautyfacts.org";
 +
 
 +
# server paths
 +
$www_root = "/home/obf/html";
 +
$data_root = "/home/obf";
 +
 
 +
$mongodb = "obf";
 +
</pre>
 +
 
 +
== MongoDB database ==
 +
 
 +
== 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 trafic 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 ===
 +
 
 +
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>
 +
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
 +
* ./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:
 +
 
 +
<pre>
 +
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>

Navigation menu