selfhosted-apps-docker/beginners-speedrun-selfhosting/readme.md

8.2 KiB

Beginners Speedrun to Selfhosting

guide-by-example

You want to selfhost stuff.
You know little and want to start somewhere, FAST!

Requirements

  • A spare PC that will be the server. Can be a virtualmachine.
  • Google and chatGPT.
    If the guide says do X, and steps seem insufficient, you google that shit and add the word youtube, or you ask chatGPT few questions.

Install a Linux on the server

debian_logo

  • Download linux iso. I picked Debian(650MB)
    • Why that linux and not xxx linux?
    • Fuck you, thats why. I am not writing a novel here.
  • Make a bootable usb from the iso, recommend using ventoy
    • Download ventoy; run; select usb; click install; exit;
    • Copy the iso on to the usb as you would any file.
  • Boot from the usb, maybe on newer machines need to disable secure boot in bios
  • Click through the installation
    • Theres plenty of youtube videos.
    • Leave root password empty, so that sudo is installed automaticly
      • this will disable root account, if you would want it, just set password for root
        sudo passwd root
    • For username lets say noob with password aaa
    • During software selection uncheck everything except:
      • SSH server
      • standard system utilities
    • This means no graphical interface, just command line.

Basic setup of the linux server

ssh

SSH - a tiny application that allows you to execute commands from your comfy windows PC on the damn server.
During Debian install you should have had SSH server checked, so it would be installed automatically. If you missed, install it - sudo apt install ssh

Now to find IP address of the machine so we can remotely connect to it.

  • Log in noob / aaa and be in terminal.
  • ip r - shows at the end the IP of the machine
    lets say you got 192.168.1.8
    nope I am not explaining IP addresses

To check status of ssh - systemctl status sshd

Remote connect to the server

mobasterm_logo

Install docker

docker_logo

Docker - a thing that makes hosting super easy, people prepared recipes, you copy paste them, edit a bit, run them.

  • install docker-compose - sudo apt install docker-compose
  • add your user to docker group so you dont need to sudo all the time
    sudo gpasswd -a noob docker
  • log out - exit, log back in
  • intall ctop to get some monitoring and management.
    Unfortunately ctop is not in debians repositories, so longer uglier two commands to install it:
    • sudo curl -Lo /usr/local/bin/ctop https://github.com/bcicen/ctop/releases/download/v0.7.7/ctop-0.7.7-darwin-amd64
    • sudo chmod +x /usr/local/bin/ctop

First docker compose

nging_welcome

Well, its time to learn how to create and edit files and copy paste shit in to them, IN LINUX!
Honestly could be annoying as fuck at first, but mobaXterm should make it easier with that left directory pane that lets you move around, and the right/middle mouse click for paste.
But now will be listed general commands in linux to move around and nano editor will be used as it is relatively simple and everywhere.

extra info: arrow-up key in terminal will cycle through old comamnds in history

  • Be in your home directory, the command cd will always get you there.
  • Create directory mkdir docker
  • Go in to it cd docker
  • Create directory mkdir nginx
  • Go in to it cd nginx
  • Oh look at you being all hacker in terminal, following simple directions
  • Create empty docker-compose.yml file nano docker-compose.yml
  • Paste in to it this recipe, spacing matters
    services:
    
      nginx:
        image: nginx:latest
        container_name: nginx
        hostname: nginx
        ports:
        - "80:80"
    
  • Save using ctrl+s; exit ctrl+x
  • Run command sudo docker-compose up -d
    This is what it should look like
  • You can run ctop to see container status, resource use, logs, details, or to exec in to the container. Like so.
  • on your windows machine go to your browser
    in address bar put the ip of your server 192.168.1.8 bam
    You should see the pic above - Welcome to nginx!

extra info: it should actually be192.168.1.8:80, with the port 80 we see in the compose being used in the url too. But since port 80 is the default http port, it is what browser tries by default.

Moving beyond terminal

dockge_pic

Beginners hate terminal. Dockge comes to rescue with its web interface.

Same as nginx example was deployed, we deploy dockge using slightly edited compose file from their github page.

  • Create new directory dockge mkdir ~/docker/dockge
  • Go in to the docker directory cd ~/docker/dockge
  • Create empty docker-compose.yml file nano docker-compose.yml
  • Paste in to it this recipe, spacing matters
    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
  • Run command sudo docker-compose up -d
  • on your windows machine go to your browser
    in address bar put the ip of your server 192.168.1.8:5001 bam

Now you can setup new stuff from webgui, pasting compose and .env files.

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.
    Most of selfhosted stuff is just webserver with some database.
  • 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) or own minecraft server(minecraft server) is just one docker-compose.yml away.

understanding what you did not get done

  • 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 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.
    To get that working is bit challenging, probably deserves own page, not really speedrun, but thorough steps as shit gets sideways fast and people can dick around for hours trying wrong shit.
  • 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. Container is not set to start on boot,...
  • you dont understand how this shit works, fixing not working stuff be hard, but now you can start to consume all the guides and tutorials on docker compose and try stuff...

where to go from here

Can check out this repo

It has tiny section for noobs, with few links to docker tutorials.
You should get some understanding of docker networks going, making sure you create custom named one and use that in your compose files. Then its time to start trying stuff like bookstack or jellyfin or minecraft.