Debian 10 (Buster) LAMP szerver v1.0 telepítése

botond küldte be 2019. 11. 19., k – 14:25 időpontban

Tartalom

 

Az 1. oldal tartalma

 

Bevezető

LAMP rendszerek segítségével dinamikus weboldalakat futtathatunk szerverünkön, vagy akár otthoni gépünkön. Ebben a leírásban a Debian 10 (Buster) operációs rendszerre készítünk el egy LAMP szervert, amely az alábbi összetevőkből fog állni:

A phpMyAdmin sajnos nem része a Debian 10 (Buster) hivatalos csomagtárának, ezért ezt külön fogjuk telepíteni, viszont a többi komponenst a szokásos módon az APT csomagkezelő segítségével szerezzük be, amit később ugyanezzel frissíthetünk is.

Korábban már készültek LAMP szervereket telepítő leírások, ezek is hasznosak lehetnek:

Ezt a telepítést is az 1.0 verziószámmal neveztem el, így ha később kerülnek még rá kiegészítők (további verziókban), akkor pontosabban tudok hivatkozni az éppen szükséges LAMP változatra a megfelelő verziószám megjelölésével.

A korábbi hagyományoktól eltérően ezt a LAMP szervert úgy építjük fel, hogy alkalmas legyen arra, hogy később belőle építsük tovább a tökéletes szervert. Ezáltal a LAMP elemeinek telepítő részei újrahasználhatók lesznek, mivel a tökéletes szerver is tartalmazza ezeket. Ennél fogva jóval kevesebb munkával juthatunk el ennek a szerver szériának a következő lépcsőfokára. Így tehát fontos, hogy az itt leírtakat pontosan végezzük, hogy a későbbi tökéletes szerver telepítésénél ne adódhassanak problémák.
Frissítés (2022-09-06):
Elkészült a LAMP szerver Debian 11 (Bullseye) változata:

 

 

Alapfeltétel

Ennek a LAMP szervernek az összeállításához szükség van a Debian 10 (Buster) minimális szerver telepítése című útmutató elvégzésére, vagy a Debian 10 (Buster) minimális szerver letöltésére hogy hibátlanul működhessen. Én is ezen készítem el a telepítést.
Természetesen feltelepíthető akár grafikus környezettel rendelkező asztali használatú számítógépre is, a lényeg, hogy a LAMP rendszer összetevői most kerüljenek fel először a gépre a megfelelő konfiguráció és működés érdekében.

 

Rendszer frissítése

Minden nagyobb telepítési munkát célszerű a rendszer frissítésével kezdeni, hogy a folyamat során a legfrissebb csomagokkal dolgozhassunk. Ehhez lépjünk be root-ként, majd adjuk ki az alábbi apt-get parancsokat:

apt-get update
apt-get upgrade

 

MariaDB telepítése

A Debian 10 (Buster) rendszerben is a MariaDB adatbázis kiszolgáló az alapértelmezett, így egyszerűen telepíthetjük a csomagtárból:

apt-get -y install mariadb-server mariadb-client

Adatbázis biztonságossá tétele

Adatbázis szerverünket, és adatbázisainkat biztonságosabbá tehetjük, ha elvégzünk néhány beállítást. Ezeket a biztonsági beállításokat egyszerre elvégezhetjük a mysql_secure_installation parancs futtatásával:

mysql_secure_installation

A program feltesz nekünk néhány kérdést, amire válaszoljunk az alábbiak szerint:

Enter current password for root (enter for none): [Enter]
Set root password? [Y/n] y
New password: Adjuk meg az új root jelszót
Re-enter new password: Ismételjük meg
Remove anonymous users? [Y/n] y
Disallow root login remotely? [Y/n] y
Remove test database and access to it? [Y/n] y
Reload privilege tables now? [Y/n] y
Ezekről a kérdésekről és válaszokról már írtam részletesebben a korábban elkészített Debian 9 (Stretch) LAMP szerver telepítésekor, így ott tájékozódhatunk bővebben.

Defaults fájl beállítása

