372 lines
8.6 KiB
Markdown
372 lines
8.6 KiB
Markdown
# 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
|
|
- **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
|
|
|
|
1. **Repository klonen:**
|
|
```bash
|
|
git clone https://gitea.medisoftware.org/Markus/medi-wol.git
|
|
cd medi-wol
|
|
```
|
|
|
|
2. **Abhängigkeiten installieren:**
|
|
```bash
|
|
go mod tidy
|
|
```
|
|
|
|
3. **Anwendung starten:**
|
|
```bash
|
|
# 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
|
|
```
|
|
|
|
4. **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
|
|
```bash
|
|
# Port 9090 verwenden
|
|
./medi-wol.exe -port 9090
|
|
|
|
# Hilfe anzeigen
|
|
./medi-wol.exe -help
|
|
```
|
|
|
|
#### 2. Umgebungsvariable
|
|
```bash
|
|
# 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
|
|
1. **Kommandozeilenparameter** (`-port`) - Höchste Priorität
|
|
2. **Umgebungsvariable** (`PORT`) - Mittlere Priorität
|
|
3. **Standard-Port** (8080) - Niedrigste Priorität
|
|
|
|
## Verwendung
|
|
|
|
### PC hinzufügen
|
|
1. Geben Sie den Namen des PCs ein
|
|
2. Geben Sie die MAC-Adresse im Format `XX:XX:XX:XX:XX:XX` ein
|
|
3. Klicken Sie auf "PC hinzufügen"
|
|
|
|
### PC bearbeiten
|
|
1. Klicken Sie auf den "Bearbeiten"-Button neben dem gewünschten PC
|
|
2. Ändern Sie Name und/oder MAC-Adresse
|
|
3. 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
|
|
|
|
### 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)
|
|
```bash
|
|
# 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
|
|
```bash
|
|
# 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)
|
|
```bash
|
|
# 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
|
|
```bash
|
|
# 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`)
|
|
```batch
|
|
@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`)
|
|
```bash
|
|
#!/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 /` - Hauptseite
|
|
- `GET /api/pcs` - Alle PCs abrufen
|
|
- `POST /api/pcs` - Neuen PC erstellen
|
|
- `PUT /api/pcs/:id` - PC aktualisieren
|
|
- `DELETE /api/pcs/:id` - PC löschen
|
|
- `POST /api/pcs/:id/wake` - PC aufwecken
|
|
|
|
## Datenbank
|
|
|
|
Die Anwendung verwendet SQLite als lokale Datenbank. Die Datenbankdatei `medi-wol.db` wird automatisch im Projektverzeichnis erstellt.
|
|
|
|
## Wake-on-LAN
|
|
|
|
Das System sendet Magic Packets an die gespeicherten MAC-Adressen. Stellen Sie sicher, dass:
|
|
|
|
1. Die Zielcomputer Wake-on-LAN unterstützen
|
|
2. Die Netzwerkkarte für Wake-on-LAN konfiguriert ist
|
|
3. Die Computer im gleichen Netzwerksegment sind
|
|
|
|
## Entwicklung
|
|
|
|
### Lokale Entwicklung
|
|
```bash
|
|
# Standard-Port 8080
|
|
go run cmd/server/main.go
|
|
|
|
# Benutzerdefinierter Port
|
|
go run cmd/server/main.go -port 9090
|
|
```
|
|
|
|
### Build für Produktion
|
|
```bash
|
|
# 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
|
|
```bash
|
|
go test ./...
|
|
```
|
|
|
|
### Code-Qualität prüfen
|
|
```bash
|
|
# Code formatieren
|
|
go fmt ./...
|
|
|
|
# Linting (falls golint installiert ist)
|
|
golint ./...
|
|
|
|
# Vet prüfen
|
|
go vet ./...
|
|
```
|
|
|
|
## Deployment
|
|
|
|
### Windows Service
|
|
```bash
|
|
# 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
|
|
```ini
|
|
# /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)
|
|
```dockerfile
|
|
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"]
|
|
```
|
|
|
|
```bash
|
|
# 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.
|