Storage Boxx PHP Wawi

Installation
Beschreibung: 

 Storageboxx installation in einen Docker container 

 Vorrausetzung: 

 apt install docker.io docker-compose curl net-tools git 

 Installation 

 Projektverzeichnis erstellen 

 mkdir -p /root/storageboxx/html

mkdir -p /root/storageboxx/db_data 

 Dockerfile erstellen, denn wir brauchen folgende Module drinnen 

 

 Apache Mod Rewrite 

 PHP MYSQL PDO Extension 

 PHP OPENSSL Extension 

 

 nano /root/storageboxx/Dockerfile 

 Inhalt 

 # Ausgangsbild

FROM php:8.1-apache

# Aktivieren von Apache mod_rewrite

RUN a2enmod rewrite

# Installieren der PHP-Erweiterungen

RUN docker-php-ext-install pdo pdo_mysql

# Optional: Konfiguration anpassen, um .htaccess zu erlauben

RUN sed -i 's/AllowOverride None/AllowOverride All/' /etc/apache2/apache2.conf

# Setze Dateiberechtigungen (optional)

RUN chown -R www-data:www-data /var/www/html \

 && chmod -R 755 /var/www/html

# Exponiere den Standard-HTTP-Port

EXPOSE 80

# Apache neu starten (optional, falls benötigt)

CMD ["apache2-foreground"]

 

 docker compose Datei erstellen 

 nano /root/storageboxx/docker-compose.yml 

 Inhalt Die Passwörter abändern 

 version: '3.8'

services:

 web:

 build:

 context: .

 dockerfile: Dockerfile

 container_name: storageboxx_web

 ports:

 - "80:80"

 volumes:

 - ./html:/var/www/html

 environment:

 - APACHE_DOCUMENT_ROOT=/var/www/html

 depends_on:

 - db

 db:

 image: mariadb:latest

 container_name: storageboxx_db

 restart: always

 environment:

 MYSQL_DATABASE: storageboxx

 MYSQL_USER: user

 MYSQL_PASSWORD: password

 MYSQL_ROOT_PASSWORD: rootpassword

 volumes:

 - ./db_data:/var/lib/mysql

 

 Nun das HTML Verzeichnis mit leben füllen, dazu clonen wir das git repo von storageboxx 

 cd /root/storageboxx/html

git clone https://github.com/code-boxx/Storage-Boxx-PHP-Inventory-Management-System.git 

 Nun in das Verzichnis gehen und alle Dateien eine ebene runter verschieben und dann das leere Verzeichnis löschen 

 cd Storage-Boxx-PHP-Inventory-Management-System

mv * ../

rm -r Storage-Boxx-PHP-Inventory-Management-System 

 Nun Berechtigung fürs Verzeichnis setzten: 

 chown -R www-data:www-data /root/storageboxx/html/

 

 Dockerimage bauen 

 docker-compose build 

 Nun den Container starten 

 docker-compose up -d 

 Nun kann im Webbrowser die url zum installieren aufgerufen werden 

 http://<ip> 

 Nun die Daten eingeben und weiter 

 

 Es gibt einen Error 500 Fehler. 

 Die Seite einfach neu laden. Dann kommt folgende Meldung, einfach auf click here klciken 

 

 Nun haben wir die Anmelde Maske 

 

 Werkseinstellungen: 

 die html Dateien löschen und neuladen und die Datenbank löschen 

 

