[[TOC]] == Installation on Cherokee == This is supposed to be the fastest system for High-Volume sites Main docs are here: [wiki:InstallationGuidelines/Linux/Server/CherokeePostgreSQL] This page provides some supplementary notes === uWSGI === uWSGI allows different virtual hosts to reload their modules without restarting for other users. * http://www.cherokee-project.com/doc/cookbook_uwsgi.html ==== Install uWSGI ==== Needs installing from Source: {{{ apt-get install -y libxml2-dev make wget http://projects.unbit.it/downloads/uwsgi-0.9.9.2.tar.gz tar zxvf uwsgi-0.9.9.2.tar.gz cd uwsgi-0.9.9.2 make cp uwsgi /usr/local/bin cd .. }}} ==== Install Cherokee ==== Whilst there is a version in Squeee, better to install the latest to gain performance advantages on static content: {{{ CHEROKEE_CONF="/usr/local/etc/cherokee/cherokee.conf" apt-get install -y gettext libgeoip-dev libssl-dev rrdtool make cd /tmp wget http://www.cherokee-project.com/download/1.2/1.2.99/cherokee-1.2.99.tar.gz tar zxvf cherokee-1.2.99.tar.gz cd cherokee-1.2.99 ./configure --datarootdir=/var/www make make install mkdir /var/log/cherokee chown www-data /var/log/cherokee wget http://eden.sahanafoundation.org/raw-attachment/wiki/InstallationGuidelinesCherokee/cherokee -O /etc/init.d/cherokee chmod +x /etc/init.d/cherokee ldconfig rcconf --on cherokee }}} or: {{{ apt-get install -y gettext libgeoip-dev libssl-dev rrdtool make apt-get install -y git devscripts git-buildpackage bison flex autotools-dev libpam0g-dev libldap-dev libmysqlclient-dev libavformat-dev libavcodec-dev libavutil-dev libpcre3-dev libbz2-dev git clone git://git.debian.org/collab-maint/cherokee.git cd cherokee uscan --force git-buildpackage cd ../build-area/ dpkg -i libcherokee-base0_1.2.2-2_i386.deb dpkg -i libcherokee-client0_1.2.2-2_i386.deb dpkg -i libcherokee-server0_1.2.2-2_i386.deb dpkg -i libcherokee-mod-libssl_1.2.2-2_i386.deb dpkg -i libcherokee-mod-rrd_1.2.2-2_i386.deb dpkg -i cherokee_1.2.2-2_i386.deb dpkg -i cherokee-admin_1.2.2-2_i386.deb }}} ==== Configure Cherokee for uWSGI ==== Be sure to set the default app in routes.py: {{{ cat << EOF > "/home/web2py/routes.py" #!/usr/bin/python default_application = 'eden' default_controller = 'default' default_function = 'index' routes_onerror = [ ('eden/400', '!'), ('eden/401', '!'), ('eden/*', '/eden/errors/index'), ('*/*', '/eden/errors/index'), ] EOF }}} Set Workers to #CPU cores +1 {{{ cat << EOF > "/home/web2py/uwsgi.xml" /home/web2py/ 3 EOF vi /etc/cherokee/cherokee.conf # Add server!timeout = 300 vserver!20!collector!enabled = 1 vserver!20!directory_index = index.html vserver!20!document_root = /var/www vserver!20!error_writer!filename = /var/log/cherokee/cherokee.error vserver!20!error_writer!type = file vserver!20!logger = combined vserver!20!logger!access!buffsize = 16384 vserver!20!logger!access!filename = /var/log/cherokee/cherokee.access vserver!20!logger!access!type = file vserver!20!match = wildcard vserver!20!match!domain!1 = * vserver!20!match!nick = 0 vserver!20!nick = maintenance vserver!20!rule!210!handler = file vserver!20!rule!210!match = fullpath vserver!20!rule!210!match!fullpath!1 = /maintenance.html vserver!20!rule!110!handler = redir vserver!20!rule!110!handler!rewrite!10!regex = ^/* vserver!20!rule!110!handler!rewrite!10!show = 1 vserver!20!rule!110!handler!rewrite!10!substring = /maintenance.html vserver!20!rule!110!match = directory vserver!20!rule!110!match!directory = / vserver!20!rule!10!handler = common vserver!20!rule!10!handler!iocache = 1 vserver!20!rule!10!match = default vserver!30!collector!enabled = 1 vserver!30!directory_index = index.html vserver!30!document_root = /var/www vserver!30!error_writer!filename = /var/log/cherokee/cherokee.error vserver!30!error_writer!type = file vserver!30!logger = combined vserver!30!logger!access!buffsize = 16384 vserver!30!logger!access!filename = /var/log/cherokee/cherokee.access vserver!30!logger!access!type = file vserver!30!match = wildcard vserver!30!match!domain!1 = * vserver!30!match!nick = 0 vserver!30!nick = Production vserver!10!collector!enabled = 1 vserver!10!directory_index = index.html vserver!10!document_root = /var/www vserver!10!error_writer!filename = /var/log/cherokee/cherokee.error vserver!10!error_writer!type = file vserver!10!logger = combined vserver!10!logger!access!buffsize = 16384 vserver!10!logger!access!filename = /var/log/cherokee/cherokee.access vserver!10!logger!access!type = file vserver!10!nick = default vserver!10!rule!10!handler = common vserver!10!rule!10!handler!iocache = 1 vserver!10!rule!10!match = default vserver!20!collector!enabled = 1 vserver!20!directory_index = index.html vserver!20!document_root = /var/www vserver!20!error_writer!filename = /var/log/cherokee/cherokee.error vserver!20!error_writer!type = file vserver!20!logger = combined vserver!20!logger!access!buffsize = 16384 vserver!20!logger!access!filename = /var/log/cherokee/cherokee.access vserver!20!logger!access!type = file vserver!20!match = wildcard vserver!20!match!domain!1 = * vserver!20!match!nick = 0 vserver!20!nick = maintenance vserver!20!rule!210!handler = file vserver!20!rule!210!match = fullpath vserver!20!rule!210!match!fullpath!1 = /maintenance.html vserver!20!rule!110!handler = redir vserver!20!rule!110!handler!rewrite!10!regex = ^/* vserver!20!rule!110!handler!rewrite!10!show = 1 vserver!20!rule!110!handler!rewrite!10!substring = /maintenance.html vserver!20!rule!110!match = directory vserver!20!rule!110!match!directory = / vserver!20!rule!10!handler = common vserver!20!rule!10!handler!iocache = 1 vserver!20!rule!10!match = default vserver!30!collector!enabled = 1 vserver!30!directory_index = index.html vserver!30!document_root = /var/www vserver!30!error_writer!filename = /var/log/cherokee/cherokee.error vserver!30!error_writer!type = file vserver!30!logger = combined vserver!30!logger!access!buffsize = 16384 vserver!30!logger!access!filename = /var/log/cherokee/cherokee.access vserver!30!logger!access!type = file vserver!30!match = wildcard vserver!30!match!domain!1 = * vserver!30!match!nick = 0 vserver!30!nick = Production vserver!30!rule!400!document_root = /home/web2py/applications/eden/static vserver!30!rule!400!encoder!deflate = allow vserver!30!rule!400!encoder!gzip = allow vserver!30!rule!400!expiration = time vserver!30!rule!400!expiration!time = 7d vserver!30!rule!400!handler = file vserver!30!rule!400!match = fullpath vserver!30!rule!400!match!fullpath!1 = /favicon.ico vserver!30!rule!400!match!fullpath!2 = /robots.txt vserver!30!rule!400!match!fullpath!3 = /crossdomain.xml vserver!30!rule!300!document_root = /home/web2py/applications/eden/static vserver!30!rule!300!encoder!deflate = allow vserver!30!rule!300!encoder!gzip = allow vserver!30!rule!300!expiration = time vserver!30!rule!300!expiration!time = 7d vserver!30!rule!300!handler = file vserver!30!rule!300!match = directory vserver!30!rule!300!match!directory = /eden/static/ vserver!30!rule!300!match!final = 1 vserver!30!rule!200!encoder!deflate = allow vserver!30!rule!200!encoder!gzip = allow vserver!30!rule!200!handler = uwsgi vserver!30!rule!200!handler!balancer = round_robin vserver!30!rule!200!handler!balancer!source!10 = 1 vserver!30!rule!200!handler!check_file = 0 vserver!30!rule!200!handler!error_handler = 1 vserver!30!rule!200!handler!modifier1 = 0 vserver!30!rule!200!handler!modifier2 = 0 vserver!30!rule!200!handler!pass_req_headers = 1 vserver!30!rule!200!match = directory vserver!30!rule!200!match!directory = / vserver!30!rule!100!handler = common vserver!30!rule!100!handler!iocache = 1 vserver!30!rule!100!match = default source!1!env_inherited = 1 source!1!group = web2py source!1!host = 127.0.0.1:59025 source!1!interpreter = /usr/local/bin/uwsgi -s 127.0.0.1:59025 -x /home/web2py/uwsgi.xml source!1!nick = uWSGI 1 source!1!timeout = 300 source!1!type = interpreter source!1!user = web2py }}} Emperor mode can be used to put the site into maintenance: * http://projects.unbit.it/uwsgi/wiki/Emperor Create a simple uwsgi app & swap in a config file for this - uwsgi will reload automatically. == Static home page == ConfigurationGuidelines#StaticHomePage {{{ vserver!30!rule!300!document_root = /home/web2py/applications/eden/static vserver!30!rule!300!handler = redir vserver!30!rule!300!handler!rewrite!10!regex = ^.*$ vserver!30!rule!300!handler!rewrite!10!show = 1 vserver!30!rule!300!handler!rewrite!10!substring = /eden/static/index.html vserver!30!rule!300!match = and vserver!30!rule!300!match!final = 1 vserver!30!rule!300!match!left = fullpath vserver!30!rule!300!match!left!fullpath!1 = / vserver!30!rule!300!match!right = not vserver!30!rule!300!match!right!right = header vserver!30!rule!300!match!right!right!complete = 0 vserver!30!rule!300!match!right!right!header = Cookie vserver!30!rule!300!match!right!right!match = re vserver!30!rule!300!match!right!right!type = regex }}} === FastCGI === http://web2py.com/AlterEgo/default/show/17 ---- InstallationGuidelines