Dockerfile 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. # syntax=docker/dockerfile:1.1.7-experimental
  2. # Base Go environment
  3. # -------------------
  4. # pinned because of https://github.com/moby/moby/issues/45935
  5. FROM golang:1.20.5-alpine as base
  6. WORKDIR /porter
  7. RUN apk update && apk add --no-cache gcc musl-dev git protoc
  8. ARG CGO_ENABLED=0
  9. COPY go.mod go.sum ./
  10. COPY /cmd ./cmd
  11. COPY /internal ./internal
  12. COPY /api ./api
  13. COPY /scripts ./scripts
  14. COPY /provisioner ./provisioner
  15. COPY /pkg ./pkg
  16. RUN go install google.golang.org/protobuf/cmd/protoc-gen-go@v1.26
  17. RUN go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@v1.1
  18. RUN go mod download
  19. # Go build environment
  20. # --------------------
  21. FROM base AS build-go
  22. ARG version=production
  23. ARG CGO_ENABLED=0
  24. # build proto files
  25. RUN sh ./scripts/build/proto.sh
  26. RUN go build -ldflags="-w -s -X 'main.Version=${version}'" -a -o ./bin/app ./cmd/app && \
  27. go build -ldflags '-w -s' -a -o ./bin/migrate ./cmd/migrate && \
  28. go build -ldflags '-w -s' -a -o ./bin/ready ./cmd/ready
  29. # Webpack build environment
  30. # -------------------------
  31. FROM node:16 as build-webpack
  32. WORKDIR /webpack
  33. COPY ./dashboard ./
  34. RUN npm install -g npm@8.1
  35. RUN npm i --legacy-peer-deps
  36. ENV NODE_ENV=production
  37. RUN npm run build
  38. # Deployment environment
  39. # ----------------------
  40. FROM alpine
  41. RUN apk update
  42. COPY --from=build-go /porter/bin/app /porter/
  43. COPY --from=build-go /porter/bin/migrate /porter/
  44. COPY --from=build-go /porter/bin/ready /porter/
  45. COPY --from=build-webpack /webpack/build /porter/static
  46. ENV DEBUG=false
  47. ENV STATIC_FILE_PATH=/porter/static
  48. ENV SERVER_PORT=8080
  49. ENV SERVER_TIMEOUT_READ=5s
  50. ENV SERVER_TIMEOUT_WRITE=10s
  51. ENV SERVER_TIMEOUT_IDLE=15s
  52. ENV COOKIE_SECRETS=secret
  53. ENV SQL_LITE=true
  54. ENV ADMIN_INIT=false
  55. EXPOSE 8080
  56. CMD /porter/migrate && /porter/app