Mache Port konfigurierbar über Umgebungsvariablen und Kommandozeilenparameter
This commit is contained in:
107
README.md
107
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
|
- **Moderne Web-Oberfläche**: Responsive Design mit Bootstrap und FontAwesome
|
||||||
- **SQLite-Datenbank**: Einfache lokale Datenspeicherung
|
- **SQLite-Datenbank**: Einfache lokale Datenspeicherung
|
||||||
- **Cross-Platform**: Läuft auf Windows und Linux
|
- **Cross-Platform**: Läuft auf Windows und Linux
|
||||||
|
- **Konfigurierbarer Port**: Über Umgebungsvariablen oder Kommandozeilenparameter
|
||||||
|
|
||||||
## Voraussetzungen
|
## Voraussetzungen
|
||||||
|
|
||||||
@ -30,14 +31,61 @@ Ein moderner Wake-on-LAN Manager, entwickelt mit Go und einer schönen Web-Oberf
|
|||||||
|
|
||||||
3. **Anwendung starten:**
|
3. **Anwendung starten:**
|
||||||
```bash
|
```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
|
go run cmd/server/main.go
|
||||||
```
|
```
|
||||||
|
|
||||||
4. **Im Browser öffnen:**
|
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
|
## Verwendung
|
||||||
|
|
||||||
### PC hinzufügen
|
### 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 off
|
||||||
echo Building Medi-WOL for multiple platforms...
|
echo Building Medi-WOL for multiple platforms...
|
||||||
|
|
||||||
|
REM Erstelle dist-Verzeichnis
|
||||||
|
if not exist dist mkdir dist
|
||||||
|
|
||||||
echo Building for Windows AMD64...
|
echo Building for Windows AMD64...
|
||||||
go build -ldflags="-s -w" -o dist/medi-wol-windows-amd64.exe cmd/server/main.go
|
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
|
set GOARCH=arm64
|
||||||
go build -ldflags="-s -w" -o dist/medi-wol-linux-arm64 cmd/server/main.go
|
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
|
pause
|
||||||
```
|
```
|
||||||
|
|
||||||
#### Linux Build-Skript (`build.sh`)
|
#### Linux Build-Skript (`build.sh`)
|
||||||
```bash
|
```bash
|
||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
echo "Building Medi-WOL for multiple platforms..."
|
echo "Building Medi-WOL for multiple platforms..."
|
||||||
|
|
||||||
|
# Erstelle dist-Verzeichnis
|
||||||
|
mkdir -p dist
|
||||||
|
|
||||||
echo "Building for Linux AMD64..."
|
echo "Building for Linux AMD64..."
|
||||||
go build -ldflags="-s -w" -o dist/medi-wol-linux-amd64 cmd/server/main.go
|
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..."
|
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
|
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
|
## Projektstruktur
|
||||||
@ -205,7 +278,11 @@ Das System sendet Magic Packets an die gespeicherten MAC-Adressen. Stellen Sie s
|
|||||||
|
|
||||||
### Lokale Entwicklung
|
### Lokale Entwicklung
|
||||||
```bash
|
```bash
|
||||||
|
# Standard-Port 8080
|
||||||
go run cmd/server/main.go
|
go run cmd/server/main.go
|
||||||
|
|
||||||
|
# Benutzerdefinierter Port
|
||||||
|
go run cmd/server/main.go -port 9090
|
||||||
```
|
```
|
||||||
|
|
||||||
### Build für Produktion
|
### Build für Produktion
|
||||||
@ -241,6 +318,7 @@ go vet ./...
|
|||||||
# Mit NSSM (Non-Sucking Service Manager)
|
# Mit NSSM (Non-Sucking Service Manager)
|
||||||
nssm install Medi-WOL "C:\path\to\medi-wol.exe"
|
nssm install Medi-WOL "C:\path\to\medi-wol.exe"
|
||||||
nssm set Medi-WOL AppDirectory "C:\path\to\medi-wol"
|
nssm set Medi-WOL AppDirectory "C:\path\to\medi-wol"
|
||||||
|
nssm set Medi-WOL AppParameters "-port 9090" # Optional: Port setzen
|
||||||
nssm start Medi-WOL
|
nssm start Medi-WOL
|
||||||
```
|
```
|
||||||
|
|
||||||
@ -255,7 +333,8 @@ After=network.target
|
|||||||
Type=simple
|
Type=simple
|
||||||
User=medi-wol
|
User=medi-wol
|
||||||
WorkingDirectory=/opt/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
|
Restart=always
|
||||||
RestartSec=5
|
RestartSec=5
|
||||||
|
|
||||||
@ -263,6 +342,26 @@ RestartSec=5
|
|||||||
WantedBy=multi-user.target
|
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
|
## Lizenz
|
||||||
|
|
||||||
Dieses Projekt ist für den internen Gebrauch bestimmt.
|
Dieses Projekt ist für den internen Gebrauch bestimmt.
|
||||||
|
|||||||
@ -1,15 +1,43 @@
|
|||||||
package main
|
package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"flag"
|
||||||
|
"fmt"
|
||||||
"log"
|
"log"
|
||||||
"medi-wol/internal/database"
|
"medi-wol/internal/database"
|
||||||
"medi-wol/internal/handlers"
|
"medi-wol/internal/handlers"
|
||||||
"medi-wol/internal/wol"
|
"medi-wol/internal/wol"
|
||||||
|
"os"
|
||||||
|
"strconv"
|
||||||
|
|
||||||
"github.com/gin-gonic/gin"
|
"github.com/gin-gonic/gin"
|
||||||
)
|
)
|
||||||
|
|
||||||
func main() {
|
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
|
// Datenbank initialisieren
|
||||||
db, err := database.InitDB()
|
db, err := database.InitDB()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -39,8 +67,11 @@ func main() {
|
|||||||
r.POST("/api/pcs/:id/wake", pcHandler.WakePC)
|
r.POST("/api/pcs/:id/wake", pcHandler.WakePC)
|
||||||
|
|
||||||
// Server starten
|
// Server starten
|
||||||
log.Println("Server startet auf Port 8080...")
|
serverAddr := fmt.Sprintf(":%d", port)
|
||||||
if err := r.Run(":8080"); err != nil {
|
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)
|
log.Fatal("Fehler beim Starten des Servers:", err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user