This is a little writeup about how you can get started with self-hosting.
Self-hosting is about running your own applications on your own servers instead of relying on corporations and applications you have no control over. That way you own your data. Privacy is a good reason for self-hosting. But it could also be for being in control of stuff and getting things the way you want. It can be very fun and a good learning experience. Lastly, it's a good way to support decentralization of the web. You can let your friends or family use the appliactions and services you host, or just keep them to yourself.
What you Should Start With
Learn about GNU/Linux and the command line. That's a good starting point. Find out how to install GNU/Linux on a virtual machine or on some hardware you have. Get comfortable with the command line. I recommend a book called "The Linux Command Line", which is written by William Shotts and is free to download. I've used it a lot, both for my studies and in my spear time. Ubuntu Desktop is a good place to start learning GNU/Linux and the command line. Later you can play around with Ubuntu Server, which you can run on your self-hosted server when you get more comfortable with GNU/Linux and the command line.
Learn to use Docker so you can easily run multiple applications on your server, without dependency issues and a messy file system. Docker may feel a bit overwhelming at first, but later down the line you will really appreciate the fast application installs, simple backups, and how easy it is to rebuild your server.
Get to know SSH, so that you can access your server without a monitor, and so that you can access it remotely when you aren't at home. It's a must have skill.
Get some basic networking skills. Read up on TCP/IP, firewalls, port forwarding, SSL/TLS, and DNS/domain names.
Learn how to set up a reverse proxy and HTTPS. A reverse proxy is handy when exposing your self-hosted applications to the Internet, so you easily and securely can access your applications. A very easy to use solution is Caddy. With Caddy you can get up and running with a reverse proxy and HTTPS in no time, for free, with Let's Encrypt.
Useful Software you can Host
Nextcloud: For hosting and browsing your files from anywhere with an Internet connection. You can also organize your life with a note app, calendar, contact book, tasks, kanban board, chat and video solution, and much more.
Ghost: For hosting your own blog.
BookStack: For setting up your own wiki. You can use it to document whatever. Maybe write about some of your hobbies? Or just for keeping your notes accessible.
Bitwarden: For keeping all your passwords secure in one place. With password managers like Bitwarden you only need to remember your master password, which protects all the other passwords stored. This way you can use complex and strong passwords without ever having to remember them.
Wireguard: For accessing your home network remotely. That way you get access to all your resources at home even when you are out and about.
Pi-hole: For blocking those annoying ads and bad trackers. This blocks this kind of traffic for your whole home network. That way you don't have to install ads blockers on every device. This isn't something you access from the Internet, unless you connect to your home network remotely. You can use Wireguard for that.
How to get up and Running With a Server
You have two good options to get up and running pretty fast with your server.
First Option: Use Your own Hardware
This option is the way to go if you want your server with you in your own home. Grab some old hardware you have at home. Maybe an old laptop or computer that you no longer need. It doesn't have to be that powerful. If you want to buy something cheap to get going, you could go for a Rasperry Pi.
If you want your server to be accessible from outside your home network, there are some things you have to work out:
- Get a domain name, like "example.com". You want a domain so that you easily can reach your server, without typing an IP address. If you can't get a static IP address to connect your domain to from home, then you can look into Dynamic DNS (DDNS) services.
- Forward the ports you have to forward in your home router. That would typically be port 80 and 443. Connections from the Internet need to be able to get to your server.
- Set up a reverse proxy, like Caddy or NGINX. This way you can use different URLs to get to your various appliactions, without using port numbers in the URL. You can use subdomains like "wiki.example.com" that way.
- Get an SSL/TLS certificate from Let's Encrypt, so that your traffic to and from the server is encrypted using HTTPS. Caddy helps you with this as already mentioned above.
Second Option: Use a Virtual Private Server (VPS)
Another option is to rent a server online for a monthly or yearly fee. I would recommend OVH or Hetzner. You can get started with a VPS really fast, within minutes. You have to trust the VPS provider with your data, but it's easier and faster to get going compared to having a server at home. You also won't put your home network to risk, if you opened it up to the Internet. Remember to choose a privacy friendly country for the VPS location.
An Easier Alternative
This may all seem overwhelming, but once you get the initial configuration/setup working, the maintanance isn't that hard. Start out with a simple setup and take it from there. You'll learn a lot along the way and self-hosting will make a lot more sense after a while.
If you feel like this is way too much to wrap you head around and it gets you demotivated, you can have a look into HomelabOS and YunoHost, which are plug and play self-hosting solutions. They help you manage your server and applications in a more user friendly way.
Remember to back up all your data (Docker volumes, configuration files, databases, and so on). It's also a good idea to document how you got your server up and running the way you wanted it, in case you have to start over for one reason or another. In the beginning you most likely want to reinstall your server from time to time because you messed up stuff. You can use the wiki solution called BookStack, which was mentioned above, to store your documentation.
Good luck and have fun! :)