Dockerfile 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. # Build protobuf.
  2. FROM golang:1.21-alpine AS protobuf
  3. WORKDIR /protobuf-generate
  4. COPY . .
  5. RUN GO111MODULE=on GOBIN=/usr/local/bin go install github.com/bufbuild/buf/cmd/buf@v1.26.1
  6. WORKDIR /protobuf-generate/proto
  7. RUN buf generate
  8. # Build frontend dist.
  9. FROM node:18-alpine AS frontend
  10. WORKDIR /frontend-build
  11. COPY ./web .
  12. COPY --from=protobuf /protobuf-generate/web/src/types/proto ./src/types/proto
  13. RUN corepack enable && pnpm i --frozen-lockfile
  14. RUN pnpm build
  15. # Build backend exec file.
  16. FROM golang:1.21-alpine AS backend
  17. WORKDIR /backend-build
  18. COPY . .
  19. COPY --from=frontend /frontend-build/dist ./server/dist
  20. RUN CGO_ENABLED=0 go build -o memos ./main.go
  21. # Make workspace with above generated files.
  22. FROM alpine:latest AS monolithic
  23. WORKDIR /usr/local/memos
  24. RUN apk add --no-cache tzdata
  25. ENV TZ="UTC"
  26. COPY --from=backend /backend-build/memos /usr/local/memos/
  27. EXPOSE 5230
  28. # Directory to store the data, which can be referenced as the mounting point.
  29. RUN mkdir -p /var/opt/memos
  30. VOLUME /var/opt/memos
  31. ENV MEMOS_MODE="prod"
  32. ENV MEMOS_PORT="5230"
  33. ENTRYPOINT ["./memos"]