# ResMan Ressourcen- und Infrastruktur-Management Tool für Server, Domains und IPs. --- ## 🚀 Features - 🖥️ Ressourcenverwaltung (Server, VPS, etc.) - 🌐 Domain Management inkl. DNS Check - 🔗 Subdomain Verwaltung - 🌍 IP Management (CRUD + Validation) - 💰 Kosten Dashboard (monatlich / jährlich) - 🗺️ Infrastruktur Übersicht - 🟢 Server Status Check (Ping) - 🌙 Dark Mode --- ## 🧱 Tech Stack - Backend: Node.js + Express - Datenbank: MariaDB / MySQL - Frontend: Vanilla JavaScript (modular) - Deployment: Docker + NGINX Reverse Proxy --- ## 📁 Projektstruktur backend/ routes/ controllers/ public/ index.html css/ js/ api.js main.js resources.js domains.js modals.js costs.js infra.js --- ## ⚙️ Setup ### 1. Installation ```bash git clone cd resman docker compose up -d --build ``` ### 2. Migrationen Beim Start des Backends werden ausstehende Migrationen automatisch ausgefuehrt. Manuell kannst du sie im Container jederzeit starten: ```bash docker compose exec backend npm run migrate ``` ### 3. Backend neu bauen / neu starten ```bash docker compose up -d --build backend ``` ### 4. Erreichbarkeit - Frontend/API intern: `http://127.0.0.1:3000/resman/` - Fuer produktive Nutzung ist ein Reverse Proxy davor vorgesehen ### 5. Datenbank Backup ```bash ./scripts/backup-db.sh ``` Backups werden unter `backups/` als gzip-komprimierter SQL-Dump abgelegt. Standardmaessig werden Backups nach 30 Tagen geloescht. Optionale Variablen: ```bash BACKUP_DIR=/pfad/zum/backup KEEP_DAYS=90 ./scripts/backup-db.sh ``` ### 6. Datenbank Restore ```bash ./scripts/restore-db.sh backups/resource_manager-YYYYMMDD-HHMMSS.sql.gz ``` Vor dem Restore wird automatisch ein neues Sicherheitsbackup erstellt. Der Restore muss durch Eingabe des Datenbanknamens bestaetigt werden. Ohne Rueckfrage, z. B. fuer Automatisierung: ```bash FORCE=1 ./scripts/restore-db.sh backups/resource_manager-YYYYMMDD-HHMMSS.sql.gz ``` Sicherheitsbackup vor dem Restore ueberspringen: ```bash SKIP_PRE_RESTORE_BACKUP=1 ./scripts/restore-db.sh backups/resource_manager-YYYYMMDD-HHMMSS.sql.gz ``` 🗄️ Datenbank Schema resources CREATE TABLE resources ( id INT AUTO_INCREMENT PRIMARY KEY, position INT, name VARCHAR(255), produkt VARCHAR(255), provider VARCHAR(255), art VARCHAR(100), cpu VARCHAR(50), ram VARCHAR(50), disk VARCHAR(50), os VARCHAR(100), ipv6_net VARCHAR(255), providername VARCHAR(255), kosten_monat DECIMAL(10,2), kosten_jahr DECIMAL(10,2), laufzeit_monate INT, bestelldatum DATE, kuendbar_ab DATE, kuendigungsdatum DATE, status VARCHAR(50), bemerkung TEXT ); resource_ips CREATE TABLE resource_ips ( id INT AUTO_INCREMENT PRIMARY KEY, resource_id INT, ip VARCHAR(100), type VARCHAR(50), comment VARCHAR(255) ); domains CREATE TABLE domains ( id INT AUTO_INCREMENT PRIMARY KEY, position INT, domain_name VARCHAR(255), provider VARCHAR(255), ip_address VARCHAR(100), yearly_cost DECIMAL(10,2), notes TEXT, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); subdomains CREATE TABLE subdomains ( id INT AUTO_INCREMENT PRIMARY KEY, domain_id INT, subdomain VARCHAR(100), ip_address VARCHAR(100) ); 🔌 API Endpoints (Auszug) Ressourcen GET /resman/api/resources/active GET /resman/api/resources/cancelled POST /resman/api/resources PUT /resman/api/resources/:id DELETE /resman/api/resources/:id IPs GET /resman/api/resources/:id/ips POST /resman/api/resources/:id/ips PUT /resman/api/ips/:id DELETE /resman/api/ips/:id Domains GET /resman/api/domains POST /resman/api/domains PUT /resman/api/domains/:id DELETE /resman/api/domains/:id Subdomains GET /resman/api/subdomains POST /resman/api/subdomains PUT /resman/api/subdomains/:id DELETE /resman/api/subdomains/:id Sonstiges GET /resman/api/domainmap GET /resman/api/dns/:domain GET /resman/api/ping/:ip GET /resman/api/ipcheck/:ip 🌐 Reverse Proxy NGINX location /resman/ { proxy_pass http://127.0.0.1:3000/resman/; } Apache ProxyPass /resman http://127.0.0.1:3000/resman ProxyPassReverse /resman http://127.0.0.1:3000/resman 🔒 Sicherheit (optional) Basic Auth via NGINX empfohlen Alternativ: nur im internen Netzwerk betreiben API aktuell ohne Auth → nicht öffentlich exponieren 🧠 Architektur Frontend ist modular aufgebaut: api.js → zentrale API Kommunikation resources.js → Ressourcen + IPs domains.js → Domains + Subdomains modals.js → alle Dialoge costs.js → Kostenberechnung infra.js → Infrastruktur Ansicht main.js → Initialisierung + Refresh ⚠️ Bekannte Themen DNS Requests können ohne Cache langsam sein Keine Authentifizierung im Backend Kein Rollen-/Rechtesystem