A biztonság és az automatizálhatóság alapkövetelmények. A parancssori adatbázishasználat során szükségünk lehet az automatizált megoldásokra, amikor nem kell jelszavakat gépelnünk a terminálba, hanem szkriptekkel távollétünkben is elvégezhetők az adatbázisokkal kapcsolatos háttérfeladatok. Továbbá fontos szempont az is, hogy adatbázis jelszavaink ne jelenjenek meg sem a parancssori előzményekben, sem szkriptjeinkben, hogy ne kerülhessenek illetéktelen kezekbe. Erről már volt szó, hogyan tehetjük biztonságossá a parancssori adatbázis használatot a defaults fájlok segítségével, ennek megfelelően most beállítjuk ezt, hogy később már kényelmesen használhassuk például a mysql parancsot.

Root-ként maradva nyissuk meg szerkesztésre a /etc/mysql/debian.cnf fájlt: 

nano /etc/mysql/debian.cnf

Ebben az alábbi tartalmat találjuk, amit egészítsünk ki a zölddel kiemelt részeknek megfelelően:

# Automatically generated for Debian scripts. DO NOT TOUCH!
[client]
host     = localhost
user     = root
password = '<adatbázis root jelszavunk>'
socket   = /var/run/mysqld/mysqld.sock
[mysql_upgrade]
host     = localhost
user     = root
password = '<adatbázis root jelszavunk>'
socket   = /var/run/mysqld/mysqld.sock
basedir  = /usr

A két password sorban tehát szimpla aposztrófok között állítsuk be a fentebb megadott új root jelszavunkat. Az aposztrófok csak azért kellenek, ha a jelszó esetleg szóközöket, vagy egyéb speciális karaktereket tartalmaz, akkor azokkal is működni fog így.

Root belépés tesztelése

A beállítások elvégzése után pedig teszteljük a root belépést az adatbázis kiszolgálóba. Itt most háromféleképpen is belépünk, ezzel szemléltetve a különböző módok használhatóságát és biztonságosságát.

Hagyományos belépési mód, a root jelszó begépelésével

A belépéshez futtassuk az alábbi parancsot:

mysql -u root -p

MariaDB root belépés a jelszó begépelésével

Itt láthatjuk, hogy a rendszer bekéri tőlünk a jelszót, azután beléptet. Ez ugyan biztonságos, de így nem automatizálható pl. szkriptekből, mivel felhasználói interakcióra vár.

 

 

Hagyományos belépési mód, a jelszó parancssori megadásával

Beléphetünk úgy is, hogy előre megadjuk a jelszót:

mysql -u root -p<jelszavunk>

Itt fontos, hogy a -p kapcsolót közvetlenül kövesse a jelszó, tehát nem lehet a kapcsoló és a jelszó között szóköz!

MariaDB root belépés a jelszó parancssori megadásával

Ezzel már lehet automatizálni, szkriptekben is szépen lefut, mert nem vár felhasználói beavatkozásra. Viszont egyáltalán nem biztonságos, mert ahogy a képen is látszik, kint van a jelszó. Ez megjelenik a parancssori előzményeket előhívó history parancs kimenetében is, valamint beletekintve szkriptjeinkbe, szintén látható.

Belépés a defaults fájl használatával

És végül az automatizálható és biztonságos belépés a defaults fájl használatával:

mysql --defaults-file=/etc/mysql/debian.cnf

Ennek eredménye pedig:

MariaDB root belépés a defaults fájl  használatával

Itt tehát nincs sem felhasználói interakció, és a jelszó sem jelenik meg sehol. A gyári defaults fájl pedig a megfelelő jogosultságokkal van ellátva, amit csak a root olvashat (600). Ennek megfelelően, ha újabb defaults fájlt hozunk létre például másik felhasználó számára, gondoskodnunk kell a fájl ugyanilyen jogosultsági beállításáról, és így teljes marad a biztonság.

Az első két módszert csak a szemléltetés kedvéért alkalmaztuk, a LAMP szerver telepítésének további részeiben már csak a defaults fájlos megoldást használjuk.

 

Apache web szerver telepítése

Az Apache2 telepítéséhez futtassuk a következőt:

apt-get -y install apache2 apache2-doc apache2-utils

Az alapértelmezett webgyökér könyvtár a /var/www/html. Tehát alapból ez az egy virtualhoszt kerül beállításra telepítéskor, melynek a konfigurációs fájlja itt található: /etc/apache2/sites-enabled/000-default.conf

