S novým Raspberry Pi 4 se dají dělat i výkonnostně zajímavé projekty a když starému domácímu serveru dochází dech, je Raspberry Pi 4 s SSD diskem ideální volba.

Stavba serveru a nastavení bootování z SSD disku

Pro vlastní stavbu serveru budeme potřebovat následující:

Za investici méně než 4.000 Kč získáte velmi rychlý domácí webový server s diskovým prostorem 256 GB.

Sestavení HW je tak jednoduché, že jej netřeba popisovat, tak rovnou přejdeme k instalaci a nastavení bootování z SSD disku, které je oproti Raspberry Pi 3 o něco málo složitější. K instalaci budeme potřebovat microSD kartu (postačuje 16 GB), kterou budeme muset prozatím v Raspberry Pi 4 ponechat, než bude dostupná aktualizace firmware pro Raspberry Pi 4 umožňující boot bez SD karty stejně jak je tomu u Raspberry Pi 3. Aktuální verzi firmware můžete sledovat zde: https://github.com/raspberrypi/rpi-eeprom/blob/master/firmware/release-notes.md 

Stáhněte si Raspbian s desktopem a doporučeným software a pomocí programu balenaEtcher jej přeneste, jako obraz, na microSD kartu. Desktopová verze je potřeba kvůli přenesení diskových oddílů z microSD karty na SSD disk – v budoucnu, až bude Raspberry Pi 4 podporovat bootování bez microSD karty, nebude desktopová verze vůbec potřeba.

Zapněte Raspberry Pi 4 a počkejte než se nainstaluje Raspbian a zobrazí se Vám desktopové prostředí. V desktopovém prostředí přejděte do Příslušenství a spusťte aplikaci SD card copier. V položce Copy From Device zvolte vaší microSD kartu a v položce Copy To Device se Vám automaticky doplní Váš SSD disk.  Nezapomeňte zatrhnout volbu New Partition UUIDs a zvolte Start  a vyčkejte.

Nyní otevřete terminál (Ctrl+Alt+T) a příkazem lsblk si zobrazte diskové oddíly.

# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda           8:0 0 238,5G 0 disk
├─sda1        8:1 0   256M 0 part
└─sda2        8:2 0 238,2G 0 part
mmcblk0     179:0 0  14,5G 0 disk
├─mmcblk0p1 179:1 0   256M  0 part /boot
└─mmcblk0p2 179:2 0  14,2G 0 part /

Z výpisu je vidět, že systémový (root) oddíl má název mmcblk0p a číslo 2 naším cílem je jej změnit za sda. Otevřete k editaci soubor cmdline.txt
sudo nano /boot/cmdlinetxt
a na konec jediného řádku dopište
root=/dev/sda2 rootfstype=ext4 rootwait
Nyní je potřeba ještě upravit soubor config.txt
sudo nano /boot/config.txt
na poslední řádek dopište
program_usb_boot_mode=1
Nyní můžete Raspberry Pi 4 restartovat příkazem
sudo reboot

Po restartu zkontrolujte systémový oddíl, nyní by měl být již na sda2.

# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda           8:0 0 238,5G 0 disk
├─sda1        8:1 0   256M 0 part /boot
└─sda2        8:2 0 238,2G 0 part /
mmcblk0     179:0 0  14,5G 0 disk
├─mmcblk0p1 179:1 0   256M  0 part
└─mmcblk0p2 179:2 0  14,2G 0 part

Příkazem df -h / si můžete zkontrolovat velikost systémového oddílu.

# df -h /
Souborový systém Velikost Užito Volno Uži% Připojeno do
/dev/root 234G 6,1G 216G 3% /

Základní nastavení Raspbian – pro připomenutí

Aktualizace – doporučuji až nyní, kdy Raspberry Pi 4 bootuje z SSD disku.

# sudo apt update
# sudo apt full-upgrade
# sudo rpi-eeprom-update -a

Vypnutí desktopu a povolení SSH.

# sudo raspi-config

Boot Options – Desktop / CLI – Console
Interfacing Options – SSH

Správa uživatelů – přidání vlastního uživatele honza (kromě skupin pi a sudo), nastavení hesla pro root a po restartu , přihlášení jako uživatel honza a následném přihlášení jako root příkazem su odstranění uživatele pi.

# groups pi
# sudo useradd -m -G adm,dialout,cdrom,audio,video,plugdev,games,users,input,netdev,spi,i2c,gpio honza
# sudo passwd honza
# sudo passwd root
# sudo reboot
# userdel -r pi

Instalace LAMP (MariaDB, Apache2, PHP, phpMyAdmin)

Následující instalace jen v příkazech pro verzi Raspbian Buster.

Instalace databázového serveru MariaDB

# apt install -y mariadb-server mariadb-client
# apt policy mariadb-server
# systemctl status mariadb
# mysql_secure_installation

Instalace webového serveru Apache

# apt install -y apache2 apache2-utils
# apache2 -v
# systemctl status apache2
# systemctl reload apache2
# systemctl enable apache2
# apt -y install elinks
# apache2ctl fullstatus

Instalace PHP 7.3

# apt -y install php php-common
# php -v
# apt install php libapache2-mod-php php-cli php-fpm php-json php-mysql php-zip php-gd php-mbstring php-curl php-xml php-pear php-bcmath
# apt -y install libapache2-mod-php
# a2enmod php7.3
# echo "<?php phpinfo(); ?>" | sudo tee /var/www/html/phpinfo.php

Instalace phpMyAdmin

# apt-get -y install phpmyadmin
# mysql -u root -p
GRANT ALL PRIVILEGES ON *.* TO 'phpmyadmin'@'localhost' WITH GRANT OPTION;
USE mysql;
UPDATE user SET plugin='mysql_native_password' WHERE User='root';
FLUSH PRIVILEGES;
exit
# service mysql restart

Nyní si můžete vše zkontrolovat přes webový prohlížeč na těchto url adresách:

Apache: http://ip_vašeho_raspberry/
PHP: http://ip_vašeho_raspberry/phpinfo.php
phpMyAdmin: http://ip_vašeho_raspberry/phpmyadmin/

Na závěr můžete svůj nový webový server otestovat pomocí benchmarku. Můj výsledek:

# ab -n 2000 -c 30 http://127.0.0.1/

Server Software: Apache/2.4.38
Server Hostname: 127.0.0.1
Server Port: 80
Document Path: /
Document Length: 10701 bytes

Concurrency Level: 30
Time taken for tests: 0.543 seconds
Complete requests: 2000
Failed requests: 0
Total transferred: 21954000 bytes
HTML transferred: 21402000 bytes
Requests per second: 3683.59 [#/sec] (mean)
Time per request: 8.144 [ms] (mean)
Time per request: 0.271 [ms] (mean, across all concurrent requests)
Transfer rate: 39487.05 [Kbytes/sec] received

Connection Times (ms)
min mean[+/-sd] median max
Connect:    0 1 0.6 1  6
Processing: 3 7 1.5 6 17
Waiting:    1 5 1.3 5 14
Total:      4 8 1.8 7 22

Percentage of the requests served within a certain time (ms)
50% 7
66% 8
75% 8
80% 8
90% 10
95% 10
98% 15
99% 17
100% 22 (longest request)