Thanks to many sites offering guides and tutorials for different sysadmin responsibilities, setting up and running servers has become far more achievable for many people. You've got a good Linux distro picked out, some basic programs such as alpine, lynx/elinks/w3m, postfix, and apache2 all picked out for running various things, and perhaps some users in mind, now all you need is the server. Theoretically, home Internet connections can run servers, although doing so isn't necessarily the best idea, in my opinion.
I talked about this a bit in "(Why) The Future of Technology Lies Within Software as a Service and the Cloud", though, I'd like to go more into detail about why I wrote what I did. Additionally, as someone that previously home-hosted a server, I can easily say it wasn't the best experience.
For starters, to connect to your server, you need to connect to a specific IP address or domain name. For example, antonmcclure.com's current IP address is
[removed]. Since this address will not change under normal circumstances, it is considered a static IP. Meanwhile, most Internet Service Providers (ISPs) provide dynamic IPs. Dynamic IPs are temporary, and as a result, it will change unexpectedly. Every time your IP changes, your DNS records need to be updated. Some ISPs offer static IP addresses at an increased cost, potentially eliminating any savings from not getting a VPS. I was fortunate to be able to have a static IP without much extra cost, though most customers may not be so lucky.
Many people connect to the Internet using an Asymmetric Digital Subscriber Line (ADSL). Download speeds are faster than upload speeds, unfortunately meaning several connections to your server may cause your home Internet to slow to a crawl based on the hit rate your services are getting. Internet speeds slowing from legitimate traffic was something that affected my home server. If your website loads slowly, people may not want to keep using your site.
Many ISPs put restrictions on ports such as 80 & 443 (webserver ports), among others. If you can't publicly open ports, nobody outside of your Intranet will be able to access that service. If you were also planning on running a mail server, most ISPs also block SMTP, IMAP, and POP3 ports. If you can manage to open the ports without any problems, residential IP addresses are typically blacklisted as a source of unsolicited bulk emails or spam if an email server is running on it. You can use alternate ports, although doing so may raise red flags of service abuse with your ISP.
All servers will have at least one remote attack attempt, some of which may end up being successful if there are known exploitable security issues. If a remote attacker successfully connects to your server, they now also have access to the rest of your home Intranet. The attacker will now have virtually unrestricted access to your other devices, and the ability to launch further attacks from your home Internet. Even if a software-based firewall is in place, attackers may still bypass it one way or another.
Even if you don't have devastating remote attacks, power outages and Internet outages will mean downtime for your server. Your server will be completely unavailable until the downed service gets restored. If your server or website is something that should be available 24/7, such as a blog, software/project info or downloads, and so on, such downtime is detrimental to your website and server as a whole.
You will be fully responsible for all software and hardware maintenance. Software maintenance isn't that difficult with GNU/Linux distros, such as Debian. However, hardware maintenance can, and will, eventually lead to unexpected costs as hardware breaks. As expected, such hardware failure happened to many people, including me, due to using consumer-grade hardware for a home server.
You will need to cover the costs of powering your home server. Considering that most servers stay running 24/7, the electric bill will add up very quickly. Running a home server will incur other costs. Using the former "Thunix Shell Provider and Web Host" as an example, which was home-hosted, cost £144.50 per-month. According to the old Thunix website, the domain was £21.72 per-year (£1.81 per-month), gigabit Internet was £64 per-month with an additional £5 for a static IP. Based on this information, energy costs were over £50 at only £0.1282 per kWh. Thunix used high-end hardware, which in turn comes with a higher energy cost, while many other home-hosted servers typically run on old laptops or desktops, which use less power. However, as seen in the above example, costs will add up very quickly.
At the end of the day, while home-hosting a server may seem like a more affordable option, it can easily lead to extra costs and issues down the road for you or others. Cloud computing is continuously becoming more affordable and available to more people, with better speeds than what you would get from a home Internet connection. Having since moved from home hosting to RamNode, I can confirm that the overall site and server experiences have improved. I strongly recommend using a VPS or dedicated server from a reputable provider such as RamNode, Hetzner, or OVH, depending on your specific needs and resource requirements.