Raspberry PI as a web server setup guide

September 29, 2019

Raspberry PIs are cheap. Static site generators result in sites which are easy to serve. Lets encrypt offers free SSL certificates and a great tool for managing them. Cloudflare has an API which can be used for dynamic dns, which is also free. £35 for one off website hosting with SSL is pretty cool. Note: You can use Netlify which offers hosting of your static site for free with SSL included. This is likely a good choice for a “real” website but if you have a pi lying around this is a fun little project.

Set a static IP on the PI to allow a port forwarding rule to be setup which will survive server reboots.

Open /etc/dhcpd.conf

interface eth0
static ip_address=192.168.2.13/24
static routers=192.168.2.1
static domain_name_servers=1.0.0.1
sudo reboot

Now setup 2 port forwarding rules on your router. One for port 80 and one for port 443. Normally your router will have a web interface where you can configure such things.

Install Nginx to serve your website. Its a relatively lightweight webserver unlike the more traditional apache.

sudo apt update
sudo apt install -y nginx

Link your site to the default

sudo ln -s /home/user/yoursite /var/www/html

Install docker

sudo apt-get install apt-transport-https ca-certificates software-properties-common -y
curl -fsSL get.docker.com -o get-docker.sh && sh get-docker.sh
sudo usermod -aG docker pi

Add the following to /etc/sources.list

deb https://download.docker.com/linux/raspbian/ stretch stable
sudo apt-get update
sudo apt-get upgrade

systemctl start docker.service

To check it is installed correctly.

docker info

Move your domain to cloudflare. This process might take 24-48 hours and initially involves opening an account, adding your domain, and then

Install cloudflare dynamic dns updater and run it via docker.

https://github.com/oznu/docker-cloudflare-ddns

Setup certbot

You need to also delete /etc/pip.conf as it will break lets encypt install process.

https://certbot.eff.org/lets-encrypt/pip-nginx

Open 80 and 443 on your router and setup port forwarding to your raspberry pi. Dont expect lightning performance but it is indeed a capable tool for serving static content. Who needs the ‘cloud’?!