259 lines
4.7 KiB
Markdown
259 lines
4.7 KiB
Markdown
# 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 <repo>
|
|
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
|