Główne zdjęcie witryny
Gdy świat mówi „poddaj się”, nadzieja szepcze „spróbuj jeszcze raz”. – Anonim

Miniporadnik budowy własnego serwera webowego – część I

Własny serwer WWW

Wiele osób po stworzeniu własnej witrny internetowej pragnie ją udostępnić publicznie, tak aby była dostępna z każdego miejsca na świecie. Najprostszym sposobem osiągnięcia tego celu jest umieszczenie jej na darmowym webhostingu. Niestety, najczęściej wiąże się to z niechcianym dołączaniem natrętnych reklam przez usługodawcę. Z tego względu jedyną możliwością jest wykupienie płatnego planu webhostingowego, którego koszty utrzymania mogą nawet przekroczyć sto złotych za rok. Jednak istnieje również alternatywna droga do internetu, którą interesują się nieco bardziej wtajemniczeni informatycy, a jest nią budowa własnego serwera webowego. Jeśli jesteś zaciekawiony tym rozwiązaniem i wierzysz w to, że jest możliwość uniknięcia wysokich kosztów za prąd elektryczny oraz szumu wentylatorów serwera przez całą dobę – zapraszam Cię do zapoznania się z moim miniporadnikiem, który krok po kroku poprowadzi Cię przez wszystkie etapy budowy własnego ekonomicznego serwera WWW, na którym umieścisz niezliczoną ilość witryn internetowych zupełnie za darmo i to bez jakichkolwiek reklam!

Wprowadzenie

Do zbudowania własnego serwera webowego podstawową rzeczą jaką potrzebujemy jest sam komputer. Oczywiście, aby wszystkie zamieszczone na nim strony internetowe były cały czas dostępne, musi być włączony przez całą dobę. Do tego celu jak najbardziej spawdzi się zwykły komputer klasy PC, jednak wiąże się z tym pewien problem. Otóż musimy się liczyć ze wzrostem rachunków za prąd elektryczny (około kilkadziesiąt złotych za miesiąc) oraz ciągłym hałasem (szumem) pracujących wentylatorów odprowadzających ciepło z jednostki centralnej. Osobiście kiedyś byłem posiadaczem profesjonalnego serwera HP ProLiant DL320 G5 i przekonałem się na własnej skórze, że taki sprzęt całkowicie nie nadaje się do zastosowań domowych. No i ostatecznie zdecydowałem się przenieść wszystkie swoje strony WWW na płatny webhosting, bo takie rozwiązanie wydaje się nie tylko najprostsze, ale i najbardziej ekonomiczne. Ale czy nie istnieje alternatywna droga?

Mikrokomputer Raspberry Pi 4 model B bez obudowy
Mikrokomputer Raspberry Pi 4 model B bez obudowy

Odpowiedź jest krótka: istnieje! Na rynku są dostępne mikrokomputery o zadowalającej wydajności pracujące w zupełnej ciszy oraz pobierające prąd elektryczny o mocy zaledwie kilku watów! A jest nim Raspberry Pi, króry prezentuję na zdjęciu obok. Jest to jednopłytkowy komputer PC oparty na 64-bitowym procesorze ARM z nieograniczonymi możliwościami zastosowania, dorównujący zwykłym komputerom Desktop. Mikrokomputer Raspberry Pi 4 model B w kompletnym zestawie gotowym do pracy obecnie kosztuje niespełna 500 zł, a jego producent udziela nam rocznej gwarancji. Co prawda, nie uda nam się na nim zainstalować Windowsa, ale możemy wybierać ze sporej ilości różnych dystrybucji Linuksa (nawet z GUI). Oczywiście, na sprzęcie tym można naturalnie pracować jak na każdym innym komputerze, czyli m.in. pisać w edytorze tekstu, programować, przeglądać sieć WWW, słuchać muzyki, oglądać filmy, a nawet grać w proste gry. My natomiast wykorzystamy go do budowy własnego serwera webowego. Urządzenie to ma spory potencjał, bez względu na to, czy będzie zastosowany w domu, czy w małej firmie i mogę go szczerze wszystkim polecić, gdyż sam go używam u siebie!

