Manage SSL certificates with the control panel

Posted in Control panel by

Screenshot of WebFaction control panel certificate picker

You can now manage SSL/TLS certificates with the WebFaction control panel! In just a few clicks, you can:

  • generate certificate signing requests
  • upload or copy and paste certificates
  • choose which certificate to use with each of your websites

Effective immediately, you can secure a site without opening a support ticket. But if you run into any problems, the support team is still available to help you out. Because we’re sure you’re eager to start managing certificates on your own, we’ve enabled the feature now, but we’re working to make managing certificates even better over the coming days, with complete documentation, API support, and more.

But as of today, you can upload a certificate and private key from any certificate provider through the control panel. If you don’t already have a certificate, you have a few choices when it comes to getting one:

  • You can use your server’s default, shared certificate, though visitors will get an error message warning that the connection may not be secure.
  • You can buy a certificate from a certificate provider (typically your domain name registrar can provide this service).
  • You can get a certificate from Let’s Encrypt, a certificate authority that provides free 90-day certificates.

The new functionality is available in the panel under “Domains/Websites > SSL Certificates”.

We’re really excited about Let’s Encrypt! It’s a great project that’s helping to make secure sites practical for everyone. And though we’re not ready to announce anything yet, let’s just say that we want Let’s Encrypt and the control panel to work very well together.

Update: As of 12 October 2016, our documentation and API have been updated to include the new SSL certificate management features!

-
-

Meet our new SSD hosting plans

Posted in General by

Over the past few months we’ve been hard at work preparing our next generation of hosting plans. We’ve selected high-performance, pure SSD servers and we’ve carefully crafted a robust and secure software setup based on CentOS 7. Today we’re excited to launch these new plans:

  • $10/mo, 100GB pure SSD storage, 1GB RAM, 1TB bandwidth, shared servers
  • Managed cloud servers from $30/mo for 2GB of RAM

All existing customers can continue using their existing plans at their current price for as long as they like. To be migrated to a new plan just put in a migration request from the control panel.

Just like the old plans the new ones come with fully managed servers, SSH access, email and DNS hosting and a full-featured control panel to let you configure all aspects of your hosting.

Our friendly customer support team is available 24×7 to answer any questions you might have: either open a ticket or just email support@webfaction.com.

You can find all the details about our new plans on our updated website.

-
-

Your WebFaction account: customer support

Posted in General by

This is the fourth in a series that’s going over what’s included in your WebFaction account. In today’s installment, we’re taking a closer look at the team that supports your account.

Above all, the customer support team is committed to communicating with you in a timely, accurate, and courteous way. If you have a question, a problem, or a suggestion, we want you to be able to trust that the customer support team will respond with care and respect. Whether you’re asking a question in the Q&A Community or opening a support ticket, WebFaction customer support is there to help you.

But the customer support team isn’t passively waiting to hear from you. The support team is connected to monitoring and reporting about the state of the WebFaction service, so many problems are resolved without your intervention. For example, if a network connection goes down or server needs to be rebooted, the support team is often notified about and can respond to the problem before customers are even aware of the issue, much less had a chance to submit a support ticket.

Yet having a monitoring system doesn’t mean much if there’s no one around when alarms start going off, so WebFaction’s support team provides 24-hour coverage every day of the year. The team is globally distributed, so even though it might be a weekend, evening, or holiday where you are, it’s usually just another work day for the support team member that responds to your request. With continuous coverage, you can expect that it won’t be long before you receive a response and that the support team member that responds to you is up to the task.

In addition to the customer-facing support team, our team of systems administrators is on hand and on call too. Their main task is to make sure your server is stable, secure, and up-to-date. For example, our sysadmins took the steps required to protect WebFaction servers from the POODLE SSL vulnerability discovered recently. Or, in the event of a major problem, like a hardware failure, the systems administrators step in to restore the server to a working state or migrate it to new hardware.

In a perfect world, software never has bugs, servers never crash, and network connections never fail. Unfortunately, we don’t live in that world, so that’s why we’ve put together a multitalented team to look out for you.

