Witam.W ramach integracji i wymiany informacji w tym skupisku osób odpalam ogólny wątek gdzie możemy luźno wymieniać się postami dot. seflhostingu poprzez opisywanie swoich rozwiązań, historii czy poprzez udostępnianie ciekawych nowości znalezionych w sieci "Internet". To może ja zacznę.

Wstępnie

Zainteresowanie selfhostingiem "zaatakowało" mnie z trzech stron. Pierwszym źródłem pchnięć był taki podcast, może kojarzycie, nazywa się Internet. Czas działać!. Prowadzący mówili o systemie Yunohost ułatwiającym selfhosting. Drugim źródłem pchnięć był kolega ze studiów, który miał swojego NAS-a oraz Home Assistanta. Trzecie źródło to była chęć korzystania z CalDAV do synchronizacji tasków z tasks.org. Dlatego też zanim zacząłem hostować "świadomie", miałem VPS Ubuntu w Linode z Nextcloudem ale praktycznie nic wtedy nie ogarniałem.

Ścieżka sprzętowa

Zaczęło się od Raspberry Pi 3B+, na którym zainstalowałem Yunohost. Poznałem wtedy sporo ważnych aplikacji, z których korzystam do dzisiaj, np. Hedgedoc. Szybko jednak poczułem brak większej wydajności. Wtedy właśnie używane Mini PC zaczynały być tanie i dobre i za bodajże 800 zł kupiłem HP 800 z i5-6500t, na którego przeniosłem Nextclouda i kilka innych aplikacji. Następnie przeprowadziłem się i do tego doszedł rabbit hole w postaci Home Assistanta, a wcześniej wspomniane Raspberry Pi 3B+ teraz wykorzystywałem do Pi-Hole i VPN-a.

Udało mi się znaleźć jakiś neofetch z Raspberry

Po kilku miesiącach pojawiła się opcja przesiadki na znacznie wydajniejszy Asrock X300 z Ryzen 5 5700G. W tym komputerze mam więcej miejsc na dyski, dlatego też mam tutaj dyski 2.5" HDD w raid1 na zdjęcia i inne dane, mam też dodatkowy dysk na multimedia do Jellyfina. Z tego komputera jako serwera korzystam do dzisiaj i jest to najwydajniejszy sprzęt tego typu w moim zasobniku. Sprzęt pracuje dalej pod kontrolą Yunohost (teraz v12) ale przygotowuję się do migracji.

Komputer GMKTec z N100

Do migracji na inne rozwiązanie aplikujące IaaC. Dlatego też w moim zasobniku pojawił komputer GMKTec z Intel N100 (popularny wybór) w celu nauki Terraforma (a raczej OpenTofu) w połączeniu z Proxmoxem w oparciu o własne moduły i skrypty. Póki co, repozytorium na Codeberg rośnie sobie powoli.

Fragment kodu HCL

Dodatkowo mam VPSy w Mikrus i kilka rozwiązań w Scaleway. Po drodze za drugie mini pc "robił" u mnie Xiaomi Mini PC, ale ten sprzęt zmienił swoją rolę jako zapasowy komputer desktopowy. Mam też Orange Pi Zero 2, który zawsze pełnił rolę serwera, ale z różnymi aplikacjami, aktualnie serwuje cups oraz Adguard Home. Wykorzystuję także storagebox w Hetzner (do backupów) oraz mam router ASUS z OpenWRT.

Beszel

Aplikacje