Ennek tartalma pedig:

cat /etc/apache2/sites-enabled/000-default.conf
<VirtualHost *:80>
        # The ServerName directive sets the request scheme, hostname and port that
        # the server uses to identify itself. This is used when creating
        # redirection URLs. In the context of virtual hosts, the ServerName
        # specifies what hostname must appear in the request's Host: header to
        # match this virtual host. For the default virtual host (this file) this
        # value is not decisive as it is used as a last resort host regardless.
        # However, you must set it for any further virtual host explicitly.
        #ServerName www.example.com

        ServerAdmin webmaster@localhost
        DocumentRoot /var/www/html

        # Available loglevels: trace8, ..., trace1, debug, info, notice, warn,
        # error, crit, alert, emerg.
        # It is also possible to configure the loglevel for particular
        # modules, e.g.
        #LogLevel info ssl:warn

        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined

        # For most configuration files from conf-available/, which are
        # enabled or disabled at a global level, it is possible to
        # include a line for only one particular virtual host. For example the
        # following line enables the CGI configuration for this host only
        # after it has been globally disabled with "a2disconf".
        #Include conf-available/serve-cgi-bin.conf
</VirtualHost>

# vim: syntax=apache ts=4 sw=4 sts=4 sr noet

Ha át szeretnénk állítani például a webgyökér könyvtárat, stb, akkor ebben a fájlban kell módosítani.

Az Apache2 fő konfigurációs fájlja pedig: /etc/apache2/apache2.conf.

Apache tesztelése

Az Apache működését a böngészőben tesztelhetjük, a szerver IP-címével (ennek a szervernek: 192.168.1.130):

Apache ellenőrzése

 

 

PHP 7.3 telepítése

A Debian 10 (Buster) operációs rendszer hivatalos csomagtárában a 7.3-as PHP ág található, ami jelenleg a legújabb stabil branch. Egy lépésben történő telepítéséhez futtathatjuk az alábbi parancsot, ami nálam már a jól bevált PHP csomagokat tartalmazza:

apt-get -y install \
    apache2-suexec-pristine \
    libapache2-mod-fcgid \
    libapache2-mod-python \
    libapache2-mod-passenger \
    libapache2-mod-php \
    libruby \
    mcrypt \
    imagemagick \
    memcached \
    php-pear \
    php-memcache \
    php-imagick \
    php-gettext \
    php-apcu \
    php-yaml \
    php7.3 \
    php7.3-bcmath \
    php7.3-bz2 \
    php7.3-cgi \
    php7.3-cli \
    php7.3-common \
    php7.3-curl \
    php7.3-fpm \
    php7.3-gd \
    php7.3-imap \
    php7.3-intl \
    php7.3-json \
    php7.3-mbstring \
    php7.3-mysql \
    php7.3-opcache \
    php7.3-pspell \
    php7.3-recode \
    php7.3-soap \
    php7.3-sqlite3 \
    php7.3-tidy \
    php7.3-xml \
    php7.3-xmlrpc \
    php7.3-xsl \
    php7.3-zip
Itt ha módosítjuk ezt a több sorba tördelt, hosszú parancsot, ügyeljünk arra, hogy a behúzásoknál csak szóközöket használjunk (nem kötelező a behúzás használata, csak esztétikai jelentősége van)! Továbbá a sorok végén lévő "\" jelek után már nem lehet szóköz, illetve az utolsó sor végén már nem kell a "\" sortörő karakter.

Ezeken kívül keresgélhetünk még további PHP csomagokat is az apt-cache paranccsal, ha az igények megkívánják:

apt-cache search php7.3
A fenti csomagösszeállítás tartalmaz minden szükséges összetevőt, kezdve az Apache PHP modul kiegészítőivel. Továbbá több olyan csomagot is tartalmaz, ami alkalmassá teszi ezt a LAMP szervert a későbbi tökéletes szerverre történő továbbfejlesztésre, ezért telepítésük ajánlott.

A telepítés néhány sor NOTICE-al zárul:

NOTICE: Not enabling PHP 7.3 FPM by default.
NOTICE: To enable PHP 7.3 FPM in Apache2 do:
NOTICE: a2enmod proxy_fcgi setenvif
NOTICE: a2enconf php7.3-fpm
NOTICE: You are seeing this message because you have apache2 package installed.

