Freitag, Januar 3, 2025

Setup von FlatPress mit Docker und NGINX

== Setup von FlatPress mit Docker und NGINX ==

In diesem Tutorial zeigen wir dir, wie du **FlatPress** mit **Docker** und **NGINX** einrichtest. FlatPress ist eine leichtgewichtige Blogging-Plattform, die keine Datenbank benötigt und auf PHP basiert. Wir werden NGINX als Webserver und PHP-FPM für die Ausführung von PHP-Skripten nutzen.

=== Voraussetzungen ===
- Docker und Docker Compose sind auf deinem System installiert.
- Du hast ein funktionierendes FlatPress-Projekt, das du mit Docker betreiben möchtest.

=== 1. Docker Installation ===

Zunächst müssen wir sicherstellen, dass Docker und Docker Compose auf deinem System installiert sind. Falls du Docker noch nicht installiert hast, folge den Anweisungen auf der offiziellen Docker-Website.

==== Docker installieren ====
Um Docker und Docker Compose zu installieren, führe die folgenden Befehle aus:

sudo apt-get update
sudo apt-get install docker.io
sudo apt-get install docker-compose

Starte Docker und setze es so, dass es beim Booten automatisch startet:

sudo systemctl start docker
sudo systemctl enable docker

==== Überprüfung der Docker-Installation ====
Stelle sicher, dass Docker korrekt installiert ist, indem du den folgenden Befehl ausführst:

docker –version

Wenn alles funktioniert, solltest du die Version von Docker sehen.

==== Ggf. Docker Compose installieren ====

Falls Docker Compose noch nicht installiert ist, folge diesen Schritten:

Schritt 1: Docker Compose herunterladen

sudo curl -L ”https://github.com/docker/compose/releases/download/$(curl -s https://api.github.com/repos/docker/compose/releases/latest | jq -r .tag_name)/docker-compose-$(uname -s)-$(uname -m)” -o /usr/local/bin/docker-compose

Schritt 2: Ausführungsrechte für Docker Compose setzen

sudo chmod +x /usr/local/bin/docker-compose

Schritt 3: Installation überprüfen

Überprüfe, ob Docker Compose korrekt installiert wurde:

docker-compose –version

Du solltest nun die Version von Docker Compose sehen, z. B. `docker-compose version 1.29.2, build 5becea4c`.

Falls du auf Probleme stößt, versuche, **jq** zu installieren, indem du folgenden Befehl ausführst:

sudo apt-get install jq

Versuche danach erneut, Docker Compose herunterzuladen und auszuführen:

sudo curl -L ”https://github.com/docker/compose/releases/download/$(curl -s https://api.github.com/repos/docker/compose/releases/latest | jq -r .tag_name)/docker-compose-$(uname -s)-$(uname -m)” -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
docker-compose –version

Wenn weiterhin Probleme auftreten, versuche das **apparmor**-Paket zu installieren:

sudo apt-get install apparmor apparmor-utils

Starte anschließend Docker neu:

sudo systemctl restart docker
sudo docker-compose up -d

=== 2. Docker Compose Setup ===

Nun erstellen wir eine `docker-compose.yml`, um die beiden Container für NGINX und PHP zu definieren.

**docker-compose.yml**

services:
  # NGINX Webserver
  nginx:
    image: nginx:latest
    container_name: nginx
    restart: always
    ports:
      - ”80:80”  # Nur HTTP
    volumes:
      - ./nginx.conf:/etc/nginx/conf.d/default.conf
      - ./flatpress:/var/www/flatpress  # Stellt sicher, dass NGINX auf FlatPress zugreifen kann
    depends_on:
      - php  # NGINX startet nach PHP
    networks:
      - www_flatpress-net

  # PHP-FPM Container für die Ausführung von PHP
  php:
    image: php:8.2-fpm
    container_name: php-fpm
    restart: always
    volumes:
      - ./flatpress:/var/www/flatpress  # Stellt sicher, dass PHP auf FlatPress zugreifen kann
    networks:
      - www_flatpress-net

networks:
  www_flatpress-net:
    driver: bridge

