Mache Port konfigurierbar über Umgebungsvariablen und Kommandozeilenparameter

This commit is contained in:
2025-08-21 13:44:28 +02:00
parent 9540a800b0
commit 47f8903fa2
2 changed files with 136 additions and 6 deletions

107
README.md
View File

@ -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.

View File

@ -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)
}
}