To learn more about what you can do with your WebFaction account and how to get help, check out our documentation site, or join us in the Q&A Community to ask the support team a question.

Previously in the “Your WebFaction account” series: emailserversthe control panel.

-
-

Your WebFaction account: servers

Posted in General by

This post is the first in a new series for potential and current WebFaction customers to learn more about what’s included in WebFaction plans and accounts. For new and potential customers, we’re going to go in-depth on what WebFaction delivers. For customers who’ve been with us for a while, we hope to remind you of your plan and account features, so you can continue to get the most out of your account.

At the core of every WebFaction plan is use of one of our shared or dedicated servers, depending on your subscription. Regardless of the specific plan, each comes with an allocation of disk space, an allocation of memory, and SSH access.

Disk space and memory are critical to web hosting. Your disk space allotment, measured in gigabytes, is the amount of files you can store on a WebFaction server. Currently, our plans start with disk space allotments of 100 GB. As a point comparison, 100 GB is which is about as much data found on two to four Blu-ray discs. Your memory allotment, measured in megabytes, is the amount of the server’s working memory (also known as RAM) that you can use. Currently, a WebFaction plan starts with 512 MB of memory, which is sufficient for a wide variety of processes, including web applications and utilities.

Note that, on a shared server, your memory and disk space aren’t dedicated pieces of hardware for your use alone. To keep costs and prices low, your files are stored on disk drives split up between users, just as your processes use physical memory modules split between users. This kind of sharing is done in controlled way, so that individual users may not exceed their allotments of memory or disk space to the detriment of their server neighbors. This kind of sharing also comes with a major benefit: common processes, like nginx for static-only sites and shared MySQL and PostgreSQL databases, are shared across the server’s users, so they don’t count against your individual consumption of your memory allocations. Compare that to a Virtual Private Server (VPS), where each individual user must pay for the memory and disk space required to run a full operating system.

To access your server, your plan comes with a user account that’s accessed with SSH, or Secure Shell. SSH is an encrypted and authenticated way for you to connect to your server. You can use it control your files and processes and, thus, your disk space and memory consumption. With SSH, you can run software using a command-line interface called a shell (most people use the default shell, Bash). You can manage files using command line utilities, or connect with your favorite SFTP client. SFTP is a secure alternative to FTP, and uses SSH to communicate between client and server. Many hosts do not allow SSH connections (or even SFTP), but we offer it because it’s more secure and flexible.

To learn more about what you can do with your WebFaction account, check out our documentation site or join us in the Q&A Community.

Next in the “Your WebFaction account” series: Email

-
-

Busy October and a $50 credit for all new services ordered

Posted in Django by

As you may have noticed October has been a busy month for WebFaction:

To finish the month in style we are giving a $50 credit for all new services ordered before October 31st at midnight UTC:

New customers: just sign up between now and October 31st, pay $9.50 for the first month (or pay for longer) and enter the promo code “BUSYOCTOBER”. $50 will automatically be credited to your account.

Existing customers: add one new service to your account (or upgrade an existing service) between now and October 31st, pay for one month of that service and mention the promo code “BUSYOCTOBER”. A $50 credit will be automatically added to your account. You need to keep the new service for at least 6 months to keep the credit.

Each customer is limited to one credit only, and it is non-transferable and non-refundable.

Here is to a great October and many more great months to come!

-
-

Memory doubled!

Posted in General by

We’re excited to announce that we have doubled the memory on our base plan without changing the price: the memory quota is now 512MB instead of 256MB and the price is still $9.50/mo (or $8.50/mo if you pre-pay for one year). All existing accounts have been upgraded to the new quota.

The memory used by the operating system, web server and database servers still doesn’t count towards your memory usage.

Customers on Web418 and over can also purchase an extra 512MB of memory (for a total of 1GB) for $7/mo. Unfortunately customers on Web417 and under are still limited to 512MB of memory per account per server as these machines don’t have enough RAM to accommodate more than that. If you’re on Web417 and under and want more than 512MB of memory you can request a migration in the control panel under “Account->Server migration”.

