4fr

Форк
0
/
Dockerfile 
113 строк · 3.5 Кб
1
FROM --platform=$BUILDPLATFORM node:16.20-alpine AS frontend-deps
2

3
ARG SKIP_FRONTEND_TEST
4
ARG SKIP_FRONTEND_BUILD
5

6
WORKDIR /srv/frontend/
7

8
COPY ./frontend/package.json ./frontend/pnpm-lock.yaml ./frontend/pnpm-workspace.yaml /srv/frontend/
9
COPY ./frontend/apps/remark42/package.json /srv/frontend/apps/remark42/
10

11
RUN \
12
  if [[ -z "$SKIP_FRONTEND_BUILD" || -z "$SKIP_FRONTEND_TEST" ]]; then \
13
    apk add --no-cache --update git && \
14
    npm i -g pnpm@7; \
15
  fi
16

17
RUN --mount=type=cache,id=pnpm,target=/root/.pnpm-store/v3 \
18
  if [[ -z "$SKIP_FRONTEND_BUILD" || -z "$SKIP_FRONTEND_TEST" ]]; then \
19
    pnpm i; \
20
  fi
21

22

23
FROM --platform=$BUILDPLATFORM frontend-deps AS build-frontend
24

25
ARG SKIP_FRONTEND_TEST
26
ARG SKIP_FRONTEND_BUILD
27
ENV CI=true
28

29
WORKDIR /srv/frontend/apps/remark42/
30

31
COPY ./frontend/apps/remark42/ /srv/frontend/apps/remark42/
32

33
RUN \
34
  if [ -z "$SKIP_FRONTEND_TEST" ]; then \
35
    pnpm lint type-check translation-check test; \
36
  else \
37
    echo 'Skip frontend test'; \
38
  fi
39

40
RUN \
41
  if [ -z "$SKIP_FRONTEND_BUILD" ]; then \
42
    pnpm build; \
43
  else \
44
    mkdir /srv/frontend/apps/remark42/public; \
45
    echo 'Skip frontend build'; \
46
  fi
47

48
FROM umputun/baseimage:buildgo-v1.13.0 as build-backend
49

50
ARG CI
51
ARG GITHUB_REF
52
ARG GITHUB_SHA
53
ARG GIT_BRANCH
54
ARG SKIP_BACKEND_TEST
55
ARG BACKEND_TEST_TIMEOUT
56

57
ADD backend /build/backend
58
# to embed the frontend files statically into Remark42 binary
59
COPY --from=build-frontend /srv/frontend/apps/remark42/public/ /build/backend/app/cmd/web/
60
RUN find /build/backend/app/cmd/web/ -regex '.*\.\(html\|js\|mjs\)$' -print -exec sed -i "s|{% REMARK_URL %}|http://127.0.0.1:8080|g" {} \;
61
WORKDIR /build/backend
62

63
# install gcc in order to be able to go test package with -race
64
RUN apk --no-cache add gcc libc-dev
65

66
RUN echo go version: `go version`
67

68
# run tests
69
RUN \
70
    cd app && \
71
    if [ -z "$SKIP_BACKEND_TEST" ] ; then \
72
        CGO_ENABLED=1 go test -race -p 1 -timeout="${BACKEND_TEST_TIMEOUT:-300s}" -covermode=atomic -coverprofile=/profile.cov_tmp ./... && \
73
        cat /profile.cov_tmp | grep -v "_mock.go" > /profile.cov && \
74
        golangci-lint run --config ../.golangci.yml ./... ; \
75
    else \
76
      echo "skip backend tests and linter" \
77
    ; fi
78

79
RUN \
80
    version="$(/script/version.sh)" && \
81
    echo "version=$version" && \
82
    go build -o remark42 -ldflags "-X main.revision=${version} -s -w" ./app
83

84
FROM umputun/baseimage:app-v1.13.0
85

86
ARG GITHUB_SHA
87

88
LABEL org.opencontainers.image.authors="Umputun <umputun@gmail.com>" \
89
      org.opencontainers.image.description="Remark42 comment engine" \
90
      org.opencontainers.image.documentation="https://remark42.com/docs/getting-started/" \
91
      org.opencontainers.image.licenses="MIT" \
92
      org.opencontainers.image.source="https://github.com/umputun/remark42" \
93
      org.opencontainers.image.title="Remark42" \
94
      org.opencontainers.image.url="https://remark42.com/" \
95
      org.opencontainers.image.revision="${GITHUB_SHA}"
96

97
WORKDIR /srv
98

99
COPY docker-init.sh /srv/init.sh
100
ADD backend/scripts/backup.sh /usr/local/bin/backup
101
ADD backend/scripts/restore.sh /usr/local/bin/restore
102
ADD backend/scripts/import.sh /usr/local/bin/import
103
RUN chmod +x /srv/init.sh /usr/local/bin/backup /usr/local/bin/restore /usr/local/bin/import
104

105
COPY --from=build-backend /build/backend/remark42 /srv/remark42
106
COPY --from=build-frontend /srv/frontend/apps/remark42/public/ /srv/web/
107
RUN chown -R app:app /srv
108
RUN ln -s /srv/remark42 /usr/bin/remark42
109

110
EXPOSE 8080
111
HEALTHCHECK --interval=30s --timeout=3s CMD curl --fail http://localhost:8080/ping || exit 1
112

113
CMD ["/srv/remark42", "server"]
114

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.