Update für Docker und automatischer Build
All checks were successful
release-tag / release-image (push) Successful in 1m45s
All checks were successful
release-tag / release-image (push) Successful in 1m45s
This commit is contained in:
51
.gitea/workflows/registry.yml
Normal file
51
.gitea/workflows/registry.yml
Normal file
@@ -0,0 +1,51 @@
|
|||||||
|
name: release-tag
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- 'main'
|
||||||
|
jobs:
|
||||||
|
release-image:
|
||||||
|
runs-on: ubuntu-fast
|
||||||
|
env:
|
||||||
|
DOCKER_ORG: ${{ vars.DOCKER_ORG }}
|
||||||
|
DOCKER_LATEST: latest
|
||||||
|
RUNNER_TOOL_CACHE: /toolcache
|
||||||
|
steps:
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@v3
|
||||||
|
|
||||||
|
- name: Set up QEMU
|
||||||
|
uses: docker/setup-qemu-action@v2
|
||||||
|
|
||||||
|
- name: Set up Docker BuildX
|
||||||
|
uses: docker/setup-buildx-action@v2
|
||||||
|
with: # replace it with your local IP
|
||||||
|
config-inline: |
|
||||||
|
[registry."${{ vars.DOCKER_REGISTRY }}"]
|
||||||
|
http = true
|
||||||
|
insecure = true
|
||||||
|
|
||||||
|
- name: Login to DockerHub
|
||||||
|
uses: docker/login-action@v2
|
||||||
|
with:
|
||||||
|
registry: ${{ vars.DOCKER_REGISTRY }} # replace it with your local IP
|
||||||
|
username: ${{ secrets.DOCKER_USERNAME }}
|
||||||
|
password: ${{ secrets.DOCKER_PASSWORD }}
|
||||||
|
|
||||||
|
- name: Get Meta
|
||||||
|
id: meta
|
||||||
|
run: |
|
||||||
|
echo REPO_NAME=$(echo ${GITHUB_REPOSITORY} | awk -F"/" '{print $2}') >> $GITHUB_OUTPUT
|
||||||
|
echo REPO_VERSION=$(git describe --tags --always | sed 's/^v//') >> $GITHUB_OUTPUT
|
||||||
|
|
||||||
|
- name: Build and push
|
||||||
|
uses: docker/build-push-action@v4
|
||||||
|
with:
|
||||||
|
context: .
|
||||||
|
file: ./Dockerfile
|
||||||
|
platforms: |
|
||||||
|
linux/amd64
|
||||||
|
push: true
|
||||||
|
tags: | # replace it with your local IP and tags
|
||||||
|
${{ vars.DOCKER_REGISTRY }}/${{ env.DOCKER_ORG }}/${{ steps.meta.outputs.REPO_NAME }}:${{ steps.meta.outputs.REPO_VERSION }}
|
||||||
|
${{ vars.DOCKER_REGISTRY }}/${{ env.DOCKER_ORG }}/${{ steps.meta.outputs.REPO_NAME }}:${{ env.DOCKER_LATEST }}
|
34
Dockerfile
Normal file
34
Dockerfile
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
# -------- Dockerfile (Multi-Stage Build) --------
|
||||||
|
# 1. Builder-Stage
|
||||||
|
FROM golang:1.24-alpine AS builder
|
||||||
|
|
||||||
|
WORKDIR /app
|
||||||
|
COPY go.* ./
|
||||||
|
RUN go mod download
|
||||||
|
COPY . .
|
||||||
|
RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o /bin/edgewol
|
||||||
|
|
||||||
|
# 2. Runtime-Stage
|
||||||
|
FROM alpine:3.22
|
||||||
|
|
||||||
|
# HTTPS-Callouts in Alpine brauchen ca-certificates
|
||||||
|
RUN apk add --no-cache ca-certificates
|
||||||
|
RUN mkdir /data
|
||||||
|
#RUN mkdir /dynamicsrc
|
||||||
|
#RUN mkdir /tempsrc
|
||||||
|
COPY --from=builder /bin/edgewol /bin/edgewol
|
||||||
|
COPY ./static /data/static
|
||||||
|
# COPY ./static /tempsrc/static
|
||||||
|
#COPY ./dynamicsrc /dynamicsrc
|
||||||
|
|
||||||
|
# Default listens on :8080 – siehe main.go
|
||||||
|
EXPOSE 8080
|
||||||
|
|
||||||
|
# Environment defaults; können per compose überschrieben werden
|
||||||
|
ENV EW_USERNAME=admin \
|
||||||
|
EW_PASSWORD=admin \
|
||||||
|
EW_DB=/data/machines.json \
|
||||||
|
EW_PRODUCTIVE=true
|
||||||
|
|
||||||
|
|
||||||
|
ENTRYPOINT ["/bin/edgewol"]
|
82
License.md
Normal file
82
License.md
Normal file
@@ -0,0 +1,82 @@
|
|||||||
|
# # CommonsProtect Lizenz – Nicht-kommerzielle Edition (CPL-NC)
|
||||||
|
|
||||||
|
**Version 1.0 – Stand: April 2025**
|
||||||
|
https://git.send.nrw/sendnrw/edge-wol
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
**Lizenztyp:** Quelloffen, aber nicht kommerziell nutzbar
|
||||||
|
**Autorenrecht:** © 2025 Jan Bergner
|
||||||
|
**Lizenzkürzel:** CPL-NC-1.0
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
Diese Lizenz regelt die Bedingungen für Nutzung, Veränderung und Weiterverbreitung der in diesem Repository enthaltenen Software. Ziel ist es, offene Zusammenarbeit zu ermöglichen, gleichzeitig aber eine kommerzielle Ausbeutung ohne Erlaubnis zu verhindern.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 1. Erlaubte Nutzung
|
||||||
|
|
||||||
|
Diese Software darf kostenlos genutzt, kopiert, verändert und weiterverbreitet werden – **ausschließlich für nicht-kommerzielle Zwecke**.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 2. Namensnennungspflicht
|
||||||
|
|
||||||
|
Wenn du den Quellcode dieser Software ganz oder in Teilen nutzt – sei es im Original oder verändert –, **musst du deutlich auf das ursprüngliche Projekt hinweisen**, inklusive:
|
||||||
|
|
||||||
|
- Name des ursprünglichen Autors oder Projekts
|
||||||
|
- Link zur Originalquelle (z.B. Git-Repository)
|
||||||
|
|
||||||
|
**Beispiel:**
|
||||||
|
|
||||||
|
> "Diese Software basiert auf dem Edge-WoL-Produkt von B1tK1ll3r, verfügbar unter https://git.send.nrw/sendnrw/edge-wol."
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 3. Verbot kommerzieller Nutzung
|
||||||
|
|
||||||
|
Die Nutzung dieser Software oder abgeleiteter Werke ist **ausschließlich für nicht-kommerzielle Zwecke gestattet**. Eine kommerzielle Nutzung in jeglicher Form ist **streng untersagt**.
|
||||||
|
|
||||||
|
### Dies umfasst unter anderem:
|
||||||
|
|
||||||
|
- Den Verkauf, die Vermietung oder das Anbieten kostenpflichtiger Lizenzen oder Zugänge zur Software
|
||||||
|
- Die Integration oder Verwendung der Software in Produkten oder Dienstleistungen, die verkauft oder lizenziert werden
|
||||||
|
- Die Bereitstellung einer gehosteten Version (z.B. als Webservice oder API), bei der direkt oder indirekt Einnahmen erzielt werden (z.B. über Werbung, Abonnements, Spendenplattformen wie Patreon, Zugang gegen Bezahlung)
|
||||||
|
- Die Nutzung der Software zur Generierung von Einnahmen durch Content-Plattformen (z.B. Streaming, YouTube, Social Media), wenn das Projekt, die Plattform oder die Inhalte **auf irgendeine Weise monetarisiert** werden – sei es durch Werbung, Sponsoring, Bezahlabos, Spenden oder bezahlte Partnerschaften
|
||||||
|
|
||||||
|
**Auch teilweise Monetarisierung** – etwa durch freiwillige Spenden, bezahlten Premium-Zugang oder Monetarisierung begleitender Inhalte – fällt unter diese Regelung und ist **nicht erlaubt**.
|
||||||
|
|
||||||
|
### Ausnahmen:
|
||||||
|
|
||||||
|
Eine kommerzielle Nutzung kann nur mit ausdrücklicher, schriftlicher Erlaubnis des ursprünglichen Autors erfolgen.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 4. Keine Garantie und Haftungsausschluss
|
||||||
|
|
||||||
|
Diese Software wird **„wie besehen“** ohne ausdrückliche oder stillschweigende Garantien bereitgestellt. Insbesondere werden **keine Zusicherungen hinsichtlich Funktionalität, Eignung für einen bestimmten Zweck, Fehlerfreiheit oder Verfügbarkeit** gegeben.
|
||||||
|
|
||||||
|
Die Nutzung dieser Software erfolgt **auf eigenes Risiko**. Der Autor übernimmt keine Verantwortung für direkte oder indirekte Schäden, Datenverlust, Ausfallzeiten, Sicherheitsprobleme oder sonstige Folgen, die sich aus der Nutzung oder dem Missbrauch der Software ergeben.
|
||||||
|
|
||||||
|
### Produkthaftungsausschluss
|
||||||
|
|
||||||
|
**Insbesondere ausgeschlossen ist jegliche Haftung nach dem Produkthaftungsgesetz (§1 ProdHaftG)** oder vergleichbaren Regelungen in anderen Ländern. Diese Software wird **nicht als Produkt im Sinne der Produkthaftung bereitgestellt**, da sie ohne Gegenleistung, ohne Prüfverfahren und ohne Gewähr zur Verfügung steht.
|
||||||
|
|
||||||
|
### Nutzung in kritischen Systemen
|
||||||
|
|
||||||
|
Diese Software ist **nicht vorgesehen oder geeignet für sicherheitskritische Anwendungen** wie:
|
||||||
|
|
||||||
|
- Medizinische Geräte
|
||||||
|
- Luft- und Raumfahrttechnik
|
||||||
|
- Automatisierte Verkehrs- und Steuerungssysteme
|
||||||
|
- Industrieanlagen mit hohem Gefährdungspotenzial
|
||||||
|
- Systeme, bei denen ein Softwarefehler zu Personenschäden oder schweren Sachschäden führen könnte
|
||||||
|
|
||||||
|
Die Verwendung in solchen Bereichen erfolgt ausdrücklich auf eigene Gefahr.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Hinweis
|
||||||
|
|
||||||
|
Diese Lizenz ist keine anerkannte Open-Source-Lizenz im Sinne der [Open Source Definition](https://opensource.org/osd). Sie stellt eine sogenannte **„source-available“-Lizenz** dar.
|
44
compose.yml
Normal file
44
compose.yml
Normal file
@@ -0,0 +1,44 @@
|
|||||||
|
services:
|
||||||
|
api:
|
||||||
|
image: git.send.nrw/sendnrw/edge-wol:latest
|
||||||
|
container_name: edgewol
|
||||||
|
volumes:
|
||||||
|
- /docker/edgewol/machines.json:/data/machines.json
|
||||||
|
labels:
|
||||||
|
- traefik.enable=true
|
||||||
|
- traefik.http.routers.edgewol.rule=Host(`edgewol.b1tsblog.org`)
|
||||||
|
- traefik.http.services.edgewol.loadbalancer.server.port=8080
|
||||||
|
- traefik.http.routers.edgewol.entrypoints=websecure
|
||||||
|
- traefik.http.routers.edgewol.tls=true
|
||||||
|
- traefik.http.routers.edgewol.tls.certresolver=letsencrypt
|
||||||
|
- traefik.http.middlewares.edgewol-redirect.redirectscheme.scheme=https
|
||||||
|
- traefik.http.middlewares.edgewol-redirect.redirectscheme.permanent=true
|
||||||
|
- traefik.http.routers.edgewol0.rule=Host(`edgewol.b1tsblog.org`)
|
||||||
|
- traefik.http.routers.edgewol0.entrypoints=web
|
||||||
|
- traefik.http.routers.edgewol0.middlewares=edgewol-redirect
|
||||||
|
- traefik.protocol=http
|
||||||
|
networks:
|
||||||
|
- traefik-net
|
||||||
|
environment:
|
||||||
|
# HIER BEARBEITEN
|
||||||
|
EW_USERNAME: groot
|
||||||
|
EW_PASSWORD: ""
|
||||||
|
EW_PRODUCTIVE: true
|
||||||
|
# Sollten Ports extern verfügbar gemacht werden müssen (nicht empfohlen)
|
||||||
|
#ports:
|
||||||
|
#- "8080:8080" # <host>:<container>
|
||||||
|
restart: unless-stopped
|
||||||
|
# Newt-Client für eine Pangolin-Integration
|
||||||
|
#newt:
|
||||||
|
#image: fosrl/newt
|
||||||
|
#container_name: newt
|
||||||
|
#networks:
|
||||||
|
#- traefik-net
|
||||||
|
#restart: unless-stopped
|
||||||
|
#environment:
|
||||||
|
#- PANGOLIN_ENDPOINT=
|
||||||
|
#- NEWT_ID=
|
||||||
|
#- NEWT_SECRET=
|
||||||
|
networks:
|
||||||
|
traefik-net:
|
||||||
|
external: true
|
2
main.go
2
main.go
@@ -185,7 +185,7 @@ func generateSessionToken() string {
|
|||||||
func main() {
|
func main() {
|
||||||
// Determine DB path and load machines.
|
// Determine DB path and load machines.
|
||||||
hashedPassword = hashPassword(password)
|
hashedPassword = hashPassword(password)
|
||||||
dbPath = GetENV("DB", "./machines.json")
|
dbPath = GetENV("EW_DB", "/data/machines.json")
|
||||||
loadMachines()
|
loadMachines()
|
||||||
|
|
||||||
// Save on SIGINT/SIGTERM.
|
// Save on SIGINT/SIGTERM.
|
||||||
|
Reference in New Issue
Block a user