Neue Seite
Inventar App Installation - Debian 12 Server
Phase 1: System vorbereiten
sudo apt update && sudo apt upgrade -y
sudo apt install nginx mariadb-server python3 python3-pip python3-venv certbot python3-certbot-nginx -y
sudo mysql_secure_installation
Phase 2: Datenbank einrichten
MySQL als root-Benutzer anmelden und Datenbank erstellen:
sudo mysql -u root -p
Datenbank, Benutzer und alle Tabellen erstellen:
(Ersetzen Sie 'IhrStarkesDbPasswort' durch ein sicheres Passwort, das Sie sich notieren).
CREATE DATABASE inventar;
CREATE USER 'inventar_user'@'localhost' IDENTIFIED BY 'IhrStarkesDbPasswort';
GRANT ALL PRIVILEGES ON inventar.* TO 'inventar_user'@'localhost';
FLUSH PRIVILEGES;
USE inventar;
CREATE TABLE items ( id INT AUTO_INCREMENT PRIMARY KEY, item_uid VARCHAR(50) NOT NULL UNIQUE, name VARCHAR(255) NOT NULL, location VARCHAR(255), quantity INT NOT NULL DEFAULT 0, notes TEXT, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, brand VARCHAR(255), size VARCHAR(255), `condition` VARCHAR(100), color VARCHAR(100), price DECIMAL(10, 2), shipping_size VARCHAR(100), image_file VARCHAR(255) );
CREATE TABLE users ( id INT AUTO_INCREMENT PRIMARY KEY, username VARCHAR(100) NOT NULL UNIQUE, password_hash VARCHAR(255) NOT NULL, role VARCHAR(50) NOT NULL DEFAULT 'user' );
CREATE TABLE categories ( id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(255) NOT NULL UNIQUE, prefix VARCHAR(3) NOT NULL UNIQUE, parent_id INT NULL, FOREIGN KEY (parent_id) REFERENCES categories(id) ON DELETE CASCADE );
CREATE TABLE item_categories ( item_id INT NOT NULL, category_id INT NOT NULL, PRIMARY KEY (item_id, category_id), FOREIGN KEY (item_id) REFERENCES items(id) ON DELETE CASCADE, FOREIGN KEY (category_id) REFERENCES categories(id) ON DELETE CASCADE );
CREATE TABLE logs ( id INT AUTO_INCREMENT PRIMARY KEY, timestamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP, user_id INT NOT NULL, item_id INT NOT NULL, action VARCHAR(255) NOT NULL, details TEXT, FOREIGN KEY (user_id) REFERENCES users(id), FOREIGN KEY (item_id) REFERENCES items(id) ON DELETE CASCADE );
EXIT;
Phase 3: Projektverzeichnis und Flask-App erstellen
Vollständige Ordnerstruktur erstellen:
mkdir -p ~/inventar-app/templates
mkdir -p ~/inventar-app/static/css
mkdir -p ~/inventar-app/static/js
mkdir -p ~/inventar-app/static/uploads
cd ~/inventar-app
# Python-Umgebung erstellen
python3 -m venv venv
source venv/bin/activate
pip install Flask PyMySQL flask-login flask-bcrypt qrcode Pillow
Phase 4: Externe Bibliotheken herunterladen
# Bootstrap CSS und JS
wget https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css -P static/css/
wget https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/js/bootstrap.bundle.min.js -P static/js/
# QR-Code Scanner
wget https://unpkg.com/html5-qrcode@2.3.8/html5-qrcode.min.js -P static/js/
Phase 5: Anwendungsdateien erstellen
5.1 Hauptanwendung (app.py)
Erstellen Sie nano app.py
und fügen Sie den vollständigen Flask-Code ein (im Download).
Wichtig: Passen Sie das Datenbank-Passwort in der DB_CONFIG an Ihr gewähltes Passwort an.
5.2 HTML-Vorlagen erstellen
Erstellen Sie alle HTML-Dateien im templates/
Ordner:
base.html
- Basis-Templateindex.html
- Hauptseitelogin.html
- Login-Seiteadd_item.html
- Artikel hinzufügenedit_item.html
- Artikel bearbeitenitem_detail.html
- Artikel-Detailsitem_history.html
- Artikel-Historiemanage_categories.html
- Kategorien verwaltenmanage_users.html
- Benutzer verwaltenprint_datasheet.html
- Datenblatt druckenprint_flyer.html
- Flyer druckenprint_label.html
- Label druckensell_form.html
- Verkaufsformular
5.3 Zusätzliche statische Dateien
Erstellen Sie im static/
Ordner:
static/css/styles.css
- Eigene CSS-Stylesstatic/js/index.js
- JavaScript für Hauptfunktionenstatic/js/theme.js
- Theme-Verwaltung
Füllen Sie alle Dateien mit den Inhalt der Dateien des Downloads!
5.4 Admin-Benutzer erstellen
Erstellen Sie nano create_user.py
:
import pymysql
from flask_bcrypt import Bcrypt
# --- Datenbank Konfiguration (aus Ihrer app.py kopiert) ---
DB_CONFIG = {
'host': 'localhost',
'user': 'inventar_user',
'password': 'IhrStarkesDbPasswort', # HIER IHR DB-PASSWORT EINTRAGEN
'db': 'inventar',
'cursorclass': pymysql.cursors.DictCursor
}
bcrypt = Bcrypt()
# --- HIER IHRE GEWÜNSCHTEN LOGIN-DATEN EINTRAGEN ---
username = 'admin'
password = 'IhrAdminPasswort' # Ändern Sie das Passwort!
# Passwort verschlüsseln
password_hash = bcrypt.generate_password_hash(password).decode('utf-8')
# Mit der Datenbank verbinden und Benutzer speichern
try:
conn = pymysql.connect(**DB_CONFIG)
with conn.cursor() as cursor:
cursor.execute("INSERT INTO users (username, password_hash, role) VALUES (%s, %s, %s)",
(username, password_hash, 'admin'))
conn.commit()
conn.close()
print(f"Benutzer '{username}' wurde erfolgreich erstellt!")
except Exception as e:
print(f"Ein Fehler ist aufgetreten: {e}")
Admin-Benutzer erstellen und Script löschen:
create_user.py ausführen und löschen
# Virtuelle Umgebung aktivieren
source venv/bin/activate
# Script ausführen
python create_user.py
# Script aus Sicherheitsgründen löschen
rm create_user.py
Erstelleten Admin user in der Datenbank Rechte zuweisen
Phase 6: Nginx-Konfiguration (temporär ohne SSL)
Erstellen Sie eine temporäre Nginx-Konfiguration für Let's Encrypt:
sudo nano /etc/nginx/sites-available/inventar
server {
listen 80;
server_name xmpp.handwerker.jetzt;
# Let's Encrypt Challenge Location
location /.well-known/acme-challenge/ {
root /var/www/html;
}
# Temporär für Flask-App (wird später entfernt)
location / {
proxy_pass http://127.0.0.1:5000;
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;
}
}
Upload-Limit erhöhen in /etc/nginx/nginx.conf
:
http {
...
client_max_body_size 20M;
...
}
Site aktivieren:
sudo ln -s /etc/nginx/sites-available/inventar /etc/nginx/sites-enabled/
sudo rm /etc/nginx/sites-enabled/default
sudo nginx -t
sudo systemctl restart nginx
Phase 7: Let's Encrypt SSL-Zertifikat erstellen
# Certbot ausführen für automatische SSL-Konfiguration
sudo certbot --nginx -d xmpp.handwerker.jetzt
# Automatische Erneuerung einrichten
sudo systemctl enable certbot.timer
sudo systemctl start certbot.timer
# Test der automatischen Erneuerung
sudo certbot renew --dry-run
Nach erfolgreichem Certbot-Lauf wird Ihre Nginx-Konfiguration automatisch auf folgende Struktur aktualisiert:
server {
listen 80;
server_name xmpp.handwerker.jetzt;
return 301 https://$server_name$request_uri; # Automatische HTTP zu HTTPS Umleitung
}
server {
listen 443 ssl;
server_name xmpp.handwerker.jetzt;
# Let's Encrypt SSL-Konfiguration (automatisch hinzugefügt)
ssl_certificate /etc/letsencrypt/live/xmpp.handwerker.jetzt/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/xmpp.handwerker.jetzt/privkey.pem;
include /etc/letsencrypt/options-ssl-nginx.conf;
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
location / {
proxy_pass http://127.0.0.1:5000;
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;
}
}
Phase 8: Systemd Service einrichten
sudo nano /etc/systemd/system/inventar-app.service
[Unit]
Description=Inventar Flask App
After=network.target
[Service]
User=IhrBenutzername
Group=www-data
WorkingDirectory=/home/IhrBenutzername/inventar-app
ExecStart=/home/IhrBenutzername/inventar-app/venv/bin/python app.py
Restart=always
[Install]
WantedBy=multi-user.target
Service aktivieren:
sudo systemctl daemon-reload
sudo systemctl enable inventar-app.service
sudo systemctl start inventar-app.service
Phase 9: Finale Schritte
# Service-Status überprüfen
sudo systemctl status inventar-app.service
sudo systemctl status nginx
# Nginx-Konfiguration testen
sudo nginx -t
sudo systemctl reload nginx
Wichtige Hinweise:
- Domain: Stellen Sie sicher, dass IhreDomian.xyz auf die IP-Adresse Ihres Servers zeigt
- Firewall: Öffnen Sie die Ports 80 und 443
- Zertifikat-Erneuerung: Let's Encrypt-Zertifikate werden automatisch alle 60 Tage erneuert
- Backup: Sichern Sie regelmäßig Ihre Datenbank und Upload-Dateien
Troubleshooting:
# Logs anzeigen
sudo journalctl -u inventar-app.service -f
sudo tail -f /var/log/nginx/error.log
# SSL-Status prüfen
sudo certbot certificates