Wikijunior:Raspberry Pi/Raspberry Pi Web Server & HTML Tutorial

Tutorial by Andrew Oakley
Public Domain 28 Jan 2017

The Terminal edit


Start the terminal with the Raspberry Pi menu – Accessories – Terminal.

We’re going to install a web server. A server is a program that other people can connect to.

The ordinary user pi doesn’t have the ability to install software, so we use the sudo command to temporarily switch to the superuser (also known as the root user). Enter:

sudo apt update
sudo apt upgrade

The update command gets an up-to-date list of software. The upgrade command installs new versions of any out-of-date software you have. If you are on a slow internet connection, upgrade might take a long time. You might be asked to confirm by pressing Y and ↵ Enter. Now let's install the Apache web server, the most commonly used Linux web server.

sudo apt install apache2

You’ll see that this asks to install apache2 and a few other programs too. These are called "dependencies" – they are programs which apache2 needs in order to work.

Once Apache is installed, start your web browser. On a Raspberry Pi 2 or 3, you can use the Pi menu – Internet – Chromium web browser.

If you are on an older Pi 1 or Pi Zero, select Pi menu - Run – and then type epiphany and press ↵ Enter. Epiphany is a simpler browser for slower computers.

In the web browser's address bar, type localhost and press ↵ Enter.

You should see the Apache2 Default Page. localhost always refers to the computer you're using. So if someone types it into their Raspberry Pi, it'll refer to their Raspberry Pi and not yours.

Go back to the terminal and enter:


It will tell you the name of your computer. This might be raspberrypi or someone might have customised it for you, such as rpi-ab12. Now go back to your web browser, and type:


… where hostname is the name of your computer. You must put .local afterwards on Linux computers. On Microsoft Windows, you'd use .lan instead: hostname.lan

Provided you don't have the same hostname as someone else on the same network (usually "your network" means "your building") then this should find only your computer. This is called Zeroconf and is also known as Avahi or Bonjour. Some computers don't support Zeroconf so you can find your IP address instead:

hostname -I

(note capital i) Your IP address will look like four sets of numbers, such as Now try browsing to your IP address in the web browser.

Creating your own web page in HTML5 edit

Back in the terminal, enter:

cd /var/www/html
ls -lh

/var/www/html is where web pages are kept. You should see index.html. We're going to rename it to -old (to keep a copy, just in case) and create a new index.html of our own.

sudo mv index.html index-old.html
sudo leafpad index.html

A text editor program should pop up, with a blank page. Start typing:

<title>My first web page</title>
Hello world
My name is Andrew

Change Andrew to whatever your name is, and save the page with File menu, Save.

Reload the web browser using the reload button near the address bar or by pressing the F5 key.

What did this code do? edit

<html> tells the browser this is the start of a web page; </html> is the end
<head> says this is the start of the header, where the title goes; </head> is the end
<body> is the start of the text of a web page; </body> is the end
<p> is the start of a new paragraph; the closing tag </p> is optional in HTML5

index.html is a special file name that gets loaded if you don't specify a particular web page inside a folder. So http://localhost is the same as http://localhost/index.html

Under "My name is Andrew" now type:

<a href="pet.html">My favourite pet</a>

Don’t forget to File, Save, then reload browser.

<a> is a link to another web page (or any file on a web browser). The href (hypertext reference) can be "relative" such as pets.html - this will become http://hostname.local/pets.html because pets.html is in the same folder as index.html.

To link to web pages in other folders on other computers, you can use an "absolute" address such as:

Close Leafpad with the X at top right. We're going to add a photo. Let's list the photos (if you’re not using the Cotswold Jam preinstalled SD card, you'll need to find your own photos):

ls -lh /home/pi/Pictures/pets

Pick a pet (cat, dog, guinea pig, hamster) and copy the picture to the web server directory:

sudo cp /home/pi/Pictures/pets/cat.jpg /var/www/html

Create a new web page with:

sudo leafpad pet.html
<title>My favourite pet</title>
My favourite pet is:
<img src="cat.jpg">

Reload browser and click on the "My favourite pet link". You can use the Back button to go back to the index page.

Now try browsing other classmates' websites. You will need to know their hostname or IP address. For example http://rpi-12ab.local or

If your hostname is raspberrypi (the default) then that might clash with other similarly named computers. You can change it by going to Pi menu - Preferences - Raspberry Pi Configuration and changing the Hostname. You'll be prompted to reboot your machine when done.

If you want to uninstall Apache:

sudo apt remove apache2 && sudo apt-get -y autoremove

Advanced exercises edit

Create a CSS file for your webpage edit

Cascading style sheets (CSS) are files used by websites to change the appearance of the content on each webpage.

Create the styles.css file just like the corresponding index.html file.

sudo leafpad styles.css

Type this CSS to alter the <p> tags.

p {
   font-weight: bold;
   font-size: 16px;

Now to add the CSS file to the HTML file so that web browser knows to use it.

<link rel="stylesheet" href="styles.css">
<title>My favourite pet</title>
My favourite pet is:
<img src="cat.jpg">

By just using the name of the tag on its own that will alter all uses of the tag. CSS uses classes which can be used on specific tags. Type the following into the styles.css file to add a class: {
   font-weight: bold;
   font-size: 16px;

Then declare the class to the <p> tags.

<link rel="stylesheet" href="styles.css">
<title>My favourite pet</title>
<p class="pet">
My favourite pet is:
<img src="cat.jpg">

You can try other CSS attributes to style your webpage such as:

  • font-style: italic; makes the font italic.
  • margin adds a margin to separate the tag from other elements on the page. Using margin on its own will add a margin to all four sides of the tag.
  • color: #F00 changes the colour of the text to red.
  • background-color: #000 changes the background colour of the webpage to black.

You can refer to the colour table below or do a Google search to find your preferred colour. CSS supports RGB, HSL and hexadecimal colour standards, though hexadecimal is preferred because it's the most concise.

Black#0000, 0, 00, 0, 0
Red#F00255, 0, 00, 0, 0
Green#0F00, 255, 00, 0, 0
Blue#00F0, 0, 2550, 0, 0
Cyan#0FF0, 255, 2550, 0, 0
Yellow#FF0255, 255, 00, 0, 0
Magenta#F0F255, 0, 2550, 0, 0
White#FFF255, 255, 255255, 255, 255

What is hexadecimal? edit

A numerical base is the amount of single-digit numbers that can be used for counting. In everyday maths, we use decimal (base 10) which are the numbers 0, 1, 2, 3, 4, 5, 6, 7, 8 and 9.

Computers are based on binary (base 2) which uses the single-digit numbers 0 and 1. This means they don't count or perform calculations in the same way we do.

Hexadecimal (base 16) is a simplified way to write binary which prevents us from writing out a lot of zeros! Much like binary being the numbers 0 and 1, hexadecimal are the numbers 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E and F.

For example: Decimal 255 = Binary 11111111 = Hexadecimal FF

Each binary digit is doubled for each column. So 1+2+4+8+16+32+64+128 = 255

Decimal (base 10)2561286432168421
Binary (base 2)011111111
Hexadecimal (base 16)0FF

For further information:

Public IP Addresses edit

To make your website visible to people outside your network (for example, in other buildings or other towns or countries), you will need a Public IP address. Read the manual for your router to find out how to set up Port Forwarding for port 80. You can find your public IP address by searching Google for "what is my ip".

Your public IP address can change; ask your internet service provider for a Static Public IP address. You can then buy a domain name and associate it with your static public IP address. For some UK ISPs, you might already have a subdomain, for example Plusnet gives every customer

Stopping and starting server programs edit

From the terminal:

sudo systemctl stop apache2

Reload localhost in the browser. Note the error message - the web server has been stopped.

sudo systemctl status apache2

Shows "Active: inactive (dead)" – it’s not running.

sudo systemctl start apache2

Reload the   browser. It works again.

sudo systemctl status apache2

Shows "Active: active (running)"

sudo systemctl status bing-bong-bop

Shows "Loaded: not-found". This means bing-bong-pop doesn't exist, isn't installed, or you spelt it wrong. Of course it doesn’t exist, I made it up as an example.

Controlling automatic starts edit

Reboot the machine with Pi menu - Shutdown... – Reboot.

Once the machine has restarted, browse to localhost. Note how the web server is started automatically on boot. From the terminal:

sudo systemctl disable apache2

Reboot again and, once restarted, try browsing to localhost. You get an error message – the web server didn’t automatically start when you rebooted.

You can start it manually with:

sudo systemctl start apache2

or you can reenable it to start automatically every reboot with:

sudo systemctl enable apache2

Removing installed programs edit

sudo apt remove apache2
sudo apt-get autoremove

Remember those "dependencies", extra programs which Apache needed to install so that it would work? We use the autoremove directive to uninstall them after we’ve uninstalled Apache.

Updating and installing other programs edit

sudo apt update
sudo apt upgrade

…to get the latest versions of the software you already have.

You can find names and descriptions of other packages to install on this website:

Once you’ve done an apt update, you can install new software with:

sudo apt install packagename

…where packagename is the name of the software you want to install.

Be wary of anything that asks to install lots and lots of other packages. Learn how to make a backup of your SD card, for example with Win32DiskImager on a Windows laptop.

Files edit

The original PDFs for this tutorial are available on Wikimedia Commons:

Cjam-web-server-html-tutorial.pdf edit

Cjam-web-server-further-reading.pdf edit