3 min read

If You Want To Build A Website, First You Must Build A Router

If You Want To Build  A Website, First You Must Build A Router

Once again, I have fallen into the trap of "why pay $5 to do something easily when I can try to do it myself, end up spending $50, and fail anyway?"

I discovered late last night that yesterday's work was for naught. It appears that my Raspberry Pi server can only be accessed from my local network because of, uh, firewalls or something?

A lot of people have had this problem.

As far as I can tell, everything at the server level works fine, so something at the router level is blocking external networks. And after a lot of Googling, and refreshing the Optimum "router management" page about a thousand times, I have come to the conclusion that I must kill the CEO of Optimum set up my own router. The complete inability to customize your own router seems to be a feature, not a bug.

So, my efforts fruitless, I opted to order a new router. This is another thing I've been meaning to do for a while, since even before these issues my Optimum router had an annoying habit of turning itself off several times a day. I ended up ordering a TP-Link AX-11000, which is an unfortunate example of Gamer-Centered Design but is beefy enough to handle most of my needs.

Look at this fucking thing! You're a router, not a special grenade for Master Chief!

But, since it'll take a week to get here, I still couldn't host a site from my Pi. Unless, of course, I discovered an interim solution - like using ANOTHER RASPBERRY PI!

But, a victim of my own hubris, I started following this tutorial on setting up Pi as a router and realized that I'd be working until midnight again. So I shelved this project for later.

Currently doubling my number of Raspberry Pis used every day.

So, for an interim solution, I set up a Hetzner cloud server to host my blog setup. Once again, I basically followed the Ghost setup instructions, but a few quick notes:


  • Ghost's default install is pretty solid, but it has an annoying habit of switching its default port from 2368 to 2369. So, if your Ghost setup is failing to load, make sure /etc/nginx/sites-available/your-site.conf is redirecting to the same port that ghost status gives you.
  • Ghost has a handy "export site" function that I used to import yesterday's post, but it doesn't directly handle themes or images.
  • I'm using the dawn theme and my edits have thus far exclusively been to remove "subscribe" buttons, so I just re-edited the theme manually. Images were more annoying - I ended up SCPing from my Raspberry Pi to my computer, then again to Hetzner. This was probably a dumb way of doing it.
copying a ghost server with scp takes forever
  • Ran into anEACCES: permission denied, copyfile error when I tried to upload images onto my new server. This also coincided with a systemd corrupted issue when I tried to restart Ghost. Still no idea what happened there, but I solved it by running ghost config --process local (thanks to this post in the Ghost forums).

Next Steps

So, because I wanted to set up a server on a Raspberry Pi and not pay $4 for a Hetzner cloud server, I have now spent $200 on a new router and also ended up paying for a Hetzner cloud server.

I probably won't have time to set up a Raspberry Pi router until this weekend, so for the rest of the week I'd like to start working on centralizing my information storage on this site:

  • testing out open-source note-taking software like AppFlowy or TiddlyWiki
  • research on options for bookmarking/an open-source are.na alternative
  • some structure for making updates that aren't a blog post - little widgets for what I'm reading/listening to/thinking about, a place to drop code sketches, etc.