rm -r /root/stoarageboxx/db_data/*

cd /root/storageboxx/html

rm -r *

git clone https://github.com/code-boxx/Storage-Boxx-PHP-Inventory-Management-System.git

cd Storage-Boxx-PHP-Inventory-Management-System

mv * ../

cd ..

rm -r Storage-Boxx-PHP-Inventory-Management-System

chown -R www-data:www-data /root/storageboxx/html/

HTTPS hinzufügen
Beschreibung: 

 Damit Push und Kamera funktioniert muss HTTPS benutzt werden. 

 Implementierung: 

 alles stoppen 

 docker-compose down 

 docker file anpassen 

 In der docker-compose Datei nginx Container hinzufügen : 

 nano /root/storageboxx/docker-compose.yml 

 Unsere neue Docker file 

 version: '3.8'

services:

 web:

 build:

 context: .

 dockerfile: Dockerfile

 container_name: storageboxx_web

 #ports:

 # - "80:80"

 volumes:

 - ./html:/var/www/html

 - ./caddy_data:/data # Caddy benötigt diesen Ordner für seine Konfiguration

 - ./caddy_config:/config # Caddy benötigt diesen Ordner für seine Konfiguration

 environment:

 - APACHE_DOCUMENT_ROOT=/var/www/html

 depends_on:

 - db

 restart: unless-stopped

 db:

 image: mariadb:latest

 container_name: storageboxx_db

 restart: always

 environment:

 MYSQL_DATABASE: storageboxx

 MYSQL_USER: user

 MYSQL_PASSWORD: password

 MYSQL_ROOT_PASSWORD: rootpassword

 volumes:

 - ./db_data:/var/lib/mysql

 nginx:

 image: nginx:stable

 container_name: nginx-proxy

 volumes:

 - ./nginx-proxy.conf:/etc/nginx/nginx.conf:ro

 - ./certs/selfsigned.crt:/etc/ssl/certs/selfsigned.crt:ro

 - ./certs/private.key:/etc/ssl/private/private.key:ro

 ports:

 - "80:80"

 - "443:443"

 depends_on:

 - web

 restart: unless-stopped 

 Nun das cert Verzeichnis erstellen 

 mkdir -p /root/storageboxx/certs 

 Nun die ngninx conf erstellen 

 nano /root/storageboxx/nginx-proxy.conf 

 Inhalt 

 events {

 worker_connections 1024;

}

http {

 server {

 listen 80;

 return 301 https://$host$request_uri;

 }

 server {

 listen 443 ssl;

 ssl_certificate /etc/ssl/certs/selfsigned.crt;

 ssl_certificate_key /etc/ssl/private/private.key;

 location / {

 proxy_pass http://web:80;

 proxy_set_header Host $host;

 proxy_set_header X-Real-IP $remote_addr;

 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

 proxy_set_header X-Forwarded-Proto $scheme;

 client_max_body_size 100M;

 }

 }

} 

 Nun das Zertifikat erstellen 

 openssl req -newkey rsa:4096 -x509 -sha256 -days 365000 -nodes -out /root/storageboxx/certs/selfsigned.crt -keyout /root/storageboxx/certs/private.key 

 Die Fragen benatworten. 

 Nun in der config von Storageboxx https ändern 

 nano /root/storageboxx/html/lib/CORE-Config.php 

 

 alt 

 <?php

// (A) HOST

define("SITE_NAME", "Storage Boxx");

define("HOST_BASE", "http://192.168.178.187/"); // CHANGED BY INSTALLER #um diese zeile geht es !!!!!!!

define("HOST_NAME", parse_url(HOST_BASE, PHP_URL_HOST));

define("HOST_BASE_PATH", parse_url(HOST_BASE, PHP_URL_PATH));

define("HOST_ASSETS", HOST_BASE . "assets/");

// (B) API ENDPOINT

define("HOST_API", "api/");

 

 Neu 

 <?php

// (A) HOST

define("SITE_NAME", "Storage Boxx");

define("HOST_BASE", "https://192.168.178.187/"); // CHANGED BY INSTALLER

define("HOST_NAME", parse_url(HOST_BASE, PHP_URL_HOST));

define("HOST_BASE_PATH", parse_url(HOST_BASE, PHP_URL_PATH));

define("HOST_ASSETS", HOST_BASE . "assets/");

// (B) API ENDPOINT

define("HOST_API", "api/");

.... 

 Den container starten 

 docker-compose up -d 

 Nun die Seite laden Zertifikat akzeptieren und einloggen. Wenn dieser Fehler kommt. 

 Benachrichtigungen zulassen im Browser 

 

 

 Push funktioniert 

 

 Fertig.

Beschreibung in der Suche hinzufügen
Beschreibung: 

 Wenn man einen QR-Code oder NFC scannt möchte man nicht nur wissen, wie viel man hat sondern auch wo. Hier wird folgende HTMl Datei angepasst. Da wir unser HTMl ja in Docker weiterleiten ist das sehr leicht zu bearbeiten. 

 Datei anpassen: 

 Vorher Sicherung anlegen: 

 cp /root/storageboxx/html/pages/PAGE-check-main.php /root/storageboxx/html/pages/PAGE-check-main.php.bak 

 Editieren 

 nano /root/storageboxx/html/pages/PAGE-check-main.php 

 Inhalt 

 Vorher 

 <?php

// (A) GET ITEM

$item = $_CORE->autoCall("Items", "get"); ?>

<!-- (B) NAVIGATION -->

<nav class="d-flex align-items-center">

 <div class="flex-grow-1">

 <div class="display-6">

 [<?=$item["item_sku"]?>] <?=$item["item_name"] ?>

 </div>

 <div class="fw-bold">STOCK : <?=$item["item_qty"]?> <?=$item["item_unit"]?></div>

 </div>

 <button type="button" class="btn btn-danger p-3 mx-1 ico-sm icon-undo2" onclick="cb.page(1)"></button>

</nav>

<!-- (C) ITEM MOVEMENT HISTORY -->

<div id="check-list" class="zebra my-4"></div> 

 Wir ändern diesen Abschnitt und fügen Diesen Tag hinzu ans ende 

 desc: <?=$item["item_desc"]?> 

 Dann sieht die Zeile nun so aus 

 </div>

 <div class="fw-bold">STOCK : <?=$item["item_qty"]?> <?=$item["item_unit"]?> desc: <?=$item["item_desc"]?></div>

 </div> 

 Nun noch mal die Ganze geänderte Datei 

 <?php

// (A) GET ITEM

$item = $_CORE->autoCall("Items", "get"); ?>

<!-- (B) NAVIGATION -->

<nav class="d-flex align-items-center">

 <div class="flex-grow-1">

 <div class="display-6">

 [<?=$item["item_sku"]?>] <?=$item["item_name"] ?>

 </div>

 <div class="fw-bold">STOCK : <?=$item["item_qty"]?> <?=$item["item_unit"]?> desc: <?=$item["item_desc"]?></div>

 </div>

 <button type="button" class="btn btn-danger p-3 mx-1 ico-sm icon-undo2" onclick="cb.page(1)"></button>

</nav>

<!-- (C) ITEM MOVEMENT HISTORY -->

<div id="check-list" class="zebra my-4"></div>