We have also doubled the memory on our larger plans and you can now get a 2GB plan, 4GB plan or 8GB plan for $40/mo, $80/mo and $160/mo respectively (discounts apply for yearly pre-payments). See the “Account->Upgrade / downgrade” screen in the control panel for details.

Enjoy the extra memory!

-
-

Welcoming Ruby 2.0

Posted in General by

Today we’re happy to announce that the recently released Ruby 2.0 is now available on all of our servers. You can run Ruby 2.0 today as ruby2.0. Here it is on Web310:

$ ruby2.0 -v
ruby 2.0.0p0 (2013-02-24 revision 39474) [x86_64-linux]

Ruby 2.0 comes with a number of new features, performance improvements, and built-in library changes.

One of the more prominent new features is an addition to the language syntax: keyword arguments. Sometimes known as named parameters, keyword arguments provide a more explicit way of using arguments and setting defaults. Here’s a little example:

$ irb2.0
irb(main):001:0> def greet(greeting: 'Hello',  name: 'WebFactioneers')
irb(main):002:1>   puts "#{greeting}, #{name}!"
irb(main):003:1> end
=> nil
irb(main):004:0> greet(name: 'readers')
Hello, readers!
=> nil
irb(main):005:0> greet(greeting: 'Howdy')
Howdy, WebFactioneers!
=> nil
irb(main):006:0> # you can even change the order
irb(main):007:0* greet(name: 'readers', greeting: 'Salutations')
Salutations, readers!
=> nil

For more details about Ruby 2.0, including a description of potential incompatibilities with previous Ruby versions, please see the official release notes. Try out Ruby 2.0 with your WebFaction account and, if you have any questions, join us in the Q&A Community.

-
-

A look at databases on our servers

Posted in Control panel by

It’s a rare web hosting user that can get by without a database, so today we’re taking a closer look at how you can setup and use popular databases with WebFaction.

To start, the WebFaction control panel makes it easy to create databases, so there’s no need for any complex commands. You just pick out some details and click Add database (Check out the introduction to our new database management interface for an in-depth look):

A screenshot of the databases user interface

A database created with the control panel runs on your server’s shared database process. The shared server is more convenient than configuring your own and doesn’t count toward your account’s memory usage.

Different applications have different needs, so every WebFaction server supports both MySQL and PostgreSQL. MySQL is extremely popular and is used in several of our one-click installers, including WordPress and Drupal. PostgreSQL is growing in popularity and sports some exciting features, like procedural languages PL/Perl and PL/Tcl.

Once you’ve created your database of choice, it’s easy to connect to it and start storing data. Check out these documentation sections:

Although the shared database and the associated documentation is convenient, it’s not necessarily for everyone. That’s why we recently introduced a one-click installer for private MySQL and PostgreSQL instances. A private database is a good option if you’re facing problems with contention on the shared database or if you want to customize the database configuration.

And, of course, you can always set up and run a specialty database from your home directory on your own. For example, check out our instructions on installing MongoDB.

For more details, see the WebFaction User Guide page Databases. If you have any questions, let us know in the comments or join us in the Q&A communtity.

-
-

Ten amazing years, $100,000 giveaway!

Posted in General by

[Update Feb 7th 9.30am UTC] Our birthday giveaway has now ended. We sold out in about 40 hours.

Today marks WebFaction’s tenth birthday: ten years of hosting, ten years of support, and ten years of working to provide a service that we can be proud of. Ten years ago WebFaction opened its metaphorical doors to the world, and though a lot has changed since then, including our name, we hope to be doing for another ten years what we’ve always done: our best for our customers.

To celebrate this milestone, we’re giving away $100,000 in hosting services to new and existing customers. Starting tomorrow at 2pm UTC, new and existing customers may receive a one-time credit added to their accounts.

New customers: just sign up from tomorrow Feb 5th at 2pm UTC and pay $9.50 for the first month (or pay for longer). $100 will automatically be credited to your account.

Existing customers: add one new service to your account from tomorrow Feb 5th at 2pm UTC (a 256 MB plan, 256 MB extra memory, or a 1GB plan) and pay for one month of that service, and you will receive the next three months of that service for free.

Each customer is limited to one credit only, and it is non-transferable and non-refundable. Once we’ve given away $100,000 in services, the promotion will end and we’ll update this blog post to reflect that. Be quick or you might miss out on the free services. If you don’t need them yourself you can refer a friend and earn yourself some affiliate rewards.

Here is the Twitter announcement and the Facebook announcement so you can help spread the word if you’re on Twitter or Facebook.

Thank you for our first ten years; we can’t wait to see what’s in the years to come.

[Update Feb 5th 2pm UTC]: The giveaway has started!
[Update Feb 7th 9.30am UTC] Our birthday giveaway has now ended. We sold out in about 40 hours.

-
-

Setting up the reddit app without root access

Posted in General by

We manage the servers for you which means that you don’t have to worry about setting them up and most importantly maintaining them. We provide a team of systems administrators who work around the clock to do things like applying security patches, monitoring servers, fixing server issues when they arise, building RPMs with new versions of tools and backing up your data.
For this to work smoothly we have to make sure that our servers are set up in a certain way (with some standard linux tools and some of our own tools) and it means that you don’t get root access to the servers. In practice this is rarely an issue because you can usually install anything you need in your HOME directory, even when the tools’ installation guides assume that you do have root access.

As an example we’re going to set up the reddit app on our servers. This is the code running the popular reddit.com website. Here is the app running on a WebFaction server:

reddit app on WebFaction

The list of dependencies is a bit daunting and two of the tools (the reddit app itself and Cassandra) assume that you have root access in their installation guides. Let’s follow the reddit installation guide and see how we can work around the lack of root access. There are a lot of steps to install the app but we’ll be rewarded in the end by a fast and nice-looking reddit app instance:

1. Create a “custom app” in the WebFaction control panel

The reddit app runs the Pylons web server so we go to “Domains / websites -> Applications”” in the control panel and create a “Custom application running on port”. Let’s call it “reddit”. All this does is create an empty directory names $HOME/webapps/reddit on the server and give us a port that we can use to run the app on (in this case the port is 17594). When we point a domain to that app the front Nginx server on the server will get configured to proxy all requests to that port.

2. Create a website in the control panel to point a domain to the custom app

In step 1 we created a custom app called “reddit”. The next step is to go to “Domains / websites -> Websites” in the control panel and to create a website. Let’s set it up to serve the “reddit” app at http://demo.webfactional.com.

3. Create a Postgresql database from the control panel and load the reddit SQL functions

The reddit app requires a Postgresql database. To create one we simply go to “Databases” in the control panel and create a new Postgresql database called “demo_reddit”. We take note of the password and then SSH into the server as our normal user (“demo” in this example) to load the reddit SQL functions:

[demo@web356 reddit]$ cd $HOME/webapps/reddit/reddit
[demo@web356 reddit]$ psql -U demo_reddit demo_reddit < sql/functions.sql
Password for user demo_reddit:
CREATE FUNCTION
CREATE FUNCTION
CREATE FUNCTION
CREATE FUNCTION
CREATE FUNCTION
CREATE FUNCTION
CREATE VIEW
[demo@web356 reddit]$

4. Download the reddit app code and update the config files

[demo@web356 ~]$ cd $HOME/webapps/reddit
[demo@web356 reddit]$ git clone git://github.com/reddit/reddit.git
Cloning into reddit...
remote: Counting objects: 21254, done.
remote: Compressing objects: 100% (4888/4888), done.
remote: Total 21254 (delta 17314), reused 20069 (delta 16305)
Receiving objects: 100% (21254/21254), 14.36 MiB | 3.63 MiB/s, done.
Resolving deltas: 100% (17314/17314), done.
[demo@web356 reddit]$
# Update the config file with our own settings
[demo@web356 ~]$ sed -i 's/reddit.local/demo.webfactional.com/g' $HOME/webapps/reddit/reddit/r2/example.ini
[demo@web356 ~]$ sed -i 's/db_user = reddit/db_user = demo_reddit/' $HOME/webapps/reddit/reddit/r2/example.ini
[demo@web356 ~]$ sed -i 's/db_pass = password/db_pass = secret-password/' $HOME/webapps/reddit/reddit/r2/example.ini
[demo@web356 ~]$ sed -i 's/reddit,   127.0.0.1/demo_reddit,   127.0.0.1/' $HOME/webapps/reddit/reddit/r2/example.ini

