94 lines
2.6 KiB
Docker
94 lines
2.6 KiB
Docker
FROM golang:1.25 AS gomail-builder
|
|
ARG TARGETARCH=amd64
|
|
ARG TARGETOS=linux
|
|
WORKDIR /gomail
|
|
RUN { \
|
|
echo 'package main'; \
|
|
echo ''; \
|
|
echo 'import ('; \
|
|
echo ' "flag"'; \
|
|
echo ' "fmt"'; \
|
|
echo ' "io"'; \
|
|
echo ' "net/smtp"'; \
|
|
echo ' "os"'; \
|
|
echo ')'; \
|
|
echo ''; \
|
|
echo 'func main() {'; \
|
|
echo ' from := flag.String("f", "minitor@localhost", "envelope sender")'; \
|
|
echo ' flag.Parse()'; \
|
|
echo ' recipients := flag.Args()'; \
|
|
echo ''; \
|
|
echo ' if len(recipients) == 0 {'; \
|
|
echo ' fmt.Fprintln(os.Stderr, "usage: sendmail [-f sender] recipient...")'; \
|
|
echo ' os.Exit(1)'; \
|
|
echo ' }'; \
|
|
echo ''; \
|
|
echo ' body, err := io.ReadAll(os.Stdin)'; \
|
|
echo ' if err != nil {'; \
|
|
echo ' fmt.Fprintln(os.Stderr, err)'; \
|
|
echo ' os.Exit(1)'; \
|
|
echo ' }'; \
|
|
echo ''; \
|
|
echo ' relay := os.Getenv("SMTP_RELAY")'; \
|
|
echo ' if relay == "" {'; \
|
|
echo ' relay = "172.17.0.2"'; \
|
|
echo ' }'; \
|
|
echo ''; \
|
|
echo ' port := os.Getenv("SMTP_PORT")'; \
|
|
echo ' if port == "" {'; \
|
|
echo ' port = "25"'; \
|
|
echo ' }'; \
|
|
echo ''; \
|
|
echo ' sender := os.Getenv("SMTP_SENDER")'; \
|
|
echo ' if sender == "" {'; \
|
|
echo ' sender = *from'; \
|
|
echo ' }'; \
|
|
echo ''; \
|
|
echo ' if err = smtp.SendMail(relay+":"+port, nil, sender, recipients, body); err != nil {'; \
|
|
echo ' fmt.Fprintln(os.Stderr, err)'; \
|
|
echo ' os.Exit(1)'; \
|
|
echo ' }'; \
|
|
echo '}'; \
|
|
} > main.go
|
|
RUN go mod init gomail && \
|
|
CGO_ENABLED=0 GOOS=${TARGETOS} GOARCH=${TARGETARCH} go build -o /usr/local/bin/sendmail .
|
|
|
|
|
|
FROM golang:1.25 AS builder
|
|
WORKDIR /app
|
|
COPY ./go.mod ./go.sum /app/
|
|
RUN go mod download
|
|
COPY ./*.go /app/
|
|
RUN rm -f /app/gomail.go
|
|
|
|
ARG TARGETARCH=amd64
|
|
ARG TARGETOS=linux
|
|
ARG VERSION=dev
|
|
RUN CGO_ENABLED=0 GOOS=${TARGETOS} GOARCH=${TARGETARCH} go build -ldflags "-X main.version=${VERSION}" -a -installsuffix nocgo -o minitor .
|
|
|
|
FROM alpine:3.23
|
|
RUN mkdir /app
|
|
WORKDIR /app/
|
|
|
|
# Copy minitor in
|
|
COPY --from=builder /app/minitor .
|
|
|
|
# Copy sendmail (gomail) in
|
|
COPY --from=gomail-builder /usr/local/bin/sendmail /usr/local/bin/sendmail
|
|
|
|
# Add common checking tools
|
|
# hadolint ignore=DL3018
|
|
RUN apk --no-cache add bash=~5 curl=~8 jq=~1 bind-tools=~9 tzdata
|
|
|
|
# Add minitor user for running as non-root
|
|
RUN addgroup -S minitor && adduser -S minitor -G minitor
|
|
|
|
# Copy scripts
|
|
COPY ./scripts /app/scripts
|
|
COPY default_config.hcl /app/config.hcl
|
|
RUN chmod -R 755 /app/scripts
|
|
|
|
# Drop to non-root user
|
|
USER minitor
|
|
|
|
ENTRYPOINT [ "./minitor" ] |