W poprzednich częściach opisałem jak wygląda architektura homelab oraz konfiguracje sieci. W tej części skupie się na tym jakie serwisy hostuje w domu. Wszystkie te serwisy są hostowane na oddzielnej maszynie. W tym artykule jest to: services. Wszystkie serwisy uruchamiam pod docker za pomocą docker compose. Pozwała to na dość łatwy i szybki deployment różnego typu aplikacji. Zaczniemy od dashboardu.

PS: Na końcu każdego artykułu będę umieszczać docker-compose.yaml ze wszystkimi serwisami które będą opisane w danym artykule.

Dashboard Link to heading

Dashboard dla mnie to głownie miejsce z którego mogę na szybko przejść do interesującego mnie serwisu w lokalnej sieci. Np unifi console lub PiHole dashboard. Nie chcę trzymać w głowie ani IP adresu ani portu każdego serwisu. Do tego właśnie potrzebowałem bardzo prostu dashboard który będzie tylko wyświetlać linki do stron. Wiem że można to samo osiągnąć za pomocą zakładek w przeglądarce. Ale często potrzebuje dostępu do tego na różnych urządzeniach i w różnych przeglądarkach. Stąd i potrzeba w specjalizowanej stronie. Po przejrzeniu tego co jest dostępne na github postanowiłem zrobić własny dashboard. Po dniu powstał ten projekt: JAD.

JAD

Jest to bardzo prosty dashboard który ma jedyne zadanie: wyświetlenie linków do lokalnych serwisów. Dla tego jest dość minimalistyczny i nie ma rozbudowanej systemy dodatków, etc jak inne rozwiązanie które testowałem.

Git Link to heading

Najchętniej to bym miał lokalną wersje github. Ale niestety github pozwała na self hosted tylko w wypadku klienta biznesowego i nie jest to zbyt wygodne z tego co słyszałem.

Do własnego hostowania zazwyczaj jest:

  • git (terminal only)
  • gitlab
  • gitea

Personalnie nie za bardzo lubię UI gitlaba. Dodatkowo self-hosted gitlab ma dość duże wymagania sprzętowe, co odrazu wyklucza go z listy kandydatów. Mój wybór padł na gitea. Gitea to open source, self hosted git server. Ma bardzo podobny UI do github (co jest dużym plusem dla mnie). Dodatkowo jest dość łatwy w instalacji i utrzymaniu.

Gitea

Po instalacji uruchomiłem synchronizacje konta z github. Pozwała to mieć kopię wszystkich repozytorium z github lokalnie i nie martwić się że coś się wydarzy z github i nagłe utracę dostęp do wszystkiego co robiłem przez lata.

PS: na lokalnym git trzymam projekty które są prywatne i raczej służą do zabawy/nauki. I nigdy nie będą upublicznione.

Notatki Link to heading

Szukałem bardzo prosty i łatwy w użyciu serwis do tworzenia notatek. Używam ten serwis jako główną bazę wiedzy. Np. instrukcja do konfiguracji kontenera alpine, konfiguracji proxmox, opis sieci, etc.

Najważniejszą kwestią dla mnie było to żeby notatki były zapisywane w formacie markdown. Dla tego żebym mogł bez problemu synchronizować ich z github i mieli wystarczająco dobry wygląd tam. Dodatkowo markdown pozwała w wystarczający dla mnie sposób formatowanie notatek.

Finalnie wybór padł na flatnotes:

Flatnotes

Spełnia wszystkie moje wymagania i jest bardzo prosty w obsłudze, a przy tym zapisuje wszystkie notatki w markdown. I ma dobry edytor tekstu.

docker-compose.yaml Link to heading

servises:

  JAD:
    image: exelban/jad:latest
    hostname: jad
    restart: always
    ports:
      - "8080:8080"
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=Europe/Warsaw
    volumes:
      - /mnt/nas/jad:/srv/data
    logging:
      driver: "json-file"
      options:
        max-size: "10m"
        max-file: "3"
    healthcheck:
      test: "curl -f http://localhost:8080/ping"
      interval: 10s
      timeout: 10s
      retries: 3
      start_period: 3s

  gitea:
    image: gitea/gitea:1.21.10
    hostname: gitea
    restart: always
    ports:
      - "222:22"
      - "3000:3000"
    volumes:
      - /mnt/nas/gitea:/data
      - /etc/timezone:/etc/timezone:ro
      - /etc/localtime:/etc/localtime:ro
    environment:
      - USER_UID=1000
      - USER_GID=1000
      - GITEA__database__DB_TYPE=postgres
      - GITEA__database__HOST=tools:5432
      - GITEA__database__NAME=gitea
      - GITEA__database__USER=
      - GITEA__database__PASSWD=
      - GITEA__repository__DEFAULT_BRANCH=master
    healthcheck:
      test: "curl -fSs 127.0.0.1:3000/api/healthz || exit 1"
      interval: 5s
      timeout: 10s
      retries: 3
      start_period: 30s
    logging:
      driver: "json-file"
      options:
        max-size: "10m"
        max-file: "3"

  flatnotes:
    image: dullage/flatnotes:v5.0.0
    hostname: flatnotes
    restart: always
    ports:
      - "8082:8080"
    volumes:
      - /mnt/nas/notes:/data
      - ./index:/data/.flatnotes
    environment:
      - FLATNOTES_AUTH_TYPE=none
    logging:
      driver: "json-file"
      options:
        max-size: "10m"
        max-file: "3"