Published: May 4, 2013 by Noe Nieto
I’ve been helping my friends with their Plone site for some years now. Initially, the site was hosted on IntoVPS, which is quite cheap and nice to setup. Unfortunately, at that time, we needed a lot of storage and their plans didn’t provide enough space, so I moved the site to amazon AWS and it’s been almost two years since then. Unfortunately, AWS is very expensive and we have lowered our storage requirements since then. So I’m moving the site again, this time to WebFaction.
We went for the 256MB plan because it includes 256MB of RAM (plone4 uses 160MB at most), 100GB of space (right now we need about 60 GB) and 600 GB of bandwidth which I’m not measuring yet. So, a single plone instance will fit there.
Configuring webfaction
We are using HTTPS to encrypt the whole site’s traffic. I set up two websites:
one for HTTP and another for HTTPS. The HTTP website is linked to a
Static/CGI/PHP application that only has two files: an index.html
and a
.htaccess
file which it’s only purpose is to rewrite/redirect the traffic to
the HTTPS port.
Options +FollowSymLinks
RewriteEngine on
RewriteBase /
RewriteRule ^(.*)$ https://www.holokinesislibros.com/$1 [R=301,L]
On the HTTPS website I created a Zope (2.13.15) - Plone (4.1.6)
application. This is basically a directory that contains a Python2.6
virtualenv, a buildout-cache
directory and uses Plone’s universal installer
to create and bootstrap a buildout environment in another directory called
zinstance
. It also creates a crontab entry to start Zope’s instance every 20
minutes.
But I’m using a customized buildout, so I ignored the zinstance
directory
and instead cloned my repo on the application directory and bootstraped it
with a fresh virtualenv of python 2.7.
cd webapps/hkl_plone
virtualenv ve
hg clone ssh://hg@bitbucket.org/tzicatl/holokinesis_libros
cd holokinesis_libros
../ve/bin/python bootstrap.py -c webfaction.cfg
bin/buildout -c webfaction.cfg
Not everything went smooth. I had to adjust my buildout so it could run with
the new branch of zc.buildout
2.0. Namely: some syntax errors in my
versions.cfg
, remove buildout.dumppickedversions
extension and update
bootstrap.py
I also had to copy some settings from the zinstance
directory, like the
port.
Finally, in order to completely switch from zinstance
to my own buildout in
holokinesis_libros
I change the crontab command, from:
2,22,42 * * * * $HOME/webapps/hkl_plone/zinstance/bin/instance start > /dev/null 2>&1
to:
2,22,42 * * * * $HOME/webapps/hkl_plone/holokinesis_libros/bin/instance start > /dev/null 2>&1
Setting up HTTPS
Plone (in fact, Zope2) needs to be monkey-patched so it recognizes the X-Forwaded-SSL
header.
Fortunately, webfaction provides a patch>
that works really well with recent versions of Plone (4.1.6).
cd ~/webapps/hkl_plone/holokinesis_libros/products
wget -O patch.tar.gz http://wiki.webfaction.com/attachment/wiki/WebFactionSslPatch/WebFactionSSLPatch-1.0.tar.gz?format=raw
tar -zxvf patch.tar.gz
rm patch.tar.gz
I had to to issue a support ticket so the web serve could load my SSL certificates. I only had to point them to the directory where my certs are and they did all the job cofiguring the certificates.
Moving data.fs
and blobs
I went the easy route and made an uncompressed tarball of the var/
directory
and copied it to the new server.
On the AWS server:
cd path/to/plone/on/aws
tar -cf var.tar var/
# I started a GNU screen session for this.
rsync -avz --delete var/ tzicatl@tzicatl.webfactional.com:/home/tzicatl/webapps/hkl_plone/holokinesis_libros/var/
# Then go to sleep, because it takes a lot of time to transfer from one site to another.
On the Webfaction server:
.. code-block :: bash
cd ~/webapps/hkl_plone/holokinesis_libros/
tar -xf var.tar
Server startup and configuration of VHM
Starting the Plone instance is quite easy:
cd ~/webapps/hkl_plone/holokinesis_libros/
bin/instance start
The ZMI welcome screen shows on https://www.holokinesislibros.com/ and https://www.holokinesislibros.com/Plone works very well. Now it is time to login to the ZMI and add a few configuration tot he Virtual Host monster. And, at the end I ended up adding just one line:
*.holokinesislibros.com/Plone
The end
Its alive and kicking! :)