Dockerfile 1.7 KB

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