diff --git a/README.md b/README.md index f811efd..c136977 100644 --- a/README.md +++ b/README.md @@ -9,6 +9,7 @@ Ein moderner Wake-on-LAN Manager, entwickelt mit Go und einer schönen Web-Oberf - **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 @@ -30,14 +31,61 @@ Ein moderner Wake-on-LAN Manager, entwickelt mit Go und einer schönen Web-Oberf 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 + 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 @@ -127,6 +175,9 @@ GOOS=windows GOARCH=arm64 go build -o medi-wol-windows-arm64.exe cmd/server/main @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 @@ -140,15 +191,31 @@ set GOOS=linux set GOARCH=arm64 go build -ldflags="-s -w" -o dist/medi-wol-linux-arm64 cmd/server/main.go -echo Build complete! +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 @@ -158,7 +225,13 @@ GOOS=linux GOARCH=arm64 go build -ldflags="-s -w" -o dist/medi-wol-linux-arm64 c 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!" +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 @@ -205,7 +278,11 @@ Das System sendet Magic Packets an die gespeicherten MAC-Adressen. Stellen Sie s ### 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 @@ -241,6 +318,7 @@ go vet ./... # 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 ``` @@ -255,7 +333,8 @@ After=network.target Type=simple User=medi-wol WorkingDirectory=/opt/medi-wol -ExecStart=/opt/medi-wol/medi-wol +ExecStart=/opt/medi-wol/medi-wol -port 9090 +Environment="PORT=9090" Restart=always RestartSec=5 @@ -263,6 +342,26 @@ RestartSec=5 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. diff --git a/cmd/server/main.go b/cmd/server/main.go index 16f7ea8..a550b0f 100644 --- a/cmd/server/main.go +++ b/cmd/server/main.go @@ -1,15 +1,43 @@ package main import ( + "flag" + "fmt" "log" "medi-wol/internal/database" "medi-wol/internal/handlers" "medi-wol/internal/wol" + "os" + "strconv" "github.com/gin-gonic/gin" ) func main() { + // Kommandozeilenparameter definieren + var port int + flag.IntVar(&port, "port", 0, "Port für den Server (Standard: 8080 oder PORT Umgebungsvariable)") + flag.Parse() + + // Port aus Umgebungsvariable oder Standardwert + if port == 0 { + if envPort := os.Getenv("PORT"); envPort != "" { + if parsedPort, err := strconv.Atoi(envPort); err == nil { + port = parsedPort + } else { + log.Printf("Warnung: Ungültige PORT Umgebungsvariable '%s', verwende Standard-Port 8080", envPort) + port = 8080 + } + } else { + port = 8080 + } + } + + // Port-Validierung + if port < 1 || port > 65535 { + log.Fatal("Fehler: Port muss zwischen 1 und 65535 liegen") + } + // Datenbank initialisieren db, err := database.InitDB() if err != nil { @@ -39,8 +67,11 @@ func main() { r.POST("/api/pcs/:id/wake", pcHandler.WakePC) // Server starten - log.Println("Server startet auf Port 8080...") - if err := r.Run(":8080"); err != nil { + serverAddr := fmt.Sprintf(":%d", port) + log.Printf("Server startet auf Port %d...", port) + log.Printf("Web-Oberfläche verfügbar unter: http://localhost%s", serverAddr) + + if err := r.Run(serverAddr); err != nil { log.Fatal("Fehler beim Starten des Servers:", err) } }