Webserver mittels des PHP aufsetzen

Für die Entwicklung im Web-Bereich wird meist ein lokaler Webserver benötigt, welcher meist über PHP, eine Datenbank z.B. MariaDB und den eigentlichen Webserver verfügt. Allerdings muss nicht für jeden Fall gleich ein Nginx installiert werden.

Der PHP-Webserver

Ist ein PHP installiert, z.B. unter macOS über Homebrew:

brew install php

kann dieses genutzt werden, um einen Webserver mittels PHP im Terminal zu realisieren. Dafür dient die Option -S:

sudo php -S localhost:80

Als Parameter wird die Adresse und der gewünschte Port angegeben. Das sudo wird benötigt, um den privilegierten Port zu nutzen. Anschließend hört PHP auf dem Port und der Adresse und bearbeitet entsprechende Anfragen.

Einfacher HTTP-Server unter Python 3

Wer auf die Schnelle eine Webserver benötigt, kann hierfür unter anderem Python nutzen. Dazu muss aus der Python 3-Installation das entsprechende Modul gestartet werden:

python -m http.server

Damit wird ein lokaler HTTP-Server gestartet, welcher auf dem Port 8000 horcht. Soll stattdessen ein anderer Port genutzt werden, so kann der gewünschte Port einfach am Ende angehangen werden:

python -m http.server 7000

In diesem Fall würde der Server auf dem Port 7000 erreichbar sein. Natürlich sollte diese schnelle Lösung nicht für den produktiven Betrieb genutzt werden.

Reverse Proxy für Gitea konfigurieren

Ein Reverse Proxy liefert eine Ressource, welche er von einem oder mehreren Servern holt, an einen Client aus. Bei Gitea kann es durchaus sinnvoll sein, dieses hinter einem Reverse Proxy zu betreiben. Standardmäßig läuft der Dienst auf dem Port 3000. Möchte der Nutzer ihn über die normalen Ports für HTTP (80) bzw. HTTPS (443) erreichbar machen, könnte das Ganze durchaus über die Konfiguration von Gitea in Verbindung mit der systemd-Unit geschehen.

Allerdings ist ein weiterer Vorteil bei einem Reverse Proxy, das die angefragte Infrastruktur aus der Sicht der Clients versteckt wird. Mittels Nginx kann es solcher Reverse Proxy realisiert werden. Dazu muss die Nginx-Konfiguration für die Domain angepasst werden:

nano /etc/nginx/sites-available/example

In diesem Fall befasst sich die Konfiguration mit der verschlüsselten Kommunikation per HTTPS und der Weiterleitung von unverschlüsselten Verbindung in Richtung der verschlüsselten Verbindung.

server {
  listen 80;
  listen [::]:80;

  server_name example.org;

  return 301 https://$host$request_uri$is_args$args;
}

server {
  listen 443;
  listen [::]:443 default_server;

  ssl on;
  ssl_certificate        /etc/letsencrypt/live/example.org/fullchain.pem;
  ssl_certificate_key    /etc/letsencrypt/live/example.org/privkey.pem;

    server_name org;

    location / {
        proxy_pass http://localhost:3000;
    }
}

Anhand der Konfiguration wird ersichtlich das Gitea auf dem Server unverschlüsselt betrieben werden kann, da die eigentliche Verschlüsselung über HTTPS vom Reverse Proxy, in diesem Fall Nginx, übernommen wird. Nachdem die Konfiguration gespeichert wurde, muss Nginx neugestartet werden:

service nginx restart

Anschließend muss die Gitea-Konfiguration nochmals angepasst werden:

nano /home/git/gitea/custom/conf/app.ini

Dort muss die ROOT_URL nun so definiert werden, wie der Client sie nun sieht. Die ROOT_URL kann von:

ROOT_URL         = https://example.org:3000/

zu:

ROOT_URL         = http://example.org/

geändert werden. Die Werte PROTOCOL, CERT_FILE und KEY_FILE können entfernt werden, da die Verschlüsslung nun von Nginx übernommen wird. Nach der Änderung der Konfiguration muss Gitea ebenfalls neugestartet werden:

service gitea restart

Nachdem die Konfiguration durch geführt wurde, ist Gitea unter zwei URLs erreichbar:

http://example.org:3000/
https://example.org/

Intern läuft Gitea auf dem Port 3000. Damit dieser nicht von außen erreichbar ist, sollte eine entsprechende Firewall-Regel konfiguriert werden.

Port unter CentOS freigeben

Wenn unter CentOS der Dienst FirewallD aktiviert ist und man eine wie auch immer geartete Serverapplikation auf dem Server betreiben möchte, wird man feststellen das der Dienst von außen nicht zu erreichen ist. Die einfache wenn auch nicht zielführende Möglichkeit wäre es natürlich die Firewall komplett zu deaktivieren. Sinnvoller ist es hingegen den entsprechenden Port welcher benötigt wird freizuschalten. Dies geschieht dabei mit dem Kommando:

firewall-cmd --zone=public --add-port=1234/tcp --permanent

Damit wird der Port 1234, wenn er über TCP angesprochen wird, in der Zone Public freigeschaltet. Die aktiven Zonen auf dem System können dabei mittels:

firewall-cmd --get-active-zones

angezeigt werden. Die Änderung der Regel wird dabei nicht sofort übernommen. Stattdessen müssen die Einstellungen neu geladen werden:

firewall-cmd --reload

Ungenutze Ports unter MacPorts entfernen

Wenn man Ports unter MacPorts entfernt kann es passieren das Bibliotheken, welche von dem Port genutzt werden, im System verbleiben. Mit dem Umstieg von MacPorts auf eine SQL-Datenbank zur Haltung der Paketinformationen ist es möglich geworden diese ungenutzten Bibliotheken zu entfernen. Dazu muss im Terminal:

sudo port uninstall leaves

eingegeben werden. Anschließend werden die ungenutzten Bibliotheken entfernt und damit Plattenplatz freigegeben. Die Funktionalität der installierten Ports wird dadurch nicht beeinträchtigt.