Przejdź do głównej zawartości

RaspberryPi jako domowy serwer WWW

000 pomysł

Stworzenie serwera domowych zasobów cyfrowych, czyli plików wszelkiej maści (chodzi o niewielką liczbę plików, do których chcemy mieć szybki dostęp; głównie zdjęcia i muzyka, ewentualnie jakieś dokumenty, faktury itp.) to jeden z pomysłów na wykorzystanie platformy RaspberryPi (http://www.raspberrypi.org/, dedykowane WiKi: http://elinux.org/R-Pi_Hub).

001 konfiguracja

Zaczynamy od podstawowej konfiguracji Debiana, dostępnego na stronie projektu w sekcji Downloads - wszystkie niezbędne czynności opisano np. na wskazanej wcześniej stronie WiKi.
Warto włączyć sobie obsługę karty muzycznej (nieprzydatna w serwerze, ale chcemy mieć pewność, że wszystko działa ;)) - najlepiej według opisu na stronie http://j.mp/M6oRuG. Pamiętać musimy, że w celu automatycznego uruchamiania dźwiękówki podczas startu systemu, należy uaktywnić moduł snd_bcm2835 w pliku /etc/modules.
Następny krok nie jest konieczny, ale można spróbować - chodzi o obsługę "kart" WiFi (w postaci dongla USB). Jeśli dysponujemy jednak infrastrukturą LAN, sugeruję z niej skorzystać - nie będziemy zajmować jednego z dwóch jakże cennych gniazd USB naszej maliny, tym bardziej, że karty WiFi USB nie przepadają w przypadku maliny za hubami USB, nawet tymi aktywnymi (z własnym zasilaniem). Instalacja kart WiFi przedstawiona została w artykule dostępnym pod adresem http://j.mp/M6nbl3. W nowszych dystrybucjach zalecanego dla RPi systemu raczej nie trzeba dodawać wspomnianych tam repozytoriów - po prostu sprawdźcie, czy da się pominąć krok pierwszy. Jeśli wszystko się uda, mamy bezprzewodowy dostęp do sieci lokalnej i internetu (o ile mamy oczywiście wyjście na świat). U mnie RPi bardzo sprawnie działa z popularną, szalenie tanią (~15zł) "kartą" Sagem XG-762N. Poniżej zawartość pliku /etc/network/interfaces mojego RPi:


Plik zawiera zakomentowaną część dotyczącą karty bezprzewodowej, ale konfiguracja jest jak najbardziej prawidłowa i sprawdzona. Zmieniłem sieć WiFi na LAN ze względu na słaby zasięg mojej sieci domowej w miejscu, gdzie testuję RPi (stary router ADSL jako switch i udostępnianie połączenia przez komputer stacjonarny za pomocą programu Firestarter). Bardzo ważna uwaga: nie zapominajmy o pliku /etc/resolv.conf - niezależnie od tego, jakiej karty używamy, musimy tam wpisać adresy serwerów DNS, w przeciwnym wypadku nie będziemy mogli posługiwać się nazwami domenowymi...
Oczywiście w przypadku obu kart sieciowych adres IP jest stały - konfiguracja łącza przez DHCP byłaby dla stacji klienckich utrudnieniem, zwłaszcza, że np. mój router, który przy okazji rozrzuca adresy, ma słabe możliwości konfiguracji czasu dzierżawy.

OK, teraz już nasza malina powinna odtwarzać muzykę (doinstalujcie np. mpg321) i - co najważniejsze - mieć swobodny dostęp do sieci. Ktoś może zapytać o firewall - cóż, chwilowo jest to niedostępny luksus, musimy poczekać do aktualizacji systemu.

010 klasyka - apache, mysql, php5, sqlite3

Krótko:
sudo apt-get install sqlite3
sudo apt-get install apache2
sudo apt-get install php5

Szczegóły znajdziemy oczywiście w sieci - ciekawy opis jest np. tutaj: http://www.instructables.com/id/Raspberry-Pi-Web-Server/
Niestety, szybko okazało się, że mimo wielu zabiegów i prób optymalizacji, klasyczna kombinacja LAMP powoduje jeden wielki wyciek pamięci (przypominam, że w malinie mamy do dyspozycji w klasycznej konfiguracji ok. 192MB), paraliżujący maszynkę, w niektórych przypadkach na dobre. Dlatego też, dzięki radom kolegów z G+, zmieniłem apacza na...

011 ekscentryzm - apache schodzi z boiska, za niego, z numerem 2, wchodzi nginx

Projekt Node.js (nodejs.org) przekonał mnie do serwerów działających w oparciu o pętlę zdarzeń. Zamieniłem więc apache na nginx - oczywiście należało odpowiednie pakiety zainstalować i skonfigurować. Niestety, w oficjalnych repozytoriach dla Debiana na RPi nie ma jeszcze pakietu php5-fpm, dlatego też skorzystałem z opisu przedstawionego w artykule pod adresem http://j.mp/NnRnFE. Jedyna różnica u mnie polega na tym, że uruchamiam php5-cgi po "dźwignięciu" interfejsu sieciowego, czyli poprzez umieszczony w katalogu /etc/network/if-up.d skrypt php-fastcgi:


Można oczywiście (ostrożnie) poeksperymentować z liczbą odpalanych procesów php5-cgi.

100 sprzątanie

Jeśli nic strasznego po drodze się nie wydarzyło, to mamy działający serwer WWW za ~170zł ;)
MySQL okazał się chwilowo niepotrzebny, ponieważ użyłem oprogramowania eXtplorer (http://extplorer.sourceforge.net/), nie korzystającego z serwera baz danych. W sumie mając sqlite3 możemy - o ile program, którego będziemy chcieli użyć, na to pozwala - wymusić pracę z  plikowymi bazami danych. Wyłączenie automatycznego uruchamiania MySQL uwolniło trochę RAM-u (ok. 20MB). Oczywiście należy też wyłączyć automatyczny start apacza - polecam program rcconf ;)

W obecnej konfiguracji mój RaspberryPi dysponuje po uruchomieniu ok. 128MB wolnej pamięci i podczas działania usług WWW raczej nie schodzi poniżej 30MB, przy założeniu, że jest to faktycznie domowy serwer (np. góra dwie stacje klienckie w jednym momencie).

101 pytania

Z oczywistych powodów (dublowanie zawartości internetów ;)) mój opis jest dosyć lakoniczny i przypomina raczej sprawozdanie, przeznaczone dla osób, które jednak jakiegoś linuksa debianopodobnego kiedykolwiek używały. Dlatego też zachęcam do zadawania pytań - tutaj, na twitterze i G+.

110 postscriptum

Warto się zastanowić, jakiego urządzenia użyć do przechowywania danych udostępnianych przez nasz serwer. Karta SD 8GB (jak u mnie) to niewiele i nie za szybko... Dysk twardy na USB? Mój nie zadziałał (zapewne kwestia zasilania...)...


Komentarze

  1. Dysk twardy nie zadziałał, bo oczywiście pierwsza wersja modelu B miała ograniczenie prądowe na portach USB. Aktualn już na szczęście nie ma, więc z dobrym zasilaczem dyski USB działają bezproblemowo. Polecam - Raspberry Pi

    OdpowiedzUsuń
    Odpowiedzi
    1. Dokładnie. Nie będę jednak inwestował w kolejną wersję Maliny ;-)

      Usuń

Prześlij komentarz

Popularne posty z tego bloga

Niesamowicie prosty czujnik zmierzchowy.

Tym razem zero programowania, będzie natomiast nostalgiczno-wspomnieniowy układzik, lekko zmodyfikowany.
Otóż kilka dni temu rozmawialiśmy w gronie znajomych o różnego rodzaju czujnikach zmierzchowych i czujnikach ruchu. Ponieważ należę do tych wariatów, co to hołdują jeszcze owej przestarzałej i kompletnie odrealnionej dziś zasadzie: "po co kupować, gdy można zrobić", stwierdziłem, że poskładam takie coś (czujnik zmierzchowy; sensor ruchu faktycznie lepiej nabyć, choćby ze względu na rozmiary ;)) i być może podłączę do jakiegoś mikrokontrolera. Przypomniało mi się też przy okazji, że znalazłem ostatnio w elektronicznych śmieciach stary fotorezystor (dla niewtajemniczonych: element zmieniający rezystancję, czyli opór elektryczny, pod wpływem działania strumienia światła) RPP130, jeden z kilku pozostałych po montowanych wieki temu układach tranzystorowych do zdalnego sterowania pracą urządzeń za pomocą latarki... No OK, nie było to specjalnie rozbudowane zdalne sterowanie ;)

Android i zewnętrzny moduł GPS

Od kilku dni jestem w posiadaniu smyrfona z Androidem 4.1.1 na pokładzie. Kwestie związane z wyborem systemu roztrząsałem już na G+, a ten artykuł tutaj ma konkretny temat, więc nie będę wyjaśniał po raz n-ty. Po prostu zwyciężyły popularność i ekosystem oraz przywiązanie do produktów sieciowych Google. Mniejsza.

Zbliża się sezon urlopowy :-) Moi podopieczni już mają wakacje, a ja wyjeżdżam wkrótce. W każdym bądź razie wakacje to podróże - samochodem, rowerem, na piechotę, żaglówką, motorówką, samolotem... Zaawansowane urządzenia mobilne przyzwyczaiły nas już do usług lokalizacyjnych, z których najważniejszą jest GPS (na dalszym planie mamy A-GPS, lokalizacje w oparciu o sieci WiFi itp.). Często korzystamy z programów, które w coraz ciekawszy sposób wiążą naszą lokalizację, pobraną z np. GPS-a, z przeróżnymi danymi, nieraz ocierając się o AR.
Każdy współczesny smartfon, a przynajmniej znakomita ich większość, wyposażona jest we wbudowany odbiornik sygnału lokalizacyjnego (GPS, GLONASS…

Po co mi to całe Arduino?

Oczywiście tytuł ma być jedynie prowokacją. Chociaż nie do końca - artykuł jest właśnie poświęcony pracy w Arduino IDE z mikrokontrolerami, ale bez płytek Arduino.
Czym jest Arduino - wiemy wszyscy, zarówno początkujący fani programowania elektroniki, jak i zaawansowani mikrokontrolerowcy. Jeśli jednak nie do końca wiemy, zachęcam do odwiedzenia strony domowej projektu (link 5 na końcu artykułu) oraz zerknięcia np. w poradnik (link 4).

Jakiś czas temu, przełamując się i zmieniając zdanie ("o 180 stopni" ;-)) nabyłem sobie Arduino Leonardo, głównie w celu jego "obwąchania" i zapoznania się z bogatym zbiorem bibliotek dostępnych dla tej platformy. Zgoda, różne biblioteki są dostępne niezależnie od Arduino, ale i tak się zdecydowałem. Dlaczego Leonardo? Otóż miałem ochotę przyrządzić dwie pieczenie na jednym ogniu - mieć Arduino i przetestować ATmegę 32u4. Dziś doskonale zdaję sobie sprawę, że żeby pobawić się Arduino nie trzeba go w ogóle posiadać... Ale po kolei.

Pi…