Zum Inhalt

API auf Raspberry Pi (Modul 295)

Diese Dokumentation beschreibt die Erstellung, Containerisierung und Bereitstellung einer REST-API auf einem Raspberry Pi mittels Docker.


Projektübersicht

Das Ziel war es, eine API mit personalisierten Fake-Daten zu erstellen, die innerhalb eines Docker-Containers auf einem Raspberry Pi läuft. Die API liefert Daten im JSON-Format zurück.

Eigenschaft Wert
Abgabedatum 11. Februar 2026
Technologien Python (Flask), Docker, SSH
Hardware Raspberry Pi 4

1. System-Zugang & Umgebung

Die Verbindung zum Raspberry Pi wurde über SSH im lokalen Netzwerk hergestellt.

Parameter Wert
SSH-Befehl ssh m295@10.27.160.12
Passwort m295
Projektverzeichnis ~/api-projekt

2. Implementierung

A. Die API (app.py)

Wir haben das Python-Microframework Flask verwendet, um einen Endpunkt zu definieren, der personalisierte JSON-Daten zurückgibt.

from flask import Flask, jsonify

app = Flask(__name__)

@app.route('/api/m295', methods=['GET'])
def get_fake_data():
    return jsonify({
        "status": "success",
        "author": "DEIN NAME",  # Hier deinen echten Namen eintragen!
        "module": "m295 - API Integration",
        "data": [
            {"id": 101, "item": "Raspberry Pi 4", "status": "online"},
            {"id": 102, "item": "Docker Container", "status": "running"},
            {"id": 103, "item": "JSON API", "status": "active"}
        ]
    })

if __name__ == '__main__':
    # host 0.0.0.0 ist wichtig, damit die API von außen erreichbar ist
    app.run(host='0.0.0.0', port=5000)

Hinweis

Der Parameter host='0.0.0.0' ist wichtig, damit die API von außerhalb des Containers erreichbar ist.


B. Docker-Konfiguration (Dockerfile)

Um die API unabhängig von der lokalen Python-Installation des Raspberry Pi zu betreiben, wurde ein Docker-Image erstellt.

# Basis-Image: Schlankes Python 3.9
FROM python:3.9-slim

# Arbeitsverzeichnis festlegen
WORKDIR /app

# Abhängigkeiten installieren
RUN pip install flask

# Quellcode in den Container kopieren
COPY app.py .

# Port 5000 für den Zugriff nach außen öffnen
EXPOSE 5000

# Startbefehl
CMD ["python", "app.py"]

3. Deployment-Prozess

Die Bereitstellung erfolgte über die Kommandozeile des Raspberry Pi in drei Schritten:

Schritt 1: Dateien erstellen

Mit nano wurden die app.py und das Dockerfile im Ordner ~/api-projekt angelegt.

Schritt 2: Image Build

docker build -t m295-api .

Schritt 3: Container Run

docker run -d -p 5000:5000 --name my-api-container m295-api

Parameter erklärt

  • -d → Container läuft im Hintergrund (detached)
  • -p 5000:5000 → Port-Mapping (Host:Container)
  • --name → Benennt den Container

4. Verifizierung & Test

Nach dem Start des Containers konnte die API erfolgreich über den Webbrowser oder curl aufgerufen werden.

Test-URL

http://10.27.160.12:5000/api/m295

Test-Befehl

curl http://localhost:5000/api/m295

Ergebnis

Der Webserver antwortet korrekt mit dem HTTP-Status 200 und liefert die definierten JSON-Daten aus. Die Docker-Umgebung kapselt die Anwendung erfolgreich ab.


Abschlussprüfung

  • API erstellt
  • Personalisierte Fake-Daten integriert
  • Docker-Container läuft auf Raspberry Pi
  • Abruf über Port 5000 möglich

Troubleshooting

Container startet nicht
# Logs anzeigen
docker logs my-api-container

# Container stoppen und entfernen
docker stop my-api-container
docker rm my-api-container
Port bereits belegt
# Prüfen welcher Prozess Port 5000 verwendet
sudo lsof -i :5000

# Alternativen Port verwenden
docker run -d -p 5001:5000 --name my-api-container m295-api
Image Build schlägt fehl
# Cache löschen und neu bauen
docker build --no-cache -t m295-api .