# 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 ## 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 go run cmd/server/main.go ``` 4. **Im Browser öffnen:** ``` http://localhost:8080 ``` ## 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... 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 Build complete! pause ``` #### Linux Build-Skript (`build.sh`) ```bash #!/bin/bash echo "Building Medi-WOL for multiple platforms..." 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 "Build complete!" ``` ## 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 go run cmd/server/main.go ``` ### 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 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 Restart=always RestartSec=5 [Install] WantedBy=multi-user.target ``` ## Lizenz Dieses Projekt ist für den internen Gebrauch bestimmt. ## Support Bei Fragen oder Problemen wenden Sie sich an das Entwicklungsteam.