Apache Webserver
Die Installation eines Apache Webservers auf einem macOS-System ist eine gute Möglichkeit, eine lokale Entwicklungsumgebung für Webprojekte einzurichten. Da macOS bereits mit einer vorinstallierten Version von Apache ausgeliefert wird, ist der Einrichtungsprozess unkompliziert und schnell. In dieser Anleitung habe ich einmal die Installation und Konfiguration eines vollständigen Webservers mit Apache, CGI, PHP, MariaDB, phpMyAdmin, vier virtuellen Domains und SSL mit Let's Encrypt beschrieben.
1. Systemvorbereitung
- Aktualisieren Sie macOS auf die neueste Version.
- Öffnen Sie das Terminal.
2. Apache Webserver aktivieren
macOS kommt mit einer vorinstallierten Version von Apache. Um es zu aktivieren:
sudo apachectl start
Überprüfen Sie, ob Apache läuft, indem Sie http://localhost
in Ihrem Browser öffnen.
3. PHP installieren und konfigurieren
Überprüfen Sie, ob PHP installiert ist:
php -v
Wenn PHP nicht installiert oder veraltet ist, installieren Sie es über Homebrew:
- Installieren Sie Homebrew:
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
- Installieren Sie PHP:
brew install php
- Verlinken Sie PHP mit Apache:
sudo nano /etc/apache2/httpd.conf
Suchen Sie nach
#LoadModule php_module libexec/apache2/libphp.so
und entfernen Sie das#
-Zeichen. - Starten Sie Apache neu:
sudo apachectl restart
4. MariaDB installieren
Installieren Sie MariaDB über Homebrew:
brew install mariadb
- Starten Sie den MariaDB-Dienst:
brew services start mariadb
- Richten Sie das Root-Passwort ein:
mysql_secure_installation
5. phpMyAdmin installieren
- Installieren Sie phpMyAdmin über Homebrew:
brew install phpmyadmin
- Konfigurieren Sie Apache, um phpMyAdmin zu nutzen:
sudo nano /etc/apache2/extra/httpd-vhosts.conf
Fügen Sie einen Alias hinzu:
Alias /phpmyadmin "/usr/local/share/phpmyadmin" <Directory "/usr/local/share/phpmyadmin"> Options Indexes FollowSymLinks AllowOverride All Require all granted </Directory>
- Starten Sie Apache neu:
sudo apachectl restart
6. CGI-Unterstützung aktivieren
Aktivieren Sie CGI in der Apache-Konfigurationsdatei:
- Bearbeiten Sie die Apache-Konfigurationsdatei:
sudo nano /etc/apache2/httpd.conf
- Suchen Sie nach
#LoadModule cgi_module libexec/apache2/mod_cgi.so
und entfernen Sie das#
-Zeichen. - Fügen Sie im Abschnitt
Directory
dieExecCGI
-Option hinzu:<Directory "/Library/WebServer/CGI-Executables"> Options +ExecCGI AddHandler cgi-script .cgi .pl .py </Directory>
- Starten Sie Apache neu:
sudo apachectl restart
7. Virtuelle Hosts einrichten
Richten Sie vier virtuelle Hosts für Ihre Domains ein:
- Erstellen Sie die Verzeichnisse:
sudo mkdir -p /usr/local/var/www/domain1 /usr/local/var/www/domain2 /usr/local/var/www/domain3 /usr/local/var/www/domain4
- Bearbeiten Sie die Konfigurationsdatei:
sudo nano /etc/apache2/extra/httpd-vhosts.conf
- Fügen Sie die Konfigurationen für die vier Domains hinzu:
<VirtualHost *:80> ServerAdmin webmaster@domain1.com DocumentRoot "/usr/local/var/www/domain1" ServerName domain1.com ServerAlias www.domain1.com ErrorLog "/private/var/log/apache2/domain1.com-error_log" CustomLog "/private/var/log/apache2/domain1.com-access_log" common </VirtualHost> <VirtualHost *:80> ServerAdmin webmaster@domain2.com DocumentRoot "/usr/local/var/www/domain2" ServerName domain2.com ServerAlias www.domain2.com ErrorLog "/private/var/log/apache2/domain2.com-error_log" CustomLog "/private/var/log/apache2/domain2.com-access_log" common </VirtualHost> <VirtualHost *:80> ServerAdmin webmaster@domain3.com DocumentRoot "/usr/local/var/www/domain3" ServerName domain3.com ServerAlias www.domain3.com ErrorLog "/private/var/log/apache2/domain3.com-error_log" CustomLog "/private/var/log/apache2/domain3.com-access_log" common </VirtualHost> <VirtualHost *:80> ServerAdmin webmaster@domain4.com DocumentRoot "/usr/local/var/www/domain4" ServerName domain4.com ServerAlias www.domain4.com ErrorLog "/private/var/log/apache2/domain4.com-error_log" CustomLog "/private/var/log/apache2/domain4.com-access_log" common </VirtualHost>
- Aktivieren Sie die Datei
httpd-vhosts.conf
:sudo nano /etc/apache2/httpd.conf
Entfernen Sie das
#
vor der Zeile:#Include /etc/apache2/extra/httpd-vhosts.conf
- Fügen Sie die Domains zur
/etc/hosts
Datei hinzu:sudo nano /etc/hosts
Fügen Sie die folgenden Zeilen hinzu:
127.0.0.1 domain1.com 127.0.0.1 domain2.com 127.0.0.1 domain3.com 127.0.0.1 domain4.com
- Starten Sie Apache neu:
sudo apachectl restart
8. SSL mit Let's Encrypt einrichten
- Installieren Sie Certbot für Let's Encrypt:
brew install certbot
- Generieren Sie SSL-Zertifikate:
sudo certbot certonly --apache -d domain1.com -d www.domain1.com -d domain2.com -d www.domain2.com -d domain3.com -d www.domain3.com -d domain4.com -d www.domain4.com
- Konfigurieren Sie die Apache-Konfigurationsdateien für SSL:
<VirtualHost *:443> ServerAdmin webmaster@domain1.com DocumentRoot "/usr/local/var/www/domain1" ServerName domain1.com ServerAlias www.domain1.com SSLEngine on SSLCertificateFile /etc/letsencrypt/live/domain1.com/fullchain.pem SSLCertificateKeyFile /etc/letsencrypt/live/domain1.com/privkey.pem Include /etc/letsencrypt/options-ssl-apache.conf </VirtualHost> <VirtualHost *:443> ServerAdmin webmaster@domain2.com DocumentRoot "/usr/local/var/www/domain2" ServerName domain2.com ServerAlias www.domain2.com SSLEngine on SSLCertificateFile /etc/letsencrypt/live/domain2.com/fullchain.pem SSLCertificateKeyFile /etc/letsencrypt/live/domain2.com/privkey.pem Include /etc/letsencrypt/options-ssl-apache.conf </VirtualHost> <VirtualHost *:443> ServerAdmin webmaster@domain3.com DocumentRoot "/usr/local/var/www/domain3" ServerName domain3.com ServerAlias www.domain3.com SSLEngine on SSLCertificateFile /etc/letsencrypt/live/domain3.com/fullchain.pem SSLCertificateKeyFile /etc/letsencrypt/live/domain3.com/privkey.pem Include /etc/letsencrypt/options-ssl-apache.conf </VirtualHost> <VirtualHost *:443> ServerAdmin webmaster@domain4.com DocumentRoot "/usr/local/var/www/domain4" ServerName domain4.com ServerAlias www.domain4.com SSLEngine on SSLCertificateFile /etc/letsencrypt/live/domain4.com/fullchain.pem SSLCertificateKeyFile /etc/letsencrypt/live/domain4.com/privkey.pem Include /etc/letsencrypt/options-ssl-apache.conf </VirtualHost>
- Starten Sie Apache neu:
sudo apachectl restart
9. Automatische Erneuerung der SSL-Zertifikate
Um die automatische Erneuerung der Let's Encrypt SSL-Zertifikate auf unserem macOS-Rechner einzurichten, wird ein Cronjob verwendet, der regelmäßig Certbot ausführt. Hier ist eine detaillierte Anleitung:
9.1. Certbot installieren
Wenn Certbot noch nicht installiert ist, können Sie es über Homebrew installieren:
brew install certbot
9.2. Testen der manuellen Erneuerung
Bevor wir die automatische Erneuerung einrichten, sollten wir sicherstellen, dass die manuelle Erneuerung funktioniert:
sudo certbot renew --dry-run
Wenn dieser Befehl erfolgreich ist, können Sie mit der automatischen Erneuerung fortfahren.
9.3. Cronjob für die automatische Erneuerung einrichten
Cron ist ein Dienst, der auf UNIX-basierten Systemen verwendet wird, um periodisch Skripte auszuführen. Um einen Cronjob für die automatische Erneuerung der Zertifikate einzurichten, gehen wir wie folgt vor:
- Öffnen Sie den Crontab-Editor im Terminal:
crontab -e
- Fügen Sie den folgenden Eintrag hinzu, um Certbot zweimal täglich auszuführen:
0 */12 * * * /usr/local/bin/certbot renew --quiet --no-self-upgrade >> /var/log/letsencrypt/letsencrypt-renew.log 2>&1
Erklärung der Cronjob-Syntax:
0 */12 * * *
: Führt den Befehl alle 12 Stunden aus./usr/local/bin/certbot renew
: Der Befehl, der die Erneuerung der Zertifikate ausführt.--quiet
: Unterdrückt die normale Ausgabe, so dass nur Fehler protokolliert werden.--no-self-upgrade
: Verhindert, dass Certbot sich selbst aktualisiert, um unerwartete Änderungen zu vermeiden.>> /var/log/letsencrypt/letsencrypt-renew.log 2>&1
: Protokolliert die Ausgabe in eine Logdatei, um bei Bedarf spätere Überprüfungen zu ermöglichen.
9.4. Apache automatisch neu starten
Certbot erneuert die Zertifikate, aber Apache muss neu gestartet werden, damit die Änderungen wirksam werden. Sie können dies im selben Cronjob hinzufügen:
0 */12 * * * /usr/local/bin/certbot renew --quiet --no-self-upgrade && sudo apachectl graceful >> /var/log/letsencrypt/letsencrypt-renew.log 2>&1
Erklärung:
&& sudo apachectl graceful
: Startet Apache nach erfolgreicher Erneuerung der Zertifikate neu, ohne bestehende Verbindungen zu unterbrechen.
9.5. Logdateien prüfen
Die Logdateien befinden sich unter /var/log/letsencrypt/letsencrypt-renew.log
. Es ist eine gute Idee, diese regelmäßig zu überprüfen, um sicherzustellen, dass die Erneuerung erfolgreich verläuft.
9.6. Berechtigungen sicherstellen
Da der Cronjob mit Benutzerrechten ausgeführt wird, müssen Sie sicherstellen, dass Certbot und Apache vom selben Benutzer oder einer Gruppe mit den notwendigen Berechtigungen ausgeführt werden.
9.7. Testen des Setups
Um sicherzustellen, dass alles korrekt funktioniert, können Sie einen manuellen Testlauf des Cronjobs simulieren:
sudo /usr/local/bin/certbot renew --quiet --no-self-upgrade && sudo apachectl graceful
Wenn nun der Befehl erfolgreich ist, sollte alles korrekt eingerichtet sein.
Mit diesen Schritten wird die automatische Erneuerung der Let's Encrypt SSL-Zertifikate auf unserem macOS-Rechner sichergestellt. Die Zertifikate werden alle 12 Stunden überprüft und bei Bedarf erneuert, wobei Apache automatisch neu gestartet wird, um die neuen Zertifikate zu verwenden.
Nun können wir unseren MacOS Webserver für die lokale Entwicklung nutzen. Diese Anleitung sollte ideal sein für Entwickler, die eine flexible und leistungsfähige Umgebung auf ihrem macOS-Rechner einrichten möchten.