- **nginx:** Verwendet das offizielle `nginx` Docker-Image. Die Konfiguration von NGINX wird über die `nginx.conf` angepasst, und der FlatPress-Ordner wird als Volume in den Container eingebunden.
- **php:** Verwendet das `php:8.2-fpm` Docker-Image. Auch hier wird der FlatPress-Ordner als Volume eingebunden.

=== 3. NGINX Konfiguration ===

Die `nginx.conf` Datei definiert, wie NGINX mit den Anfragen und dem PHP-Server kommuniziert.

**nginx.conf**

server {
    listen 80;
    server_name localhost;

    root /var/www/flatpress;  # Pfad zum FlatPress-Verzeichnis
    index index.php index.html index.htm;

    location / {
        try_files $uri $uri/ /index.php?$query_string;  # Stellt sicher, dass auf index.php umgeleitet wird, wenn die Datei nicht gefunden wird
    }

    location ~ .php$ {
        include fastcgi_params;
        fastcgi_pass php-fpm:9000;  # PHP-FPM Container wird auf Port 9000 angesprochen
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME /var/www/flatpress$document_root$fastcgi_script_name;
    }
}

- **root /var/www/flatpress:** Stellt sicher, dass NGINX das FlatPress-Verzeichnis als Root-Verzeichnis verwendet.
- **location /:** Wenn eine Datei angefragt wird, die nicht existiert, wird der Request an `index.php` weitergeleitet.
- **location ~ .php$:** PHP-Dateien werden an den PHP-FPM-Container weitergeleitet.

=== 4. FlatPress Verzeichnis ===

Die FlatPress-Dateien sollten in einem lokalen Verzeichnis gespeichert sein. Achte darauf, dass die Struktur wie folgt aussieht:

/var/www/flatpress
  ├── index.php
  ├── blog.php
  ├── comments.php
  ├── fp-content
  └── …

Falls du mit einem frischen FlatPress-Setup arbeitest, stelle sicher, dass du die neuesten Dateien von [FlatPress](https://www.flatpress.org/) herunterlädst.

=== 5. Berechtigungen und Volumes ===

Stelle sicher, dass du die richtigen Berechtigungen für das Verzeichnis und die Dateien von FlatPress gesetzt hast. Dies ist besonders wichtig, damit NGINX und PHP auf die Dateien zugreifen können.

Setze die Berechtigungen für das `flatpress` Verzeichnis und die Dateien auf den `www-data` Benutzer und die Gruppe:

sudo chown -R www-data:www-data /var/www/flatpress
sudo chmod -R 755 /var/www/flatpress

=== 6. Fehlerbehebung ===

Falls du einen **403 Forbidden** Fehler erhältst, überprüfe die Berechtigungen der Dateien im `flatpress` Verzeichnis. Achte darauf, dass der Webserver (NGINX) und PHP auf die Dateien zugreifen können.

Falls du eine **404 File not found** Fehlermeldung bekommst, stelle sicher, dass NGINX korrekt auf das `index.php` zugreifen kann und dass die Verzeichnisse und Dateien richtig gemountet sind.

Überprüfe auch die Logs der Container, um zu sehen, ob weitere Hinweise auf das Problem bestehen:

sudo docker logs nginx
sudo docker logs php-fpm

=== 7. Container starten ===

Nachdem du alle Konfigurationsdateien vorbereitet hast, kannst du die Docker-Container starten:

sudo docker-compose up -d

Der Container wird jetzt im Hintergrund gestartet. Du kannst die Container mit folgendem Befehl überwachen:

sudo docker ps

Wenn alles korrekt eingerichtet ist, solltest du nun in der Lage sein, auf deine FlatPress-Seite über `http://localhost` zuzugreifen.

=== 8. Hilfen zur Fehlersuche ===

Falls du weiterhin Probleme hast, kannst du in die Container umschalten und dir das Verzeichnis von FlatPress ansehen:

sudo docker exec -it nginx bash
ls -l /var/www/flatpress

Wenn du Änderungen an der Konfiguration vorgenommen hast, aber der Container nicht neu gestartet wird, führe folgendes aus:

sudo docker-compose down
sudo docker-compose up -d

Stelle sicher, dass der Docker-Dienst automatisch beim Booten startet:

sudo systemctl enable docker
sudo systemctl start docker