Tartalom
Bevezető
A 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 11 (Bullseye) operációs rendszerre készítünk el egy LAMP szervert, amely az alábbi összetevőkből fog állni:
- Apache (verziója a Debian 11-ben: 2.4.54)
- MariaDB (verziója a Debian 11-ben: 10.5.15)
- PHP (verziója a Debian 11-ben: 7.4)
- phpMyAdmin (aktuális verziója a Debian 11-ben: 5.0.4)
Jó hír, hogy a phpMyAdmin a Debian 11-ben ismét visszakerült a hivatalos csomagtárba, így onnan könnyen telepíthető.
- Ubuntu 20.04 LTS (Focal Fossa) LAMP szerver v1.0 telepítése (2020-10-21)
- Debian 10 (Buster) LAMP szerver v1.0 telepítése (2019-11-19)
- Ubuntu 18.04 LTS (Bionic Beaver) LAMP szerver v1.0 telepítése (2019-08-06)
- Debian 9 (Stretch) LAMP szerver v1.0 telepítése (2019-06-21)
- Debian 8 (Jessie) LAMP szerver v1.0 telepítése (2019-02-09)
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.
Alapfeltétel
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
Első körben lépjünk be a szerverre a konzolon, vagy ha távolról felügyeljük a gépet, akkor SSH-n keresztül, majd futtassuk a frissítést végző apt-get parancsokat root-ként:
apt-get update
apt-get upgrade
Apache web szerver telepítése
Az Apache webkiszolgáló telepítéséhez futtassuk az alábbi parancsot:
apt-get -y install apache2 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 szolgáltatást ellenőrizhetjük a parancssorból a systemctl parancs segítségével:
systemctl status apache2
● apache2.service - The Apache HTTP Server Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor preset: enabled) Active: active (running) since Tue 2022-08-30 19:15:07 CEST; 23h ago Docs: https://httpd.apache.org/docs/2.4/ Main PID: 3100 (apache2) Tasks: 55 (limit: 4664) Memory: 9.7M CPU: 3.424s CGroup: /system.slice/apache2.service ├─3100 /usr/sbin/apache2 -k start ├─3103 /usr/sbin/apache2 -k start └─3104 /usr/sbin/apache2 -k start aug 30 19:15:07 debian11 systemd[1]: Starting The Apache HTTP Server... aug 30 19:15:07 debian11 systemd[1]: Started The Apache HTTP Server.
Megfelelő működés esetén ilyesmi kimenetet kell kapnunk. Valamint böngészőből is ellenőrizhetjük az Apache működését, a szerver IP-címével, vagy a hosztnevével - amennyiben beírtuk azt a számítógép hosts fájljába:
Itt pedig az apache "üdvözlő" oldalát láthatjuk.
PHP 7.4 telepítése
A Debian 11 (Bullseye) operációs rendszer hivatalos csomagtárában a 7.4-as PHP ág található, ebben a leírásban tehát most ezt fogjuk telepíteni.
PHP csomagok válogatása és telepítése
A Debian hivatalos csomagtárában sok PHP kiegészítőt találhatunk, amikre alábbi apt-cache parancs segítségével kereshetünk rá:
apt-cache search php7.4
php-amqp - AMQP extension for PHP php-apcu - APC User Cache for PHP php-apcu-bc - APCu Backwards Compatibility Module php-ast - AST extension for PHP 7 php-ds - PHP extension providing efficient data structures for PHP 7 php-gearman - PHP wrapper to libgearman php-geoip - GeoIP module for PHP php-gmagick - Provides a wrapper to the GraphicsMagick library php-gnupg - PHP wrapper around the gpgme library php-igbinary - igbinary PHP serializer php-imagick - Provides a wrapper to the ImageMagick library php-lua - PHP Embedded lua interpreter php-mailparse - Email message manipulation for PHP php-memcache - memcache extension module for PHP php-memcached - memcached extension module for PHP, uses libmemcached php-mongodb - MongoDB driver for PHP php-msgpack - PHP extension for interfacing with MessagePack php-oauth - OAuth 1.0 consumer and provider extension php-pcov - Code coverage driver php-http - PECL HTTP module for PHP Extended HTTP Support php-pinba - Pinba module for PHP php-propro - propro module for PHP php-ps - ps module for PHP php-psr - PSR interfaces for PHP php-radius - radius client library for PHP php-raphf - raphf module for PHP php-redis - PHP extension for interfacing with Redis php-rrd - PHP bindings to rrd tool system php-solr - PHP extension for communicating with Apache Solr server php-ssh2 - Bindings for the libssh2 library php-stomp - Streaming Text Oriented Messaging Protocol (STOMP) client module for PHP php-uopz - UOPZ extension for PHP 7 php-uploadprogress - file upload progress tracking extension for PHP php-uuid - PHP UUID extension php-yac - YAC (Yet Another Cache) for PHP php-yaml - YAML-1.1 parser and emitter for PHP php-zmq - ZeroMQ messaging bindings for PHP libapache2-mod-php7.4 - server-side, HTML-embedded scripting language (Apache 2 module) libphp7.4-embed - HTML-embedded scripting language (Embedded SAPI library) php7.4 - server-side, HTML-embedded scripting language (metapackage) php7.4-bcmath - Bcmath module for PHP php7.4-bz2 - bzip2 module for PHP php7.4-cgi - server-side, HTML-embedded scripting language (CGI binary) php7.4-cli - command-line interpreter for the PHP scripting language php7.4-common - documentation, examples and common module for PHP php7.4-curl - CURL module for PHP php7.4-dba - DBA module for PHP php7.4-dev - Files for PHP7.4 module development php7.4-enchant - Enchant module for PHP php7.4-fpm - server-side, HTML-embedded scripting language (FPM-CGI binary) php7.4-gd - GD module for PHP php7.4-gmp - GMP module for PHP php7.4-imap - IMAP module for PHP php7.4-interbase - Interbase module for PHP php7.4-intl - Internationalisation module for PHP php7.4-json - JSON module for PHP php7.4-ldap - LDAP module for PHP php7.4-mbstring - MBSTRING module for PHP php7.4-mysql - MySQL module for PHP php7.4-odbc - ODBC module for PHP php7.4-opcache - Zend OpCache module for PHP php7.4-pgsql - PostgreSQL module for PHP php7.4-phpdbg - server-side, HTML-embedded scripting language (PHPDBG binary) php7.4-pspell - pspell module for PHP php7.4-readline - readline module for PHP php7.4-snmp - SNMP module for PHP php7.4-soap - SOAP module for PHP php7.4-sqlite3 - SQLite3 module for PHP php7.4-sybase - Sybase module for PHP php7.4-tidy - tidy module for PHP php7.4-xml - DOM, SimpleXML, XML, and XSL module for PHP php7.4-xmlrpc - XMLRPC-EPI module for PHP php7.4-xsl - XSL module for PHP (dummy) php7.4-zip - Zip module for PHP php-sass - PHP bindings to libsass - fast, native Sass parsing in PHP php-tideways - Tideways PHP Profiler Extension php-xdebug - Xdebug Module for PHP
Ezekből összeállítottam a szokásos csomagválogatásomat, amit természetesen frissítettem és korrigáltam az itt aktuálisan elérhető csomagok alapján. Az alábbi csomagokkal egy általánosnál szélesebb körben használható PHP rendszert telepíthetünk, amivel futtathatunk összetettebb weboldalakat, vagy CMS rendszereket is.
Csak az áttekinthetőség kedvéért két részre osztottam a csomagok telepítését, amit a megszokott módon több sorba tördelve tálalom. Először tehát futtassuk a "közös" használatú csomagokat:
apt-get -y install \
mcrypt \
imagemagick \
libapache2-mod-php7.4 \
libphp7.4-embed \
memcached \
php-apcu \
php-gnupg \
php-http \
php-imagick \
php-memcache \
php-memcached \
php-pear \
php-php-gettext \
php-sass \
php-uploadprogress \
php-yaml
Ezeket a csomagokat más PHP verziók is használják, amennyiben később telepítjük őket.
Itt elég sok minden beállításra kerül, valamint a csomagfüggőségek következtében felkerül még néhány "php7.4-" kezdetű csomag is.
Most pedig telepítsük a Debian 11 (Bullseye) 7.4-es PHP csomagjait, amik közül néhány már az előbb telepítésre került a függőségek miatt, de emiatt nem veszem ki ezeket a listából, hátha valaki nem telepített valamit a fentiek közül, és akkor nem kerülnének fel egyáltalán ezek a csomagok.
apt-get -y install \
php7.4 \
php7.4-bcmath \
php7.4-bz2 \
php7.4-cgi \
php7.4-cli \
php7.4-common \
php7.4-curl \
php7.4-fpm \
php7.4-gd \
php7.4-imap \
php7.4-intl \
php7.4-json \
php7.4-mbstring \
php7.4-mysql \
php7.4-opcache \
php7.4-pspell \
php7.4-soap \
php7.4-sqlite3 \
php7.4-tidy \
php7.4-xml \
php7.4-xmlrpc \
php7.4-xsl \
php7.4-zip
A csomagok telepítése után indítsuk újra az Apache-ot:
systemctl restart apache2
A telepítés néhány sor NOTICE-al zárul:
NOTICE: Not enabling PHP 7.4 FPM by default. NOTICE: To enable PHP 7.4 FPM in Apache2 do: NOTICE: a2enmod proxy_fcgi setenvif NOTICE: a2enconf php7.4-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 alapértelmezetten 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.
Először teszteljük a PHP-t a jelenlegi Apache modulként, majd átállítjuk (globálisan) PHP-FPM-re, és úgy is kipróbáljuk.
PHP tesztelése - Apache modulként (mod_php)
Hozzunk létre egy phpinfo fájlt, amivel megnézzük a PHP futási környezetének adatait:
nano /var/www/html/phpinfo.php
Majd tegyük bele a már jól ismert sorokat:
1 2 3 <?php phpinfo(); ?>
Ezután nyissuk meg a böngészőben:
A Server API sorában láthatjuk a "Apache 2.0 Handler" értéket. Ilyenkor a PHP egy Apache modulként fut, ami már elavult technológia. Célszerű átállítani PHP-FPM-re a szervert.
Szerver átállítása PHP-FPM-re
A PHP-FPM-re történő globális átállítás azt jelenti, hogy innentől már nem lesz elérhető a mod_php, mivel kikapcsoljuk azt. Tetmészetesen később vissza lehet állítani, amennyiben szükséges, de ma már nemigen van rá szükség.
A PHP-FPM-re történő globális átkapcsoláshoz a PHP 7.4 esetében futtassuk az alábbi parancsokat:
a2dismod php7.4
a2enmod proxy_fcgi setenvif
a2enconf php7.4-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.
PHP tesztelése - PHP-FPM-el futtatva
Ezután ha ráfrissítünk a korábbi phpinfó böngészőablakunkra, akkor már így fog kinézni:
Persze itt még sok dolgot be lehet állítani a PHP-FPM háza táján, mert így még nem használjuk ki a külön pool-ok által elérhető előnyöket, stb, de ebben a leírásban most ezekre már nem térünk ki, mert már több helyen volt ezekről szó.
- Hogyan telepítsük fel a PHP-FPM-et egy Debian 8 (Jessie) LAMP szerverre
- Különböző PHP-FPM verziók kombinált használata egy szerveren
- Hogyan telepíthetjük fel a PHP 8-at Debian vagy Ubuntu rendszerű szerverünkre - Átkapcsolás PHP 8 FPM-re
- PHP-FPM pool létrehozása és beállítása a phpMyAdmin számára
(ezek a leírások más PHP illetve Debian/Ubuntu verziókon készültek, de a PHP-FPM beállítások szempontjából ennek nincs jelentősége)
MariaDB telepítése
A Debian a 9-es (Stretch) változata óta a MariaDB adatbázis kiszolgálót kínálja alapértelmezett adatbázis kiszolgálóként. Nincs ez másképpen a Debian 11 (Bullseye) esetében sem. Telepítését egyszerűen végezhetjük az alábbi parancs futtatásával:
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] Switch to unix_socket authentication [Y/n]: n (új funkció, ne kapcsoljuk be, ezt lentebb részletezem) Change the 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
A teljes kimenet:
Itt egy kérdés kivételével ugyanazokat kérdezi meg a program, mint a korábbi MariaDB változatoknál. 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.
Ahogy fentebb a kérdéseknél ígértem, egy kérdést részletezünk, amivel itt újként találkozhatunk a korábbi telepítésekhez képest:
Switch to unix_socket authentication [Y/n]:
A MariaDB a 10.4.3 verziója óta bevezette az Unix socket alapon történő azonosítási módszer alapértelmezett használatát. Mivel ebben a telepítő leírásban "esik túl" a MariaDB verziószáma (10.5.15) ezen az említett 10.4.3-as verzión, ezért itt találkozhatunk ezzel a kérdéssel először. Maga az Unix socket alapú hitelesítés természetesen létezett már korábban is, csak ettől a verziótól kérdez rá a rendszer, hogy szeretnénk-e alapértelmezetten használni, vagy maradunk-e a hagyományos jelszavas azonosítási módszer használatánál.
A plugin lényege, hogy a MariaDB adatbázis-kiszolgálóba történő belépéskor a Linux felhasználók hitelesítési adatainak segítségével lép be a MariaDB adatbázisokba a rendszerben lévő felhasználókkal. Így miután megkapta a Linux felhasználónevet, az azonos felhasználónévvel rendelkező MariaDB-fiókként hitelesíti a csatlakozó felhasználót - amennyiben a MariaDB is tartalmaz azonos nevű adatbázis-felhasználót. Például ha root-ként vagyunk bent a Linux parancssorban, akkor a mysql parancs root-ként léptet be minket a MariaDB-be is. Forrás >>.
- Ubuntu 20.04 LTS (Focal Fossa) LAMP szerver v1.0 telepítése - MariaDB telepítése - Root felhasználó beállítása
- Debian 10 (Buster) LAMP szerver v1.0 telepítése (2. oldal) - A phpMyAdmin telepítése - Root belépés engedélyezése
- Debian 9 (Stretch) LAMP szerver v1.0 telepítése (2. oldal) - phpMyAdmin telepítése - Root belépés engedélyezése
A beállítást ellenőrizhetjük is az adatbázisba lépve a root felhasználó rekordjában a plugin mezőt:
mysql
A Unix socket alapú hitelesítési funkciója ki lett kapcsolva, így nem ez az alapértelmezett hitelesítési mód, de mint láthatjuk, ettől még beléptet root-ként az adatbázis-kiszolgálóba jelszó használata nélkül is, ahol le tudjuk kérdezni a root felhasználó rekordjának megfelelő mezőjét:
select plugin from mysql.user where user='root';
Itt tehát láthatjuk a "mysql_native_password" értéket, amit a korábbi telepítések során külön kellett beállítanunk a root felhasználó rekordjának a módosításával.
A Unix socket alapú azonosítás használatáról és működéséről további részleteket még itt találhatunk.
Itt most tehát nem kell bonyolítanunk a phpMyAdmin panelbe történő root belépést a root felhasználó módosításával vagy egyéb kerülő megoldások alkalmazásával - mint korábban - hanem folytathatjuk a munkát a phpMyAdmin telepítésével.
phpMyAdmin telepítése
A phpMyAdmin segítségével webes felületen kényelmesen kezelhetjük adatbázisainkat, futtathatunk lekérdezéseket, karbantartást végezhetünk rajtuk, stb. Telepítéséhez futtassuk az alábbi parancsot:
apt-get -y install phpmyadmin
Telepítés közben előjön pár dialógus. Elsőként rákérdez, hogy melyik HTTP kiszolgálót használjuk:
Itt válasszuk az apache2-t.
Majd további telepítgetések után a következő dialógusban kiírja, hogy a phpMyAdmin működéséhez szüksége van egy saját adatbázisra, és hogy szeretnénk-e hogy beállítsa-e automatikusan a dbconfig-common segítségével:
Itt válasszunk igen-t.
Ezután kér még egy jelszót, amivel a phpMyAdmin kontroll felhasználója fog dolgozni:
Ezzel a felhasználóval a phpMyAdmin a háttér karbantartást, struktúra szinkronizációkat, stb végzi, tehát nekünk nem lesz vele dolgunk. Így nyomjunk erre egy entert, hogy generáljon magának egy saját jelszót.
Ezzel készen is van a telepítés.
phpMyAdmin tesztelése
Lépjünk be a phpMyAdmin felületére a szerverünk IP-címe vagy hosztneve alatti /phpmyadmin alkönyvtár betöltésével:
Nálam például az alábbiak valamelyikén:
http://debian11.linuxportal.vm/phpmyadmin/ http://192.168.1.140/phpmyadmin/
Itt kezdetnek adjuk meg a root felhasználót, és a hozzá fentebb beállított jelszót, majd bejön a panel kezdőoldala:
És itt már akár kezdhetjük is az adatbázisokkal kapcsolatos munkát...
UFW tűzfal telepítése és beállítása (opcionális)
Az UFW (Uncomplicated Firewall) segítségével biztonságosabbá tehetjük rendszerünket. Ez a rész nem kötelező, de ha nagyobb fokú biztonságot szeretnénk LAMP szerverünkön, akkor érdemes telepíteni a tűzfalat és elvégezni ezeket a beállításokat.
Telepítés
Az UFW tűzfal az Ubuntu rendszereken a 8.04 LTS kiadás óta alapértelmezetten telepítve van, Debian rendszereken telepítsük az ufw csomagot root-ként:
apt-get install ufw
Beállítás
Az UFW alapértelmezetten inaktív állapotban van.
Állapot lekérdezése
A tűzfal állapotát ellenőrizhetjük az alábbi ufw parancs segítségével:
ufw status
Alkalmazásprofilok
Az alkalmazásprofilok segítségével lehetőségünk van előre beállított szolgálatatások és portok tiltására, illetve engedélyezésére. A jelenleg elérhető profilok lekérdezéséhez futtassuk az alábbi parancsot:
ufw app list
Ezek közül amikre nekünk most szükségünk lehet ezen a LAMP szerveren azok az alábbiak:
- OpenSSH: A 22-es TCP porton szabályozza az SSH kapcsolatokat.
- WWW Full: A profil magában foglalja a HTTP (80) és a HTTPS (443) TCP portokat, így mindkettőt egyben kezeli.
Tűzfal beállítása és bekapcsolása
A működési elv a "fehér lista" elve lesz, tehát engedélyezzük ezt a két szolgáltatást a portjaikon, és minden egyebet letiltunk.
Engedélyezzük tehát az említett szolgálatatásokat:
ufw allow in "OpenSSH"
ufw allow in "WWW Full"
Majd engedélyezzük a tűzfalat:
ufw enable
Ekkor figyelmeztet, hogy a művelet megszakíthatja az aktuális SSH kapcsolatot, folytatjuk-e? Nyomjunk y-t. Nyilván nem szakítja meg, mert engedélyeztük az előbb az OpenSSH-t is.
Végül lekérdezhetjük az UFW tűzfal állapotát:
ufw status
Itt a v6-os jelzések az IPv6 protokollra utalnak, tehát ha IPv6-os hálózaton (is) működik a szerverünk, akkor azon is beállította a kért profilokat.
Az UFW tűzfal részletesebb beállításairól és használatáról itt tájékozódhatunk.
Szolgáltatások tesztelése, ellenőrzése
A tűzfalbeállítások módosítása után még vessünk egy pillantást LAMP szerverünk korábban telepített dolgaira, frissítgessünk rá a megnyitott fülekre:
Ezennel készen is áll a LAMP szerverünk.
Szerver letöltése
Konklúzió
A Debian 11 (Bullseye) operációs rendszerre épülő LAMP szerverünk elkészült, amivel már futtathatunk dinamikus weboldalakat, vagy akár CMS rendszereket is. Később még telepítünk ezt-azt erre a szerverre is.
- docs.w3cub.com - MariaDB - Authentication Plugin - Unix Socket
- UFW tűzfal telepítése, alapvető beállítása és használata Debian / Ubuntu rendszereken
- Ubuntu 20.04 LTS (Focal Fossa) LAMP szerver v1.0 telepítése
- Debian 10 (Buster) LAMP szerver v1.0 telepítése
- Ubuntu 18.04 LTS (Bionic Beaver) LAMP szerver v1.0 telepítése
- Debian 9 (Stretch) LAMP szerver v1.0 telepítése
- Debian 8 (Jessie) LAMP szerver v1.0 telepítése
- Tökéletes szerver: Debian 11 (Bullseye) v1.0
- Hogyan telepítsük fel a PHP-FPM-et egy Debian 8 (Jessie) LAMP szerverre
- Hogyan telepíthetünk újabb PHP verziókat Debian 9 (Stretch) LAMP szerverünkre PHP-FPM módban
- A hozzászóláshoz regisztráció és bejelentkezés szükséges
- 578 megtekintés