5. Setup SunJDK

The reddit app requires Cassandra which runs on Java. All WebFaction servers come with OpenJDK but in our tests Cassandra didn't seem to work with that version of Java. So we're going to install SunJDK in our HOME directory and point our JAVA_HOME environment variable to it:

 <download jdk-7u7-linux-x64.tar.gz from http://www.oracle.com/technetwork/java/javase/downloads/jdk7u7-downloads-1836413.html and place the file in $HOME on the server>
[demo@web356 ~]$ cd $HOME
[demo@web356 ~]$ tar xf jdk-7u7-linux-x64.tar.gz
[demo@web356 ~]$ export JAVA_HOME=$HOME/jdk1.7.0_07

6. Setup Cassandra

[demo@web356 ~]$ cd $HOME
[demo@web356 ~]$ wget http://apache.mesi.com.ar/cassandra/1.1.5/
        apache-cassandra-1.1.5-bin.tar.gz
[...]
2012-10-15 15:56:27 (3.97 MB/s) - apache-cassandra-1.1.5-bin.tar.gz
[demo@web356 ~]$ tar xf apache-cassandra-1.1.5-bin.tar.gz
# Tell Cassandra to put its data in $HOME/webapps/reddit/cassandra-data
[demo@web356 ~]$ mkdir $HOME/webapps/reddit/cassandra-data
[demo@web356 ~]$ sed -i 's//var/lib/cassandra/data//home/demo/webapps/reddit/cassandra-data/' $HOME/apache-cassandra-1.1.5/conf/cassandra.yaml
[demo@web356 ~]$ sed -i 's//var/lib/cassandra/data//home/demo/webapps/reddit/cassandra-data/' $HOME/apache-cassandra-1.1.5/conf/cassandra.yaml
[demo@web356 ~]$ sed -i 's//var/lib/cassandra/commitlog//home/demo/webapps/reddit/cassandra-data/commitlog/' $HOME/apache-cassandra-1.1.5/conf/cassandra.yaml
[demo@web356 ~]$ sed -i 's//var/lib/cassandra/saved_caches//home/demo/webapps/reddit/cassandra-data/saved_caches/' $HOME/apache-cassandra-1.1.5/conf/cassandra.yaml
# Start Cassandra
[demo@web356 ~]$ cd $HOME/apache-cassandra-1.1.5/bin
[demo@web356 bin]$ ./cassandra
xss =  -ea -javaagent:./../lib/jamm-0.2.5.jar -XX:+UseThreadPriorities -XX:ThreadPriorityPolicy=42 -Xms3980M -Xmx3980M -Xmn800M -XX:+HeapDumpOnOutOfMemoryError -Xss180k
[...]
 INFO 16:12:00,714 Node localhost/127.0.0.1 state jump to normal
 INFO 16:12:00,714 Bootstrap/Replace/Move completed! Now serving reads.

Cassandra is now running. In a production setup we would have started Cassandra in the background but in this example we started it in the foreground so we'll leave that window open and will run the next commands in a new SSH session in another window:

[demo@web356 ~]$ cd /home/demo/apache-cassandra-1.1.5/bin
[demo@web356 bin]$ ./cassandra-cli -h localhost
Connected to: "Test Cluster" on localhost/9160
Welcome to Cassandra CLI version 1.1.5

Type 'help;' or '?' for help.
Type 'quit;' or 'exit;' to quit.

[default@unknown] create keyspace reddit;
9a890e19-4fe7-3655-afdb-95bcc7065947
Waiting for schema agreement...
... schemas agree across the cluster
[default@unknown] use reddit;
Authenticated to keyspace: reddit
[default@reddit] create column family permacache with column_type = 'Standard' and comparator = 'BytesType';
5f39dc3d-e8fc-34db-bb59-f3806851300c
Waiting for schema agreement...
... schemas agree across the cluster
[default@reddit]

Note that depending on its configuration Cassandra can use a lot of memory (1GB or more) so you will need enough memory on your account to run it.

7. Install Erlang

The reddit app requires RabbitMQ, which in turn requires Erlang. Since Erlang isn't installed globally on the WebFaction servers we'll just install it in our HOME directory:

[demo@web356 ~]$ cd
[demo@web356 ~]$ wget http://www.erlang.org/download/otp_src_R15B02.tar.gz
[...]
2012-10-16 11:18:19 (430 KB/s) - otp_src_R15B02.tar.gz
[demo@web356 ~]$ tar xf otp_src_R15B02.tar.gz
[demo@web356 ~]$ cd otp_src_R15B02
[demo@web356 otp_src_R15B02]$ mkdir $HOME/erlang
[demo@web356 otp_src_R15B02]$ ./configure --prefix=$HOME/erlang
Ignoring the --cache-file argument since it can cause the system to be erroneously configured
Disabling caching
checking build system type... x86_64-unknown-linux-gnu
[...]
                 Using fakefop to generate placeholder PDF files.

*********************************************************************
[demo@web356 otp_src_R15B02]$ make
cd erts && ERL_TOP=/home/demo/otp_src_R15B02 make NO_START_SCRIPTS=true  FLAVOR=
make[1]: Entering directory `/home/demo/otp_src_R15B02/erts'
[...]
make[2]: Leaving directory `/home/demo/otp_src_R15B02/erts/start_scripts'
make[1]: Leaving directory `/home/demo/otp_src_R15B02/erts'
[demo@web356 otp_src_R15B02]$ make install
[...]
cd erts && ERL_TOP=/home/demo/otp_src_R15B02 make NO_START_SCRIPTS=true  FLAVOR=
make[1]: Entering directory `/home/demo/otp_src_R15B02/erts'
ln -s ../lib/erlang/bin/ct_run ct_run
ln -s ../lib/erlang/bin/run_test run_test
[demo@web356 otp_src_R15B02]$ export PATH=$PATH:$HOME/erlang/bin

8. Setup RabbitMQ

[demo@web356 ~]$ cd
[demo@web356 ~]$ wget http://www.rabbitmq.com/releases/rabbitmq-server/v2.8.7/rabbitmq-server-generic-unix-2.8.7.tar.gz
[...]
2012-10-16 13:41:53 (686 KB/s) - rabbitmq-server-generic-unix-2.8.7.tar.gz
[demo@web356 ~]$ tar xf rabbitmq-server-generic-unix-2.8.7.tar.gz
# Set a few environment variables to tell RabbitMQ to only listen to localhost
[demo@web356 ~]$ export RABBITMQ_NODENAME=rabbit@localhost
[demo@web356 ~]$ export RABBITMQ_NODE_IP_ADDRESS=127.0.0.1
[demo@web356 ~]$ export ERL_EPMD_ADDRESS=127.0.0.1
[demo@web356 ~]$ cd rabbitmq_server-2.8.7/sbin
[demo@web356 sbin]$ ./rabbitmq-server
Activating RabbitMQ plugins ...
[...]
starting notify cluster nodes                                         ...done
broker running

The RabbitMQ server is now running. Again, in a production setup we would have started it in the background but in this example we started it in the foreground so we'll leave that window open and will run the next commands in a new SSH session in another window.
The next step is to add a user in RabbitMQ:

[demo@web356 ~]$ export PATH=$PATH:/home/demo/erlang/bin
[demo@web356 ~]$ export RABBITMQ_NODENAME=rabbit@localhost
[demo@web356 ~]$ export RABBITMQ_NODE_IP_ADDRESS=127.0.0.1
[demo@web356 ~]$ export ERL_EPMD_ADDRESS=127.0.0.1
[demo@web356 ~]$ cd $HOME/rabbitmq_server-2.8.7/sbin
[demo@web356 sbin]$ ./rabbitmqctl add_user reddit reddit
Creating user "reddit" ...
...done.
[demo@web356 sbin]$ ./rabbitmqctl set_permissions -p / reddit ".*" ".*" ".*"
Setting permissions for user "reddit" in vhost "/" ...
...done.
[demo@web356 sbin]$

