Uruchomienie serwera WWW na Raspberry Pi może być bardzo ciekawym projektem. Dzięki niemu można nauczyć się podstaw administracji systemem, zarządzania bazą danych oraz programowania webowego. W tym artykule pokażę, jak zainstalować i skonfigurować Nginx, PHP, MySQL i phpMyAdmin na Raspberry Pi z systemem Raspbian.
Uwaga: Poniższe instrukcje są przeznaczone dla osób mających pewne doświadczenie z systemami Linux. Jeśli jesteś początkujący, radzę zachować ostrożność i dokładnie przeczytać wszystkie instrukcje.
Wymagania
- Raspberry Pi z zainstalowanym systemem Raspbian
- Karta SD o pojemności co najmniej 8 GB
- Dostęp do Internetu
- Klawiatura, mysz i monitor (opcjonalnie, jeśli korzystasz z SSH)
Kroki wstępne
Zanim przystąpimy do instalacji, upewnijmy się, że system jest aktualny:
sudo apt update
sudo apt upgrade -y
Instalacja Nginx
Nginx to lekki i wydajny serwer WWW. Instalacja w Raspbian jest bardzo prosta:
sudo apt install nginx -y
Po instalacji uruchom serwis:
sudo systemctl start nginx
Możesz teraz otworzyć przeglądarkę i wpisać adres IP swojego Raspberry Pi. Powinieneś zobaczyć stronę powitalną Nginx.
Instalacja PHP
Nginx sam w sobie nie obsługuje PHP, więc musimy doinstalować odpowiednie pakiety:
sudo apt install php-fpm php-mysql -y
Konfiguracja Nginx do pracy z PHP
Otwórz główny plik konfiguracyjny Nginx:
sudo nano /etc/nginx/sites-available/default
Znajdź i zmodyfikuj blok location
odpowiedzialny za przetwarzanie plików PHP. Powinien wyglądać mniej więcej tak:
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php7.3-fpm.sock;
}
Zapisz plik i zamknij edytor. Teraz zrestartuj Nginx:
sudo systemctl restart nginx
Instalacja MySQL
MySQL to system zarządzania bazami danych. Do instalacji użyjemy polecenia:
sudo apt install mysql-server php-mysql -y
Po instalacji możesz uruchomić klienta MySQL, aby upewnić się, że wszystko działa:
sudo mysql -u root -p
Instalacja phpMyAdmin
phpMyAdmin to narzędzie webowe do zarządzania bazą danych MySQL. Instalacja jest równie prosta:
sudo apt install phpmyadmin -y
Podczas instalacji system zapyta, jaki serwer WWW chcemy użyć. Wybieramy „Nginx”. Następnie podajemy hasło do bazy danych i konta root
.
Integracja z Nginx
Musimy teraz zintegrować phpMyAdmin z Nginx. Otwórz główny plik konfiguracyjny Nginx:
sudo nano /etc/nginx/sites-available/default
Dodaj następujący blok:
location /phpmyadmin {
root /usr/share/;
index index.php index.html index.htm;
location ~ ^/phpmyadmin/(.+\.php)$ {
try_files $uri =404;
fastcgi_pass unix:/run/php/php7.3-fpm.sock;
include fastcgi_params;
}
}
Zapisz zmiany i zrestartuj Nginx:
sudo systemctl restart nginx
Po tych krokach powinieneś mieć działający stos Nginx + PHP + MySQL + phpMyAdmin na swoim Raspberry Pi. To jednak dopiero początek; można teraz zająć się optymalizacją konfiguracji, zabezpieczeniami czy dodaniem własnych stron i aplikacji.
Optymalizacja i Bezpieczeństwo
Zabezpieczenie MySQL
Domyślnie, konto root
w MySQL nie ma ustawionego hasła, co jest potencjalnym zagrożeniem. Zabezpieczmy więc naszą bazę danych:
sudo mysql_secure_installation
Podczas tego procesu system zada kilka pytań dotyczących poziomu zabezpieczeń, takich jak ustawienie hasła dla użytkownika root
, usuwanie anonimowych użytkowników, dezaktywacja logowania root’a zdalnie itd. Zaleca się akceptowanie większości z tych ustawień.
Optymalizacja PHP
Jednym z kluczowych aspektów optymalizacji jest konfiguracja PHP-FPM (FastCGI Process Manager). Dostosujmy ilość workerów do naszych potrzeb. Otwórz plik konfiguracyjny:
sudo nano /etc/php/7.3/fpm/pool.d/www.conf
Znajdź linie rozpoczynające się od pm.max_children
, pm.start_servers
, pm.min_spare_servers
, pm.max_spare_servers
i dostosuj je do swoich potrzeb.
Optymalizacja Nginx
Nginx jest już dość dobrze zoptymalizowany „od pudełka”, ale zawsze można coś poprawić. Otwórz plik konfiguracyjny:
sudo nano /etc/nginx/nginx.conf
Możesz dostosować takie parametry jak worker_processes
czy keepalive_timeout
w zależności od tego, jakie masz potrzeby i jakie obciążenie planujesz na serwerze.
Firewall
Jeśli planujesz udostępnić swoją stronę w Internecie, konieczne jest skonfigurowanie zapory sieciowej. Na Raspberry Pi możesz użyć ufw
(Uncomplicated Firewall):
sudo apt install ufw
sudo ufw enable
sudo ufw allow 22,80,443/tcp
Te polecenia zainstalują i aktywują zaporę, a także otworzą porty dla SSH (22), HTTP (80) i HTTPS (443).
Monitorowanie i Logi
Monitorowanie zasobów
Sprawdzanie zasobów systemu to ważna część utrzymania serwera. Możesz użyć różnych narzędzi, takich jak top
, htop
czy vmstat
do monitorowania użycia CPU, pamięci i dysku.
Logi
Regularne przeglądanie logów pomoże w identyfikacji problemów. Logi dla Nginx znajdziesz w /var/log/nginx/
, dla PHP-FPM w /var/log/php7.3-fpm.log
, a dla MySQL w /var/log/mysql/error.log
.
Backup i Odzyskiwanie
Ostatnim, ale nie mniej ważnym krokiem jest zorganizowanie systemu kopii zapasowych. Możesz użyć narzędzi takich jak rsync
do robienia kopii folderów, czy mysqldump
do eksportu baz danych.
Kopia folderów
Zakładając, że masz zdalny serwer na którym chcesz przechowywać kopie, możesz użyć rsync
w taki sposób:
rsync -avz /var/www/ user@remote-server:/path/to/backup/folder/
Kopia baz danych
Używając mysqldump
, możesz zrobić kopię pojedynczej bazy danych:
mysqldump -u root -p nazwa_bazy > backup.sql
Przeszliśmy przez instalację i konfigurację Nginx, PHP, MySQL i phpMyAdmin, a także przez podstawowe kroki optymalizacji i zabezpieczania systemu. Teraz jesteś gotów do postawienia swojego serwera WWW na Raspberry Pi!
Rozszerzenie Funkcjonalności
Po ukończeniu podstawowej konfiguracji i optymalizacji, możesz rozważyć dodanie dodatkowych funkcji i narzędzi, które zwiększą użyteczność Twojego serwera.
Instalacja Certbot dla HTTPS
Dzisiejsze standardy zalecają korzystanie z protokołu HTTPS dla każdej strony internetowej. Aby to zrobić, potrzebujesz certyfikatu SSL. Certbot jest jednym z najpopularniejszych narzędzi do automatycznego zarządzania certyfikatami SSL od Let’s Encrypt.
sudo apt install certbot python3-certbot-nginx -y
Po instalacji, generowanie i instalowanie certyfikatu to już tylko kwestia jednego polecenia:
sudo certbot --nginx
Cron Jobs dla Automatyzacji
Automatyzacja jest kluczem do efektywnego zarządzania serwerem. Cron jest daemonem w systemach Unix, który umożliwia użytkownikom uruchamianie skryptów i poleceń w określonych odstępach czasu.
Aby edytować listę zadań cron dla obecnego użytkownika, wpisz:
crontab -e
Content Management System (CMS)
Jeżeli planujesz uruchomić bloga, portfolio, czy inną stronę z dynamiczną treścią, dobrze jest zainstalować system zarządzania treścią jak WordPress, Joomla, czy Drupal. Dzięki temu nie będziesz musiał ręcznie edytować plików HTML czy PHP.
Konfiguracja poczty e-mail
Jeżeli Twój serwer będzie obsługiwał wysyłanie e-maili, warto zainstalować i skonfigurować system pocztowy jak Postfix wraz z Dovecot dla IMAP/POP3.
Diagnostyka i Debugowanie
Mimo najlepszych intencji, czasami rzeczy idą nie tak jak powinny. Oto kilka wskazówek, jak diagnozować problemy:
Debugowanie Nginx
Jeżeli Nginx nie działa jak oczekiwano, pierwszą rzeczą, którą warto zrobić, to sprawdzić składnię konfiguracji:
sudo nginx -t
Jeżeli komunikat mówi, że wszystko jest w porządku, warto zrestartować serwer:
sudo systemctl restart nginx
Debugowanie PHP
Jeżeli masz problemy z PHP, warto zacząć od przejrzenia logów. Jak wcześniej wspomniano, logi dla PHP-FPM znajdziesz w /var/log/php7.3-fpm.log
.
Debugowanie MySQL
Jeżeli MySQL sprawia problemy, pierwszą rzeczą do sprawdzenia są logi w /var/log/mysql/error.log
.
Przyszłe Ulepszenia
Po zakończeniu tych wszystkich kroków, Twój serwer Raspberry Pi powinien być gotowy do działania. Ale pamiętaj, że zawsze jest miejsce na ulepszenia. Możesz rozważyć dodanie cache jak Varnish lub Redis, zainstalowanie panelu administracyjnego jak Webmin, czy nawet rozbudowanie serwera o dodatkowe usługi jak serwer FTP czy serwer mediów. Ogranicza Cię tylko Twoja wyobraźnia i zasoby sprzętowe Twojego Raspberry Pi.