Kilka aplikacji już zdradziłem, ale postaram się wymienić w punktach jak największą liczbę tych, którą używam.Hostowane przeze mnie:

  • Nextcloud - baza dla kalendarzy, tasków, kontaktów, plików, zdjęć, tablic kanban i dokumentów. Nie wykorzystuję pełnego potencjału ale bardzo cenię sobie ten kombajn.
  • Adguard Home - blocker reklam oparty o DNS. Cała konfiguracja i sposób zarządzania na trzech node'ach udostępniłem tutaj: https://codeberg.org/cichy1173/adguard-home-cm-repository
  • HedgeDoc - lekka aplikacja do notatek markdown. Trochę brakuje w niej tree view czy folderów, ale cieszy szybkością, wygodą, prostotą i opcją kooperacji i publikacji zawartości dla innych.
  • Home Assistant - kombajn do smart home i nie tylko. Wykorzystuję tylko fragment możliwości ale jest to ważny element życia codziennego.
  • Beszel - proste narzędzie do monitoringu i alertów. Podobne do Zabbixa ale znacznie prostsze.
  • Overleaf - korzystam mniej, ale sobie cenię. Jest to kooperacyjny edytor LaTeX.
  • Uptime Kuma - narzędzie do pingania wybranych hostów/stron itd. i alertowania w razie downtime'u.
  • Wallabag - używam już nieco mniej, ale jest to zamiennik do Pocket, pozwala zapisywać artykuły na później.
  • Jellyfin - narzędzie do streamowania swojej biblioteki multimediów. Taki własny Netflix.
  • Lubelogger - taka cyfrowa książeczka serwisowa dla samochodów. Całkiem fajne narzędzie.
  • RabbitMQ - Broker MQTT dla urządzeń Smart i nie tylko.
  • Homebox - narzędzie do tworzenia inwentarza sprzętów. Niestety, od jakiegoś czasu nie używam i nie uzupełniałem zawartości.
  • Silverbullet - aplikacja do notatek Markdown z obsługą skryptów. Na razie się na nią nie przesiadłem.
  • Pinchflat - ma kilka zastosowań, ale ja tę aplikację wykorzystuję do przerabiania filmów YouTube na podcasty audio słuchane w AntennaPod.
  • Hoarder - apka, w której zapisuję jakieś linki czy obrazki na później.

Niehostowane przeze mnie, ale dostępne do hostingu:

  • Mealie - hostuje kolega. Narzędzie do zapisywania przepisów kuchennych.
  • Codeberg, czyli Forgejo - git forge, zamiennik Githuba. Bardzo dużo ostatnio korzystam z tego narzędzia, włącznie z Forgejo Actions na moim własnym runnerze, hostowanym na Proxmox.
  • Bitwarden i Bitwarden Secret Manager - korzystam z oficjalnej instancji. Znany i lubiany password manager.
  • Telegram - tego akurat hostować się nie da, ale używam botów Telegrama w automatyzacjach i alertingu.

A jak to wygląda u Was?



Discuss this on our forum.
Tasks.org

Open-source, privacy-friendly to-do lists & reminders for Android. Supports Google Tasks, DAVx⁵, CalDAV, EteSync, and DecSync CC

Od jakiegoś czasu eksperymentuję z Fedora CoreOS. Jest to minimalny, dedykowany system atomowy pomyślany z myślą o utrzymywaniu kontenerów (Docker/Podman/Kubernetes). Na start oferuje właśnie zainstalowanego Podmana i Dockera. Tworzenie instancji polega na pisaniu dokumentów Butane (yaml), w których opisujemy deklaratywnie co chcemy, aby system miał na start -- podobnie to wygląda jak w Cloud Init. Następnie dokument jest przetwarzany do Ignition, czyli dokumentu JSON, który faktycznie wykorzystywaniu jest do provisionu. Ignition wpisujemy jako właśnie User Data.

https://mastodon.social/@cichy1173/116625329344164380

Ze względu na swoją niezmienną naturę Fedora CoreOS świetnie wpisuję się w moją filozofię podchodzenia do VM/instancji, gdzie nie dokonujemy ciągłej konfiguracji poprzez Ansible, a wszystko powinno zostać skonfigurowane na inicie, właśnie tutaj w formie Ignition (trochę takie podejście jak do Auto Scaling Group w AWS-ie). Tym samym fajnie Fedora CoreOS wpisuje mi się w użycie Terraforma, gdzie nawet mamy dedykowany provider do automatycznego przepisywania Butane na Ignition.

Właśnie fakt, że "silniki" konteneryzacji są na start dostępne w systemie, to od razu możemy zająć się opisaniem samych kontenerów. Ja korzystam chyba z najbardziej dedykowanego podejścia w CoreOS, czyli z quadletów Podmana. Kontenery są opisywane jako serwisy systemd. Też fajnym jest to, że można ustawić flagę auto-update, aby automatycznie aktualizować obraz. Przykład quadletu:

- path: /etc/containers/systemd/zabbix-proxy.container mode: 0644 contents: inline: | [Unit] Description=Zabbix Proxy After=network-online.target Wants=network-online.target [Container] Image=docker.io/zabbix/zabbix-proxy-sqlite3:alpine-7.0-latest PublishPort=10051:10051/tcp PodmanArgs=--memory=${proxy_memory_limit} Volume=/etc/zabbix/ssl:/etc/zabbix/ssl:ro,Z Volume=/var/lib/zabbix/db_data:/var/lib/zabbix/db_data:Z Environment=ZBX_HOSTNAME=${hostname} Environment=ZBX_SERVER_HOST=${zbx_server_host} Environment=ZBX_PROXYMODE=${zbx_proxy_mode} Environment=ZBX_PROXYOFFLINEBUFFER=${proxy_offline_buffer_hours} Environment=ZBX_TLSCAFILE=/etc/zabbix/ssl/ca.crt Environment=ZBX_TLSCERTFILE=/etc/zabbix/ssl/zabbix_proxy.crt Environment=ZBX_TLSKEYFILE=/etc/zabbix/ssl/zabbix_proxy.key Environment=ZBX_TLSCONNECT=cert AutoUpdate=registry [Service] Restart=always RestartSec=10s OOMPolicy=continue [Install] WantedBy=multi-user.target default.target

Do tego sam system aktualizuje się automatycznie. Fedora wydaje nowy "snapshot" systemu, który jest pobierany i po prostu podmieniany. Dlatego Core zawsze mamy zaktualizowany z minimalnym wpływem na działanie środowiska. Warto jednak odnotować, że aktualizacja wymaga rebootu. Z tego też powodu możemy sobie ustawić okno serwisowe.

- path: /etc/zincati/config.d/55-updates-strategy.toml mode: 0644 contents: inline: | [updates] strategy = "periodic" [[updates.periodic.window]] days = [ "${zincati_window_days}" ] start_time = "${zincati_window_start}" length_minutes = ${zincati_window_length}

Aktualnie Fedora CoreOS wykorzystuję do VM-ek z Zabbix Proxy (działają w Zabbix Proxy Group) na Proxmox (choć z Proxmox będę migrował za jakiś czas). Fedora CoreOS fajnie mi się tutaj wpisała w moje podejście do tego typu hostów i całkiem spory stack z paroma maszynami wirtualnymi serwującymi Proxy znacznie mi się zmniejszył i uprościło mi się zarządzanie. Finalnie stack środowiska wygląda tak:

locals { fcos_zabbix_proxies = { "zabbix-proxy-fcos-1" = { ipv4_address = "192.168.1.192/24", zincati_window_days = "Fri" } "zabbix-proxy-fcos-2" = { ipv4_address = "192.168.1.120/24", zincati_window_days = "Sat" } "zabbix-proxy-fcos-3" = { ipv4_address = "192.168.1.210/24", zincati_window_days = "Sun" } }}module "fcos_zabbix_proxy" { for_each = local.fcos_zabbix_proxies source = "git::https://codeberg.org/cichy1173/cichyform.git//Proxmox/zabbix-proxy-fcos?ref=zabbix-proxy-fcos-v1.2.0" proxy_hostname = each.key zabbix_server_host = var.zabbix_ip ca_cert_pem = data.bitwarden_secret.ca-crt.value ca_key_pem = data.bitwarden_secret.ca-key.value username = "grzegorz" ssh_public_key = chomp(data.local_file.ssh_public_key.content) node_name = "shrek" ipv4_address = each.value.ipv4_address zincati_window_days = each.value.zincati_window_days cpu_cores = 1 memory_dedicated = 1024}

Jakby ktoś chciał zobaczyć, to sam moduł Terraform jest publiczny >>tutaj<<. Nadal się uczę o CoreOS, więc na bieżąco dodaję nowości.



Discuss this on our forum.
The container optimized OS

A minimal OS with automatic updates. Scalable and secure.