Oft steht man bei Servern vor der Wahl: Linux (Unix) oder Windows ? Während File/Printserver größtenteils mit Windows realisiert werden (hier hat sich Windows 2008 R2 bewährt), setzt man bei Webservern heute vorrangig auf Linux.
Warum ? Weil Linux sehr schlank ist, einen sehr guten Netzwerkstack besitzt, kostenlos ist und zudem noch super einfach zu konfigurieren / installieren ist. Auch wenn viele immernoch vor Linux zurückschrecken (Android basiert übrigens auch auf Linux) will ich heute einmal zeigen, dass jeder einen auf Linux basierenden Webserver innerhalb von 1-2 Stunden komplett aufsetzen kann – Komplett ohne Vorwissen.
Ich benutze in meiner Anleitung Ubuntu Server 12.10 in der 64-bit Version (Server bedeutet, dass unser Linux ohne Interface / Benutzeroberfläche auskommt und nur per Befehlszeile bedient wird). Möchte man nicht auf die Benutzeroberfläche verzichten, nimmt man die Ubuntu Desktop Version. Da ich hier aber einen Server aufsetzen möchte, gehe ich nur auf die Server Version ein.
Ubuntu basiert zwar auf Debian, ist aber deutlich einfacher zu verwalten, weil viele Pakete automatisch mitgeliefert werden. Ein weiterer Vorteil ist, dass die Pakete unter Ubuntu immer topaktuell sind. Debian ist nochmal etwas schlanker als Ubuntu und wurde früher daher für Server empfohlen. In letzter Zeit setzt sich aber Ubuntu auch im Serverbereich durch was vor allem durch die geringeren Administrationszeiten begründet ist. Für Anfänger und Linux Einsteiger ist Ubuntu jedenfalls die bessere Wahl.
[box“>Bevor wir loslegen benötigen wir:
– Einen 64bit fähigen Computer/Server
– Das Ubuntu Server 12.10 Image als .iso Datei (Direktdownload oder von der Herstellerseite)
– Einen SSH Client für Windows, ich benutze die kostenlose Software Den Universal USB-Installer 1.9.1.5+ von Pendrivelinux.com
– 1-2 Stunden Zeit :)[/box“>
1. Die SSH Client Software PuTTY installieren
Installiert zuerst PuTTY auf eurem Windows PC. Die Software benötigt Ihr später um euch via Remote zu eurem Server zu verbinden. Dieser Schritt kann übersprungen werden, wenn an eurem Server dauerhaft ein Monitor angeschlossen ist und Ihr keinen Zugriff via Remote wünscht.[/box“>
[box“>2. Bootfähigen Linux USB-Stick erstellen
Hinweis: Wenn Ihr keinen USB-Stick benutzen möchtet, sondern die .iso Datei auf CD/DVD brennt, könnt Ihr diesen Schritt überspringen.
1. Startet den Universal USB Installer (es ist keine Installation des Tools notwendig)
2. Wählt „Ubuntu Server 12.10 Installer“ aus
3. Wählt die „ubuntu-12.10-server-amd64.iso“ Datei aus
4. Wählt euren USB-Stick aus und macht den Haken bei „Format Drive“
5. Fertig.[/box“>
[box“>3. Installation von Ubuntu Linux Server 12.10
1. Startet euren PC/Server neu und bootet von eurem USB-Stick oder euer CD/DVD
2. Ein Assistent begleitet euch durch die Installation. Ich beschreibe euch hier aber nocheinmal jeden Schritt.
3. Gleich am Anfang der Installation fragt euch Ubuntu, in welcher Sprache Ihr installieren wollt. Wählt hier „Deutsch“ aus.
4. Im nun angezeigten Menü wählt Ihr „Ubuntu Server installieren“ aus.
5. Es wird eine Nachricht erscheinen, dass die Übersetzung für „Deutsch“ nicht 100% fertiggestellt ist. Klickt hier einfach auf „Ja“
6. Wählt „Deutschland“ aus
7. Tastaturmodell erkennen ? Wählt „Nein“ aus
8. Wählt „Deutsch“ aus
9. Wählt nocheinmal „Deutsch“ aus
10. Sollte Linux euer Netzwerk nicht erkennen, müsst Ihr das Netzwerk manuell einrichten.
11. Wählt einen Rechnernamen aus. In meinem Fall „websrv03“.
12. Gebt euren vollständigen Namen ein, z.B. „Max Mustermann“
13. Erstellt einen Benutzer. In meinem Fall „stefan“. Ich empfehle in Linux nur Kleinbustaben zu verwenden.
14.Vergebt ein Passwort.
15. Persönlichen Ordner verschlüsseln ? Wählt hier „Nein“ aus
16. Eure Zeitzone wird automatisch ermittelt. Wenn nicht, kann dies später noch geändert werden.
17. Festplatte auswählen. Wenn Linux das einzige Betriebssystem des Server werden soll, könnt ihr hier „Vollständige Festplatte verwenden“ auswählen. Ansonsten wählt „Manuell“ aus und wählt dann eure gewünschte Partition aus. Dann wählt „Freien Speicher automatisch partitionieren“. Es wird eine Partition für Linux (EXT4) erstellt sowie eine „Swap“ Partition (ähnlich der Windows Auslagerungsdatei). Hier werden Dateien zwischengespeichert, wenn der Arbeitsspeicher voll ist. Die Swap Partition ist ca. so groß wie euer gesamter Arbeitsspeicher. In meinem Fall 4GB.
18. Bestätigt die Änderung an der Festplatte. Danach startet die Installation.
19. Wenn Ihr einen Proxy benötigt um euch mit dem Internet zu verbinden, gebt diesen ein.
20. Systemaktualisierungen – Wählt „Sicherheitsaktualisierungen automatisch installieren“ aus
21. Softwareauswahl: Wählt hier „OpenSSH Server“ und „LAMP“ mittels der Leertaste aus. Alles andere installieren wir später nach. OpenSSH wird benötigt um sich später via Remote, z.B. von einem Windows PC auf den Server einzuwählen. Wird dies nicht gewünscht, braucht Ihr den OpenSSH Server natürlich nicht zu installieren. LAMP steht für LinuxApacheMySQLPHP – Also fast alles was wir an Software für einen Webserver benötigen.
22. Vergebt unbedingt ein Passwort für den MySQL root Benutzer!
23. GRUB-Bootloader – Wählt „Ja“ aus
24. Die Installation ist abgeschlossen. Entfernt euren USB-Stick bzw. eure CD/DVD und wählt „Weiter“ aus. Der Server startet nun neu.[/box“>
[box“>4. Was ist ein root Benutzer ?
Nachdem der Server neugestartet ist, läuft Linux nun. Ihr könnt euch nun auch via PuTTY (SSH) auf den Server einwählen. Wir melden uns mit unserem Benutzernamen an. Das ganze sollte nun so aussehen:
Der nun angemeldete Benutzer hat allerdings keine Rechte irgendetwas in Linux zu ändern oder zu installieren. Das macht Linux so sicher. Um in eine „root shell“ zu gelangen, in der man volle Administrator Rechte besitzt, gibt man einfach [code“>sudo -s[/code“> ein. Es wird nochmals nach eurem Passwort gefragt. Nun befindet Ihr euch in der root shell. Aus der root shell abmelden tut Ihr euch, in dem Ihr einfach [code“>exit[/code“> eingebt. Gebt Ihr 2x [code“>exit[/code“> hintereinander ein werdet Ihr komplett aus Linux abgemeldet.[/box“>
[box“>5. Einen Task-Manager, FTP Server, phpMyAdmin und einen Virenscanner nachinstallieren
Wir alle kennen mittlerweile ja „Apps“ aus iOS und Android. Auch in Linux können wir eine Vielzahl von Software direkt aus Linux heraus installieren ohne manuell Programme herunterladen zu müssen.
Während der Linux Installation haben wir ja bereits den Apache Webserver, MySQL und PHP installiert. Uns fehlt für einen guten Webserver nun noch einen FTP Server. Proftpd hat sich seit langer Zeit etabliert. Um diesen nun nachzuinstallieren, updaten wir zuerst einmal unsere Linux App-Datenbank (Dazu müsst ihr euch in der root shell befinden, siehe oben):
[code“>apt-get update[/code“>Anschließend gebt Ihr nun [code“>apt-get install proftpd[/code“> ein um den ProFTPd Server zu installieren. Die Installation muss mit J bestätigt werden. Im erscheinenen Dialog wählt Ihr „Servermodus“ aus. Der FTP Server startet sich damit automatisch, sobald der Linux Server gestartet wird.
Der Task-Manager ist für Server ein wichtiges Werkzeug. Er zeigt wie in Windows die Auslastung des Systems sowie alle laufenden Prozesse an. Der Linux eigene Task-Manager lässt sich mit dem Befehl [code“>top[/code“> aufrufen. Mit STRG + c könnt Ihr den Task-Manager verlassen.
Eine grafisch bessere Version heißt htop. Diese lässt sich mit [code“>apt-get install htop[/code“> nachinstallieren. Ich empfehle dies. Nach der Installation könnt Ihr den neuen Task-Manager mit [code“>htop[/code“> aufrufen und mit F10 wieder beenden.
Genauso einfach wie die Installation eines Apps oder Paketes ist auch die Deinstallation: [code“>apt-get remove htop[/code“> würde den neuen Task-Manager z.B. wieder deinstallieren.
Nun fehlt uns noch ein Datenbank-Verwaltungstool. Das bekannteste ist hier sicherlich phpMyAdmin. Installation wie bekannt mit [code“>apt-get install phpmyadmin[/code“>. Während der Installation muss der Webserver ausgewählt werden den wir verwenden, also apache2. Anschließend müssen wir noch den Zugang zur MySQL Datenbank konfigurieren. Hier einfach als Benutzername root eingeben mit dem MySQL-root Passwort, welches wir während der Linux-Installation vergeben haben.
Übrigens: Einen Virenscanner benötigt Ihr unter Linux [u“>eigentlich[/u“> nicht. Euer System kann nicht von einem Virus beeinträchtigt werden. Allerdings empfehle ich dennoch einen Virenscanner, denn ein Virus, der sich z.B. in einem Bild auf eurem Webserver befindet kann dem Webserver zwar nichts anhaben, würde aber einen Windows Rechner schädigen, wenn dieser das Bild herunterläd. Daher installieren wir lieber einen Virenscanner, und zwar mit [code“>apt-get install clamav[/code“>.
Der letzte apt-get Befehl den ich euch zeigen möchte ist zugleich der Mächtigste: Mit [code“>apt-get upgrade[/code“> könnt Ihr alle installierten Apps/Pakete automatisch auf die neuste Version aktualisieren lassen, ohne das der Server dazu neu gestartet werden muss. Mit ein Hauptgrund, warum Linux auf Servern einfach super ist![/box“>
[box“>6. Konfigurieren des Webservers – FTP
Das Webserver root Verzeichnis / befindet sich übrigens im Verzeichnis /var/www. Wie immer in Linux müssen wir unserem Benutzer (in meinem Fall stefan) ersteinmal Schreib- und Löschrechte für dieses Verzeichnis geben.
Das geht mit [code“>chown BENUTZER /var/www[/code“>
Nun können wir eine Testverbindung mit FTP auf Port 21 zu unserem Webserver aufbauen. Ich benutze dazu das Programm FlashFXP. Eine gute, kostenlose Alternative ist FileZilla.
Benutzernamen und Passwörter werden direkt aus Linux verwendet. D.h. der FTP-Benutzer ist identisch mit dem Benutzer, den Ihr während der Linux Installation erstellt habt. Ihr könnt auch neue Benutzer erstellen. Das geht mit [code“>useradd -m BENUTZER[/code“>. Das Passwort könnt Ihr dann mit [code“>passwd BENUTZER[/code“> festlegen bzw. ändern. Mit [code“>userdel -r BENUTZER[/code“> lässt sich der Benutzer samt zugehörigem Home-Verzeichnis wieder entfernen.
Nach dem Verbindungsaufbau solltet Ihr in dem Verzeichnis /var/www die Datei index.html finden. Diese könnt Ihr löschen sofern Ihr euren Benutzer mittels chown die Berechtigung hierfür gegeben habt.[/box“>
[box“>7. Konfigurieren des Webservers – Apache Webserver + PHP
1. Wechselt mit [code“>cd /etc/apache2[/code“> in das Apache2 Verzeichnis.
2. Mit [code“>ls[/code“> könnt Ihr euch den Verzeichnisinhalt anzeigen lassen.
3. Um die Apache Konfigurationsdatei im Texteditor zu bearbeiten gebt Ihr [code“>nano apache2.conf[/code“> ein.
4. Mit STRG + O könnt Ihr die Datei speichern.
5. Mit STRG + X könnt Ihr den Texteditor nano wieder beenden.
Ich persönlich habe erstmal nichts in in der Apache Datei verändert. Allerdings zeige ich hier kurz wie Ihr Module in Apache aktiviert und zwar anhand von mod_rewrite.
6. Im Ordner /etc/apache2/mods-available liegen alle Module. Diese können bei Bedarf aktiviert werden. Der Befehl hierfür lautet: [code“>a2enmod rewrite[/code“> (zum deaktivieren eines Moduls: [code“>a2dismod MODUL[/code“>).
7. Nun wechseln wir in das Unterverzeichnis sites-available mit dem Befehl [code“>cd sites-available[/code“> und öffnen die Datei default mit dem Befehl [code“>nano default[/code“> und setzen sowohl im Abschnitt Directory als auch im Abschnitt Directory /var/www/ die Konfigurationsvariable AllowOverride von None auf All (siehe Bild).
8. Mit STRG + O könnt Ihr die Datei speichern.
9. Mit STRG + X könnt Ihr den Texteditor nano wieder beenden.
10. Wechselt mit [code“>cd /etc/php5/apache2[/code“> in das PHP Verzeichnis.
11. Öffnet mit [code“>nano php.ini[/code“> die PHP-Konfigurationsdatei.
12. Hier müssen wir unter date.timezone unsere Zeitzone eintragen (siehe Bild). Im nano Texteditor kann man übrigens mit STRG + w bequem nach dem Wort timezone suchen. Für Deutschland könnt Ihr einfach Europe/Berlin eintragen. Das Semikolon vor der Zeile muss entfernt werden.
13. Mit STRG + O könnt Ihr die Datei speichern.
14. Mit STRG + X könnt Ihr den Texteditor nano wieder beenden.
15. Damit die Änderungen aktiv werden, müssen wir den Apache Webserver neustarten: [code“>/etc/init.d/apache2 restart[/code“>
16. Nun wechseln wir in das MySQL Verzeichnis: [code“>cd /etc/mysql[/code“>
17. Die MySQL-Konfigurationsdatei my.cnf öffnet Ihr dann wieder mit [code“>nano my.cnf[/code“>
18. In der Datei selber könnt Ihr den Arbeitsspeicherverbrauch gut regulieren, das macht aber erst bei häufigen Zugriffen Sinn. Bei mir passe ich je nach Server z.B. key_buffer, table_cache, query_cache_limit und query_cache_size an.
19. Mit STRG + O könnt Ihr die Datei speichern.
20. Mit STRG + X könnt Ihr den Texteditor nano wieder beenden.
21. Dann die MySQL neustarten: [code“>/etc/init.d/mysql restart[/code“>
Der Webserver ist dann unter https://serverip erreichbar. Das MySQL-Verwaltungsprogramm phpMyAdmin ist unter https://serverip/phpmyadmin/ erreichbar.[/box“>
[box“>8. Tägliches MySQL Backup automatisch erstellen lassen
1. Wechselt mit [code“>cd /var/backups[/code“> in den Linux Backups Ordner. Es kann natürlich auch jedes andere Verzeichnis benutzt werden, ich empfehle aber die MySQL Backups aus Sicherheitsgründen [u“>nicht[/u“> im /var/www Verzeichnis zu speichern.
2. Mit [code“>chown BENUTZER /var/backups[/code“> geben wir unserem Benutzer erstmal Schreib- und Löschrechte auf den Ordner.
3. Da die Syntax für das MySQL Backup nicht ganz einfach ist, testen wir erstmal ob das Backup funktionieren würde:
[code“>mysqldump -u root -pDEINPW -Q –all-databases –routines| gzip ) /var/backups/MySQL_Backup_`date +{bs}%Y-{bs}%m-{bs}%d`.sql.gz[/code“>4. Mit [code“>ls[/code“> könnt Ihr prüfen, ob das MySQL-Backup erstellt wurde. Hat dies geklappt, müssen wir diese Befehlszeile jetzt als Cronjob erstellen. Ein Cronjob ist ein Befehl, der regelmässig (z.B. 1x pro Tag oder 1x pro Stunde) ausgeführt wird. Dies ist in etwa identisch mit der Windows Aufgabenplanung. Dazu öffnen wir die Cronjob-Konfigurationsdatei mit [code“>nano /etc/crontab[/code“>.
5. Nun ergänzen wir die Crontab Datei um unsere Befehlszeile, allerdings müssen wir noch angeben wann diese Zeile ausgeführt werden soll (in meinem Fall jeden Tag um 14:15)
6. Mit STRG + O könnt Ihr die Datei speichern.
7. Mit STRG + X könnt Ihr den Texteditor nano wieder beenden.
8. Mit [code“>/etc/init.d/cron restart[/code“> muss der Cronjob-Dienst nun noch neugestartet werden.
9. Mit [code“>date[/code“> könnt Ihr prüfen ob die Serverzeit stimmt.
10. Mit [code“>grep CRON /var/log/syslog[/code“> könnt Ihr das Crontab Logfile aufrufen. Es sollte nach Erstellung des Backups so aussehen:
11. Mit eurem FTP-Programm könnt Ihr aus dem Verzeichnis /var/backups jederzeit auf die Backups zugreifen.
12. Der einfachste Weg ist dann das Backup mit phpMyAdmin wieder einzuspielen.
13. Das wars. Der Server sollte nun regelmässig ein Backup eurer MySQL-Datenbank erstellen.[/box“>
[box“>9. Backup von beliebigen Verzeichnissen inkl. Benutzerrechten erstellen
Zwar haben wir jetzt ein automatisches und regelmässiges MySQL Backup aber unsere Dateien im Verzeichnis /var/www werden nicht gesichert. In Linux gibt es dutzende gute Backup Programme. Man kann auf eine externe USB-Festplatte sichern oder auch auf einen anderen Server mittels SSH oder FTP. Ich zeige hier wie man ein verschlüsseltes Backup via FTP auf einen anderen Server speichert. Das Backup wird inkrementell erstellt, d.h. das nur Dateien gesichert werden, die seit dem letzten Backup geändert wurden. Dies spart Zeit und Speicherplatz.
1. Installiert das Backup-Tool duplicity und ncftp mittels [code“>apt-get install duplicity ncftp[/code“>
2. Erstellt einen FTP-Login auf einen anderen Server, auf dem das Backup nachher verschlüsselt abgelegt werden soll.
3. Das Backup wird gestartet mit [code“>FTP_PASSWORD=DEINPW duplicity /var/www ftp://FTPUSER@backupserverip[/code“>
4. Ihr werdet nach einem GnuPG-Schlüssel gefragt. Dies ist das Passwort mit dem die Dateien ver- und später wieder entschlüsselt werden. Wählt hier ein Passwort eurer Wahl.
5. Das Backup sollte starten.
6. Nun testen wir, ob sich das Backup auch wiederherstellen lässt. Erstmal erstellen wir uns hierfür ein Test-Verzeichnis: [code“>mkdir /var/test[/code“>
6. Um das Backup später wiederherzustellen, müssen einfach Quelle und Ziel vertauscht angegeben werden. Gebt einfach [code“>FTP_PASSWORD=DEINPW duplicity ftp://FTPUSER@backupserverip /var/test[/code“> an.
7. Ihr werdet nach dem Passwort gefragt, welches Ihr benutzt habt um das Backup zu verschlüsseln.
8. Fertig. Das Backup wurde wiederhergestellt. Mit [code“>cd /var/test[/code“> wechselt Ihr in das Verzeichnis. Mit [code“>ls[/code“> könnt Ihr den Verzeichnisinhalt anzeigen. Wenn das Backup funktioniert, sollte der Inhalt identisch mit eurem /var/www Verzeichnis sein.
9. Mit [code“>rm -r /var/test[/code“> könnt Ihr das komplette Test-Verzeichnis wieder löschen.
10. Nun möchten wir aber das Backup nicht manuell anstossen, sondern wie beim MySQL Backup via Crontab automatisch ausführen lassen. Da wir allerdings auch ein Passwort zum Verschlüsseln eingeben müssen, benötigen wir ein Shell-Script.
11. Dieses lege ich mal in /var/backups an. Und zwar mit [code“>nano /var/backups/backup.sh[/code“>. Hier der Inhalt der Datei:
12. Nun müssen wir dem Script noch Ausführungsrechte geben: [code“>chmod 700 /var/backups/backup.sh[/code“>
13. Ihr könnt das Script testen, indem Ihr [code“>/var/backups/backup.sh[/code“> eingebt.
14. Wenn alles funktioniert, müssen wir nun das Script in den Crontab eintragen [code“>nano /etc/crontab[/code“>
15. Anschließend den Crontab einmal durchstarten [code“>/etc/init.d/cron restart[/code“>
16. Jetzt wird das /var/www Verzeichnis regelmässig und automatisch gesichert. Ich sichere zusätzlich noch meine MySQL-Backups auf die gleiche Weise, dann hat man wirklich alles nochmal auf einem anderen Server. Dazu müsst Ihr einfach in der backup.sh Datei unter der Zeile duplicity /var/www … eine weitere Zeile mit duplicity /var/backups … einfügen.[/box“>
[box“>10. Netzwerk-Konfiguration: Feste IP-Adresse zuweisen
Linux hat während der Installation eurem Server sehr wahrscheinlich eine dynamische DHCP-Adresse zugewiesen. Server werden in der Regel aber mit einer festen IP-Adresse ausgestattet. Und das geht so:
1. [code“>nano /etc/network/interfaces[/code“>
2. Folgende Zeilen müssen in die Datei eingefügt werden:
auto eth0
iface eth0 inet static
address 192.168.100.12
netmask 255.255.255.0
network 192.168.100.0
broadcast 192.168.100.255
gateway 192.168.100.249
Hinweis: eth0 steht für eure Netzwerkkarte. Diese kann bei euch anders lauten. Die IP-Adresse müsst Ihr natürlich eurem Netzwerk anpassen.
[bild 13″>3. Mit STRG + O könnt Ihr die Datei speichern.
4. Mit STRG + X könnt Ihr den Texteditor nano wieder beenden.
5. Nun muss die neue Konfiguration noch aktiviert werden: [code“>/etc/init.d/networking restart[/code“>[/box“>
[box“>11. Fertig!
Das wars! Ihr habt jetzt einen Linux Webserver mit den notwendigsten Dingen. Wenn Ihr mich ein bisschen unterstützen möchtet, dürft Ihr gerne über meinen Link bei Amazon einkaufen – 5% von eurem Umsatz kommt mir zu gute 🙂
P.S. Hier mal ein htop Screen unseres fertig eingerichteten 12-Kern (+12 HT Kerne) Webservers während eines 250.000 Requests-Apache-Benchmarks:
[bild 14″>[/box“>
Wow echt toll
Anleitung ist super. Vilen Dank dafür. Ich habe ein Problem mit ftp auf den Server zukommen. User habe ich angelegt (ftpuser) mit folgenden Befehlen:
useradd -m ftpuser
Passwort vergeben
chown ftpuser /var/www
Trotzdem komme ich mit filezilla nicht drauf. Was mache ich falsch?
@Stephan: Setz mal in der proftpd.conf den Wert „RequireValidShell“ auf „Off“
Hallo Stefan,
welche Hardware sollte ich mindestens einsetzen?
Danke, Michael
@Michael: Das kommt natürlich darauf an, was Du mit dem Server machen möchtest. Schau doch mal bei uns in den NAS Bereich, viele der Systeme eignen sich auch ideal als Webserver.
anstelle von remove sollte man lieber purge vorzeihen… da die anleitung auf anfänger gerichtet ist, würde ich systemd vor ziehen, auch wenn das anfänglich etwas erschreckender wirkt, aber grade für backup skripte gut geeignet ist.
Ubuntu ist überhaupt nicht aktuell, alle Pakete bei Ubuntu sind ziemlich alt, fedora oder am besten Arch sind am aktuellsten.