Raspberry Pi web serveris savo rankomis
Buvo noras turėti savo eksperimentinį serverį namuose. Išsikėliau reikalavimus kuklius, bet reikia nuo kažko pradėti. Reikalavimai, kad:
- kompaktiškas, daug vietos neužimtu (gal koks routeriukas tam tiktų, pvz. Linksys);
- mažos elektros sąnaudos;
- tylus veikimas.
Pradėjau žiūrinėti iš ko čia galima būtų pasigaminti mažą serveriuką, ar čia kokį kompiuterį (nešiojamo ar stacionaro dalį) susiremontuoti ar kokį routeriuką perdaryti (pvz. linksys wrt54g). Internete beieškodamas suradau įdomų straipsnį, kuris padėjo apsispręsti, padėti tašką paieškoms. Nusprendžiau pasidaryti serveriuką iš Raspberry Pi, tai toks super mini kompiuteriukas, prie kurio galima prijungti išorinius įrenginius (klaviatūra, pelė, televizorius, lan …), bet tinkamai pasiruošus programinę dalį užteks tik prijungti prie kompiuterių tinklo (LAN) ir maitinimą (microUSB, 5 V).
Šis daiktas tylus, neturi jokių aktyvių ventiliatorių, HDD funkcija atlieka SD kortelė. Plačiau apie Raspberry Pi skaitykite gamintojo puslapyje (tarp kitko – rašo kad pagaminta UK).
Taigi programinė įranga. Pirmas startas.
Startavau nuo Raspbian “wheezy” (Debian pagrindu Raspberry Pi įrenginukui priderinta Linux distribucija). Ją atsisiunčiame iš čia. Pasiruošiame SD kortelę (bent 4 GB), ir kaip gamintojo aprašyta įsirašome distribuciją į kortelę. Kortelę įdedame į įrenginį ir pirmas startas. Startavus pasileidžia meniu kuriame, pasirenkame kad startu ssh startuojant linux`ui. Šiame žingsnyje dar reikia pilnai prijungti prie išorinių įrenginių (tv, klaviatūra..), vėliau viską galėsime valdyti per SSH.
0. Įdiegus ir pirmą kartą įkrovus os rekomenduoju paleisti:
sudo raspi-config
P.S. rekomenduoju pasinaudoti meniu: expand_rootfs, change_pass, memory_split, ssh, update, change_timezone ir/ar change_locale
1. Pasikeičiame standartinį slaptažodį (jei to nedarėme per raspi-config)
passwd
2. Susitvarkau tinklo sąsaja, fiksuota IP:
sudo nano /etc/network/interfaces
Surandame ir pakeičiame eilutę “iface eth0 inet dhcp” :
iface eth0 inet static address 192.168.1.10 netmask 255.255.255.0 gateway 192.168.1.1
Patikriname nustatymus /etc/resolv.conf
sudo nano /etc/resolv.conf
ieškome įrašo nameserver (tai gali būti mūsų interneto tiekėjo DNS serveris arba gateway adresas), pvz. nameserver 192.168.1.1
Perkrauname tinklo sąsaja:
sudo /etc/init.d/networking restart
Pagal poreikius koreguojame/sutvarkome hosts
sudo nano /etc/hosts
127.0.0.1 localhost.localdomain localhost 192.168.1.10 server1.example.com server1 # The following lines are desirable for IPv6 capable hosts ::1 ip6-localhost ip6-loopback fe00::0 ip6-localnet ff00::0 ip6-mcastprefix ff02::1 ip6-allnodes ff02::2 ip6-allrouters
Dabar koreguojame /etc/hostname
sudo nano /etc/hostname
Failo turinį pakeičiame, įrašome server1.example.com ir išsagojame pakeitimus, tada vykdome:
sudo /etc/init.d/hostname.sh
Tikriname
hostname hostname -f
Abi komandos turi parodyti vienodą rezultatą server1.example.com
3. Konfigūruojame vietą ir datą, diegiame datos ir laiko sinchronizacija
sudo dpkg-reconfigure tzdata sudo apt-get install ntp ntpdate
sudo ntpdate -u ntp.ubuntu.com
Jei yra poreikis lokaliazcijai:
sudo apt-get install console-data locales sudo dpkg-reconfigure console-data sudo dpkg-reconfigure locales
4. Ieškome atnaujinimų:
sudo apt-get update sudo apt-get upgrade
sudo apt-get install ca-certificates
5. Sugeneruojame sertifikatus:
ssh-keygen
Startuojame ssh ir nustatome kad automatiškai satrtuotų:
sudo service ssh start sudo update-rc.d ssh defaults
Restartuoju OS.
sudo reboot
arba (man pirmas variantas trumpesnis):
sudo shutdown -r now
P.S. Po os restartavimo galime atjungti, išorinius įrenginius paliekant pajungtą tik matinimą ir LAN. Jungiamės per ssh ir tolesnius veiksmus atliekame komandinėje eilutėje nuotoliniu būdu.
Diegiame Apache ir PHP
sudo apt-get install apache2 php5 libapache2-mod-php5
dar rekomenduojama:
sudo apt-get install php-pear php5-suhosin
jei diegimo metu gavome klaidos pranešimą, vykdome komandą:
sudo groupadd www-data sudo usermod -g www-data www-data
Perkrauname apache
sudo service apache2 restart
naršyklėje surinkus serverio IP turėtume matyti „It Works!“ užrašą.
Diegiame MySQL
sudo apt-get install mysql-server mysql-client php5-mysql
diegiam phpmyadmin
sudo apt-get install phpmyadmin
Tikriname
Sukuriame failą /var/www/info.php:
sudo nano /var/www/info.php
Įrašome ir išsaugome:
<?php phpinfo(); ?>
Poto peržiūrime http://jusu_serverio_ip/info.php
Diegiame FTP
Vartotojui pi nustatome namini aplanką
sudo chown -R pi /var/www
diegiame vsftp
sudo apt-get install vsftpd
Konfigūruojame, koreguojame vsftpd.conf failą
sudo nano /etc/vsftpd.conf
ir keičiame anonymous_enable=YES į anonymous_enable=NO, atkomentuojema eilutes local_enable=YES , write_enable=YES ir local_umask=022, pabaigoje pridedame eilutę force_dot_files=YES. Išsaugome pakeitimus ir perkrauname:
sudo service vsftpd restart
Papildomi paketai
1. Statistika, diegiame webalizer ir kita
sudo apt-get install webalizer vlogger geoip-database sudo apt-get install zoo unzip bzip2 zip
koreguojame webalizer.conf failą
sudo nano /etc/webalizer/webalizer.conf
ir pridedame arba keičiame šias eilutes:
LogFile /var/log/apache2/access.log OutputDir /var/www/webalizer Incremental yes PageType htm* PageType cgi PageType php
išsaugojus, perleidžiame /etc/init.d/apache2 restart
2. Truputi apsaugos priemonių:
sudo apt-get install chkrootkit
rkhunter clamav clamav-daemon
Paiešką vykdome (galima į cron komandą įrašyti):
$ sudo rkhunter --check
$ sudo chkrootkit
$ sudo clamscan -r /folder/to/scan/
$ sudo chkrootkit -x | less
arba išplėstiniais parametrais:
$ sudo chkrootkit -p /mnt/safe
rkhunter atnaujinimams:
$ sudo rkhunter --update
P
aieška su išplėstiniais parametrais:
$ sudo rkhunter --check --bindir /mnt/safe
2. Nepamirštame MySQL saugumo
sudo mysql_secure_installation
2. Serverio apkrovas galime stebėti su Munin-node