Parametry techniczne mikrokomputera Raspberry Pi 4 model B:

  • Broadcom BCM2711 Cortex-A72 ARM v8 Quad-Core 64-bity o taktowaniu 1,5 Ghz
  • Pamięć RAM LPDDR4-3200 2 GB, 4 GB lub 8 GB w zależności od wersji
  • Czytnik kart microSD do ładowania systemu operacyjnego oraz przechowywania danych
  • 2 interfejsy USB 3.0 oraz 2 interfejsy USB 2.0
  • 2 wyjścia microHDMI pozwalające podłączyć dwa monitory lub telewizory w rozdzielcznosci 4K
  • 4-polowe wyjście stereo audio
  • 1 interfejs sieciowy Gigabit Ethernet (1 Gb/s)
  • 1 interfejs sieciowy Wi-Fi IEEE 802.11ac
  • Bluetooth 5.0
  • Zasilanie prądem elektrycznym 5V DC (domyślnie przez złącze USB typu C)

Decydując się na zakup nowego urządzenia warto rozejrzeć w jakim sklepie jest najtaniej w danym czasie. Jeśli chodzi o zakupy internetowe to najniższą cenę możesz sprawdzić na Ceneo.

Przygotowywanie serwera do pracy

Gdy uda Ci się zdobyć swój mikrokomputer Raspberry Pi dobrze jest umieścić płytkę drukowaną w specjalnej obudowie, która nie tylko chroni ją przed uszkodzeniami mechanicznymi, ale pomaga odprowadzać ciepło. Aby móc używać sprzętu musisz być w posiadaniu czystej karty microSD o pojemności przynajmniej 8 GB oraz krótkiego kabla ethernetowego (tzw. patchcorda lub zarobionej skrętki czteroparowej), którym łączymy mikrokomputer z domowym routerem. Ważne jest to, aby wszystkie komputery znajdowały się w tej samej sieci lokalnej, bo to ułatwi komunikację między nimi. Ostatnią potrzebną rzeczą jest zasilacz, który po podłączeniu do sieci elektrycznej automatycznie włączy nasz mikrokomputer.

Niestety, tylko niektóre zestawy zawierają komplet elementów niezbędnych do uruchomienia, dlatego zanim dokonasz zakupu upewnij się, że później niczego Ci nie zabraknie. Opcjonalnie możesz zaopatrzyć się również w prostą klawiaturę na złącze USB oraz kabel zakończony z jednej strony wtyczką microHDMI, a z drugiej zwykłym HDMI – jeśli chcesz swoje Respberry Pi obsługiwać na monitorze, czy też telewizorze.

Strona internetowa Raspberry Pi OS, z której można pobrać program Raspberry Pi Imager
Strona internetowa Raspberry Pi OS, z której można pobrać program Raspberry Pi Imager

Gdy wszystko jest złożone i podłączone, nadszedł czas na konfigurację oprogramowania serwera. Dobrym pierwszym krokiem jest pobranie z oficjalnej strony Raspberry Pi programu Raspberry Pi Imager, który należy uruchomić na zwykłym wolnym komputerze z systemem operacyjnym Windows. Program ten pozwala na zainstalowanie na nośniku Linuksa kompatybilnego z Raspberry Pi. W naszym przypadku będzie to system operacyjny Ubuntu Server w wersji 64-bitowej, który zapiszemy prawdopodobnie na najszybszej dostępnej na rynku karcie pamięci microSD SanDisk Extreme PRO o pojemności 64 GB (chociaż w zupełności wystarczyłaby 8 GB, lecz w przyszłości może się Ci przydać więcej miejsca dla dużych plików). Proces ten jest bardzo prosty – przedstawiłem go krok po kroku poniżej.

Przebieg instalacji systemu operacyjnego Ubuntu Server na karcie pamięci SDHC z wykorzystaniem narzędzia Raspberry Pi Imager
Przebieg instalacji systemu operacyjnego Ubuntu Server na karcie pamięci SDHC z wykorzystaniem narzędzia Raspberry Pi Imager

Po ukończeniu zapisywania danych na karcie wyciągamy ją z peceta i wsuwamy do wbudowanego czytnika w naszym Raspberry Pi. No i w końcu uruchamiamy nasz mikrokomputer poprzez podłączenie go do zasilania (przypominam, że nie ma on włącznika, tzn. włącza się samoczynnie). Następnie musimy poczekać parę minut na pełne załadowanie się systemu operacyjnego. Jeśli masz podłączony do niego monitor lub telewizor to dokładnie ujrzysz moment osiągnięcia pełnej gotowości w chwili wyświetlenia się ekranu logowania – w przeciwnym wypadku jesteś zmuszony celować w ciemno. W tym poradniku zakładam, że nie go posiadasz i będziemy nasz serwer konfigurować zdalnie za pomocą innego peceta poprzez protokół SSH (ang. Secure Shell) – z tego względu oba komputery podłączyliśmy do tej samej sieci lokalnej.

Aby nawiązać połączenie z serwerem musimy znać jego adres IP. Za pomocą programu Advanced IP Scanner przeskanujemy własną sieć lokalną, aby znaleźć wszystkie podłączone do niej urządzenia.

Okno programu Advanced IP Scanner po przeskanowaniu własnej sieci lokalnej
Okno programu Advanced IP Scanner po przeskanowaniu własnej sieci lokalnej

Prawdopodobnie program znajdzie w sieci kilka (a nawet kilkanaście lub kilkadziesiąt) aktywnych urządzeń. Jeśli nie wiemy jaki adres fizyczny MAC ma nasz mikrokomputer (a właściwie to już serwer) to trudno – musimy jakoś odgadnąć jego adres IP, zaczynając od wykluczenia tych na pewno niewłaściwych.

Okno programu PuTTY z wpisanym adresem IP serwera
Okno programu PuTTY z wpisanym adresem IP serwera

Po ograniczeniu ilości potencjalnych adresów IP, próbujemy z każdym kolejno nawiązać połączenie używając do tego klienta SSH PuTTY wpisując za każdym razem odpowiedni adres IP, a następnie klikając przycisk Open. Gdy uda się nam połączyć z serwerem (mi w końcu udało się z użyciem adresu IP 192.168.33.9), pojawi się konsola z logowaniem do systemu Ubuntu Server. Wpisujemy nazwę użytkownika ubuntu i hasło ubuntu. System operacyjny od razu zaproponuje zmianę hasła na inne. Po tej czynności Linuks nas wyloguje a program PuTTY zamknie konsolę. Wtedy ponownie łączymy się klientem SSH z serwerem i logujemy się z nowoustawionym hasłem. Teraz możemy zająć się budową serwera webowego.

Konsola programu PuTTY po pomyślnym nawiązaniu połączenia z serwerem
Konsola programu PuTTY po pomyślnym nawiązaniu połączenia z serwerem

Podstawowa konfiguracja oraz instalacja pakietu LAMP

Będąc już zalogowanym na serwerze jako użytkownik ubuntu, w pierwszej kolejności stworzymy własnego użytkownika o przyjaznej nazwie (w  poniższym przykładzie użyłem własnego pseudonimu qax). W tym celu należy wykonać polecenie useradd z uprawnieniami root-a, czyli poprzedzając je słówkiem sudo (konsola poprosi Cię o podanie do niego hasła). Dodatkowo od razu ustawimy mu domyślną powłokę na /bin/bash:

sudo useradd -s /bin/bash qax

Następnie ustawimy hasło dla nowoutworzonego użytkownika za pomocą polecenia passwd (po jego wpisaniu należy dla jego potwierdzenia podać je ponownie):

sudo passwd qax

No i dodamy mu uprawnienia administratora poprzez edycję odpowiedniego pliku za pomocą domyślnego edytora Linuksa (u mnie otworzył się on w programie nano) wykonując poniższe polecenie:

sudo visudo

W otwartym pliku w sekcji # User privilege specification po linii definiującej uprawnienia dla root-a, dodajemy linię qax ALL=(ALL:ALL) ALL, która będzie definiowała uprawnienia administratora również dla użytkownika qax:

# User privilege specification
root    ALL=(ALL:ALL) ALL
qax     ALL=(ALL:ALL) ALL

Po dokonaniu zmian w pliku konfiguracyjnym, możemy zamknąć edytor naciaskając kombinację klawiszy Ctrl + X oraz potwierdzić chęć zapisania zmian w pliku wciaskjąc następująco po sobie klawisze Y oraz Enter. Po powrocie do głównej możemy sprawdzić czy nasz nowy użytkownik qax ma uprawenia super użytkownika dokonując próby przelogowania się ne jego konto:

su - qax

Po pomyślnym zalogowaniu się na konto otrzymamy informację, że nie posiada ono przypisanego katalogu domowego. Nie ma potrzeby narazie zawracać sobie tym głowy, gdyż później ustawimy ten katalog domowy użytkownika na odpowiedni katalog ze stronami internetowymi naszego serwera webowego (uwierz mi: będzie to bardzo wygodne!). Tymczasem przed istalacją oprogramowania bardzo zalecane jest zaaktualizowanie systemu operacyjnego wykonując następującą komendę:

sudo apt update && apt upgrade

Konieczne jest jeszcze odblokowanie zapory ogniowej (ang. Firewall dla protokołów HTTP/HTTPS oraz SSH:

sudo ufw allow ssh && sudo ufw allow 80 && sudo ufw allow 443 && sudo ufw enable

No i w końcu instalujemy pierwszy składnik pakietu LAMP, czyli serwer WWW Apache (konsola poprosi o potwierdzenie, na które należy wyrazić zgodę wpisując znak Y i wciskając klawisz Enter:

sudo apt install apache2

Teraz pora na instalację drugiego składnika pakietu LAMP, czyli systemu bazodanowego MariaDB, którą potwierdzamy również wpisując znak Y i wciskając klawisz Enter:

sudo apt install mariadb-server mariadb-client

Od razu można skonfigurować MariaDB odpowiadając na kilka konkretnych pytań, które zostaną zadane po wywołaniu poniższego polecenia:

sudo mysql_secure_installation

Ostatnim składnikiem pakietu LAMP jest oczywiście PHP. Możemy go zainstalować wraz z najważniejszymi dodatkami wykonując poniższe polecenie (które także potwierdzamy wpisując znak Y i zatwierdzając go klawiszem Enter):

sudo apt install php php-mysql php-common php-cli php-json php-opcache libapache2-mod-php

Na koniec należy sprawdzić, czy wszystkie zainstalowane usługi działają. Można to uczynić za pomocą kolejno wywoływanych poniższych poleceń:

sudo systemctl status apache2
sudo systemctl status mariadb
php --version

Jeśli otrzymaliśmy pozytywne odpowiedzi (tzn. serwery Apache i MariaDB są w stanie running, oraz została zwrócona wersja PHP, możemy jeszcze zainstalować przydatne narzędzie do zarządzania bazą danych SQL o nazwie phpMyAdmin, co również potwierdzamy wpisując znak Y a następnie wciskając klawisz Enter):

sudo apt install phpmyadmin

Podczas instalacji powyszego programu instalator zada nam parę pytań (m.in. ustawienie hasła dla root-a). Po pomyślnym ukończeniu wszystkich powyższych czynności możemy uruchomić ponownie nasz serwer WWW:

sudo systemctl restart apache2

Na sam koniec ten części warto się upewnić czy w praktyce na pewno wszystko działa. W tym celu otwórz przeglądarkę internetową na dowolnym urządzaniu znajdującego się w tej samej sieci co nasz serwer, a następnie wpisz w pasku adresu /phpmyadmin poprzedzony adresem IP serwera oraz prefiksem protokołu HTTP, np. http://192.168.33.9/phpmyadmin.

Strona internetowa logowania do aplikacji phpMyAdmin
Strona internetowa logowania do aplikacji phpMyAdmin

Po wejściu na stronę internetową o powyższym adresie pojawi panel logowania do programu phpMyAdmin (jego zrzut ekranu przedstawiłem obok lub powyżej jeśli czytasz ten artykuł na smartfonie), w którym jako login należy wpisać root, a hasło takie jakie ustawiliśmy podczas instalacji tego narzędzia. Jeśli uda Ci się prawidłowo zalogować i otworzy się strona na której będzie można zarządzać bazami danych (przeglądać i modyfikować je) oznacza to, że prawidłowo zbudowałeś podstawowy serwer webowy oparty na pakiecie oprogramowania LAMP. Brawo!

Uwaga: Gdyby podczas próby otwarcia aplikacji phpMyAdmin pojawił się błąd, że strony nie odnaleziono (mimo, że wszystkie opisane przeze mnie czynności zostały wykonane prawidłowo), należy wykonać link w głównym katalogu ze stronami internetowymi serwera WWW Apache (/var/www/html) do katalogu programu phpMyAdmin (/usr/share/phpmyadmin) za pomocą poniższego polecenia:

sudo ln -s /usr/share/phpmyadmin /var/www/html
To musisz wiedzieć na pamięć: w katalogu serwera /var/www/html umieszczamy wszystkie nasze strony internetowe (HTML lub PHP) wraz z ich zasobami (jak CSS, skrpty JavaScript, obrazy graficzne, itd.). Innymi słowy katalog ten przechowuje kompletne witryny internetowe dostępne publicznie dla wszystkich odwiedzających internautów. Pamiętaj również, że pierwszą wyszukiwaną i otwieraną przez przeglądarkę WWW stroną internetową jest zawsze plik index.html lub index.php.

Instalacja i konfiguracja serwera FTP

No i w końcu chcielibyśmy umieścić na naszym serwerze pierwszą stronę internetową. Na obecną chwilę (jak nietrudno się domyślić) mamy bardzo utrudniony dostęp katalogu serwera /var/www/html (bo tutaj mamy za zadanie umieścić nasze pliki ze stroną internetową). Oczywiście, moglibyśmy za pomocą USB Pendrive przekopiować pliki z PC na serwer. Jednak jak się okaże to rozwiązanie może być uciążliwe – lepszym pomysłem jest instalacja serwera FTP jak vsftpd, natomiast z wykorzystaniem peceta i klienta FTP (np. Unreal Commander) wygodnie wysyłać pliki na serwer – i to za pomocą kilku kliknięć myszą! Do dzieła.

Pierwszym krokiem oczywiście jest instalacja serwera FTP vsftpd wprowadzając poniższe polecenie:

sudo apt install vsftpd

Następnie uruchamiamy usługę oraz aktywujemy ją wykonjąc następującą komendę:

sudo systemctl start vsftpd && sudo systemctl enable vsftpd

Konieczne jest jeszcze odblokowanie zapory ogniowej (ang. Firewall dla protokołu FTP:

sudo ufw allow 20/tcp && sudo ufw allow 21/tcp

Katalogi z wysłanymi plikami na serwer FTP domyślnie są kojarzone z katalogami domowymi użytkowników w Linuksie. My chcemy aby tymi katalogami były katalogi przechowujące nasze strony internetowe na serwerze. Jak pamiętasz z poprzedniego podrozdziału utworzony przez nas użytkownik qax nie ma przypisanego żadnego katalogu domowego. W takim przypadku najpierw go stwórzmy, a  następnie zmieńmy jego właściciela oraz grupę:

sudo mkdir /var/www/html/qax && sudo chown qax:qax /var/www/html/qax

Teraz można zmienić katalog domowy użytkownika wskazując go na nowoutworzony katalog. Uwaga: poniższe polecenie może być wykonane wyłącznie przez innego użytkownika niż tego, na jakim jest ono przeprowadzane – możesz ponownie zalogować się do systemu operacyjnego jako użytkownik ubuntu, a następnie powrócić do swojego konta:

sudo usermod -d /var/www/html/qax qax

Teraz możemy przejść do konfiguracji serwera FTP. Wszystkie ustawienia są przechowywane w pliku /etc/vsftpd.conf. Najpierw zróbmy jego kopię zapasową, abyśmy mogli wrócić do początkowych ustawień gdybyśmy coś popsuli:

sudo cp /etc/vsftpd.conf  /etc/vsftpd.conf_default

Następnie otwieramy wspomiany plik konfigutacyjny w ulubionym edytorze (np. nano):

sudo nano /etc/vsftpd.conf

W otwartym pliku znajdź i odkomentuj dwie linie: #write_enable=YES oraz #chroot_local_user=YES poprzez usunięcie z nich pierwszych znaków (tzw. sharp lub hash, czyli #). Te pierwsze ustawienie zezwoli na zapis plików na serwerze poprzez FTP, natomiast drugi ograniczy dostęp wszystkich użytkwników do ich katalogów domowych (tzn. nie będą mogli z niego wyjść). W którymś miejscu dodaj również linię allow_writeable_chroot=YES, która doda uprawnienia do zapisu w katalogach domowych użytkowników (nie wnikając w szczegóły dodam, że nie jest to dobre rozwiązanie pod względem bezpieczeństwa jeśli planujesz zbudować serwis hostingowy, jednakże do prostszych celów w zupełności wystarczy):

write_enable=YES
chroot_local_user=YES
allow_writeable_chroot=YES

Aby wprowadzone zmiany zostały zastosowane należy ponownie uruchomić serwer FTP wykonując poniższe polecenie:

sudo systemctl restart vsftpd.service

W ten sposób ukończyliśmy instalację oraz konfigurację serwera FTP vsftpd. Teraz pora na praktyczny test jego działania – zostawmy w spokoju nasz serwer i oceńmy od strony klienckiej co udało nam się zrobić. Pliki na nasz serwer możemy wysyłać za pomocą dowolnego programu klienckiego FTP. W tym poradniku przedstawię sposób konfiguracji mojego ulubionego menadżera plików, którym jest Unreal Commander. Po pobraniu i zainstalowaniu aplikacji, a następnie jej uruchomieniu klikamy z paska menu Sieć i wybieramy Połącz z serwerem FTP…. W otwartym oknie klikamy przycisk Nowe połączenie… i w kolejnym oknie uzupełniamy niżej wymienione wymagane pola:

Okno konfiguracji połączenia FTP w programie Unreal Commander
Okno konfiguracji połączenia FTP w programie Unreal Commander
  • Nazwa połączenia – dowolny wymyślony ciąg znaków identyfikujący połączenie FTP
  • Nazwa hosta[:port] – adres IP naszego serwera bez konieczności podawania numeru portu, gdyż jest on domyślny
  • SSL/TLS – to pole odznaczamy, gdyż nie skonfigurowaliśmy jeszcze szyfrowania połączenia
  • Nazwa użytkownika – login tego użytkownika którego wcześniej utworzyliśmy
  • Hasło – hasło do konta powyższego użytkownika
  • Użyj trybu pasywnego dla transferów (jak przeglądarka WWW) – to pole również odznaczamy

Następnie zapisujemy nowe połączenie FTP klikając na przycisk OK i powracamy do poprzedniego okna, w którym zaznaczamy nowo dodane połączenie i klikamy przycisk Połącz – po chwili przeniesiemy się do katalogu domowego użytkownika znajdującego się na serwerze. Teraz możemy wysłać poprzez FTP jakiś prosty dokument hipertekstowy, aby przekonać się, że będzie dostępny poprzez HTTP – ważne, aby nazywał się index.html lub index.php. Następnie w przeglądarce internetowej otwieramy stronę o adresie URL równym nazwie użytkownika poprzedzonym adresem IP serwera oraz prefiksem HTTP – w  moim przypadku będzie to http://192.168.33.9/qax. Podkreślam, że nasz serwer webowy narazie jest widoczny jedynie w sieci lokalnej, do której jest on teraz podłączony.

Zakończenie

W ten sposób zbudowaliśmy podstawowy prosty serwer webowy oparty na mikrokomputerze Raspberry Pi 4 oraz systemie operacyjnym Ubuntu Server. W następnej części poprawimy w nim co nieco – dodamy obsługę domen oraz wirtualnych hostów (aby nie trzeba było wpisywać adresów IP tylko normalną nazwę strony), szyfrowanie TLS (zarówno dla protokołu HTTP jak i FTP), a także wystawimy nasz serwer publicznie na cały świat (aby był widoczny w całym internecie). Dziękuję za uwagę i jak zwykle proszę o komentarz. Gdyby coś u Ciebie nie działało z powyższego poradnika – pisz śmiało, na pewno pomogę i odpiszę! 🙂

Komentarze

Eda w dniu napisał:
Awatar użytkownika Eda

Swietny artykul. Greetings from UK. sister Edyta

Dodaj własny komentarz

Formularz dodawania komentarza
Kontynuując przeglądanie niniejszej witryny internetowej automatycznie wyrażasz zgodę na wykorzystanie plików cookies.