Now everybody knows it's way smarter to just pay someone to host your website. But what not everybody knows is that it's way more punk rock to Do it Yourself. So what follows are some tips / pointers / instructions for setting  up your own home webserver (which will burn a scant 2 watts) using all free, open source software, a Raspberry Pi, and your home internet connection.

The emphasis here is on lightweight, which fits well with the Raspberry Pi. Sure, you can setup a blog with wordpress or Django, and they will run (I've tried it, at least with Django). But they probably will run rather slowly. Why? The rPi doesn't have a lot of memory or processing power, and a database / front end model requires a decent amount of that. If your site / blog ever gets much traffic, it'll likely buckle under the load. The answer? Just serve up plain old static HTML pages. It's fast, secure, simple, and easy on the rPi's limited resources. But rather than painstakingly handcodeing each new blog entry, you can use a static html generator like Pelican to make it easy.

Here are the hardware ingredients:
1) A Raspberry Pi (with power supply and SD card)
2) A computer with an SD card reader (or a USB stick SD card reader)
3) A simple home network, shared by your computer and the rPI. If you have a router and an internet connection, you're golden. The rPi will need to be connected via ethernet, so you might need a cable. 

Here are the main software ingredients:
1) The standard Raspberry Pi Linux "Raspbian" operating system, based on Debian.
2) Lighttpd, a lightweight web server, that's pretty easy to setup.
3) Pelican - a static html blog generator (you can also use something like Octopad, if you prefer.)
4) PageKite - a "localhost tunneling solution," which I found to be much better than dynamic DNS. 

Human requirements:
1) Some linux know how, or
2) A friend with some linux know how, and / or
3) Know how to use forums to ask for help, and
4) Patience

This instructable won't be comprehensive, but it will point you to the resources / places to get help if you need it.

Step 1: Setup Your RPi

First you need to setup the SD card on your rPi. On this little computer, the SD card is your hard drive. It needs an operating system so you can boot and run your rPI, and tell it what software to run to serve your site.

Check out the getting started guide here:

You'll be installing the latest "Raspbian" SD card image from here:

Follow the instructions to download the image and install it on your SD card.

Now, if you have a monitor, keyboard, and mouse that you can use to run your rPi, you're set. If you don't, it's ok - you can still set things up from the command line in what's called "headless" mode. To do that, you'll need to "SSH" into your rPi through the network connection shared by it and your computer. Here's a great tutorial that explain how to do that:

Do run the Pi setup script when prompted.

You'll want to change the default password! If you leave the username as 'pi' and the password as 'raspberry,' you will be pwned. Change it now to something strong - web servers are exposed to the big bad internets, so you'll want to be security conscious.

cool! do you have anything up right now that's hosted by a rpi?
here is similar mini server based on arm cortex a8 samsung s5pv210: <br>http://www.quickembed.com/Tools/Shop/Solution/201209/261.html <br>soon will have an rpi version!
a picture
<p>Nice job on the tutorial </p>
tips: unless your doing intense video lower it's memory 2) use only class 10 SD cards for speed 3) 1amp power supplies the older apple USB supplies work best 4) Apache runs fine on the pie 5) label your SD cards 6) change the raspberry pi and root passwords to different from each other values
any idea what sort of traffic it can handle?
It should be able to handle a fair amount, since all it is doing is serving static files.
I gave it a good try, here is where I got stuck. First to put phython part above would saved me a bit of time to figure it out. Still not sure the order of install PIP or Easy_Iinstall or how virtualenv works or is. With no real experiance of linux that well. I couldn't save anything in /var/www .. Some feedback. I'm sure I'll work it out and thanks for writing this, just hit my first hurdle I just hope I don't land on my face. <br> <br>Cheers!
Hi PoulGrym! <br>re: Putting python first: good idea - I'll see about editing this! <br>For installing python (it may even be already installed), it might be as simple as typing: <br>sudo apt-get install python <br> <br>Give that a go, and if it works I'll update this to use the shorter instructions. <br> <br>As to installing Pelican - try: <br>sudo pip install pelican <br> <br>The &quot;sudo&quot; before a command stands for &quot;super user!&quot; - the user who has all permissions on your system. It tells the system to execute the following command as if you were the superuser - or God - of this machine. On Debian / Ubuntu type of Linuxes, you'll generally need to use &quot;sudo&quot; before commands that install stuff, because only the super user has the necessary privileges to install stuff on the computer. <br> <br>Copying files to /var/www should also work if you type sudo before the command. Just be careful - playing god with sudo means that if you say &quot;sudo (do something that will totally hose my machine)&quot;, it will say &quot;Yessir, of course sir!&quot; and proceed to hose your machine. :) Of course, if that happens, just start over - it's a great way to learn, if sometimes a little disheartening.
there's this really nice site that will give you free domain names. it's really handy. dot.tk
Testing... hmm, I know I replied to that first comment by amanda, but it's no longer visible. Wonder why?

About This Instructable




Bio: I develop tinkering activities that invite people to experience and reflect on creativity and learning through play. Previously I ran the Scratch online community in ... More »
More by AmosLightnin:Pallet Christmas tree stand Clothes Drying Rack Out of Pallets and Paracord Bathroom shelf made of pallet wood 
Add instructable to: