09. Juli 2016

Ubuntu 16.04 LAMP Server Schritt für Schritt erklärt

Wenn du in der Web Entwicklung tätig bist, bist du bestimmt schon einmal über den Begriff LAMP Server gestolpert. Dabei handelt es sich nicht um ein Server um Lampen zu steuern, sondern um ein simplen Web Server auf Linux Basis.

LAMP ist die Abkürzung für Linux, Apache, MySQL, PHP.

Genau so ein Server möchte ich jetzt zusammen mit dir aufsetzen.

Ich gebe mich jedoch nicht mit Standards zufrieden und installiere gleichzeitig noch ein FTP und ein Email Server. Somit kann ich meine Daten hochladen und es können Emails versendet werden!

Hinweis: Dies ist nur eine grobe Anleitung wie man ein funktionierenden LAMP Server aufsetzt und geht nicht tief ins Detail, da sonst der Umfang des Beitrags gesprengt werden würde. Im Anschluss verlinke ich jedoch die offiziellen Dokumenationen der eingesetzten Tools für tiefere Einblicke.

L wie Linux

Für das Tutorial benötigst du ein Linux System. Vorzugsweise ein Ubuntu 16.04 Xenial Xerus. Jedoch sollte es auch mit anderen aktuellen Linux Systemen funktionieren.

Ich empfehle jedoch ein neues Xerus System zu verwenden um ein komplett frisches System zu haben.

A wie Apache

Am einfachsten ist Apache mit dem Paketmanager zu installieren

# apt-get install apache2

Nachdem die Installation durchgelaufen ist, kannst du in einem beliebigen Browser deiner Wahl die IP Adresse des LAMP Servers eingeben.

Die Ausgabe sollte dann ungefähr so aussehen:

M wie MySQL

Anstelle von MySQL, installieren wir MariaDB.

MariaDB ist eine Weiterentwicklung von MySQL und wird durch den selben Entwickler betreut.

Neben einigen coolen neuen Features, bringt MariaDB auch Performance Verbesserungen mit.

Installiert wird Maria mit dem folgenden Befehl:

# apt-get install mariadb-server mariadb-client

Anschließend noch ein Passwort vergeben:

# mysql_secure_installation

Folgende Fragen werden dann gestellt (in geschweiften Klammern jeweils die Anweisung was zu tun ist):

Enter current passwort for root (enter for none): {ENTER}
Set root passwort? [Y/n] {ENTER}
New password: {Überlege dir was schönes}
Re-enter new password: {Wiederhole das obere Password}
Remove anonymous users? [Y/n] {ENTER}
Dissallow root login remotely? [Y/n] {ENTER}
Remove test database and access to it? [Y/n] {ENTER}
Reload privilege tables now? [Y/n] {ENTER}

P wie PHP

PHP mitsamt allen relevanten Erweiterungen wird mit dem folgenden Befehl installiert:

# apt-get install php libapache2-mod-php php-mysql php-curl php-gd php-intl php-pear php-imagick php-imap php-mcrypt php-memcache php-pspell php-recode php-sqlite3 php-tidy php-xmlrpc php-xsl php-mbstring php-gettext

Damit alle Änderungen wirksam werden, muss Apache einmal neu gestartet werden:

# /etc/init.d/apache restart

So testest du die Konfiguration

Nachdem du alle relevanten Pakete auf dem LAMP Server installiert hast, erstelle zunächst folgende Datei:

# nano /var/www/html/phpinfo.php

und füge folgenden Inhalt hinzu:

<?php phpinfo(); ?>

Wenn du die Datei im Browser aufrufst (also z.B. http://196.168.0.1/phpinfo.php), wird dir die aktuelle Konfiguration deines PHP Servers ausgegeben.

Ich finde es eine nützliche Anlaufstelle für diverse Informationen 😃

Mini Script für die Datenbankverbindung

Als nächstes kannst du ein kleines Script schreiben um zu testen, ob die Datenbankverbindung erfolgreich hergestellt werden kann.

Dazu schaltest du dich auf die Datenbank wie folgt auf:

# mysql -u root

Nach der Eingabe vom Passwort, kannst du direkt SQL Befehle auf die Datenbank abfeuern.

Erstelle zunächst eine neue Datenbank

]> CREATE DATABASE lamp_test;

Aus Sicherheitsgründen deaktiviert MariaDB den login für den root.

Also muss zunächst ein root Ersatz her.

]> CREATE USER 'sergej'@'localhost' IDENTIFIED BY 'EinSuperSicheresPasswort';

Dann verschaffe ich mir alle Rechte mittels:

]> GRANT ALL ON *.* TO 'sergej'@'localhost';

Zum Schluss nur noch mittels 'exit' wieder ausloggen.

Erstelle wieder eine neue Datei:

# nano /var/www/html/db_connect.php

Und füge folgenden Code hinzu (vergiss bitte nicht deine korrekten Daten zu hinterlegen, sonst geht es schief)

<?php
$link = mysqli_connect("localhost", "sergej", "EinSuperSicheresPasswort", "xenial_lamp");
/* check connection */
if (mysqli_connect_errno()) {
printf("Connect failed: %s", mysqli_connect_error());
exit();
}
if ($result = mysqli_query($link, "SELECT DATABASE()")) {
$row = mysqli_fetch_row($result);
printf("Default database is %s.", $row[0]);
mysqli_free_result($result);
}
mysqli_close($link);
?>
view raw db_connect.php hosted with ❤ by GitHub

Beim Aufruf der Datei müsste der Name der selektierte Datenbank (also 'xenial_lamp') angezeigt werden.

Wenn alles einwandfrei funktioniert hat, kannst du alles wieder aufräumen 😃

# rm /var/www/html/db_connect.php
# rm /var/www/html/phpinfo.php
# mysql -u root
]> DROP DATABASE lamp_test

So installierst du phpMyAdmin

Damit man nicht alle MySQL Befehle auf der Konsole ausführen muss, kann man das auch bequem mittels einer Web Oberfläche erledigen.

# apt-get install phpmyadmin
Web server to reconfigure automatically: {apache2}
Configure database for phpmyadmin with dbconfig-common?: {Yes}
MySQL application password for phpmyadmin: {ENTER}

Jetzt kannst du phpmyadmin unter deiner IP verwenden.

In meinem Fall ist es: http://172.26.42.80/phpmyadmin

So installierst du ein FTP Server

Damit du deine Daten auf den LAMP Server bekommst, installieren wir noch ein FTP Server.

Dazu muss der folgende Befehl ausgeführt werden:

# apt-get install proftpd-basic

In der Konfiguration kann man den Pfad ändern, auf den sich der/die Benutzer später einloggen können. Die Konfigurationsdatei wird aber vorher zunächst gesichert (falls etwas schief gehen sollte)

# cp /etc/prodftp/proftod.conf /etc/prodftp/proftod.conf-orig
# nano /etc/prodftp/proftod.conf

Relativ weit oben befindet sich eine auskommentierte Zeile, die wie folgt abgeändert wird:

DefaultRoow /var/www/html

Anschließend kannst du dich mit deinem Linux Benutzernamen am FTP Server anmelden.

Damit du auch Schreibrechte für das Verzeichnis hast, holst du dir die benötigten Rechte mittels:

# chown -R sergej:www-data /var/www

So installierst du ein Mail Server

Manche Scripte bzw. Applikationen, die man auf dem LAMP Server installiert sind in der Lage Emails zu versenden.

Für den Versand installieren wir den Postfix Server und für den Emfang wird Dovecot verwendet.

# apt-get install postfix dovecot-core dovecot-pop3d dovecot-imapd dovecot-sieve

Während der Installation wird nach der Konfiguration gefragt. Hier wählen wir "Internet Site" aus.

Anschließend werden zwei Benutzer zum testen erstellt:

# useradd -d /home/alice alice
# useradd -d /home/bob bob

Den eben erstellten Benutzern werden noch jeweils Passwörter vergeben:

# passwd alice
# passwd bob

Und sowohl die Home als auch die Mail Verzeichnisse inkl. den Rechten vergeben:

# mkdir /home/alice
# chown -R alice:users /home/alice
# mkdir /home/bob
# chown -R bob:users /home/bob

Dovecot als Empfänger

Wir konfigurieren den Dienst so, dass die Emails im home Verzeichnis ankommen. Dazu müssen zunächst für jeden Benutzer ein dazugehöriges Verzeichnis angelegt werden:

# mkdir /home/alice/Maildir
# mkdir /home/bob/Maildir

Damit die Verzeichnisse auch verwendet werden, musst du diese auch dovecot noch mitteilen:

# nano /etc/dovecot/conf.d/10-mail.conf

Hier wird folgende Zeile einkommentiert:

mail_location = maildir:~/Maildir
view raw 10-mail.conf hosted with ❤ by GitHub

Nachdem das auch erledigt wurde, kümmern wir uns noch ein wenig um die Sicherheit, indem wir SSL in folgender Datei aktivieren:

# nano /etc/dovecot/conf.d/10-ssl.conf

hier wird die SSL Einstellung wie folgt abgeändert:

ssl = required
view raw 10-ssl.conf hosted with ❤ by GitHub

Damit sagen wir explizit das nur sichere Anmeldungen möglich sein sollen.

Zu guter Letzt wird noch eine weitere Datei erstellt und mit dem folgenden Inhalt gespeist:

# nano /etc/dovecot/conf.d/01-mail-stack-delivery.conf
# Some general options
protocols = imap pop3 sieve
disable_plaintext_auth = yes
ssl = yes
ssl_cert = </etc/ssl/certs/ssl-cert-snakeoil.pem
ssl_key = </etc/ssl/private/ssl-cert-snakeoil.key
ssl_cipher_list = ALL:!LOW:!SSLv2:ALL:!aNULL:!ADH:!eNULL:!EXP:RC4+RSA:+HIGH:+MEDIUM
mail_location = maildir:~/Maildir
auth_username_chars = abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ01234567890.-_@
# IMAP configuration
protocol imap {
mail_max_userip_connections = 10
imap_client_workarounds = delay-newmail
}
# POP3 configuration
protocol pop3 {
mail_max_userip_connections = 10
pop3_client_workarounds = outlook-no-nuls oe-ns-eoh
}
# LDA configuration
protocol lda {
postmaster_address = postmaster
mail_plugins = sieve
quota_full_tempfail = yes
deliver_log_format = msgid=%m: %$
rejection_reason = Your message to <%t> was automatically rejected:%n%r
}
# Plugins configuration
plugin {
sieve=~/.dovecot.sieve
sieve_dir=~/sieve
}
# Authentication configuration
auth_mechanisms = plain login
service auth {
# Postfix smtp-auth
unix_listener /var/spool/postfix/private/dovecot-auth {
mode = 0660
user = postfix
group = postfix
}
}

Postfix für den Versand

Zum versenden der Emails Bedarf es eigentlich keiner großen Änderung. Das einzige, was noch gemacht werden muss, ist die Konfiguration zu ergänzen:

SSL Einstellungen für Postfix werden in der postfix config geändert

# cp /etc/postfix/main.cf /etc/postfix/main.cf-orig
# nano /etc/postfix/main.cf

An das Ende der Datei kommt folgender Code hinzu:

home_mailbox = Maildir/
smtpd_sasl_auth_enable = yes
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/dovecot-auth
smtpd_sasl_authenticated_header = yes
smtpd_sasl_local_domain = $myhostname
broken_sasl_auth_clients = yes
smtpd_recipient_restrictions = reject_unknown_sender_domain reject_unknown_recipient_domain reject_unauth_pipelining permit_mynetworks permit_sasl_authenticated reject_unauth_destination
smtpd_sender_restrictions = reject_unknown_sender_domain
mailbox_command = /usr/lib/dovecot/deliver -c /etc/dovecot/conf.d/01-mail-stack-delivery.conf -m "${EXTENSION}"
smtp_use_tls = yes
smtpd_tls_received_header = yes
smtpd_tls_mandatory_protocols = SSLv3, TLSv1
smtpd_tls_mandatory_ciphers = medium
smtpd_tls_auth_only = yes
tls_random_source = dev:/dev/urandom
virtual_alias_maps = hash:/etc/postfix/virtual
inet_interfaces = all
view raw main.cf hosted with ❤ by GitHub

Und eine Mapping Tabelle für Virtuelle Adressaten angelegen und aktivieren:

# touch /etc/postfix/virtual
# postmap /etc/postfix/virtual

Jetzt sind wir fertig und können die beiden Server einmal neu starten:

# service postfix restart
# service dovecot restart

Jetzt kannst du dich bereits mit einem beliebigen Client einloggen.

Meine Einstellungen bei Thunderbird sehen dann wie folgt aus:

Nachdem du für alice und bob jeweils ein Konto hinterlegt hast, sind die beiden Benutzer in der Lage sich Emails hin und her zu senden und du kannst diese Konten für weitere Zwecke verwenden.

Weiterführende Links

Abschließend noch ein paar Links zu den offiziellen Dokumentationen für die verwendeten Dienste.

Fazit – LAMP Server

Die verwendete Anleitung ist natürlich nicht der einzig wahre Weg um das Ziel zu erreichen.

Wie ich finde, ist es jedoch ein relativ einfacher Weg und du benötigst keine weiteren Extras.

Wenn du nur wenige Benutzer hast oder ein System zum entwickeln von Applikationen benötigst, ist es ein relativ einfaches vorgehen um eine perfekte Entwicklungsumgebung aufzusetzen.

Wenn dir das gefallen hat, wirst du diese Artikel lieben!

Die neuesten Artikel, die du gelesen haben musst!

teilen

Noch mehr privux?

Verpasse keine spannende Beiträge & Tutorials mehr!

Jetzt kostenlosen Newsletter abonieren!

Jetzt newsletter abonieren