jdeko.me is almost entirely self hosted - every aspect of this website (with
the exception of ssl encryption, which is provided by cloudflare) is served
from a
raspberry pi 5 single-board-computer in my home
office!
this particular
raspberry pi 5 has a 4-core CPU & 16GB of RAM, which is more than enough
to handle any traffic this site receives
go programming langauge
the jdeko.me backend is written entirely in the go programming language.
i mainly chose to write the backend in go to take advantage of the
concurrency features that make the standard net/http library so
powerful. i paid for
all four cpu cores, i want to utilze all four!
postgres database
a postgres database serves
jdeko.me/bball - the
basketball stats site that uses the jdeko.me api. the data in this
database
is sourced from nba.com with a command-line-interface i wrote in go -
bball-etl-cli
docker
each software element that supports this website has been containerized
with
docker,
allowing them to all run independently on the same host machine. docker
networks provide
an additional level of isolation, which allows me to host the apache
web-server
& postgres database on separate networks. i used
dockerfile to create custom docker images and
docker compose to enable starting & stopping each environment with
a single command
apache web server
a containerized
apache web server
is used as a
reverse-proxy to provide another security layer from the external
internet. this web server declines any invalid requests, forwards any
http request to https, & then forwards valid https requests to the
jdeko.me api
javascript
javascript powers the frontend of
jdeko.me/bball.
all interactions with any of the buttons/selectors/text-boxes on this page
are handled
with javascript event handlers that call endpoints from my API
html/css
all visual elements of this website are written in pure html & css. i've
always preferred
clean and to-the-point websites, and i miss the more simplistic look of
the internet of my youth