Ever wonder how cloud services like iCloud, Amazon EC2, Rackspace, or Dropbox actually work?  Each of these major corporate programs rely upon thousands of computer servers to host their services.  Although companies try to hide it, each one relies upon thousands of servers that are always on, constantly drawing excessive amounts of energy and requiring numerous hardware replacements just to carry out their daily functions.

This project will show you how to build your own cloud server to gain more power and flexibility with your computer and teach you a bit about how computer networking (if you don't already know).  I used a CuBox  (~3 watts of power) with a  LaCie HDD (~24 watts of power) for my own setup, but you can use whatever you'd like.  All together, my cloud server uses less than half the power of an average light bulb!  No more Google Drive, Dropbox, or anything else.

-You'll need to buy some new hardware (an ARM computer and probably an HDD)
-Although this is energy efficient it does use a tiny bit of energy that wouldn't otherwise be used
-Read the service agreement from your ISP before doing this!  Passing lots of large files over WAN will slow down their network and could lead to the ISP throttling your bandwidth or worse (they don't like large upload usage), so read your service agreement and use your head before setting this up!  You should have no problem with a business account or fiber internet. I am not responsible for any problems that you create.

-Free access to all the files on your server
-Similar to Dropbox, Rackspace, or Google Drive except you own it and can modify it to your needs (for example: giving it as much storage space as you want)!
-Works well as a web server (for low traffic sites) and the website can be configured and monitored remotely
-An encrypted proxy server for insecure, pubic networks
-VPN for access to your home network (or wherever your server is)
-grid computing, virtual server hosting, more?
-Having fun learning about some of the basics of servers and the internet!

-ARM computer (not actually *required* but it's what makes this project so low energy and awesome)
-at least one HDD or SDD for storage
-some patience and sticktoitiveness (I'll try my best to keep things minimally geeky but be prepared to google around, soak up some wiki articles, and jump into the unknown)

Step 1: Internet Background

I feel like I have very little chance of really being able to do this section justice but I'll try laying out some of the basics.  Feel free to skip it if you already know this or are just too excited to stop and read all this mumbo-jumbo.

If you're reading this on the Instructables site right now, then you've opened up a port on your computer and home router to transmit internet traffic, sent a connection to a remote domain name that's attached to a WAN IP address, and connected through a port on a remote computer to a web server application that's hosting the instructables.com web page files.  Look at the picture above for a diagram of this process.

A domain name is the URL address aka the name of the website (instructables.com in this case).  This is bound to a WAN IP  address (, WAN = Wide Area Network) which is what computers use to state their location on the internet to other computers (so others can connect to you and you can record who you're connected to).  When you pass your connection through the internet to a web server, you'll be bouncing your connection through many intermediary computers that relay your signal forward (there's no way that one cable could connect you directly to Melbourne, Australia if you are positioned in Tajikistan, for instance).  Then, your home router translates this WAN IP to a LAN IP ( -->, LAN = Local Area Network) using a technique called Network Address Translation (NAT).   Try typing $ traceroute instructables.com into your command line to see what hops you're using for your connection right now. 

For any of the traffic to pass through the computers, a port must be open.  The default port is 80 for HTTP (normal internet) and 443 for HTTPS (secure internet, used when making online purchases etc.) but there are thousands of different ports that allow various applications to communicate over the internet with other computers.  Samba, for example, uses 445, SSH uses 22, and FTP uses 20&21. 

To recap, your web browser passes a signal through an open port over the LAN to the router.  The router receives the signal on a port, uses NAT to alter the transmission, and pushes the connection through a port on the other side to send it over WAN.  After bouncing back and forth across the world, your signal finally hits the Instructables server.  The web server application on the Instructables server receives your signal through the port, transmits the web page info, and sends it all back.

It's really more complicated than this but this is probably enough to grok everything we'll do in this project   :p

Here's some more info:
Google's 20 Things I learned
Just bought a pogoplug v2 for under twenty dollars. Scoping out a linux install for it.
Awesome, that's really cheap! I know that Arch has a pretty good support for the pogoplug v2. Good luck with getting everything set up!
Definitely a lot of piecemeal information in the instructable. Would not use samba though, it is too much of a challenge to manage. SSHFS (availble for MSWinfows) is what we use for network file access. Most routers do not filter above port 1000. So you really do not need to use port 22 only for ssh and etc. You get around opening ports for that. Most hackers look at those ports first anyway. You can also set up your web server to use those higher port numbers, end user just has to know the port number and add it to the url after a colon. i.e. www.somesite.com:8080 where 8080 is the port the webserver uses instead of port 80. As for ssh tunnels. there is a bit more to it. More to securing ssh than just using it.<br> <br> Would not recommend Arch for a novice user unless they know the drill. I like mint for new users, but they do not have an arm version yet. At this point ubuntu, debian, and arch are probably the most stable for arm. (correct me if I am wrong.) We use Debian on the arm based Nslu2. pretty much just like using it on an intel box. (<a href="https://www.instructables.com/id/Give-your-Cisco-Linksys-NSLU2-some-muscle-part-1/" rel="nofollow">https://www.instructables.com/id/Give-your-Cisco-Linksys-NSLU2-some-muscle-part-1/</a>) If I get a pogoplug for my birthday, I will do a version for it.&nbsp; Also run Debian on the insignia infocast (aka chumby) which is arm based.<br> <br> Yet to get an opportunity to own an rpi. Looking at other plat forms.&nbsp; For what it is worth you can run a slimmed down atom or x86 as a not half bad setup either. Working on a solar powered intel p1. Hope I can get it running by this weekend. Seeing if it will run the latest DSL linux on compact flash.
Good idea using SSHFS! I, honestly, was getting really frustrated with Samba+SSH so I kinda tried everything until it worked. This allows multiple computers to mount the server but it is way more of a pain to use/set up. I also missed the hardening ssh section, you're right. Sorry if the instructions for this project were kinda all over the place :p <br> <br>Do public networks usually block connections over port 1000? I'm going to try installing some software on a new phone with wifi in a couple days to use it as a client. I was thinking to mostly use 80 or 443 since they kind of have to be open. <br> <br>Your Nslu2 project looks really neat btw. Using the chumby insignia infocast with a solar powered server sounds like an awesome idea too! Does the chumby/solar powered computer combo work well?
solar powered Chumby is no different than using it otherwise. Yes you probably still may have to port forward, but it will not be as small of a target to examine. As for ports, every isp is differen in what they might allow. I do not like my isp as it blocks the traditional mail port. Can not lave a mail server without doing some real shenanigans.

About This Instructable




Bio: I like eating burritos and spending way too much time sitting around tinkering with stuff. I'm too lazy to think of something to put ... More »
More by greenyouse:Garage Wall Makeover Personal ARM Cloud Server Lego Computer Case 
Add instructable to: