Skip Navigation

Need help getting started

Hello fellow lemmings! As mentioned in the title, I'm barely just getting started with the self hosting thing and such.

I have a small personal project for which I'd like to self host my own "ugly-90's-HTML" blog (I just love the look and feel you know).

I've got a desktop machine that I could use as a server, and I also just purchased my own domain from cloudflare (for commitment), but I'm a bit stuck on the actual "putting-my-stuff-online" thing and I don't want to do anything stupid.

I know there's a lot of learning I still need to do, but that's the reason I'm starting this project. Any help would be welcomed.

I have 3 cents of basic networking knowledge (I made my own Ethernet cable conection to my gateway :D); I'm using a linux distro as my main desktop; I have created an ssh tunnel with cloudflare so far, and I'm following a little html+css tutorial. The thing is, I've found so many different ways of putting things online, I'm a bit dizzy. I would like something that will teach me the fundamentals without holding my hand too much (a la "next, next, next, confirm, finish"), you know? I mean, I'm learning by essentially making a 90's website... So, yeah.

Thanks in advance <3

[TL;DR] Me want make 90's website, don't know how

19 comments
  • There's a whole lot of advice here, and practically none is it is aimed at a beginner. You don't need a reverse proxy or SSL to get started.

    1. Install the OS - You've done this already.
    2. Install some kind of http server - Apache is fine, people recommending anything else are overcomplicating. The package is called either apache2 or httpd, depending your flavor of Linux.
    3. Put your files in the web root - Usually /var/www/html/. If the file is something like index.html, it'll load as the default page without having to type http://youraddress/index.html
    4. Restart Apache - different across OSes, Google will get you there. Something like systemctl restart httpd, but "systemctl" might be "service", and "httpd" might be "apache2".

    Once you've done that, you have a computer that will serve your html files when someone hits http://[yourIP]/ . At this point, make sure your router/etc is allowing connections on port 80 (the http port), specifically to that one computer. Also, don't allow that computer to connect to the rest of your home network (not getting into a step-by-step here; every home network uses different hardware), because now that the Internet can touch it, it's a target for hackers. If all they can touch is this one computer (start calling it a server), the risk is minimal.

    If you want to point a domain at it, that gets into DNS (the Domain Name System; literally how domains are mapped to IPs so humans don't have to remember them). Cloudflare has guides for this.

    Since it's your home IP, it might change. Either be fine changing your DNS if your IP changes (which usually isn't often if you have a decent connection), or look into something called "dynamic DNS" (just a thing that grabs your current IP and updates your domain to point at it).

    NOW you can start getting into things like SSL. Remember that SSL doesn't protect you from some guy trying to hack your site/server, it just makes it harder for them to view or change content while it's being sent from the server to a site visitor (or back again, if you have a form).

    Google "add SSL to Apache", you'll find references to "VirtualHost" and a bunch of config lines starting with "SSLCertificate...". You'll also find plenty of references to "LetsEncrypt" (a free SSL provider) and "Certbot" (a program that lets you generate the certificates with LetsEncrypt). Follow those.

    As above with port 80, you'll need to make sure that port 443 (the https port) is allowed for your server through your router. Again, block your server from connecting to the rest of your network. The Internet can touch it, someone will try to hack it. The SSL doesn't save you from this.

    As for reverse proxies, you don't need one unless you're getting into load balancing or header manipulation (which means you'll probably never need one for this project).

    I'm happy to answer follow-up questions.

  • At the very least you need to install a webserver and you need a proxy of some kind. If you truly want old school you can just create html pages hosted from the root of your webserver (although there are now easier modern ways to do this, you might learn more the classic way rather than using a CMS).

    You will want a reverse proxy to lie between your webserver and the internet that handles SSL. Let's Encrypt is a good option to generate a cert so that you only expose port 443 on your router to the internet and your webserver. You'll have to open port 80 to generate the cert but can close it again once generated. Then you will have https.

    That's the basics. The how-to's are easy to find online.

  • So your goal is to host a publicly accessible static website from a computer in your home. There are a few problems you need to overcome before even worrying about configuring any software. You need some more basic networking knowledge first.

    1. Basic Networking Theory - you should read a brief explanation of the OSI 7-layer network model. You don't have to try to memorize this and you won't really understand it until you start actually doing stuff, but you should read it for some basic terminology and to understand that there are distinct steps through which communication between computers happens. When you start running into problems ("why can't I access the server? I did all the tutorial steps"), figuring out which layer the problem is in will help guide you to the solution:
      • is there a bad cable? -> 1. Physical
      • do I have the right IP address? -> 3. Network
      • is the firewall port closed? -> 4. Transport

    1. Privacy/Security/Safety - don't host a publicly accessible website from your personal computer. Just don't. To make this happen you will have to open a hole in your network security that makes your computer accessible from the public internet. Don't do this on your daily driver computer. Don't do this with any device that has any files on it that you care about or any access to any personal information. Don't. Set up your web server/learning environment on a clean, dedicated system. This could be an old laptop or a Raspberry Pi (an older 3B model will work just fine for this) or whatever cheap computer hardware you have, as long as it can run Linux and has a physical network port (using WiFi will give you extra headaches for getting this working). If you think you might want to expand your projects in the future, you can get a used Dell server for very little money, and add more hard drives as needed. Wipe the hard drive and install Debian or Ubuntu server as a base, there's lots of resources out there for setting up web services on either.

    1. Restricted Ports - you are most likely on a residential internet connection. Most residential ISPs close ports for security reasons, especially 80. For example, here is Cox's list of restricted ports. You will need to find your ISP's equivalent list and understand what you can and can't do with your connection. There are workarounds, primarily through port forwarding. You will need admin access to your router to set this up. I recommend that you read that entire article because it probably applies directly to your situation.

    1. Dynamic IP Address - most people still find it easier to work with IPv4 addresses - I won't go into IPv6 right now, but you should read a little about it just for awareness. Your residential internet most likely has a dynamic IPv4 address, which means you can't rely on that address staying the same forever (or even until next week), which means that you can't configure your Cloudflare domain name to point to a single IPv4 address. Dynamic DNS is the solution for this, and again you'll need admin access to your router to set it up.

    1. HTTPS/TLS/SSL - if you get through all those issues then you probably have a working website, but now you're seeing something like this when you try to view it in your browser:
      This doesn't mean that you can't get to your website - it just means that you can only do it via HTTP and not HTTPS, which the browser is warning you (and anyone else trying to view your website) is not secure. You can either just accept that this alert will always come up, and that you have to click through it, or you can learn about TLS and getting an SSL/TLS certificate. This is a later topic - it doesn't matter and probably won't make sense until after you've got your web server online.
  • I recently fell into this rabbit hole myself! Though I decided against hosting the blog myself(because I don't want to do anything stupid lol) Nowadays for sites like that you can install a static site generator to automatically build the site based off of markdown files. I personally use Hugo but I hear good things about Jekyll too.

    The way mine is set up I make a post or a page on my machine and push it to my backend github repo. Github detects a change and rebuilds the site with the new content using a github action, then uploads the whole public folder to my host at neocities.

19 comments