Wczoraj był bardzo ważny dzień. Po raz pierwszy poważnie zabrałem się za temat self-hostingu. Zaczęło się od tego, że strasznie czymś zmęczyła mnie aplikacja NetNewsWire, której do tej pory religijnie używałem do RSSów. W wyniku tego zmęczenia zacząłem szukać alternatywy. Pierwsza iteracja padła na FreshRSS.
FreshRSS działa na web hostingu
Okazuje się, że FreshRSS tak właściwie nie potrzebuje "niczego" - tzn. jest on napisany w PHP, jako bazy danych używa SQLite'a. I to chyba koniec wymagań. Patrzę na te wymagania i sobie myślę: hmm, przecież mój losowy web hosting w OVH ma te rzeczy - to może tam to wrzucę, i zobaczę, co się stanie? No i wrzuciłem. No i zobaczyłem. Zadziałało!
FreshRSS to w sumie fajna aplikacja. Wygląda nienajgorzej, obsługuje różne wtyczki, pozwala na lepszy lub gorszy web-scrapping. Zainstalowałem bodajże dwie wtyczki: jedną do YouTube'a, żeby móc puszczać filmy bezpośrednio w feedzie, a drugą do robienia klikalnych linków z linków nieklikalnych. No i bęc - te dwie wtyczki się "nie lubią" - jeśli wtyczka jutubowa "zje" daną pozycję, to już na pewno nie będę miał tam poprawionych linków. A ponieważ byłem rozsierdzony czymś, co zrobił NNW (nadal nie pamiętam czym), to i "freszowi" się oberwało.
No to szukam dalej.
Miniflux działa w kontenerze
I znalazłem. Miniflux. Strona rozkosznie minimalistyczna, dosłownie cały interfejs to sam tekst - uwielbiam. Moją uwagę przykuło słowo opinionated. Oho, będzie ciekawie. Przeczytałem i w sumie bardzo mi się podoba takie minimalistyczne podejście. Bardzo odmienne od tego, co widzę ostatnio w pracy, gdzie yarn install
kończy się informacją, że zainstalowano kilka tysięcy pakietów...
Okej, skoro wiem już co chcę postawić, kolejne pytanie brzmi: jak. Tutaj dylematów nie było za wiele. Do głowy przyszedł mi od razu Docker, chwilę rozważałem Podmana, ale z tego co wiem, różnica na moje potrzeby jest marginalna, wybrałem Dockera. Zresztą, one są między sobą kompatybilne, bo oba implementują standard OCI. Więc wszystko jedno.
Otwarte porty czy tunelem przez reverse proxy
Moim pierwotnym pomysłem (z którego zrezygnowałem po 12 godzinach ciągłej pracy - ale jaka fascynująca podróż) było postawienie wszystkiego na swoim własnym serwerze, który zresztą już zakupiłem, i sobie leży na szafce od kilku miesięcy razem z kurzem, który na nim osiadł. Z własnym serwerem sprawa jest taka, że trzeba się do niego dostać z zewnątrz. Można to zrobić na wiele sposobów, ale ja ostatecznie wybierałem między dwoma: jakikolwiek sposób na spięcie domeny z moim adresem IP oraz otwarcie portów na routerze, lub postawienie reverse proxy na VPS i tunelowanie ruchu do serwera.
Pierwsza opcja mimo wszystko wydała mi się zbyt ryzykowna. W mojej głowie wpuszczanie jakiegokolwiek ruchu do mojej sieci przez otwarty port - szczególnie z moim minimalnym doświadczeniem - brzmi jak życzenie sobie choroby przenoszonej drogą płciową. VPS + reverse proxy + tunel brzmiały dużo bardziej bezpiecznie, bo ruch między VPSem a moim komputerem odbywa się na ściśle określonych zasadach, na określonych portach, pod warunkiem, że klient na lokalnym serwerze jest odpalony. Wystarczy zabić jeden proces i znikam przed światem. Całe zło otwartych portów miało się dziać na VPSie i nigdy do mnie nie docierać.
Po chwili poszukiwań stanęło na frp oraz caddy. Żeby to wszystko zadziałało dokładnie tak, jak ja chciałem, musiałem poświęcieć dosłownie 8 godzin. Ale ostatecznie udało się. Architektura wygląda mniej wiecej tak:
- mam sobie fajnego, taniego VPSa, który ma adres IPv6 i który nie działa nigdzie - nawet u mnie xD
- dlatego zaopatrzyłem się w darmową domenę, która pokazuje na IPv4 i używa CloudFlare do przetłumaczenia tego na moje IPv6 - wspaniale
- na tymże VPSie ruch wlatuje na jakimś losowym porcie, który następnie przekierowuję od razu w
frps
na jego własny port danych, dosłownie jeden z dwóch, które mam w ramach mojego konta w adresacji IPv4, więc dogadam się z tym z mojego komputera - w moim domu natomiast siedzi sobie komputer z odpalonym
frpc
, który łyka to, co dostanie odfrps
, i dalej pcha to do Caddy - a Caddy już ładnie grzecznie rozdziela ruch na kontenery albo mówi "baju baju".
Uff, zmęczyłem się już pisząc to wszystko, więc na dzisiaj wystarczy. Napomknę tylko, że zainstalowałem Minifluxa, Portainera oraz Jellyfina, i wszystko śmiga pięknie.
Właśnie słucham na telefonie z mojego prywatnego serwera: