Atium web server
The atium web server is a homegrown HTTP/1.1 server, written in Java, whose initial scope was to supports as much of the protocol that I need to host this website. Features are still being worked on, as web servers are a topic of interest of mine. Atium can handle all basic HTTP/1.0 requests as well as HTTP/1.1 chunked encoding
Hosting strategy
Atium is a rewrite of my previous attempt at a web server, Chimer. This rewrite features a new and improved HTTP parser, a different request/response concurrency model using Java's virtual threads, and uses a different and more traditional HTML templating strategy to serve web pages.
This website is hosted on an Ubuntu 24.04 $5/month server from Linode. I have used many a linux distro, but I am most comfortable administering deployments in the Debian family. On Ubuntu, I love the simplicity of ufw when it comes to configuring a firewall. There aren't many things that I need to do: it's a few commands to allow ssh and HTTP, and probably most important of all, it's the firewall application that I learned first so it's just what I'm used to. If I ever have more of a complex need then I'm open to using something else. Unattended upgrades are the other thing that I love about Debian/Ubuntu. Automatic and in-place upgrades of packages are incredibly nice to have when it's likely that at some point in a year I will not touch a deployment for a couple of weeks at a time.
There are only a couple of things configured on this tiny server. I currently have apache installed as the main entry point for HTTP requests that reverse proxies to my own server. This is for a couple of reasons. First, I haven't implemented TLS termination in Atium and apache can dutifully fulfill that role. Second, apache keeps me honest about the responses encoded and returned by Atium. If there is an egregious issue or bug, apache logs help me determine what went wrong and why the response was not acceptable. If the reverse proxy weren't there, that malformed response would go straight back to the client and I would have little insight into how to fix issues, let alone that there was problem at all! The only other package installed is openjdk. I can bundle a .jar with the Atium server and the website code, scp it to the hosting box, and run it with a very simple series of commands.
Dependencies
-
log4j (Java logging framework)
-
lombok (Code generation for get/set, etc.)
-
freemarker (Template engine for Java)
-
Apache Commons IO (utilities to assist with developing IO functionality)
-
H2 Database Engine (Used as a single-file SQL database)
Related Posts
-
(2024-12-12) I like Lombok(2024-11-29) Rewriting my web server in Java