Archiv für den Monat: Oktober 2024

Entwicklungsumgebung mit Docker einrichten

In diesem Bericht geht es darum, dass ich eine PHP-Anwendung entwickeln möchte, und auf meinem lokalen Rechner direkt einen PHP- und MySQL – Server einrichten möchte, um die gerade durchgeführten Änderungen testen zu können. Für eine schnelle Umsetzung habe ich an eine Docker- Lösung gedacht. Da ich aber keine Ahnung habe, wie man das schnell einrichtet, habe ich Perplexity AI gefragt. Folgendes Ergebnis kam dabei raus:

Docker-Compose Setup

Erstellen Sie eine docker-compose.yml Datei mit folgendem Inhalt:

version: '3'
services:
  web:
    image: php:8.2-apache
    ports:
      - "8080:80"
    volumes:
      - ./src:/var/www/html
    environment:
      - PHP_EXTENSION_MYSQLI=1
      - PHP_EXTENSION_PDO_MYSQL=1

Dieses Setup bietet Ihnen:

  1. Ein PHP 8.2 Image mit Apache-Webserver
  2. Port-Mapping von 8080 auf Ihrem MacBook zu Port 80 im Container
  3. Ein Volume, das Ihr lokales src Verzeichnis mit dem Webroot des Containers verbindet
  4. Automatische Installation der mysqli und PDO MySQL Erweiterungen

Verzeichnisstruktur

Erstellen Sie folgende Verzeichnisstruktur:

project/
├── docker-compose.yml
└── src/
    └── index.php

PHP-Testdatei

Erstellen Sie eine index.php Datei im src Verzeichnis mit folgendem Inhalt:

<?php
phpinfo();
?>

Starten des Containers

docker-compose up -d

Testen der Installation

Öffnen Sie einen Webbrowser und navigieren Sie zu http://localhost:8080. Sie sollten die PHP-Info-Seite sehen

Entwickeln von PHP-Seiten

Sie können nun PHP-Dateien im src
Verzeichnis erstellen und bearbeiten. Diese Änderungen werden sofort im
Container reflektiert, ohne dass Sie den Container neu starten müssen

MySQL ergänzen

Um MySQL zu Ihrem Docker-Setup hinzuzufügen und die Daten im Projektordner zu speichern, können Sie die docker-compose.yml Datei erweitern. Hier ist eine aktualisierte Version, die MySQL einschließt und die Daten lokal speichert:

Erweiterte docker-compose.yml

version: '3'
services:
  web:
    image: php:8.2-apache
    ports:
      - '8080:80'
    volumes:
      - ./src:/var/www/html
    environment:
      - PHP_EXTENSION_MYSQLI=1
      - PHP_EXTENSION_PDO_MYSQL=1
  db:
    image: mysql:5.7
    environment:
      MYSQL_ROOT_PASSWORD: root_password
      MYSQL_DATABASE: my_database
      MYSQL_USER: user
      MYSQL_PASSWORD: user_password
    volumes:
      - ./db_data:/var/lib/mysql
    ports:
      - '3306:3306'

Diese Konfiguration fügt einen MySQL-Service hinzu und speichert die Datenbankdaten im Projektordner. Hier sind die wichtigsten Änderungen:

  1. Ein neuer db Service wurde hinzugefügt, der das MySQL 5.7 Image verwendet.
  2. Umgebungsvariablen für MySQL wurden gesetzt, um ein Root-Passwort, eine Datenbank, einen Benutzer und ein Benutzerpasswort zu definieren.
  3. Ein Volume wurde hinzugefügt, das das lokale Verzeichnis ./db_data mit /var/lib/mysql im Container verbindet. Dies stellt sicher, dass die Datenbankdaten im Projektordner gespeichert werden.
  4. Der Port 3306 wurde freigegeben, sodass Sie von Ihrem MacBook aus auf die Datenbank zugreifen können.

