504ca23442c9b4956cf1278bb9aec54628ea0b11
Medi-WOL - Wake-on-LAN Manager
Ein moderner Wake-on-LAN Manager, entwickelt mit Go und einer schönen Web-Oberfläche.
Features
- PC-Verwaltung: Hinzufügen, Anzeigen, Bearbeiten und Löschen von PC-Einträgen
- Wake-on-LAN: Ein-Klick-Aufwecken von Computern über MAC-Adressen
- IP-Adressverwaltung: Pro Gerät wird eine IP-Adresse gespeichert
- Online-Status (Ping): Geräte können per Ping geprüft und im UI als Online/Offline angezeigt werden
- Moderne Web-Oberfläche: Responsive Design mit Bootstrap und FontAwesome
- SQLite-Datenbank: Einfache lokale Datenspeicherung
- Cross-Platform: Läuft auf Windows und Linux
- Konfigurierbarer Port: Über Umgebungsvariablen oder Kommandozeilenparameter
Voraussetzungen
- Go 1.21 oder höher
- Git
Installation
-
Repository klonen:
git clone https://gitea.medisoftware.org/Markus/medi-wol.git cd medi-wol -
Abhängigkeiten installieren:
go mod tidy -
Anwendung starten:
# Standard-Port 8080 go run cmd/server/main.go # Benutzerdefinierter Port go run cmd/server/main.go -port 9090 # Mit Umgebungsvariable set PORT=9090 # Windows export PORT=9090 # Linux go run cmd/server/main.go -
Im Browser öffnen:
http://localhost:8080 # Standard http://localhost:9090 # Benutzerdefiniert
Konfiguration
Port-Konfiguration
Der Server-Port kann auf verschiedene Weise konfiguriert werden:
1. Kommandozeilenparameter
# Port 9090 verwenden
./medi-wol.exe -port 9090
# Hilfe anzeigen
./medi-wol.exe -help
2. Umgebungsvariable
# Windows
set PORT=9090
medi-wol.exe
# Linux/macOS
export PORT=9090
./medi-wol
# Oder direkt
PORT=9090 ./medi-wol
3. Standard-Port
Falls weder Kommandozeilenparameter noch Umgebungsvariable gesetzt sind, wird Port 8080 verwendet.
Prioritätsreihenfolge
- Kommandozeilenparameter (
-port) - Höchste Priorität - Umgebungsvariable (
PORT) - Mittlere Priorität - Standard-Port (8080) - Niedrigste Priorität
Verwendung
PC hinzufügen
- Geben Sie den Namen des PCs ein
- Geben Sie die MAC-Adresse im Format
XX:XX:XX:XX:XX:XXein - Geben Sie die IP-Adresse des PCs ein (z. B.
192.168.0.10) - Klicken Sie auf "PC hinzufügen"
PC bearbeiten
- Klicken Sie auf den "Bearbeiten"-Button neben dem gewünschten PC
- Ändern Sie Name, MAC-Adresse und/oder IP-Adresse
- Klicken Sie auf "Speichern"
PC aufwecken
- Klicken Sie auf den "Aufwecken"-Button neben dem gewünschten PC
- Das System sendet automatisch ein Wake-on-LAN Paket
Online-Status prüfen (Ping)
- Klicken Sie auf den Button "Status aktualisieren" in der Tabelle
- Die Online/Offline-Badges werden pro Gerät aktualisiert
- Optional kann ein automatisches Intervall ergänzt werden (siehe Entwicklung)
PC löschen
- Klicken Sie auf den "Löschen"-Button neben dem gewünschten PC
- Bestätigen Sie die Löschung
Build-Anweisungen
Windows Build
Lokaler Build (Windows)
# Einfacher Build
go build -o medi-wol.exe cmd/server/main.go
# Build mit Optimierungen
go build -ldflags="-s -w" -o medi-wol.exe cmd/server/main.go
# Build für Release
go build -ldflags="-s -w -X main.version=1.0.0" -o medi-wol.exe cmd/server/main.go
Cross-Compilation von Windows für Linux
# Für Linux AMD64
set GOOS=linux
set GOARCH=amd64
go build -o medi-wol-linux-amd64 cmd/server/main.go
# Für Linux ARM64 (Raspberry Pi, etc.)
set GOOS=linux
set GOARCH=arm64
go build -o medi-wol-linux-arm64 cmd/server/main.go
# Zurücksetzen auf Windows
set GOOS=windows
set GOARCH=amd64
Linux Build
Lokaler Build (Linux)
# Einfacher Build
go build -o medi-wol cmd/server/main.go
# Build mit Optimierungen
go build -ldflags="-s -w" -o medi-wol cmd/server/main.go
# Build für Release
go build -ldflags="-s -w -X main.version=1.0.0" -o medi-wol cmd/server/main.go
Cross-Compilation von Linux für Windows
# Für Windows AMD64
GOOS=windows GOARCH=amd64 go build -o medi-wol-windows-amd64.exe cmd/server/main.go
# Für Windows ARM64
GOOS=windows GOARCH=arm64 go build -o medi-wol-windows-arm64.exe cmd/server/main.go
Build-Flags Erklärung
-ldflags="-s -w": Reduziert die Binary-Größe durch Entfernung von Debug-Informationen-X main.version=1.0.0: Setzt eine Version-Variable zur Laufzeit-o filename: Bestimmt den Ausgabedateinamen
Build-Skripte
Windows Build-Skript (build.bat)
@echo off
echo Building Medi-WOL for multiple platforms...
REM Erstelle dist-Verzeichnis
if not exist dist mkdir dist
echo Building for Windows AMD64...
go build -ldflags="-s -w" -o dist/medi-wol-windows-amd64.exe cmd/server/main.go
echo Building for Linux AMD64...
set GOOS=linux
set GOARCH=amd64
go build -ldflags="-s -w" -o dist/medi-wol-linux-amd64 cmd/server/main.go
echo Building for Linux ARM64...
set GOOS=linux
set GOARCH=arm64
go build -ldflags="-s -w" -o dist/medi-wol-linux-arm64 cmd/server/main.go
echo Building for Windows ARM64...
set GOOS=windows
set GOARCH=arm64
go build -ldflags="-s -w" -o dist/medi-wol-windows-arm64.exe cmd/server/main.go
REM Zurücksetzen auf Windows AMD64
set GOOS=windows
set GOARCH=amd64
echo.
echo Build complete! Binaries created in dist/ folder:
dir dist
echo.
pause
Linux Build-Skript (build.sh)
#!/bin/bash
echo "Building Medi-WOL for multiple platforms..."
# Erstelle dist-Verzeichnis
mkdir -p dist
echo "Building for Linux AMD64..."
go build -ldflags="-s -w" -o dist/medi-wol-linux-amd64 cmd/server/main.go
echo "Building for Linux ARM64..."
GOOS=linux GOARCH=arm64 go build -ldflags="-s -w" -o dist/medi-wol-linux-arm64 cmd/server/main.go
echo "Building for Windows AMD64..."
GOOS=windows GOARCH=amd64 go build -ldflags="-s -w" -o dist/medi-wol-windows-amd64.exe cmd/server/main.go
echo "Building for Windows ARM64..."
GOOS=windows GOARCH=arm64 go build -ldflags="-s -w" -o dist/medi-wol-windows-arm64.exe cmd/server/main.go
echo ""
echo "Build complete! Binaries created in dist/ folder:"
ls -la dist/
echo ""
Projektstruktur
medi-wol/
├── cmd/server/ # Hauptanwendung
├── internal/ # Interne Pakete
│ ├── database/ # Datenbanklogik
│ ├── handlers/ # HTTP-Handler
│ ├── models/ # Datenmodelle
│ └── wol/ # Wake-on-LAN Service
├── web/ # Web-Oberfläche
│ ├── static/ # CSS, JavaScript
│ └── templates/ # HTML-Templates
├── go.mod # Go-Module
├── build.bat # Windows Build-Skript
├── build.sh # Linux Build-Skript
└── README.md # Diese Datei
API-Endpunkte
GET /- HauptseiteGET /api/pcs- Alle PCs abrufenPOST /api/pcs- Neuen PC erstellenPUT /api/pcs/:id- PC aktualisierenDELETE /api/pcs/:id- PC löschenPOST /api/pcs/:id/wake- PC aufweckenGET /api/pcs/status- Online-Status aller PCs abrufen (Ping)
Datenbank
Die Anwendung verwendet SQLite als lokale Datenbank. Die Datenbankdatei medi-wol.db wird automatisch im Projektverzeichnis erstellt.
Tabellenstruktur pcs
| Spalte | Typ | Hinweis |
|---|---|---|
| id | INTEGER | Primärschlüssel |
| name | TEXT | Pflichtfeld |
| mac | TEXT | Pflichtfeld, eindeutig |
| ip | TEXT | Pflichtfeld |
| created_at | DATETIME | Automatisch |
| updated_at | DATETIME | Automatisch |
Wake-on-LAN
Das System sendet Magic Packets an die gespeicherten MAC-Adressen. Stellen Sie sicher, dass:
- Die Zielcomputer Wake-on-LAN unterstützen
- Die Netzwerkkarte für Wake-on-LAN konfiguriert ist
- Die Computer im gleichen Netzwerksegment sind
Entwicklung
Lokale Entwicklung
# Standard-Port 8080
go run cmd/server/main.go
# Benutzerdefinierter Port
go run cmd/server/main.go -port 9090
Hinweise zum Ping
- Der Ping wird aktuell über den Button "Status aktualisieren" ausgelöst (
GET /api/pcs/status). - Unter Windows wird der Systembefehl
ping -n 1 -w 1000 <IP>verwendet, unter Linux/macOSping -c 1 -W 1 <IP>. - Falls ICMP blockiert ist, wird als Fallback eine kurze TCP-Portprobe versucht (80, sonst 22).
- Optional kann ein automatisches Intervall im Frontend ergänzt werden (z. B. alle 30s).
Build für Produktion
# Windows
go build -ldflags="-s -w" -o medi-wol.exe cmd/server/main.go
# Linux
go build -ldflags="-s -w" -o medi-wol cmd/server/main.go
Tests ausführen
go test ./...
Code-Qualität prüfen
# Code formatieren
go fmt ./...
# Linting (falls golint installiert ist)
golint ./...
# Vet prüfen
go vet ./...
Deployment
Windows Service
# Mit NSSM (Non-Sucking Service Manager)
nssm install Medi-WOL "C:\path\to\medi-wol.exe"
nssm set Medi-WOL AppDirectory "C:\path\to\medi-wol"
nssm set Medi-WOL AppParameters "-port 9090" # Optional: Port setzen
nssm start Medi-WOL
Linux Systemd Service
# /etc/systemd/system/medi-wol.service
[Unit]
Description=Medi-WOL Wake-on-LAN Manager
After=network.target
[Service]
Type=simple
User=medi-wol
WorkingDirectory=/opt/medi-wol
ExecStart=/opt/medi-wol/medi-wol -port 9090
Environment="PORT=9090"
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.target
Docker (Optional)
FROM golang:1.21-alpine AS builder
WORKDIR /app
COPY . .
RUN go build -ldflags="-s -w" -o medi-wol cmd/server/main.go
FROM alpine:latest
RUN apk --no-cache add ca-certificates
WORKDIR /root/
COPY --from=builder /app/medi-wol .
EXPOSE 8080
CMD ["./medi-wol", "-port", "8080"]
# Docker Container starten
docker run -d -p 9090:9090 -e PORT=9090 medi-wol:latest
Lizenz
Dieses Projekt ist für den internen Gebrauch bestimmt.
Support
Bei Fragen oder Problemen wenden Sie sich an das Entwicklungsteam.
Languages
Go
40.3%
JavaScript
24%
HTML
18.9%
Inno Setup
7.8%
CSS
6.7%
Other
2.3%