No description
  • Python 98.3%
  • Dockerfile 1.7%
Find a file
2024-11-17 23:09:26 +04:00
caddy chore: simplify caddy 2024-11-17 22:53:41 +04:00
filebrowser feat: initial commit 2024-07-04 15:38:34 +04:00
pihole fix: move password to .env 2024-11-06 16:28:47 +04:00
vitodeploy feat: add vitodeploy 2024-11-06 16:27:50 +04:00
.gitignore feat: add new stacks 2024-07-08 22:37:45 +04:00
aria2.stack.yml feat: add aria2 2024-11-06 16:27:27 +04:00
arr.stack.yml feat: add new stacks 2024-07-08 22:37:45 +04:00
caddy.stack.yml feat: add new stacks 2024-07-08 22:37:45 +04:00
docker_volumes.py feat: add new stacks 2024-07-08 22:37:45 +04:00
filebrowser.stack.yml feat: add new stacks 2024-07-08 22:37:45 +04:00
jellyfin.stack.yml feat: add new stacks 2024-07-08 22:37:45 +04:00
main.py chore: chatgpt that script because aint nobody got time for that 2024-11-17 23:09:26 +04:00
pihole.stack.yml fix: move password to .env 2024-11-06 16:28:47 +04:00
portainer.stack.yml feat: add new stacks 2024-07-08 22:37:45 +04:00
README.md docs: update docs 2024-11-17 22:53:11 +04:00
registry.stack.yml feat: add new stacks 2024-07-08 22:37:45 +04:00
vitodeploy.stack.yml feat: add vitodeploy 2024-11-06 16:27:50 +04:00

Homelab

Right now it is just one raspberry pi with 1 SSD via USB.

Requirements

  1. Docker 26.1.4 (because docker 27 has a bug)
    1. docker swarm invalid pool request: Pool
  2. Docker Swarm
  3. Python 3
  4. MicroCeph (Later) -- Storage
    1. Require 3 nodes
    2. https://canonical-microceph.readthedocs-hosted.com/en/latest/
  5. GlusterFS (Simpler) -- Storage
    1. https://thenewstack.io/tutorial-deploy-a-highly-availability-glusterfs-storage-cluster/

Docker Swarm Setup and Management Documentation

Table of Contents

  • Installation

  • Uninstallation

  • Management Commands

    Installation

    Install Docker and initialize a Swarm cluster:

    # Install Docker
    curl -fsSL https://get.docker.com -o install-docker.sh
    sudo sh install-docker.sh --version 26.1.4
    
    # Initialize Docker Swarm
    docker swarm init --advertise-addr <advertising address>
    
    # Deploy common services
    python main.py deploy jellyfin arr filebrowser portainer registry caddy aria2 pihole vitodeploy
    

    Uninstallation

    Follow these steps to completely remove Docker and all associated components:

    # 1. Drain the node
    docker node update --availability drain raspberrypi
    
    # 2. Remove deployed services
    python main.py remove jellyfin arr filebrowser portainer registry caddy aria2 pihole vitodeploy
    
    # 3. Clean up containers and images
    docker stop $(docker ps -a -q)
    docker rm $(docker ps -a -q)
    docker rmi $(docker images -a -q)
    docker network prune
    docker system prune -a
    
    # 4. Remove Docker packages
    sudo apt remove docker-* --auto-remove
    
    # 5. Remove Docker files and directories
    sudo rm -rf /var/lib/docker
    sudo groupdel docker
    sudo rm -rf /var/run/docker.sock
    sudo rm -rf /usr/local/bin/docker-compose
    sudo rm -rf /etc/docker
    sudo rm -rf ~/.docker
    

    Management Commands

    Node Management

    # Add label to node
    docker node update --label-add node=prime raspberrypi
    

    Network Management

    # Create overlay network for reverse proxy
    docker network create reverse-proxy --scope swarm --driver overlay
    
    # Clear DNS cache (macOS)
    sudo dscacheutil -flushcache; sudo killall -HUP mDNSResponder
    

    Service Management

    # View service information
    docker service ps <stack>_<container> --no-trunc
    docker service logs -f <stack>_<container>
    docker service inspect <stack>_<container> --format pretty
    
    # Update service capabilities
    sudo docker service update --cap-add NET_ADMIN <stack>_<container>
    

    Stack Management

    # List and remove stacks
    docker stack ls
    docker stack rm <stack_name>
    docker stack ps <stack_name>
    
    # List services
    docker services ls
    docker service ps
    

    System Information

    # View Docker system information
    docker info
    docker node ps --no-trunc
    

    Remote Management

    # Install rsync (macOS)
    brew install rsync
    
    # Sync configuration to remote node
    rsync -avPz -e ssh $PWD/./ <user>@<host>:<path>
    # Example:
    # rsync -avPz -e ssh $PWD/./ brunobernard@home.brunobernard.dev:/home/brunobernard/homelab
    

    Registry Management

    # Build and push to private registry
    docker build -t caddy-cloudflare-dns:latest caddy/
    docker tag caddy-cloudflare-dns registry.home.brunobernard.dev/caddy-cloudflare-dns
    docker push brunobernard.dev/caddy-cloudflare-dns