set GOARCH=386
set GOOS=windows
go build -o stack.ch.windows.x86.exe
set GOARCH=amd64
go build -o stack.ch.windows.x64.exe
Nach der erfolgreichen Kompilation prüfen wir wie folgt die Version unter Windows:
stack.ch.windows.x86.exe -version
stack.ch Version 1.8.17
Das Windows Executeable wird wie folgt unter Windows als Service installiert:
stack.ch.windows.x86.exe -s -install
Das Go Programm native kompiliert für Unix basiert auf den folgenden Umgebungsvariablen:set GOARCH=386
set GOOS=linux
go build -o stack.ch.linux.x86
set GOARCH=amd64
go build -o stack.ch.linux.x64
Nach der erfolgreichen Kompilation prüfen wir wie folgt die Version unter Ubuntu:
./stack.ch.linux.x64 -version
stack.ch Version 1.8.17
Wir haben also aus dem gleichen Programmcode das Programm unter Windows und unter Ubuntu kompiliert und ausgeführt. Bis jetzt hat alles einwandfrei funktioniert.
[Unit]
Description=stack.ch server
After=network.target auditd.service
[Service]
User=to be defined
Group=to be defined
ExecStart=/srv/stack.ch/stack.ch.linux.x64
KillMode=process
Restart=on-failure
StandardOutput=null
Restart=on-failure
Type=simple
WorkingDirectory=/srv/stack.ch
[Install]
WantedBy=multi-user.target
Alias=stack.ch.service
Bevor wir das Programm ausführen können erlauben wir dem Program das öffnen der Ports < 1024 wie folgt:sudo setcap 'cap_net_bind_service=+ep' /srv/stack.ch/stack.ch.linux.x64
Nun aktivieren wir den systemctl Service wie folgt:sudo systemctl daemon-reload
sudo systemctl enable stack.ch.service
sudo systemctl start stack.ch.service
sudo systemctl stop stack.ch.service
Der HTTP Server funktioniert einwandfrei. Vorher mussten wir aber einige Anpassungen am Programm und an den Dateien vornehmen.func PathExists(path string) bool {
if _, err := os.Stat(path); err != nil {
if os.IsNotExist(err) {
return false
}
}
return true
}
Das grösste Problem waren die falsch definierten File Extensions z.B. für Bilder. Schreiben Sie alle Extensions konsequent Lowercase.Unser Urteil: phänomenal