Update: 27.04.2018
Hinweis: Neben den Anleitungen im Rahmen dieser Serie habe ich mittlerweile fertige Shell Scripte erstellt, die quasi voll automatisch die Installation eines Servers für euch übernehmen. Ihr findet das Ganze auf github.de, wobei ihr entweder den ganzen Server per Script aufsetzen und konfigurieren lassen könnt, oder eben jeden einzelnen Schritt, wie z.B. das Absichern des Servers, oder das Installieren eines LEMP Stacks, mit Hilfe der jeweiligen Scripte erledigen könnt. Die Scripte entsprechen quasi 1:1 zu den Tutorials.
LEMP
Zugegeben, es ist schon wieder ein bissen mehr Zeit verstrichen, seit ich den letzten Teil zum perfekten Server veröffentlicht habe, aber wie heißt es so schön, besser spät als nie! Im Grund genommen ist dies hier ja auch nur eine Art Nachschlagewerk, gefüllt mit meinen persönlichen Empfehlungen.
Ich hatte letztes Jahr eigentlich schon mal einen relativ ausführlichen Artikel zum Thema LEMP verfasst, mich nach anfänglichem Überlegen dann aber doch dazu entschieden einen neuen Artikel zu verfassen – wobei ich hier ein bisschen weiter ins Detail gehen werde, bzw. wir einen Teil selbst compilieren werden. Wer nur eine schnelle und simple Anleitung sucht, der kann sich ja noch mal das alte Tutorial angucken.
Als Grundlage für unseren LEMP Server bzw. unser LEMP Stack dienen Debian, NGiNX, PHP und MariaDB.
Ich hatte zwischenzeitlich mal Testszenarien mit HHVM statt php, bzw. HHVM und php als Fallback laufen, bzw. MySQL oder MungoDB statt MariaDB im Einsatz. Mit allen Kombinationen war ich eher weniger zufrieden, weswegen ich mich eben für oben genannte Komponenten entschieden habe.
So dann wollen wir mal, immer schön der Reihe nach.
System vorbereiten
Auch wenn wir unser System gerade erst aufgesetzt haben, kann es nicht schaden es zu Beginn zu updaten – gerade wenn man eine CD als Installationsmedium verwendet, oder fertige Images vom Hoster.
apt-get update && apt-get upgrade apt-get install -y vim
Standardmäßig kommt Debian mit dem Texteditor Nano daher, da ich aber kein großer Fan von Nano bin und quasi mit Vim aufgewachsen bin, installieren wir an dieser Stelle schnell noch Vim. Theoretisch sollte den meisten Usern eigentlich auch vim reichen, die vim-nox Version kommt mit zusätzlichem Support von tcl, ruby, Lua und perl daher – je nachdem, was man noch so vorhat.
Installation Nginx
Für die Installation von nginx gibt es zwei Möglichkeiten. Die Erste ist sicherlich die bequemere, aber in meinen Augen nicht gleich bessere Variante. Außerdem ist die zweite Möglichkeit die einzige, um zusätzlich Module zu installieren. Wobei nginx hier mittlerweile auch immer offener für das nachträglich integrieren von Modulen wird, wie z.B. das GeoIP Modul.
Installation via APT
wget //nginx.org/keys/nginx_signing.key apt-key add nginx_signing.key echo 'deb //nginx.org/packages/debian/ $(lsb_release -sc) nginx' >> /etc/apt/sources.list echo 'deb-src //nginx.org/packages/debian/ $(lsb_release -sc) nginx' >> /etc/apt/sources.list apt-get update && apt-get install nginx
Die Installation via APT ist sicherlich eine feine Sache, nur leider installieren wir damit nicht wirklich die neuste Version, sondern die letzte ’stable‘, d.h stabil laufende Version. Mittlerweile ist man hierbei immerhin schon bei der Version 1.12.2 angekommen. Wer auf Nummer Sicher gehen will, der kann hier beruhigt die stable Version installieren – profitiert aber damit leider nicht von aktuellen Neuerungen der ‚mainline‘ Version.
Installation via Source
Da wir in unserem Fall die mainline Version von nginx installieren wollen, müssen wir ein wenig mehr Hand anlegen. Belohnt werden wir dafür aber mit den neusten Funktionen und Features. Die mainline Version wird eigentlich in der Regel ziemlich oft upgedatet und weiterentwickelt. Aktuelle Version wäre hier die 1.13.10.
Zunächst benötigen wir die passenden Werkzeuge, um nginx selbst aus den source files zu kompilieren, d.h. auf unserem System nach unseren Wünschen zusammen zu bauen.
apt-get install -y gcc build-essential zlib1g-dev libpcre3 libpcre3-dev libbz2-dev libssl-dev tar unzip
Ähnlich wie bei der Installation via APT müssen wir das passende Repository hinzufügen und die Daten herunterladen.
wget http://nginx.org/keys/nginx_signing.key apt-key add nginx_signing.key echo 'deb http://nginx.org/packages/mainline/debian/ $(lsb_release -sc) nginx' >> /etc/apt/sources.list echo 'deb-src http://nginx.org/packages/mainline/debian/ $(lsb_release -sc) nginx' >> /etc/apt/sources.list apt-get update
Anschließend laden wir die passenden Files herunterladen und wechseln in den Ordner.
apt-get build-dep nginx apt-get source nginx cd nginx-*
Jetzt sind wir eigentlich schon fast am Ende des Datensammelns angelangt.
Ich für meinen Teil installiere aber gerne immer noch das Cache Purge Modul von FRiCKLE. Das ist zwar schon ein wenig älter, erfüllt aber dennoch bestens seinen Zweck, speziell im Zusammenspiel mit WordPress und dem Nginx Helper Plugin. Besonders praktisch, wenn ihr öfters Artikel auf WordPress und Co veröffentlicht, oder bearbeitet. Dank nginx eigenem Cache spart man sich eigentlich sämtliche Cache Plugins, die die WordPressinstallation eh nur noch langsamer werden lassen. Mittlerweile gibt es aber auch mit dem Nginx Cache Plugin die Möglichkeit nginx hauseigenen cache ohne zusätzliches Modul zu ‚purgen‘.
Beide Plugins erfüllen ihren Zweck, von daher werde ich im nächsten Schritt auch auf beide Möglichkeiten nginx zu compilieren eingehen, mit und ohne zusätzliches Modul.
Option 1: Zusätzliche Module hinzufügen
Wie im letzten Schritt bereits beschrieben, werden wir ein zusätzliches Modul, das Cache Purge Modul, herunterladen und vor der eigentlichen Installation in unser selbst compiliertes Installationspaket einfügen. Dafür erstellen wir zunächst einen neuen Modul Ordner, laden das passende Modul herunter, entpacken es und benennen den Ordner anschließend um, da wir am Ende sonst einen ziemlich langen, unschönen Namen haben – haha. Die heruntergeladenen Zip files werden anschließend nicht mehr benötigt und gelöscht.
cd debian mkdir modules && cd modules wget -q --no-check-certificate https://github.com/FRiCKLE/ngx_cache_purge/zipball/master -O "ngx_cache_purge.zip" unzip ngx_cache_purge.zip mv FR* ngx_cache_purge rm ngx_cache_purge.zip
Wenn ihr zusätzlich andere Module, wie z.B. das PageSpeed Modul von google – welches ich nach längerem Test für nutzlos befunden habe – installieren wollt, dann könnt ihr genau so vorgehen und die passenden Files in den Modul Ordner kopieren.
Nun müsst ihr nur noch die nginx Installation anpassen, da nginx ja nicht riechen kann, dass ihr noch zusätzliche Module installieren wollt. Ebenfalls ändere ich die Rechte Debian-typisch auf www-data. Da ich relativ faul bin und die config files nicht einzeln von Hand öffnen möchte, machen wir das ganze per sed (stream editor). Achtet hierbei bitten genau auf eure eigenen Pfadangabe, bzw., da wir sed zum editieren benutzen, auch darauf, im letzten Befehl mit Hilfe von „\“ jedes „/“ auszukommentieren, aber nur innerhalb der „“!
sed -ie s/--user=nginx/--user=www-data/g <pfad auf eurem system/nginx-1.13.10>/debian/rules sed -ie s/--group=nginx/--group=www-data/g <pfad auf eurem system/nginx-1.13.10>/debian/rules sed -i s"/--with-file-aio/--with-file-aio --add-module=<pfad auf eurem system\/nginx-1.13.10\/nginx-1.13.10>\/debian\/modules\/ngx_cache_purge/g" /root/test/nginx-1.13.10/debian/rules
Für den Fall, dass ihr keine Lust habt, das ganze mit sed zu editieren, könnt ihr die /nginx-1.13.10/debian/rules auch von Hand editieren, per sftp Client, oder mit Hilfe von nano, vim, etc. Das Ganze sollte dann so aussehen, wobei ihr den letzten Eintrag auch ignorieren könnt, wenn ihr nicht gerade später die debug Version installieren wollt.
config.status.nginx: config.env.nginx cd $(BUILDDIR_nginx) && \ CFLAGS="" ./configure --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib/nginx/modules --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --http-client-body-temp-path=/var/cache/nginx/client_temp --http-proxy-temp-path=/var/cache/nginx/proxy_temp --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp --http-scgi-temp-path=/var/cache/nginx/scgi_temp --user=www-data --group=www-data --with-compat --with-file-aio --add-module=/root/test/nginx-1.13.10/debian/modules/ngx_cache_purge --with-threads --with-http_addition_module --with-http_auth_request_module --with-http_dav_module --with-http_flv_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_mp4_module --with-http_random_index_module --with-http_realip_module --with-http_secure_link_module --with-http_slice_module --with-http_ssl_module --with-http_stub_status_module --with-http_sub_module --with-http_v2_module --with-mail --with-mail_ssl_module --with-stream --with-stream_realip_module --with-stream_ssl_module --with-stream_ssl_preread_module --with-cc-opt="$(CFLAGS)" --with-ld-opt="$(LDFLAGS)" touch $@ config.status.nginx_debug: config.env.nginx_debug cd $(BUILDDIR_nginx_debug) && \ CFLAGS="" ./configure --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib/nginx/modules --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --http-client-body-temp-path=/var/cache/nginx/client_temp --http-proxy-temp-path=/var/cache/nginx/proxy_temp --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp --http-scgi-temp-path=/var/cache/nginx/scgi_temp --user=www-data --group=www-data --with-compat --with-file-aio --add-module=/root/test/nginx-1.13.10/debian/modules/ngx_cache_purge --with-threads --with-http_addition_module --with-http_auth_request_module --with-http_dav_module --with-http_flv_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_mp4_module --with-http_random_index_module --with-http_realip_module --with-http_secure_link_module --with-http_slice_module --with-http_ssl_module --with-http_stub_status_module --with-http_sub_module --with-http_v2_module --with-mail --with-mail_ssl_module --with-stream --with-stream_realip_module --with-stream_ssl_module --with-stream_ssl_preread_module --with-cc-opt="$(CFLAGS)" --with-ld-opt="$(LDFLAGS)" --with-debug touch $@
Option 2: Ohne zusätzliche Module
Ohne zusätzliche Module spart ihr euch quasi den ersten Schritt aus dem vorherigen Teil, bzw. den letzten Schritt am Ende. Alles was ihr benötigt ist folgender Befehl:
sed -ie s/--user=nginx/--user=www-data/g <pfad auf eurem system/nginx-1.13.10>/debian/rules sed -ie s/--group=nginx/--group=www-data/g <pfad auf eurem system/nginx-1.13.10>/debian/rules
Oder eben die von Hand editierte rules
config.status.nginx: config.env.nginx cd $(BUILDDIR_nginx) && \ CFLAGS="" ./configure --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib/nginx/modules --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --http-client-body-temp-path=/var/cache/nginx/client_temp --http-proxy-temp-path=/var/cache/nginx/proxy_temp --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp --http-scgi-temp-path=/var/cache/nginx/scgi_temp --user=www-data --group=www-data --with-compat --with-file-aio --with-threads --with-http_addition_module --with-http_auth_request_module --with-http_dav_module --with-http_flv_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_mp4_module --with-http_random_index_module --with-http_realip_module --with-http_secure_link_module --with-http_slice_module --with-http_ssl_module --with-http_stub_status_module --with-http_sub_module --with-http_v2_module --with-mail --with-mail_ssl_module --with-stream --with-stream_realip_module --with-stream_ssl_module --with-stream_ssl_preread_module --with-cc-opt="$(CFLAGS)" --with-ld-opt="$(LDFLAGS)" touch $@ config.status.nginx_debug: config.env.nginx_debug cd $(BUILDDIR_nginx_debug) && \ CFLAGS="" ./configure --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib/nginx/modules --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --http-client-body-temp-path=/var/cache/nginx/client_temp --http-proxy-temp-path=/var/cache/nginx/proxy_temp --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp --http-scgi-temp-path=/var/cache/nginx/scgi_temp --user=www-data --group=www-data --with-compat --with-file-aio --with-threads --with-http_addition_module --with-http_auth_request_module --with-http_dav_module --with-http_flv_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_mp4_module --with-http_random_index_module --with-http_realip_module --with-http_secure_link_module --with-http_slice_module --with-http_ssl_module --with-http_stub_status_module --with-http_sub_module --with-http_v2_module --with-mail --with-mail_ssl_module --with-stream --with-stream_realip_module --with-stream_ssl_module --with-stream_ssl_preread_module --with-cc-opt="$(CFLAGS)" --with-ld-opt="$(LDFLAGS)" --with-debug touch $@
Installationspaket erstellen
Soooo, fast geschafft, jetzt basteln wir uns aus den source files und unseren optionalen Modulen eine passende Installationsdatei.
cd .. && cd .. [ihr solltet jetzt wieder hier sein: <pfad auf eurem system/nginx-1.13.10>] dpkg-buildpackage -b
Das kann jetzt einen Moment dauern. Wir erhalten in der Regel nicht nur ein File, sondern eine ganze Hand voll Files. Diese könnt ihr nun nach Belieben installieren. Eine Auflistung erhalte ihr mit „ls„
cd .. && ls
In unserem Fall wären das z.B. für die reine nginx Installation inkl. unserer selbst eingebauten Module.
dpkg -i nginx_1.13.10-1~stretch_amd64.deb
Das hätten wir geschafft. nginx sollte nun eigentlich erfolgreich auf eurem Server laufen.
Einige Module lassen sich Gott sei dank mittlerweile bequem nachträglich per APT installieren, wie z.B. das GeoIP Modul
apt-get install -y nginx-module-geoip
Zu guter Letzt schließen wir noch unsere mühevoll von Hand installiere nginx Version von automatischen Updates via APT und Co aus. Es kann sonst nämlich passieren, dass euch APT sonst einfach die stable Version drüber bügelt und all eure Module flöten gehen – selbst schon passiert, also Vorsicht!
echo nginx hold | dpkg --set-selections aptitude hold nginx
Konfiguration Nginx
Kommen wir nun zur Konfiguration von nginx. Hier kommt es sicherlich auf persönliche Vorlieben an, was die Ordnerstruktur etc. angeht, also seht das Ganz nicht so eng, sondern nutzt es evtl. als Leitfaden.
Zunächst erstelle ich mir einen Ordner wo ich später sämtliche Files für den Webserver ablege, und setzte die passenden Berechtigungen.
mkdir /var/www chown -R www-data:www-data /var/www
Als nächstes erstelle ich mir gerne vier Ordner. Einen für alle gängigen config files, einen für alle vhost Konfigurationen, einen für die aktivierten vhosts und einen für alle Cache files.
mkdir /etc/nginx/cfg mkdir /etc/nginx/sites-available mkdir /etc/nginx/sites-enabled mkdir /etc/nginx/cache chown -R www-data:www-data /etc/nginx/cache
In den cfg Ordner kommen alle meine configs, ganz gleich, ob ich sie verwende, oder nicht. Diese importiere ich dann quasi bei Bedarf in der Hauptkonfiguration.
Im Ordner sites-available landen alle vhost files und im Ordner sites-enabled lediglich symlinks, d.h. Verlinkungen. Somit kann es mir nicht passieren, dass ich aus Versehen irgendwelche Files lösche, bzw, habe ich so die Möglichkeit schnell Änderungen vorzunehmen, oder bei Bedarf bestimmte configs zu aktivieren bzw. deaktivieren, ohne dabei immer wieder die Hauptkonfiguration anzupassen.
Die Hauptkonfiguration – nginx.conf ist somit immer schön schlank und übersichtlich.
Das Ganze sieht dann in etwa so aus:
load_module "modules/ngx_http_geoip_module.so"; user www-data; worker_processes auto; worker_rlimit_nofile 36384; pid /run/nginx.pid; events { worker_connections 18342; use epoll; multi_accept on; } http { include mime.types; ## Core HTTP config files include /etc/nginx/cfg/basics.conf; ## Hash configs include /etc/nginx/cfg/hashes.conf; # Open Files Cache include /etc/nginx/cfg/openfc.conf; # Log configuration # include /etc/nginx/cfg/log.conf; # Access Logging # include /etc/nginx/cfg/access_log_name.conf; # Search engine and other bots include /etc/nginx/cfg/bot_req.conf; include /etc/nginx/cfg/bot_ua.conf; # Gzip include /etc/nginx/cfg/gzip.conf; # Headers to be sent / added or removed include /etc/nginx/cfg/headers.conf; # Request zone include /etc/nginx/cfg/zone.conf; # Fastcgi include /etc/nginx/cfg/fcgi.conf; # GEO IP include /etc/nginx/cfg/geoip.conf; # SSL global config - Disable if you dont use SSL, which you should... include /etc/nginx/cfg/ssl.conf; proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=STATIC:75m inactive=24h max_size=512m; proxy_temp_path /var/tmp; include /etc/nginx/sites-enabled/*; }
Und hier mal ein paar Configs aus dem cfg Ordner, damit ihr ein Gefühl für die Struktur bekommt.
gzip.cfg
gzip on; gzip_buffers 4 8k; gzip_disable "msie6"; gzip_vary on; # gzip_static on; # gzip_proxied any; gzip_proxied expired no-cache no-store private auth; gzip_comp_level 5; gzip_min_length 256; gzip_types application/atom+xml application/javascript application/json application/ld+json application/manifest+json application/rdf+xml application/rss+xml application/schema+json application/vnd.geo+json application/vnd.ms-fontobject application/x-font-ttf application/x-javascript application/x-web-app-manifest+json application/xhtml+xml application/xml font/eot font/opentype image/bmp image/svg+xml image/vnd.microsoft.icon image/x-icon text/cache-manifest text/css text/javascript text/plain text/vcard text/vnd.rim.location.xloc text/vtt text/x-component text/x-cross-domain-policy text/xml ;
Natürlich sind das alles nur Beispiele. Jedem steht natürlich frei, seinen Webserver einzurichten, wie er mag. Auf der Seite des Herstellers findet man z.B. auch einige gut erklärte Beispiele. Bzw. eine Sammlung verschiedener meiner configs findet ihr auch hier.
Zu guter Letzt starten wir nginx neu, damit alle Änderungen übernommen werden. Keine Sorge, wenn ihr hier irgendwas falsch gemacht habt, startet nginx gar nicht erst, wirklich was kaputt machen könnt ihr also nicht. Bzw. am Besten testet ihr die Config vorher einmal kurz mit nginx -t.
nginx -t service nginx restart
Vhost einrichten
Richtig, wie ihr sicherlich bemerkt habt, gibt es bis hierhin noch keine wirkliche Erklärung zum Thema vhost, bzw. der Konfiguration einzelner Websites. Das möchte ich an dieser Stelle auch so belassen. An anderer Stelle, zum Thema WordPress Installation, oder Nextcloud findet ihr dann auch einen vollständigen vhost.
Der Übersicht halber hier nur kurz das Standard Beispiel vom Hersteller.
server { listen 80; ## listen for ipv4; this line is default and implied #listen [::]:80 default ipv6only=on; ## listen for ipv6 root /var/www/example.com/public_html; index index.html index.htm; # Make site accessible from http://localhost/ server_name example.com; }
Eine Datei mit dem Inhalt speichert ihr nun im Ordner sites-available ab und erstellt einen symlink zum Ordner sites-enabled. Danach müsst ihr nginx wieder neustarte.
ln -s /etc/nginx/sites-available/<vhost file> /etc/nginx/sites-enabled/ /etc/init.d/nginx restart
Installation PHP 7.2
Hier können wir wieder bequem auf APT zurückgreifen! Installiert wird aber nicht direkt php 7.2, sondern php7.2-fpm – PHP FastCGI Process Manager, php läuft also als eigener Prozess.
Da wir die neuste Version installieren wollen, müssen wir noch das passende Repository hinzufügen. Aktueller wäre natürlich, wenn wir das Ganze, ähnlich wie nginx aus dem source selbst kompilieren, aber da hier keine besonders großen Versionssprünge zu erwarten sind, überlassen wir diese Arbeit wem anders.
apt-get install -y apt-transport-https lsb-release ca-certificates wget -O /etc/apt/trusted.gpg.d/php.gpg https://packages.sury.org/php/apt.gpg echo "deb https://packages.sury.org/php/ $(lsb_release -sc) main" | tee /etc/apt/sources.list.d/php.list apt-get update
Jetzt können wir bequem mit Hilfe von APT PHP-FPM und alles, was wir später sonst noch so gebrauchen können, installieren.
apt-get install -y php7.2-fpm > $out 2>&1 apt-get install -y php7.2-gd php7.2-mysql php7.2-curl php7.2-opcache php7.2-dev apt-get install -y php7.2-xml php7.2-zip php7.2-intl php7.2-mbstring php7.2-bz2 apt-get install -y libmcrypt-dev libreadline-dev
Nur was die Konfiguration, falls gewünscht, angeht ist mal wieder Handarbeit gefragt. In diesem Beispiel erhöhe ich die Maximalgröße von Uplaods bzw. deaktiviere das Ausführen von externen php Scripten.
sed -i 's/^upload_max_filesize .*/'"upload_max_filesize = 10M/g" /etc/php/7.0/fpm/php.ini sed -i 's/^post_max_size .*/'"post_max_size = 12M/g" /etc/php/7.0/fpm/php.ini sed -i 's/^allow_url_fopen .*/'"allow_url_fopen = Off/g" /etc/php/7.0/fpm/php.ini service php7.2-fpm restart
Seht ihr, das ging doch schon mal wesentlich fixer. Damit ist php 7 auch schon einsatzbereit!
Installation MariaDB
MariaDB lässt sich Gott sei Dank auch relativ einfach und unkompliziert via APT installieren, wobei wir hier auch zuerst das passende Repo hinzufügen müssen.
apt-get install -y software-properties-common dirmngr apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 0xF1656F24C74CD1D8 echo "deb [arch=amd64,i386,ppc64el] http://ftp.hosteurope.de/mirror/mariadb.org/repo/10.2/debian $(lsb_release -sc) main" | tee /etc/apt/sources.list.d/MariaDB.list apt-get update
apt-get install -y -q mariadb-server
Die Konfiguration ist, wie bei php, ebenfalls ziemlich schnell erledigt. Hierbei unterbinde ich ebenfalls, wie bei php, Zugriffe von Außerhalb.
sed -i 's/^bind-address.*/'"#bind-address = 127.0.0.1/g" /etc/mysql/my.cnf sed -i '/^#bind-address.*/a\skip-networking\' /etc/mysql/my.cnf service mysql restart
Damit wäre MariaDB eigentlich schon einsatzbereit. Ich empfehle dennoch kurz zur Absicherung den letzten Schritt:
mysql_secure_installation
So geschafft, das wars dann auch schon. Euer LEMP Webserver sollte nun ohne Probleme laufen!
phpMyAdmin
Die Installation von PHPmyAdminist zwar nicht zwingend notwendig, für mich gehört es aber zu den nützlichsten webbased Tools überhaupt! Mit Hilfe von PHPmyAdmin könnt ihr ganz bequem via Browser auf euren SQL Server zugreifen. Hierbei gilt, ähnlich wie bei nginx. Die Version direkt vom Anbieter ist aktueller, als via APT.
git clone --depth=1 --branch=STABLE https://github.com/phpmyadmin/phpmyadmin.git /usr/share/phpmyadmin ln -s /usr/share/phpmyadmin /var/www/ chown -R www-data:www-data /var/www/phpmyadmin randomBlowfishSecret=`openssl rand -base64 32`; sed -e "s|cfg\['blowfish_secret'\] = ''|cfg['blowfish_secret'] = '$randomBlowfishSecret'|" /usr/share/phpmyadmin/config.sample.inc.php > /usr/share/phpmyadmin/config.inc.php service nginx restart curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer cd /usr/share/phpmyadmin composer update --no-dev
Was machen wir genau? Wir clonen die neuste Version direkt von Github, erstellen einen sicheren Schlüssel, der später vom Webinterface benötigt wird und installieren alles mit Hilfe von Composer. Da ich nicht davon ausgehe, dass Composer bis jetzt auf dem System läuft, laden wir dieses Tool vorab herunter.
Zu guter Letzt erstellen wir uns eben noch schnell ein Update Script, um auch diese Version immer up-to-date zu halten. Wer nicht unbedingt wöchentlich updaten möchte, kann das Ganze auch im cron.monthly statt cron.weekly Ordner ablegen.
cat > /etc/cron.weekly/pma_update <<EOF #!/bin/bash cd /usr/share/phpmyadmin git pull -q origin STABLE composer update --no-dev EOF chmod +x /etc/cron.weekly/pma_update
Viel Spaß mit eurem neuen Webserver!
Bei Fragen stehe ich natürlich nach wie vor gerne zur Verfügung.