9. Run memcache

Memcache is already install on all WebFaction server so we just need to start an instance:

[demo@web356 ~]$ memcached

The Memcache server is now running. Since we started it in the foreground we'll leave that window open and will run the next commands in a new SSH session in another window.

10. Install Cython

[demo@web356 ~]$ cd
[demo@web356 ~]$ wget http://cython.org/release/Cython-0.17.1.tar.gz
[...]
2012-10-16 14:13:01 (2.36 MB/s) - Cython-0.17.1.tar.gz
[demo@web356 ~]$ tar xf Cython-0.17.1.tar.gz
[demo@web356 ~]$ cd Cython-0.17.1
[demo@web356 Cython-0.17.1]$ python2.7 setup.py install
Compiling module Cython.Plex.Scanners ...
[...]
Writing /home/demo/lib/python2.7/Cython-0.17.1-py2.7.egg-info
[demo@web356 Cython-0.17.1]$

11. Install PyCaptcha

[demo@web356 ~]$ cd
[demo@web356 ~]$ svn co http://svn.navi.cx/misc/trunk/pycaptcha/
A    pycaptcha/BUGS
[...]
 U   pycaptcha
Checked out revision 12529.
[demo@web356 ~]$ cd pycaptcha/
[demo@web356 pycaptcha]$ python2.7 setup.py install
running install
running build
[...]
Writing /home/demo/lib/python2.7/PyCAPTCHA-0.4-py2.7.egg-info
[demo@web356 pycaptcha]$

12. Install libmemcached-0.53 and pylibmc

The reddit app uses pylibmc which requires libmemcached-0.32 or later. Unfortunately the libmemcached version installed globally on the WebFaction servers is 0.31. So we're going to install a newer version (0.53) in our HOME directory and then build pylibmc against this newer version:

[demo@web356 ~]$ cd
[demo@web356 ~]$ wget https://launchpad.net/libmemcached/1.0/0.53/+download/libmemcached-0.53.tar.gz
[...]
2012-10-16 14:30:12 (322 KB/s) - libmemcached-0.53.tar.gz
[demo@web356 ~]$ tar xf libmemcached-0.53.tar.gz
[demo@web356 ~]$ cd libmemcached-0.53
[demo@web356 libmemcached-0.53]$ mkdir $HOME/libmemcached
[demo@web356 libmemcached-0.53]$ ./configure --prefix=$HOME/libmemcached
[...]
   * Warnings as failure:       no
