.. _installation_deployment_nginx: Deployment with Nginx and supervisord ===================================== This setup can be accomplished simply and is capable of serving a large amount of traffic. `Nginx `_ is a highly optimized HTTP server, very capable of serving static content as well as acting as a proxy between other applications and the outside world. This section assumes you have read :ref:`installation_deployment`. Managing Your Paster Processes with Supervisord ----------------------------------------------- `Supervisord `_ is a program that will manage arbitrary processes, restarting them when they fail, providing hooks for sending emails when things change, and even exposing and XML-RPC interface for determining the status of your system. It will manage your `PubliForge` instance. Install it on your system: .. code-block:: bash $ sudo aptitude install supervisor Add in ``/etc/supervisor/conf.d`` a ``publiforge.conf`` configuration file such as: .. code-block:: ini [program:PFInstance] command = /usr/local/virtualenv/bin/paster serve /home/pfinstance/PubliForge/pfinstance.ini http_port=6600 startsecs = 5 user = pfinstance environment = VIRTUAL_ENV="/usr/local/virtualenv", HGENCODING="utf-8", LANG="fr_FR.UTF-8" redirect_stderr = true stdout_logfile = /var/log/supervisor/pfinstance.log The environment variable ``LANG`` must contain the value stored in ``/usr/default/locale``. Now, install ``paster``: .. code-block:: bash $ source /usr/local/virtualenv/bin/activate (virtualenv)$ pip install PasteScript Then, reload `supervisord`: .. code-block:: bash $ sudo supervisorctl reload Now, a `PubliForge` instance is listening on port 6600. You can visit it (http://localhost:6600) and use ``supervisorctl`` to supervise it. Configuring Nginx ----------------- It's time for us to publish our application to the World Wide Web. Install `Nginx `_ on your system: .. code-block:: bash $ sudo aptitude install nginx `Nginx` needs to be configured as a proxy for your application. Create a ``publiforge.conf`` and save it in ``/etc/nginx/conf.d``. An example is shown here: .. code-block:: nginx upstream pfinstance-site { server 127.0.0.1:6600; } server { listen 80; server_name www.pfinstance.fr; access_log /var/log/nginx/access_pfinstance.log; location / { proxy_set_header Host $host; # $host:$server_port; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; client_max_body_size 10m; client_body_buffer_size 128k; proxy_connect_timeout 60s; proxy_send_timeout 90s; proxy_read_timeout 90s; proxy_buffering off; proxy_temp_file_write_size 64k; proxy_pass http://pfinstance-site; proxy_redirect off; } location /Static { root /usr/local/virtualenv/lib/python2.7/site-packages/PubliForge-2.3.0-py2.7-linux-x86_64.egg/publiforge; expires 2d; add_header Cache-Control public; access_log off; } } server { server_name www.pfinstance.org www.pfinstance.com; rewrite ^ http://www.pfinstance.fr/ permanent; } Read the `configuration documentation `_ of `Nginx `_ for more options. The ``location /Static`` block will greatly improve performance because requests for this content (images, CSS and JavaScript) will not need to be proxied to `PubliForge` application and can be served directly. Correct root path according to your environment. Your can now visit the URL used for ``server_name`` parameter (here http://www.pfinstance.fr).