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.
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.
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:
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"