RPi Zero V1.1 32Bit: Webserver im Kontainer installieren (Docker, nginx)

z.B. WebServer, Docker, VirtualBox, VMware, Azure, etc.
Antworten
Benutzeravatar
asp
Site Admin
Beiträge: 28
Registriert: 22 Feb 2025, 19:44
Wohnort: Lohn-Ammannsegg
Kontaktdaten:

RPi Zero V1.1 32Bit: Webserver im Kontainer installieren (Docker, nginx)

Beitrag von asp »

Vorbedingungen bei mir:
  • Linux raspberrypi 6.6.74+rpt-rpi-v6
  • Raspbian GNU/Linux 12 (bookworm)
  • Raspberry Pi Zero W Rev 1.1

Installation Docker:
  • sudo sh get-docker.sh //Script ausführen
  • sudo usermod -aG docker $USER //Benutzername hinzufügen mit "groups" testen
  • docker run hello-world //Dockerinstallation testen

Installation Webserver NGINX
  • sudo docker run -d --name nginx -p 8085:80 nginx:latest //Webserver ist via Port 8085 erreichbar
  • sudo docker start nginx //Kontainerprogramm starten
auf den WEB-Server (nginx) von einem entfehrnten Rechner via Browser zugreifen
  • ip-von Host:8085 //gib die IP-Adresse von dem entfehrnten Rechner ein welcher sich im gleichen Netz befindet
Dockerbefehle
  • sudo docker ps //Docker-Status prüfen
  • sudo docker stop nginx //Stoppen
  • sudo docker start nginx //Starten
  • sudo docker restart nginx //Neustart
  • sudo docker logs nginx //Logs anzeigen
  • sudo docker rm nginx //Docker löschen
  • sudo docker run -d --name nginx -p 8085:80 -v /home/pi/nginx_html:/usr/share/nginx/html nginx:latest //Die Dateien im Verzeichnis "/home/pi/nginx_html" werden direkt im Container unter "/usr/share/nginx/html" gespiegelt und können nun mit einem Editor ausserhalb von Docker bearbeitet werden oder ziehe ein bestehendes Projekt direkt in diesen Ordner, einfach eine super Sache PS. wenn du noch einen NGINX-Docker am laufen hast, stopen, löschen und neu integrieren
  • sudo docker exec -it nginx /bin/bash //eine Shell im laufenden NGINX-Container öffnen
  • > cd /usr/share/nginx/html //in Docker in den HTML-Ordner wechseln
  • > ls //und die Daten anzeigen
  • > exit //verlässt den Docker
Leider läuft der Webserver nur im HTML-Modus, damit er auch php verarbeiten kann wird noch folgende Konfiguration benötigt:
  • Im Home-Ordner, bei mir "/home/asp"
einen neuen Ordner anlegen

Code: Alles auswählen

mkdir ~/nginx-php
cd ~/nginx-php
un in diesem Ordner nochmals zwei Ordner anlegen

Code: Alles auswählen

mkdir html
mkdir conf
jetzt des gesamte alte Webdirectory unter "DietPiwebtest" in das neue PHP-Dir kopieren

Code: Alles auswählen

cp -r /home/asp/DietPi21webtest/* html/
PS. alles ohne Adminrechte, da alle Daten in meinem Home-Ordner liegen.
Konfiguration erstellen

Code: Alles auswählen

nano ~/nginx-php-server/conf/default.conf
und folgenden Code einfügen

Code: Alles auswählen

server {
    listen 80;
    server_name localhost;

    root /var/www/html;
    index index.php index.html;
    
    charset utf-8;
    add_header Content-Type "text/html; charset=utf-8" always;

    location / {
        try_files $uri $uri/ =404;
    }

    location ~ \.php$ {
        include fastcgi_params;
        fastcgi_pass php:9000;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME /var/www/html$fastcgi_script_name;
    }

    location ~ /\.ht {
        deny all;
    }
}
Jetzt erstellen wir ein "docker-compose.yml"
Was ist Docker Compose?
Docker Compose ist ein Werkzeug von Docker, das verwendet wird, um Multi-Container-Anwendungen zu definieren und zu verwalten. Anstatt jeder Container einzeln zu konfigurieren, kann man mit Docker Compose eine Anwendung mit mehreren Containern in einer einzigen Konfigurationsdatei, der docker-compose.yml, definieren. Diese Datei ermöglicht es, die Anwendung mit einem einzigen Befehl zu starten, zu stoppen oder zu löschen.
Was wird in der docker-compose.yml definiert?
In der docker-compose.yml werden folgende Informationen definiert:
Dienste: Die einzelnen Container der Anwendung, einschließlich ihrer Image, Ports, Volumes, Umgebungsvariablen und Abhängigkeiten.
Netzwerke: Die Netzwerke, die die Container verwenden, um miteinander zu kommunizieren.
Volumes: Persistente Speicher, die von den Containern verwendet werden.
Projekte: Die Gesamtanwendung, die aus mehreren Diensten besteht.

Code: Alles auswählen

nano ~/nginx-php-server/docker-compose.yml

Code: Alles auswählen

version: '3.8'

services:
  nginx:
    image: nginx:latest
    container_name: nginx
    ports:
      - "8085:80"
    volumes:
      - ./html:/var/www/html
      - ./conf/default.conf:/etc/nginx/conf.d/default.conf
    depends_on:
      - php
    networks:
      - webnet

  php:
    image: php:8.2-fpm
    container_name: php
    volumes:
      - ./html:/var/www/html
    networks:
      - webnet

networks:
  webnet:

PHP-Test-Datei in das HTML-Dir erstellen

Code: Alles auswählen

echo "<?php phpinfo(); ?>" > html/info.php
und den Docker starten

Code: Alles auswählen

docker compose up -d
und schon läuft der Testwebserver unter http://localhost:8085/info.php

PS. den alten Webserver ohne PHP kann man noch löschen.

Code: Alles auswählen

docker stop nginx
docker rm nginx
Nützliche Befehle

Code: Alles auswählen

docker compose version
//falls das Plugin nicht installiert ist

Code: Alles auswählen

sudo apt install docker-compose-plugin
Antworten