Verwendung des erweiterten Setups

  1. Erstellen Sie einen neuen Ordner namens db_data in Ihrem Projektverzeichnis. Dieser wird die MySQL-Daten speichern.
  2. Starten Sie die Container mit dem folgenden Befehl:

    docker-compose up -d
  3. Die MySQL-Datenbank wird nun im db_data Ordner in Ihrem Projektverzeichnis gespeichert. Dies ermöglicht die Persistenz der Daten, auch wenn Sie die Container stoppen oder neu erstellen.
  4. Sie können sich nun von Ihrer PHP-Anwendung aus mit der Datenbank verbinden, indem Sie db als Hostnamen verwenden.

    Verbindung zur Datenbank

    <?php
    $host = 'db';
    $user = 'user';
    $pass = 'user_password';
    $db = 'my_database';
    
    $conn = new mysqli($host, $user, $pass, $db);
    
    if ($conn->connect_error) {
        die("Verbindung fehlgeschlagen: " . $conn->connect_error);
    }
    echo "Erfolgreich verbunden";
    ?>

    Mit diesem Setup haben Sie nun eine vollständige Entwicklungsumgebung mit PHP und MySQL, wobei alle Daten lokal in Ihrem Projektordner gespeichert werden. Dies ermöglicht eine einfache Versionskontrolle und Sicherung Ihrer Entwicklungsumgebung.

    Raspberry Pi aufsetzen

    Den Raspberry Pi 4b als auch den Raspberry Pi Zero 2 finde ich sehr interessiert für einige Hobby- Projekte. Diese möchte ich nach und nach hier dokumentieren. Auch wenn es im Netz bereits viele Anleitungen existieren, will ich diese vor allem auch für mich selber erstellen. Da ich sicherlich nicht kontinuierlich daran arbeiten werde, vergesse ich vermutlich wieder schnell, was und wie ich das gemacht gemacht habe 🙂

    Node Red installieren

    Auf meinem Raspberry Pi Zero 2 W möchte ich gerne Node Red installieren und kennenlernen, welche Aufgaben das System zuverlässig 24/7 steuern kann. Das Konzept klingt sehr interessant. Vor allem in Verbindung mit MQTT. Dazu möchte auch noch Mosquitto installieren. Doch dazu später mehr.

    Wie bei allen Linux- System empfiehlt es sich erst einmal alle bereits installierten System auf den aktuellen Stand zu bringen. Dazu gibt man folgende Befehle ein:

    sudo apt update && sudo upgrade

    Anschließend startet man die Installation mit dem langen Befehlsaufruf:

    bash <(curl -sL https://raw.githubusercontent.com/node-red/linux-installers/master/deb/update-nodejs-and-nodered)

    Damit Node Red bei jedem Reboot ist es wichtig, dass Node Red noch als Dienst registriert wird. Das erreicht man mit folgender Befehlsfolge:

    sudo systemctl enable nodered.service

    Und nun sind noch einige Einstellungen sinnvoll, wie z.B. einen Benutzer anzulegen. 

    node-red admin init

    MQTT Broker installieren

    In Verbindung mit Node Red auf meinem Raspberry Pi Zero 2 W möchte ich auch den MQTT Broker Mosquitto installieren, um Smart Home – Komponenten steuern zu können. Zur Installation ist folgender Befehl auf der Konsole nötig:

    sudo apt-get install -y mosquitto mosquitto-clients

    Damit Mosquitto auch als Dienst im Hintergrund läuft müssen wir es noch als Dienst registrieren. das erledigen wir mit folgenden Befehl:

    sudo systemctl enable mosquitto.service

    Konfiguration

    Für die Konfiguration ist die Datei /etc/mosquitto/mosquitto.conf und die Dateien im Ordner /etc/mosquitto/conf.d/ verantwortlich. Im nächsten Schritt will ich den Zugang zum MQTT – Broker noch durch Benutzer und Kennwörter absichern. Dazu lege ich die Datei /etc/mosquitto/conf.d/010-listener-with-users.conf an, wo definiert wird, dass der Zugang nur für berechtigte User möglich ist.

    listener 1883 password_file /etc/mosquitto/conf.d/010-access-list allow_anonymous false

    Mit listener 1883 wird festgelegt, dass Mosquitto auf dem Port 1883 kommuniziert. Dies ist übrigens der Standardwert. Als nächstes sage ich Mosquitto in welcher Datei die Zugangsdaten der Benutzer zu finden sind. Und zu guter Letzt verbiete ich anonyme Anmeldungen