Turning your Raspberry Pi into a personal web server

Picture of Turning your Raspberry Pi into a personal web server
LAMP is an acronym that stands for LinuxApacheMySQLPHP and are components required to run a Dynamic HTML webpage.

This instructable will demonstrate how you can turn your Raspberry Pi into a personal web server. The steps to install all of the components are relatively straight forward. After your personal web server is complete, you can use it to host a custom HTML or PHP resume, or a personal landing page which is what I chose to do. 
Remove these adsRemove these ads by Signing Up

Step 1: Materials

Picture of Materials
- Raspberry Pi

- SD memory card (4GB or larger)

- Power adapter compatible with the MicroB connector on the Raspberry pi

- Ethernet patch cable

- HDMI compatible monitor and HDMI cable

- USB Keyboard (no mouse is necessary, you can navigate the entire interface via keyboard. Arrow keys,  Enter, ESC, etc.)

Step 2: Preparation

The Raspberry Pi always needs to boot off of an SD card loaded with an operating system (OS) disk image.

You may buy an SD card that has already been made bootable complete with the Raspberry Pi OS or you may buy a blank card and

There are many OS versions offered for the Raspberry Pi, however, in this example, I have chosen to use Raspbian “Wheezy”.

Download the OS disk image and write it to your memory card. To write the image I used Win32 Disk Imager. Once the image is written to the card, plug the card into the Raspberry Pi's SD card reader and power on the device. (Be sure you have all the proper I/O devices plugged in, i.e., keyboard, Ethernet cable,  HDMI monitor.)

For Future Reference. This code allows one to Chroot or "jail" a person to their home directory keeping them from browsing the whole system.
Create Group for sftp users:

sudo groupadd sftponly


Add the following to the end of the /etc/ssh/sshd_config file (sudo nano):

Subsystem sftp internal-sftp

# This section must be placed at the very end of sshd_config

Match Group sftponly

ChrootDirectory %h

ForceCommand internal-sftp

AllowTcpForwarding no


-------------Commands to create a new user-------------

----------------------(ex john.)-----------------------

---(replace 'john' with the user you want to create)---


sudo mkdir /home/john

sudo useradd -d /home/john -M -N -g users john

sudo passwd john

[enter password]

sudo chown root:root /home/john

cd /home/john

sudo mkdir files

sudo chown john:users /home/john/files

sudo usermod john -g sftponly

sudo usermod john -s /bin/false

sudo service ssh restart

BONUS: To mount a device such as a USB stick to your home directory,
sudo mount -t ext4 /dev/sda1 /home/john/files

This assumes you have an ext4 formatted USB drive.

You can do this by:
sudo mkfs.ext4 /dev/sda1

Assuming the USB drive you want to format is sda1
It will also erase all files off the device
Ext4 will allow you to chown the drive to your user instead of root

(this also is my workaround for the whole kitkat SDcard issue)

Dougless21 days ago

Really inspiring and interesting article! I used it for researching different possibilities before i made my own webserver using the Raspberry Pi, Model B.

Check out the site the Raspberry is hosting at the moment -

cnl22184 months ago

Thanks for the great tutorial! Got me setup quickly and correctly!

Drdray14 months ago

hi great tutorial! I am wondering how do you get to the part in step seven where you changes things from yes to no? I've already gotten to the black window with the options at the bottom

derekiswise6 months ago

HI, thank you so much for this tutorial. Could you add the adding the html resume part soon. I am only 13 and just got the server working right and I have a html page i coded i want to put on there. (my eventual goal is to have my raspberry pi gpio's controlled online with a live video stream. i am good with the video stream but need to add the html.)

i just got it all figured out! i am going to use to get a subdomain for free because i have a dynamic ip and need a dns

GraziCNU (author)  derekiswise5 months ago

Glad to hear you figured out your own issue! Only 13? Good on you starting young! I wish I was that ambitious when I was that age haha.


Justinvent1 year ago
Awesome work! I'm going to build this in the coming weeks.
GraziCNU (author)  Justinvent1 year ago
Thanks man, keep me posted on what you choose to do with it!
Is it possible to use this sever with an address that does not show up as the sever's IP?
GraziCNU (author)  Justinvent1 year ago
If you know your pi's public IP address you can use an Internet domain registrar to forward and mask the IP with a personal domain name. GoDaddy is an obvious example, but I know there are others that are cheaper (I'll look into it and report back). Just a heads up as well, you also may run I to issues if your modem/router does not have a static IP. If it's dynamic, your public IP will change and you won't be forwarding your domain to the right address. I'm pretty sure if you call your ISP you can have them set your modem to a static IP.

Normally a static ip costs more. A possibility is it is a dns so you install the extra software and every time you ip changes it tells changes the ip in the registrar. Not only that but you get like 3 free sub domains when you sign up. Hope this helps

pidan10 months ago
Well done thanks
I wish to host multiple websites all with a different domain name but not the ip address (e.g
mechagen11 months ago
Is it possible to make a private steam game server out of this or would I need some more or different programs? By the way good work!
GraziCNU (author)  mechagen11 months ago
I have not personally attempted this, but in checking around, I have seen that this can be done. Thanks for the compliment too, by the way!
jblieden11 months ago
i have a question, when i see the black terminal page and it says rasberrypi on the top it looks like a windows 7 page. are you running the commands from another computer into the rasberrypi or the rasberrypi directly? This is for a school project so any help is appreciated.
GraziCNU (author)  jblieden11 months ago
I'm remotely running the commands from another computer by using SSH. Hop over to step #4, it explains a bit more about the process there. If you still have questions after skimming the instructions, just write back and I'd be more than happy to offer more assistance!
ibauters1 year ago
Sorry to bother you again so shortly, but I get a 403 for every file I upload (using FTP) to the raspberry pi, how can I fix the permissions so everything I upload is accessible from the web (octal 644)
GraziCNU (author)  ibauters1 year ago
(removed by author or community request)
I figured out how to fix it!
You need to adjust the 'umask' setting in vsftpd.conf
Works like a charm for me!
GraziCNU (author)  ibauters1 year ago
Glad to hear you figured it out! If you get a moment, feel free to post your adjustments here just in case someone else runs into the same issue :)
ibauters1 year ago
Can you explain how to install Node.js on a Pi with the server running like you explained here?
GraziCNU (author)  ibauters1 year ago
I've never installed it before, but I'd be more than happy to look into it for you. Give me about week and I'll create a full instructable for that :)
willb281 year ago
hay love the how to do you think you could make a how to on adding HTML :)
GraziCNU (author)  willb281 year ago
That was actually going to be my next step with this Instructable. Stay tuned!