Ez teljesen normális, mindez azért kerül megjegyzésre, mert egyszerre telepítettük a PHP Apache csomagját – ami lehetővé teszi a PHP Apache modulként történő futtatását –, és a PHP-FPM csomagját is. Ezért jelzi nekünk a telepítő, hogy alapból nem kerül engedélyezésre a PHP FPM szerver API módja, amíg azt be nem kapcsoljuk a leírt lépésekkel.

Ezzel kapcsolatban két lehetőségünk is van:

PHP használata az alapértelmezett mod_php módban

Ez az alapértelmezett mód. Ehhez nem kell semmit tennünk, csak elhelyezni a webgyökérben a kívánt PHP tartalmat, és már működik is. Hozzuk létre a szokásos phpinfós fájlunkat:

nano /var/www/html/phpinfo.php

Majd tegyük bele a már jól ismert sorokat:

<?php
    phpinfo();
?>

Ezután nyissuk meg a böngészőben:

phpinfo - Alapértelmezett mod_php tesztelése

A Server API sorában láthatjuk a "Apache 2.0 Handler" értéket.

Ha arra van szükségünk, hogy minél hamarabb összerakjunk egy tesztkörnyezetet, amiben mindegy, hogy hogy fut a PHP, vagy valami ritka kompatibilitási követelménynek kell megfelelnünk, akkor ez az optimális választás.

Mindazonáltal ebben az esetben is van lehetőségünk további virtualhoszt-okat létrehozni, ahol használhatjuk ugyanígy a mod_php-t vagy akár a PHP-FPM-et is. Ezt most nem kívánom túlragozni, erről már írtam korábban a Hogyan telepítsük fel a PHP-FPM-et egy Debian 8 (Jessie) LAMP szerverre című útmutatóban. Természetesen abban a leírásban még a PHP 5.6-al végeztem el ezeket a beállításokat, ami ebből a szempontból nem változtat a beállítások menetén.

 

 

Szerver átállítása PHP-FPM-re

A másik lehetőség, hogy átállítunk globálisan mindent PHP-FPM-re. Ez azt jelenti, hogy innentől nem lesz elérhető a régi és elavult mod_php, mivel ahogy fentebb is írta a telepítő, ennek használatához ki kell kapcsolni, hogy működésbe hozhassuk alapértelmezettként a PHP-FPM-et. Ehhez futtassuk root-ként az alábbi 4 parancsot:

a2dismod php7.3
a2enmod proxy_fcgi setenvif
a2enconf php7.3-fpm
systemctl restart apache2

Itt kikapcsoljuk az Apache aktuális php modulját, bekapcsoljuk a szükséges egyéb modulokat, majd engedélyezzük az FPM konfigurációt, és végül újraindítjuk az Apache-ot.

Ezután ha ráfrissítünk a korábbi phpinfó böngészőablakunkra, akkor már így fog kinézni:

phpinfo - PHP-FPM tesztelése

És már a PHP-FPM-el jön be az alapértelmezett webgyökérben is a PHP. Ez a megoldás annyiban különbözik az előzőtől, hogy az engedélyezett php7.3-fpm Apache konfiguráció végrehajt egy átirányítást az FPM-re, amennyiben nem találja a (kikapcsolt) mod_php-t. Erről részletesen az iménti linken írtam egy hasonló téma kapcsán.

A PHP-FPM modernebb, biztonságosabb, és hatékonyabb, ezért mindenképp ajánlott a használata. Valamint ha később be szeretnénk állítani a HTTP/2-t, akkor ez az átkapcsolás amúgy is szükségszerű lesz, de erről majd egy másik leírásban...

Amennyiben vissza szeretnénk váltani az eredeti módra, bármikor megtehetjük a fenti parancsok fordított futtatásával:

a2disconf php7.3-fpm
a2dismod proxy_fcgi setenvif
a2enmod php7.3
systemctl restart apache2

 

A következő oldalon folytatjuk a LAMP szerver építését a phpMyAdmin telepítésével és beállításával...

 

 

Lapozó

Ez a leírás több oldalból áll: