diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..0f1797b --- /dev/null +++ b/Dockerfile @@ -0,0 +1,42 @@ +FROM golang:alpine AS builder +WORKDIR /app +COPY /app /app +RUN apk update && apk add --no-cache ca-certificates tzdata && update-ca-certificates + +# Create appuser +ENV USER=appuser +ENV UID=10001 + +# See https://stackoverflow.com/a/55757473/12429735RUN +RUN adduser \ + --disabled-password \ + --gecos "" \ + --home "/nonexistent" \ + --shell "/sbin/nologin" \ + --no-create-home \ + --uid "${UID}" \ + "${USER}" + + +RUN go mod download +RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -ldflags="-w -s" -o /app/wiz-controller + +# Build Runtime Container. +FROM scratch +COPY --from=builder /usr/share/zoneinfo /usr/share/zoneinfo +COPY --from=builder /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/ + +COPY --from=builder /etc/passwd /etc/passwd +COPY --from=builder /etc/group /etc/group + +COPY --from=builder /app/wiz-controller /app/wiz-controller +COPY ./app/templates/* /app/templates/ +COPY ./app/images/* /app/images/ +COPY ./app/static/* /app/static/ + +# Use an unprivileged user. +USER appuser:appuser + +EXPOSE 8080 +WORKDIR /app +CMD ["/app/wiz-controller"] \ No newline at end of file diff --git a/config/config.go b/app/config/config.go similarity index 92% rename from config/config.go rename to app/config/config.go index 3ffa32b..13a88e0 100644 --- a/config/config.go +++ b/app/config/config.go @@ -22,7 +22,7 @@ func loadConfig(path string) (*Config, error) { } func GetConfig() (*Config, error) { - config, err := loadConfig("misc/sample-config.yml") + config, err := loadConfig("/config.yml") if err != nil { return nil, fmt.Errorf("unable to read config: %w", err) } diff --git a/config/data.go b/app/config/data.go similarity index 100% rename from config/data.go rename to app/config/data.go diff --git a/controller/controller.go b/app/controller/controller.go similarity index 100% rename from controller/controller.go rename to app/controller/controller.go diff --git a/controller/data.go b/app/controller/data.go similarity index 100% rename from controller/data.go rename to app/controller/data.go diff --git a/data.go b/app/data.go similarity index 100% rename from data.go rename to app/data.go diff --git a/go.mod b/app/go.mod similarity index 100% rename from go.mod rename to app/go.mod diff --git a/go.sum b/app/go.sum similarity index 100% rename from go.sum rename to app/go.sum diff --git a/images/light-off.png b/app/images/light-off.png similarity index 100% rename from images/light-off.png rename to app/images/light-off.png diff --git a/images/light-on.png b/app/images/light-on.png similarity index 100% rename from images/light-on.png rename to app/images/light-on.png diff --git a/images/room.png b/app/images/room.png similarity index 100% rename from images/room.png rename to app/images/room.png diff --git a/main.go b/app/main.go similarity index 100% rename from main.go rename to app/main.go diff --git a/misc/sample-config.yml b/app/misc/sample-config.yml similarity index 100% rename from misc/sample-config.yml rename to app/misc/sample-config.yml diff --git a/static/favicon.ico b/app/static/favicon.ico similarity index 100% rename from static/favicon.ico rename to app/static/favicon.ico diff --git a/static/styles.css b/app/static/styles.css similarity index 100% rename from static/styles.css rename to app/static/styles.css diff --git a/templates/index.html b/app/templates/index.html similarity index 100% rename from templates/index.html rename to app/templates/index.html