1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
|
+++
title = "A 12-year-old's guide to self-hosting"
date = 2025-11-05
extra.image = "/assets/images/post-image/guide-self-hosting.jpg"
+++
Have you ever wanted to self-host your own homelab but didn't know how?
Let me show you how I, a 12-year-old, built my own setup --- and how you can too.
### What even *is* self hosting?
Self-hosting is when you run services on a computer at home that you control instead of using other people/organization's servers such as Google Drive or Discord.
You can use an old laptop, a [Raspberry Pi](https://raspberrypi.com/) (like me), or even a PC to run things like:
- A website (like this one, which also happens to be self-hosted!)
- A file server for sharing stuff at home --- good if you have an old SSD or hard drive laying around!
- A Minecraft server for you and your friends
- A media server to stream movies, TV shows, and Live TV (as long as you have the media)
- A YouTube downloader
- And tons more!
### Why self-host?
The main reasons you'd want to self-host is because:
- You want to learn Linux, networking, and sysadmin
- You want full control over your data
- You don't want Google/other companies tracking you (e.g. self-hosting your own Google Drive alternative to stay away from Google)
- You can make something *yours* --- no subscriptions, no ads
### What do you need?
- A computer (even an old laptop or [Raspberry Pi](https://raspberrypi.com/) will work fine)
- An operating system --- preferably Ubuntu for compatibility (or Pi OS if you are using a Pi)
- A network connection (preferably Ethernet, but Wi-Fi will work fine too)
- Access to your router settings (ideally, if you want to make things public)
## Getting started
**Warning**: This guide assumes you have some knowledge of computer networking and shell commands.
If you don't, I recommend learning how to interact with SSH and the Linux terminal before reading this guide.
Alright, enough blabbing --- here comes the actual setup.
### Installing an OS
The first step is to install an operating system on your computer of choice.
If you are using a Raspberry Pi, follow instructions [here](https://www.raspberrypi.com/documentation/computers/getting-started.html#installing-the-operating-system) to install an OS. Make sure to install Raspberry Pi OS **Lite** if you don't plan to use any GUI apps --- which for this setup, we won't.
If you’re **not** using a Raspberry Pi, you can install [Ubuntu Server](https://ubuntu.com/download/server) on your old laptop or PC.
Just download the ISO, then flash it to a USB stick using [Rufus](https://rufus.ie) (on Windows) or [balenaEtcher](https://etcher.balena.io) (on macOS/Linux) and follow the setup prompts.
After installing your OS, remember to run the following command to update all packages:
`sudo apt update -y && sudo apt upgrade -y`
### Installing Docker (and Portainer for easy management)
*Technically*, this step is optional - but it's very important and almost required to follow this tutorial.
Docker is a piece of software that allows you to place different services in containers/sandboxes. This allows you to easily spin up services and keep them isolated from others, protecting your system installation and providing another layer of security.
If you are using a Raspberry Pi, I recommend following the instructions from the [pi-hosted GitHub repo](https://github.com/pi-hosted/pi-hosted) to get Docker and Portainer up and running with specialized app templates for Pi devices. This script *may* work on other non-Pi devices, but your mileage may vary and it is not recommended.
(**Disclaimer**: The repository mentioned above, pi-hosted, is not affiliated nor endorsed by the Raspberry Pi Foundation.)
If you're **not** using a Raspberry Pi, you can install Docker and Portainer quickly with the following guide(s).
#### Install Docker on non-Pi devices
**Note**: This guide and the following do work for Raspberry Pi devices, but it is easier to use the script from the repo above to get up and running quicker.
1. Refresh the package list:
```shell
sudo apt update
```
2. Install the necessary packages:
```shell
sudo apt install ca-certificates curl
```
When prompted, press Y and Enter to begin the installation.
3. Set the necessary permissions for the */etc/apt/keyrings* directory:
```shell
sudo install -m 0755 -d /etc/apt/keyrings
```
4. Use the *curl* command to download the GPG key:
```shell
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
```
5. Change the permissions of the key file:
```shell
sudo chmod a+r /etc/apt/keyrings/docker.asc
```
6. Add the Docker repo to the APT sources list:
```shell
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
$(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
```
7. Refresh the package list:
```shell
sudo apt update
```
8. Install Docker packages
```shell
sudo apt install docker-ce docker-ce-cli containerd.io docker-compose-plugin docker-buildx-plugin -y
```
9. Create the `docker` group for non-root user access:
```shell
sudo groupadd -f docker
```
10. Add the current user to the docker group:
```shell
sudo usermod -aG docker $USER
```
To add a user other than the current user, add their username instead of $USER like so:
```shell
sudo usermod -aG docker [username]
```
11. Apply the new group membership changes:
```shell
newgrp docker
```
12. Reboot your device to ensure all changes have been applied:
```shell
sudo reboot
```
#### Install Portainer on non-Pi devices
Next, we need to install Portainer.
Don't worry, this will be much less complicated than the docker install.
1. Create the Docker volume for Portainer's data:
```shell
docker volume create portainer_data
```
2. Fetch and start the Portainer Server container:
```shell
docker run -d -p 8000:8000 -p 9443:9443 --name portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer-ce:lts
```
Portainer has now been installed. You can check to see whether it has started by running the following command:
```shell
docker ps
```
The output should look somewhat like the following:
```
root@server:~# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
7963585688a9 portainer/portainer-ce:lts "/portainer" 8 seconds ago Up 8 seconds 0.0.0.0:8000->8000/tcp, [::]:8000->8000/tcp, 0.0.0.0:9443->9443/tcp, [::]:9443->9443/tcp, 9000/tcp portainer
```
If the container's status is marked as "Up", congrats! Docker and Portainer are both up and running!
You can now access the dashboard & admin console at `https://<your-server-ip>:9443`.
## First apps to try
Now that you've got Docker and Portainer installed, you're ready to start installing services/apps on your new home server.
Here's a list of the first apps you should install:
1. [Pi-hole](https://pi-hole.net/)
An ad blocker that blocks ads on the network-level, before they even reach your device.
(**Note**: This does not block YouTube ads.)
Installation instructions: [https://docs.pi-hole.net/docker/](https://docs.pi-hole.net/docker/)
2. [docker-minecraft-server](https://github.com/itzg/docker-minecraft-server)
A docker container that contains an easy configurable Minecraft Server with full support for Fabric/Forge/Paper and other server versions. Great for hosting a small server with friends.
(**Note**: It is recommended to use this with an official Pi 5 Active Cooler if using a Pi to make sure it doesn't get too hot.)
Installation instructions: [https://docker-minecraft-server.readthedocs.io/en/latest/](https://docker-minecraft-server.readthedocs.io/en/latest/)
3. [MeTube](https://github.com/alexta69/metube)
A simple YouTube downloader webapp based on yt-dlp.
Installation instructions: [https://github.com/alexta69/metube](https://github.com/alexta69/metube)
4. [wg-easy](https://github.com/wg-easy/wg-easy)
An easy way to get a WireGuard VPN/tunnel up and running. Useful to access your home network/local services when away from home.
Installation instructions: [https://wg-easy.github.io/wg-easy/latest/getting-started/](https://wg-easy.github.io/wg-easy/latest/getting-started/)
5. [Caddy](https://caddyserver.com/)
A simple server/reverse proxy for hosting web apps, sites, and much more. Comes with HTTPS support (via Let's Encrypt) out of the box, making it easier to get up and running fast.
Installation instructions: [https://caddyserver.com/docs/install](https://caddyserver.com/docs/install)
6. [Navidrome](https://www.navidrome.org/)
A lightweight music streaming service for your personal media collection, kind of like a Spotify alternative.
Installation instructions: [https://www.navidrome.org/docs/installation/docker/](https://www.navidrome.org/docs/installation/docker/)
7. [Plex](https://plex.tv)
A media streaming service that allows you to stream your own collection of videos, music, and more content.
Installation instructions: [https://github.com/plexinc/pms-docker](https://github.com/plexinc/pms-docker)
8. [Jellyfin](https://jellyfin.org/)
An open-source media streaming service that allows you to stream your own collection of videos, music, and more content.
Installation instructions: [https://jellyfin.org/docs/general/installation/container](https://jellyfin.org/docs/general/installation/container)
9. [Code-Server](https://github.com/coder/code-server)
A server that allows you to access a full VS Code development environment in your browser. Useful for coding on-the-go, especially when paired with a WireGuard VPN.
Installation instructions: [https://coder.com/docs/code-server/install#docker](https://coder.com/docs/code-server/install#docker)
## Wrapping up
Finally, you're done setting up your home server!
It wasn't as hard as you thought, right?
Now that you've got a home server up and running, experiment with it!
Have a try installing more apps, or setting up more advanced containers!
There are so many more apps, containers, and other things to explore on your home server beyond what I've mentioned here.
Just give it a try!
Happy self-hosting!
|