---
[demo@web356 libmemcached-0.53]$ make install
[...]
make[1]: Leaving directory `/home/demo/libmemcached-0.53'
[demo@web356 libmemcached-0.53]$ export LD_LIBRARY_PATH=$HOME/libmemcached/lib
[demo@web356 libmemcached-0.53]$ cd
[demo@web356 ~]$ wget http://pypi.python.org/packages/source/p/pylibmc/pylibmc-1.2.3.tar.gz
[...]
2012-10-16 14:48:05 (390 KB/s) - pylibmc-1.2.3.tar.gz
[demo@web356 ~]$ tar xf pylibmc-1.2.3.tar.gz
[demo@web356 ~]$ cd pylibmc-1.2.3
[demo@web356 pylibmc-1.2.3]$ python2.7 --with-libmemcached=/home/demo/libmemcached/ setup.py install
running install
[..]
Writing /home/demo/lib/python2.7/pylibmc-1.2.3-py2.7.egg-info
[demo@web356 pylibmc-1.2.3]$ 

13. Install Pylons

[demo@web356 ~]$ cd
[demo@web356 ~]$ wget http://pypi.python.org/packages/source/P/Pylons/Pylons-1.0.1.tar.gz
[...]
2012-10-16 14:06:50 (2.40 MB/s) - Pylons-1.0.1.tar.gz
[demo@web356 ~]$ tar xf Pylons-1.0.1.tar.gz
[demo@web356 ~]$ cd Pylons-1.0.1
[demo@web356 Pylons-1.0.1]$ python2.7 setup.py install
[...]
Installed /home/demo/lib/python2.7/repoze.lru-0.6-py2.7.egg
Finished processing dependencies for Pylons==1.0.1
[demo@web356 Pylons-1.0.1]$

14. Build the reddit app

[demo@web356 ~]$ cd $HOME/webapps/reddit/reddit/r2
[demo@web356 r2]$ sed -i 's/PYTHON=python/PYTHON=python2.7/' Makefile
[demo@web356 r2]$ make pyx
[+] including definitions from Makefile.py
cython r2/lib/utils/_utils.pyx
[...]
gcc -pthread -shared build/temp.linux-x86_64-2.7/r2/lib/c/filters.o -L/usr/local/lib -lpython2.7 -o /home/demo/webapps/reddit/reddit/r2/Cfilters.so
touch build/pyx-buildstamp
[demo@web356 r2]$ python2.7 setup.py develop
[...]
Using /home/demo/lib/python2.7/MarkupSafe-0.15-py2.7-linux-x86_64.egg
Finished processing dependencies for r2==0.0.0dev
[demo@web356 r2]$

15. Start the reddit app

We have now installed all the dependencies and configured the reddit app with our settings. The final step is to start the reddit app on the port that was given to us in step 1:

[demo@web356 ~] cd $HOME/webapps/reddit/reddit/r2
[demo@web356 r2]$ paster serve --reload example.ini http_port=17594
Starting subprocess with file monitor
Overriding g.http_port to 17594
reddit app web356.webfaction.com:11612 started a84ad12 at 2012-10-16 15:00:28.862558
Starting server in PID 11612.
serving on 0.0.0.0:17594 view at http://127.0.0.1:17594

16. Check out our handy work

We point our browser at http://demo.webfactional.com/ and can finally get our reward:
reddit app on WebFaction

17. A bit of fun

We couldn't resist doing some basic load-testing on the app to see what kind of figures we'd get:

[demo@web356 ~]$ ab -n 1000 http://demo.webfactional.com/
This is ApacheBench, Version 2.3 <$Revision: 655654 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking demo.webfactional.com (be patient)
Completed 100 requests
Completed 200 requests
Completed 300 requests
Completed 400 requests
Completed 500 requests
Completed 600 requests
Completed 700 requests
Completed 800 requests
Completed 900 requests
Completed 1000 requests
Finished 1000 requests


Server Software:        nginx
Server Hostname:        demo.webfactional.com
Server Port:            80

Document Path:          /
Document Length:        30282 bytes

Concurrency Level:      1
Time taken for tests:   3.349 seconds
Complete requests:      1000
Failed requests:        0
Write errors:           0
Total transferred:      30607000 bytes
HTML transferred:       30282000 bytes
Requests per second:    298.63 [#/sec] (mean)
Time per request:       3.349 [ms] (mean)
Time per request:       3.349 [ms] (mean, across all concurrent requests)
Transfer rate:          8926.04 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    0   0.0      0       0
Processing:     3    3   1.0      3      35
Waiting:        3    3   1.0      3      34
Total:          3    3   1.0      3      35

Percentage of the requests served within a certain time (ms)
  50%      3
  66%      3
  75%      3
  80%      3
  90%      4
  95%      4
  98%      4
  99%      4
 100%     35 (longest request)
[demo@web356 ~]$

Almost 300 requests per second on a simple shared account and without any tweaking. That's a pretty good figure.

Final notes

The steps to set up an app such as the reddit app on a WebFaction shared server without root access are almost the same as the steps with root access. A few things are slightly harder (having to specify the --prefix=$HOME/tool option when compiling certain tools) but on the other hand you won't have to do all the sysadmin work that our team does: applying security patches to globally installed software, monitoring the server, fixing server issues when they arise etc.

-
-