You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

316 lines
12 KiB
Markdown

1 year ago
# Beginners Speedrun to Selfhosting
###### guide-by-example
You want to selfhost stuff.<br>
1 year ago
You know little and want to start somewhere, FAST!
1 year ago
2 months ago
#### Requirements
1 year ago
2 months ago
* A **spare PC** that will be the server, can be a **virtualmachine**.
3 months ago
* **Google** and **chatGPT**.<br>
3 months ago
If the guide says do X and the steps seem insufficient,
3 months ago
you google that shit and add the word **youtube**,
or you ask chatGPT few questions.
2 months ago
#### Common terminology
3 months ago
2 months ago
* `repository` - a place on the internet from which linux distro installs stuff.
* `root` - a name for an administrator account in linux.
3 months ago
* `sudo` - [executes](https://www.explainxkcd.com/wiki/images/b/b1/sandwich.png)
2 months ago
command as root with all privilages.
3 months ago
3 months ago
# Install a Linux
3 months ago
3 months ago
![debian_logo](https://i.imgur.com/LHdGx2S.png)
3 months ago
* **Download linux iso**. I picked [Debian\(650MB\)](https://www.debian.org/)
* *Why that linux and not xxx linux?*<br>
* Fuck you, thats why. I am not writing a novel here.
3 months ago
* Make a **bootable usb** from the iso, [ventoy](https://www.ventoy.net) is recommend. [ChatGPT](https://i.imgur.com/gODUfJm.png).
* [Download](https://www.ventoy.net/en/download.html) ventoy; extract;
run `Ventoy2Disk.exe`; select a usb; click install; exit;
* Copy the Debian iso on to the usb as you would any file.
3 months ago
* **Boot from the usb**, maybe on newer machines need to disable secure boot in bios
* **Click through the installation**
3 months ago
* During first time install, would recommend actually reading whats written on screen each step.<br>
3 months ago
Theres also plenty of [youtube videos,](https://www.youtube.com/results?search_query=installing+debian&sp=EgIIBQ%253D%253D)
which go in to [details](https://youtu.be/rf3EN7e-34g?t=419).
3 months ago
* Leave `root` password **empty**, so that sudo is installed automatically
3 months ago
* this will disable root account, if you would want it, just set password for root<br>
`sudo passwd root`
* For username lets say `noob` with password `aaa`
* During software selection [uncheck everything](https://i.imgur.com/MKrPMx2.png)
except:
* SSH server
* standard system utilities<br>
2 months ago
This linux will have no graphical interface, just command line.
1 year ago
3 months ago
# SSH
1 year ago
3 months ago
![ssh_pic](https://i.imgur.com/ElFrBog.png)
1 year ago
3 months ago
**SSH** - a tiny application that allows you to execute commands from your comfy
3 months ago
windows PC on the damn server. [ChatGPT](https://i.imgur.com/vJjJxZT.png).
3 months ago
During Debian install you should have had SSH server checked,
3 months ago
so it would be installed automatically.
3 months ago
If you missed it, install it with - `sudo apt install ssh`
1 year ago
2 months ago
*extra info:* to [check status](https://i.imgur.com/frlyy6P.png) of ssh - `systemctl status sshd`
3 months ago
Now to **find IP address** of the machine so we can remotely connect to it.
1 year ago
3 months ago
* Log in `noob` / `aaa` and be in terminal.
* `ip r` - shows [at the end the IP](https://i.imgur.com/eGkYmKB.png) of the machine<br>
lets say you got `192.168.1.8`<br>
3 months ago
Nope I am not explaining IP addresses.
1 year ago
2 days ago
Beware, an IP address can change if the server is shutdown for a while.
Lookup `static IP` or `IP reservation`.
1 year ago
3 months ago
### Remote connect to the server
1 year ago
![mobasterm_logo](https://i.imgur.com/aBL85Tr.png)
1 year ago
* **install** [mobaXterm](https://mobaxterm.mobatek.net/) on your windows machine
* use it to **connect** to the server using its ip address and username
3 months ago
* [have a pic](https://i.imgur.com/dHncQBv.png)
3 months ago
* [have a video](https://youtu.be/A7pHiPgW2u8&t=10s)
1 year ago
2 months ago
Now you should be able to execute commands on the server from your main PC.
1 year ago
# Install docker
![docker_logo](https://i.imgur.com/6SS5lFj.png)
1 year ago
2 months ago
**Docker** - a thing that makes hosting easier. People prepared *recipes*,
you copy paste them, edit a bit, run them. Bam a container is running
and answering at some IP. [ChatGPT](https://i.imgur.com/eyWePqj.png).
1 year ago
2 months ago
* **install docker** - `sudo wget -qO- https://get.docker.com | bash`<br>
3 months ago
The above method is called
2 months ago
[Install using the convenience script](https://docs.docker.com/engine/install/debian/#install-using-the-convenience-script),
3 months ago
cuz oldman Debian cant be bothered to keep docker up to date in its repos.
2 months ago
* **add your user to docker group** so you dont need to sudo all the time<br>
1 year ago
`sudo gpasswd -a noob docker`
2 months ago
* log out - `exit`, log back in so the group change takes effect
* **install [ctop](https://github.com/bcicen/ctop)** to get some basic monitoring and management.<br>
Unfortunately ctop is also not in Debians repositories, so uglier
3 months ago
[two commands](https://github.com/bcicen/ctop?tab=readme-ov-file#linux-generic) to install it:
* `sudo wget https://github.com/bcicen/ctop/releases/download/v0.7.7/ctop-0.7.7-linux-amd64 -O /usr/local/bin/ctop`
3 months ago
* `sudo chmod +x /usr/local/bin/ctop`
1 year ago
3 months ago
# First docker compose
1 year ago
3 months ago
![nging_welcome](https://i.imgur.com/Iv0B6bN.png)
Well, its time to learn how to create and **edit files** and copy paste shit
3 months ago
in to them, IN LINUX!
3 months ago
Honestly could be annoying, but mobaXterm should make it easier
3 months ago
with that left directory pane that lets you move around,
and the right/middle mouse click for paste.<br>
2 days ago
But here are general linux commands to move around and to edit files using
2 months ago
`nano` editor.
3 months ago
3 months ago
*extra info:* `arrow-up key` in terminal will cycle through old commands in history
3 months ago
3 months ago
* Be in your home directory, the command `cd` will always get you there.
[ChatGPT.](https://i.imgur.com/i32So7T.png)
3 months ago
* Create directory `mkdir docker`
* Go in to it `cd docker`
* Create directory `mkdir nginx`
* Go in to it `cd nginx`
1 year ago
* Oh look at you being all hacker in terminal, following simple directions
3 months ago
* Create empty docker-compose.yml file `nano docker-compose.yml`
* Paste in to it this *recipe*, spacing matters
1 year ago
```
services:
nginx:
image: nginx:latest
container_name: nginx
hostname: nginx
ports:
- "80:80"
```
3 months ago
* Save using `ctrl+s`; exit `ctrl+x`
3 months ago
* Run command `sudo docker compose up -d`<br>
3 months ago
[This is what it should look like](https://imgur.com/a/vtHYNr9)
* You can run `ctop` to see container status, resource use, logs,
details, or to exec in to the container. [Like so.](https://imgur.com/a/ChGjk7i)
1 year ago
* on your windows machine go to your browser<br>
1 year ago
in address bar put the ip of your server `192.168.1.8` bam<br>
3 months ago
You should see the pic above - **Welcome to nginx!**
1 year ago
3 months ago
*extra info:* it should actually be`192.168.1.8:80`,
with the port 80 we see in the compose being used in the url too.
3 months ago
But since port 80 is the default http port, it is what browsers go for anyway.
3 months ago
2 months ago
### understanding what you just did
* On a linux server a docker container is running, its a webserver and it is
accessible for others on your network.<br>
2 months ago
Most of selfhosted stuff is just a webserver with some database.
2 months ago
* If this part is done that means that shit like hosting own netflix(jellyfin),
or google drive/calendar/photos(nextcloud), or own password manager(vaultwarden)
2 months ago
or own minecraft server(crafty) is just one `docker-compose.yml` away.
2 months ago
### understanding what you did not get done
2 months ago
* this shit is on your own local network, not accessible from the *"outside"*.
Cant call grandma and tell her to write `192.168.1.8` in to her browser
2 months ago
to see your awesome nginx welcome running.
She tells you that the dumb fuck you are, you do not have public IP and ports
forwarded.<br>
2 days ago
To get that working can be a bit challenging - [port forwarding guide](https://github.com/DoTheEvo/selfhosted-apps-docker/blob/master/network-knowledge-base/port_forwarding.md)
2 months ago
* everything here is just basic setup that breaks easily,
server got dynamic IP, turn it off for a weekend and it might get a different ip
assigned next time it starts. Nginx container is not set to start on boot,...
* you dont understand how this shit works, deploying more complicated stuff,
fixing not working stuff be hard, but now you can start to consume all
the guides and tutorials on docker compose and try stuff...
# WebGUI
* *my recommendation is to not abandon the ssh + terminal. Persevere.
Use it, make it comfortable, natural, not foreign and bothersome.
This is what gets you proficiency and ability to solve problems...
2 months ago
but I understand...*
2 months ago
2 months ago
Several options to manage docker from a browser.
2 months ago
2 days ago
* Portainer CE - the most popular, deployed as a container,
they started to be bothersome with the paid version so fuck em
2 months ago
* **CasaOS** - simple install, seems nice and growing in popularity
* **Dockge** - a very new one, but seems nice and simple
* TrueNAS SCALE - NAS operating systems with docker managment
* openmediavault - NAS operating systems with docker managment
2 days ago
* Unraid - paid NAS operating systems with docker and VMs managment
2 months ago
# CasaOS
2 months ago
![casa_logo](https://i.imgur.com/rFo7L9k.png)
* [The official site](https://casaos.io)
2 months ago
2 days ago
Easy to create public shares, easy to deploy docker containers
2 months ago
from their *"app store"*
2 months ago
#### Installation
* `docker compose down` any containers you run, or remove them in ctop, or
do clean Debian install again
* To install CasaOS execute:<br>
2 months ago
`wget -qO- https://get.casaos.io | sudo bash`
2 months ago
* Afterwards, it tells the ip to visit.
* First login set credentials
---
<details>
<summary><b><font size="+1">Create a network share </font></b></summary>
2 months ago
[share.webm](https://github.com/DoTheEvo/selfhosted-apps-docker/assets/1690300/c640665f-9400-4cf2-949b-07753ad8a86c)
2 months ago
</details>
---
---
<details>
2 days ago
<summary><b><font size="+1">Deploy Jellyfin - selfhosted netflix</font></b></summary>
2 months ago
2 days ago
[jellyfin.webm](https://github.com/DoTheEvo/selfhosted-apps-docker/assets/1690300/0dac601a-f159-4745-abc1-1279b25875dd)
2 months ago
</details>
---
---
<details>
2 days ago
<summary><b><font size="+1">Deploy Crafty - Minecraft server manager</font></b></summary>
2 months ago
2 days ago
[crafty.webm](https://github.com/DoTheEvo/selfhosted-apps-docker/assets/1690300/ea163089-5329-4530-8361-83bb526fbe2d)
2 months ago
</details>
---
---
<details>
<summary><b><font size="+1">Deploy something not in the app store</font></b></summary>
2 days ago
will add something later
2 months ago
</details>
---
---
# Dockge
3 months ago
![dockge_pic](https://i.imgur.com/Vh0JN5F.png)
Beginners hate terminal.
3 months ago
[Dockge](https://github.com/louislam/dockge) comes to the rescue with its web interface.
3 months ago
Same as nginx example was deployed, we deploy dockge
using slightly edited compose file from their
[github page.](https://github.com/louislam/dockge/blob/master/compose.yaml)
3 months ago
* Create a new directory dockge `mkdir ~/docker/dockge`
3 months ago
* Go in to the docker directory `cd ~/docker/dockge`
3 months ago
* Create an empty docker-compose.yml file `nano docker-compose.yml`
* Paste the *recipe*, spacing matters
3 months ago
```
services:
dockge:
image: louislam/dockge:1
container_name: dockge
hostname: dockge
restart: unless-stopped
ports:
- "5001:5001"
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- ./data:/app/data
- /opt/stacks:/opt/stacks
environment:
- DOCKGE_STACKS_DIR=/opt/stacks
```
* Save using `ctrl+s`; exit `ctrl+x`
3 months ago
* Run command `sudo docker compose up -d`<br>
3 months ago
* on your windows machine go to your browser<br>
in address bar put the ip of your server `192.168.1.8:5001` bam<br>
3 months ago
Now you can do stuff from webgui, pasting compose and .env files.
1 year ago
2 months ago
## where to go from here
1 year ago
2 months ago
Google and consume docker tutorials and videos and try to spinning up
some containers.<br>
Heres some stuff I encountered and liked.
1 year ago
2 months ago
* [8 min video on docker](https://www.youtube.com/watch?v=rIrNIzy6U_g)
2 days ago
* [Docker Fundamentals Course](https://www.youtube.com/playlist?list=PLTk5ZYSbd9Mg51szw21_75Hs1xUpGObDm)
2 months ago
* [docker compose cheat sheet](https://devopscycle.com/blog/the-ultimate-docker-compose-cheat-sheet/)
* [Good stuff](https://adamtheautomator.com/docker-compose-tutorial/)
* [https://devopswithdocker.com/getting-started](https://devopswithdocker.com/getting-started)
* [NetworkChuck](https://www.youtube.com/@NetworkChuck/videos)
\- youtube channel
has some decent stuff, specificly [this docker networking](https://youtu.be/bKFMS5C4CG0)
video is fucking great and the general
[introduction to docker compose](https://youtu.be/DM65_JyGxCo) is good too.
* [Christian Lempa](https://www.youtube.com/@christianlempa/search?query=docker)
\- lot of videos about docker
1 year ago
2 months ago
Check of course [this github repo you are in right](https://github.com/DoTheEvo/selfhosted-apps-docker)
for some stuff to deploy.
7 months ago