Comme vous le savez (ou pas), CherryPy intègre un serveur web, ce qui lui permet de servir lui-même ses sites web sans avoir à recourir aux services d'un Apache ou d'un IIS. Cette fonctionnalité, qui ressemble au départ à un atout, se transforme en problème dès qu'on aborde la question de l'hébergement : sur un hébergement mutualisé, à moins que celui-ci ne soit dédié à l'hébergement de sites CherryPy, vous ne pourrez pas l'installer. Sur un serveur dédié, ça vous ennuiera probablement de sacrifier votre port 80 sur l'autel de CherryPy alors qu'un bon vieux Apache pourrait très bien s'occuper de ça, sans pour autant empêcher que des sites utilisant d'autres technologies soient hébergés sur la même machine.
Si, à ma connaissance, aucune solution n'existe pour l'hébergement mutualisé, on peut en revanche assez facilement héberger des sites CherryPy derrière Apache sur un serveur dédié. L'astuce consiste à utiliser les possibilités d'
url rewriting d'Apache pour qu'il envoie les requêtes à CherryPy (il existe d'autres façons de le faire, mais celle-là me plait bien :) ).
Je vais vous décrire ici comment j'ai réalisé ça sur mon serveur sous Debian 4.0 (Etch).
1./ Installer Apacheapt-get install apache2
2./ Faire en sorte que mod_rewrite, mod_proxy et mod_proxy_http soient chargés au démarrage d'Apacheln -s /etc/apache2/mods-available/rewrite.load /etc/apache2/mods-enabled/rewrite.load
ln -s /etc/apache2/mods-available/proxy.load /etc/apache2/mods-enabled/proxy.load
ln -s /etc/apache2/mods-available/proxy.conf /etc/apache2/mods-enabled/proxy.conf
ln -s /etc/apache2/mods-available/proxy_http.load /etc/apache2/mods-enabled/proxy_http.load
3./ Mettre les règles de redirection qui vont bien dans le fichier de configuration (ici, on redirige tout ce qui arrive sur /cherrypy/, /var/www/ étant le DocumentRoot du serveur)
(pour tester, vous pouvez mettre ça dans /etc/apache2/sites-available/default, juste avant le </VirtualHost>)ProxyPreserveHost On
<Directory /var/www/cherrypy/>
RewriteEngine On
RewriteRule ^(.*)$ http://localhost:8080/$1 [proxy]
</Directory>
4./ Redémarrer Apache/etc/init.d/apache2 restart
Et voilà :-)
Si vous voulez des informations sur les autres méthodes :
http://tools.cherrypy.org/wiki/BehindApache