TechLife devBlog

Go host yourself!

Internet 31st Oct 2018

Powoli mija fala zachwytu nad usługami typu "za darmo" a użytkownicy coraz częściej zaczynają się zastanawia skąd bierze się to za darmo i jaki model biznesowy za tym stoi. Najczęściej odkrywają wtedy smutną prawdę o handlowaniu naszymi danymi, często wrażliwymi, manipulacjach tym jakie treści powinniśmy obejrzeć czy brutalnej cenzurze, której jesteśmy poddawani w zamian za "za darmo". Każdy nie raz już pewnie spotkał się z opinią, że najwyższy czas opuścić Gmaila czy Facebooka, tylko co później? Jak żyć? Przenieść się z jednej darmowej usługi do drugiej, która niedługo zacznie robić to samo co poprzednia?

Spójrzmy prawdzie w oczy, jeżeli chcemy być kowalami własnego losu, samemu decydować co jest moralne a co nie i mieć kontrolę nad własnymi danymi to musimy się pogodzić z tym, że będzie to kosztowało. Pytanie jak wiele i czy nie dało by się jeszcze taniej? Najlepiej nie wymyślać koła na nowo tylko przyjrzeć się jak to działa w przyrodzie. Jeżeli nie stać nas na przyczepę kempingową a właśnie tak chcemy spędzić ze znajomymi wakacje to zawsze można się złożyć. Koszty drastycznie spadną i wszyscy na tym skorzystają. Podobnie jest z danymi i usługami z których korzystamy. Wystarczy kupić/wynająć przyczepę (serwer) i znaleźć kogoś z prawem jazdy (lekko ogarniętego technicznie).

Jeżeli już mamy serwer i ludzi mogących go sfinansować to do akcji wkracza YunoHost - oprogramowanie dla serwera tak łatwe w obsłudze, że każdy kto prowadził choćby stronę na WordPressie i samemu doinstalował kilka pluginów, będzie umiał nim administrować. Ideą stojącą za YunoHost jest właśnie maksymalne ułatwienie stawiania własnych serwerów i hostowania popularnych aplikacji. Jak sami zresztą piszą:

Self-hosting for you, mom

Instalacja

Do działania YunoHost wymaga 64-bitowego Debiana 9, więc jeżeli przy wynajmowaniu serwera macie do wyboru system operacyjny to właśnie w Debiana 9 należy się uzbroić.

Następnie wystarczy zalogować się na świeży serwer przez ssh, jako root i użyć polecenia:

# bash <(wget -q -O- https://install.yunohost.org/)

W razie gdyby wget nie był jeszcze zainstalowany w systemie:

# apt install wget

Ja w przypadku obrazu Debiana 9 dostarczanego przez OVH zostałem jeszcze poproszony przez instalator do odinstalowania pakietu bind9, ponieważ konfliktował z pakietem dostarczanym przez YunoHosta (dnsmasq):

# apt remove bind9

Instalator gładko przeprowadza cały proces instalacji pakietów i konfiguracji usług a na koniec dostajemy gotowy już do działania panel administracyjny. I w zasadzie od tego miejsca całość konfiguracji może odbywać się wyłącznie przez przeglądarkę. Czyli przy dobrym wietrze cała instalacja sprowadza się do zalogowanie się przez ssh i wklejenia jeden komendy.

Administracja

Logowanie

Po zalogowaniu się do panelu użytkownika powinniśmy zobaczyć pusty dashboard (nie zainstalowaliśmy jeszcze żadnych aplikacji) a w stopce link do panelu administracyjnego.

Panel administracyjny

Panel administracyjny jest bardzo intuicyjne i w zasadzie trudno się tam zgubić. W paru klikach możemy dodać nowych użytkowników, którzy automatycznie otrzymają swoje skrzynki pocztowe (nawet z limitem przestrzeni jeżeli chcemy).

Nowy użytkownik

Możemy podpiąć własną domenę o ile posiadamy już jakąś a jeżeli nie posiadamy mamy opcję skorzystania z subdomeny pod jedną z trzech domen w ramach serwisu dynamic DNS, więc serwer możemy postawić nawet u siebie w domu i nie będzie nam przeszkadzało zmieniające się IP. Dodatkowo dla każdej dodanej domeny możemy za pomocą jednego kliknięcia wygenerować, podpiąć i przetestować darmowy certyfikat SSL dostarczany przez Let's Encrypt. YunoHost będzie też sam czuwał nad odnowieniem tych certyfikatów w odpowiednim momencie (sic!).

Nowa domena

Aplikacje instaluje się równie łatwo a tych wspieranych przez twórców YunoHost jest obecnie 24:

  • FreshRSS
  • Grav
  • Nextcloud
  • Rainloop
  • AgenDAV
  • Ampache
  • Baikal
  • Dokuwiki
  • Etherpad Mypads
  • FreshRSS
  • Grav
  • Hextris
  • Jirafeau
  • Kanboard
  • Custom Webapp
  • Nextcloud
  • OpenSondage
  • phpMyAdmin
  • Piwigo
  • Rainloop
  • Roundcube
  • Searx
  • Shell In A Box
  • Strut
  • Synapse
  • Transmission
  • Tiny Tiny RSS
  • Wallabag
  • WordPress
  • Zerobin

Do tego dochodzą 72 aplikacje oznaczone jako working wspierane przez społeczność i wiele nowo powstających oznaczonych jeszcze jako in progress.

Dodając nową aplikację możemy wybrać czy będzie posiadała samodzielną domenę/subdomenę lub zostanie zainstalowana jako osobna ścieżka pod wspólną domeną/subdomeną, np.

domena.pl/poczta/  
domena.pl/rss/  
domena.pl/blog/

Możemy też od razu dać przyznać dostęp dla wszystkich użytkowników YunoHost.

Nowa aplikacja

Po instalacji wszystkie aplikacje prezentowane są całkiem sympatycznie w panelu użytkownika.

Panel użytkownika

Zaletą aplikacji wspieranych przez twórców YunoHost jest ich pełne wsparcie dla wszystkich ficzerów platformy czyli np. tworzenia i odtwarzania danych z kopii zapasowych. Oczywiście sam mechanizm wykonywania kopii zapasowych również jest bardzo intuicyjny a przy okazji przywracania mamy do dyspozycji wszystkie składniki danej kopii, które możemy przywrócić niezależnie. Np. załóżmy, że z jakiegoś powodu straciliśmy zawartość czytnika RSS, wówczas przywracamy tylko tą konkretną aplikację.

Kopia zapasawa

Do tego wszystkiego YunoHost dostarcza na starcie filtr przeciwspamowy, usługę fail2ban chroniącą przez różnymi atakami, monitor pracy serwera, firewall, przeglądarkę logów a nawet lekki serwer XMPP napisany w Lua.

Jeżeli chcielibyście dokładniej przegrzebać się przez wszystkie opcje administracyjny czy zobaczyć dostępne aplikacje to do naszej dyspozycji mamy demonstracyjną wersję YunoHost.

Wersja demonstracyjna

Migracja z Gmaila

Cała konfiguracja serwera, domen i migracja maili zajęła mi w zasadzie tylko jeden dzień. Jak by ktoś był ciekawy jak wygląda migracja z Gmaila to wystarczy w panelu zarządzania naszymi danymi zlecić wykonania kopii naszej poczty. Następnie poczekać na wygenerowanie pliku, w którym spakowana będzie cała nasza skrzynka w formacie mbox. Taki plik wrzucamy (najlepiej jeszcze spakowany) na serwer.

$ scp moje_maile.zip moj_serwer:/tmp  

A następnie rozpakowujemy

$ ssh moj_serwer  
$ cd /tmp  
$ tar zxvf moje_maile.zip  

YunoHost przechowuje skrzynki mailowe w formacie maildir, a my dostajemy z Gmaila skrzynkę w formacie mbox. Potrzebujemy więc jeszcze jednego narzędzia, które dokona nam konwersji pomiędzy tymi formatami - mb2md.

# apt install mb2md

Teraz zakładając, że mamy już utworzonego użytkownika o nazwie adam z pustą skrzynką mailową, wykonujemy konwersję:

# mb2md -s /tmp/moje_maile/gmail.mbox -d /var/mail/adam/

Po tej operacji wszystkie nasze maile powinny pojawić się już w naszej skrzynce oraz klientach mailowych. Operację migracji wykonywaliśmy jako użytkownik root więc dla pewności, że maile będzie można później usunąć należy przekazać uprawnienia do plików w tym katalogu ich prawowitemu właścicielowi.

# chown -R vmail:mail /var/mail/adam

Done!

Użytkowanie

Moja instancja YunoHosta zawiera obecnie 4 aplikacje:

  • RainLoop - bardzo prosty ale funkcjonalny i responsywny pocztowy klient www
  • Grav - super elastyczny CMS oparty na plikach w formacie Markdown (nie potrzebuje bazy danych), na którym stoi obecnie mój blog
  • FreshRSS - estetyczny i responsywny czytnik RSS-ów
  • Nextcloud - chmura na zdjęcia i wszelkie pliki z wygodnymi klientami na różne systemy i telefony. Taki własny Dropbox z możliwością instalacji dodatkowych aplikacji działającymi na serwerze. W zasadzie to taki YunoHost wewnąrz YunoHosta (sic!). Bardzo fajnie backupuje zawartość telefonów (zdjęcia, kontakty, kalendarze itd.) i ułatwia współdzielenie zdjęć.

Chętnie postawię też własną instancję Mastodona, kiedy tylko pojawi się wersja oznaczona jako working (obecnie in progress).

Aha, YunoHost dostarcza też gotowe obrazy dla Raspberry Pi, więc jeżeli niekoniecznie pasuje Wam wynajmowanie serwera to nic nie szkodzi na przeszkodzie, żeby dla domowych zastosowań zahostować sobie taki system w domu. W końcu na backup zdjęć i plików konfiguracja Raspberry Pi + zewnętrzny dysk w zupełności wystarczy.

No i niby tyle... A teraz jak na zakończenie każdej konferencji prasowej - czekam na pytania z publiczności ;-)



Komentarze