-
-
Notifications
You must be signed in to change notification settings - Fork 216
/
Dockerfile
187 lines (137 loc) · 5.49 KB
/
Dockerfile
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
# syntax=docker/dockerfile:1.4
## Nomnoml
FROM node:16.18.1-alpine3.16 as kroki-builder-nomnoml
# Workaround: https://github.com/nodejs/docker-node/issues/813#issuecomment-407339011
# Error: could not get uid/gid
# [ 'nobody', 0 ]
RUN npm config set unsafe-perm true
RUN npm install -g pkg@5.6.0 pkg-fetch@3.3.0
ENV NODE node16
ENV PLATFORM alpine
ENV ARCH x64
RUN /usr/local/bin/pkg-fetch -n ${NODE} -p ${PLATFORM} -a ${ARCH}
COPY --from=nomnoml index.js package.json package-lock.json /app/
WORKDIR /app
RUN npm i
RUN npm run lint
RUN /usr/local/bin/pkg --targets ${NODE}-${PLATFORM}-${ARCH} . -o app.bin
## Vega
FROM node:16.18.1-alpine3.16 as kroki-builder-vega
# Workaround: https://github.com/nodejs/docker-node/issues/813#issuecomment-407339011
# Error: could not get uid/gid
# [ 'nobody', 0 ]
RUN npm config set unsafe-perm true
# system dependencies for "canvas" Node package
# https://github.com/Automattic/node-canvas/issues/866
RUN apk add --no-cache \
build-base \
g++ \
cairo-dev \
jpeg-dev \
pango-dev \
giflib-dev
RUN npm install -g pkg@5.6.0 pkg-fetch@3.3.0
ENV NODE node16
ENV PLATFORM alpine
ENV ARCH x64
RUN /usr/local/bin/pkg-fetch -n ${NODE} -p ${PLATFORM} -a ${ARCH}
COPY --from=vega src /app/src
COPY --from=vega tests /app/tests
COPY --from=vega package.json package-lock.json /app/
WORKDIR /app
RUN npm i
RUN npm run lint && npm t
RUN /usr/local/bin/pkg --targets ${NODE}-${PLATFORM}-${ARCH} . -o app.bin
RUN cp /app/node_modules/canvas/build/Release/canvas.node /app/
## Wavedrom
FROM node:16.18.1-alpine3.16 as kroki-builder-wavedrom
# Workaround: https://github.com/nodejs/docker-node/issues/813#issuecomment-407339011
# Error: could not get uid/gid
# [ 'nobody', 0 ]
RUN npm config set unsafe-perm true
RUN npm install -g pkg@5.6.0 pkg-fetch@3.3.0
ENV NODE node16
ENV PLATFORM alpine
ENV ARCH x64
RUN /usr/local/bin/pkg-fetch -n ${NODE} -p ${PLATFORM} -a ${ARCH}
COPY --from=wavedrom index.js package.json package-lock.json /app/
WORKDIR /app
RUN npm i
RUN npm run lint
RUN /usr/local/bin/pkg --targets ${NODE}-${PLATFORM}-${ARCH} . -o app.bin
## Bytefield
FROM node:16.18.1-alpine3.16 as kroki-builder-bytefield
# Workaround: https://github.com/nodejs/docker-node/issues/813#issuecomment-407339011
# Error: could not get uid/gid
# [ 'nobody', 0 ]
RUN npm config set unsafe-perm true
RUN npm install -g pkg@5.6.0 pkg-fetch@3.3.0
ENV NODE node16
ENV PLATFORM alpine
ENV ARCH x64
RUN /usr/local/bin/pkg-fetch -n ${NODE} -p ${PLATFORM} -a ${ARCH}
COPY --from=bytefield index.js package.json package-lock.json /app/
WORKDIR /app
RUN npm i
RUN /usr/local/bin/pkg --targets ${NODE}-${PLATFORM}-${ARCH} . -o app.bin
## ERD
FROM ubuntu:18.04 as kroki-builder-static-erd
ARG ERD_VERSION=0.2.1.0
RUN apt-get -qq update && apt-get install -qq -y graphviz curl git > /dev/null
RUN curl -sSL https://get.haskellstack.org/ | sh -s - -q > /dev/null
RUN git clone https://github.com/BurntSushi/erd.git
WORKDIR erd
RUN git checkout "v${ERD_VERSION}"
# build static executable binary
RUN /usr/local/bin/stack install --silent --ghc-options="-fPIC" \
--ghc-options="-static" \
--ghc-options="-optl=-static" \
--ghc-options="-optc=-static" \
--ghc-options="-w"
## Pikchr
FROM alpine:3.16 as kroki-builder-static-pikchr
ARG PIKCHR_VERSION=7269f78c4a3aa2809bd8c278e522c4eac5568ad0fd6ed0a3f807f4a2f6367ef0
RUN apk update && apk add ca-certificates wget build-base
WORKDIR build
RUN wget -q "https://pikchr.org/home/raw/${PIKCHR_VERSION}" -O pikchr.c
# build pikchr binary
RUN gcc -O0 -g -static -Wall -Wextra -DPIKCHR_SHELL pikchr.c -o pikchr -lm
## SVGBob
FROM rust:1.65-slim-bullseye AS kroki-builder-static-svgbob
RUN rustup target add x86_64-unknown-linux-musl
COPY ops/docker/Cargo.toml .
RUN SVGBOB_VERSION=`cat Cargo.toml | grep "svgbob_cli =" | sed -r 's/.*"([^"]+)"/\1/'` \
&& cargo install --quiet --target x86_64-unknown-linux-musl --version $SVGBOB_VERSION svgbob_cli
## yuzutech/kroki
FROM eclipse-temurin:11.0.16.1_1-jre-alpine
RUN addgroup -g 1000 kroki && adduser -D -G kroki -u 1000 kroki
COPY --from=kroki-builder-static-svgbob /usr/local/cargo/bin/svgbob /usr/bin/svgbob
COPY --from=kroki-builder-static-erd /root/.local/bin/erd /usr/bin/erd
COPY --from=kroki-builder-static-pikchr /build/pikchr /usr/bin/pikchr
COPY --from=kroki-builder-nomnoml /app/app.bin /usr/bin/nomnoml
COPY --from=kroki-builder-vega /app/app.bin /usr/bin/vega
COPY --from=kroki-builder-vega /app/canvas.node /usr/bin/canvas.node
COPY --from=kroki-builder-wavedrom /app/app.bin /usr/bin/wavedrom
COPY --from=kroki-builder-bytefield /app/app.bin /usr/bin/bytefield
RUN apk add --update --no-cache \
libjpeg \
giflib-dev \
graphviz \
ttf-freefont \
font-noto-cjk
COPY --chown=kroki:kroki ops/docker/logback.xml /etc/kroki/logback.xml
ENV KROKI_CONTAINER_SUPPORT=""
ENV KROKI_SAFE_MODE=secure
ENV KROKI_SVGBOB_BIN_PATH=/usr/bin/svgbob
ENV KROKI_ERD_BIN_PATH=/usr/bin/erd
ENV KROKI_DOT_BIN_PATH=/usr/bin/dot
ENV KROKI_NOMNOML_BIN_PATH=/usr/bin/nomnoml
ENV KROKI_VEGA_BIN_PATH=/usr/bin/vega
ENV KROKI_WAVEDROM_BIN_PATH=/usr/bin/wavedrom
ENV KROKI_BYTEFIELD_BIN_PATH=/usr/bin/bytefield
ENV KROKI_PIKCHR_BIN_PATH=/usr/bin/pikchr
ENV JAVA_OPTS="-Dlogback.configurationFile=/etc/kroki/logback.xml -Dvertx.logger-delegate-factory-class-name=io.vertx.core.logging.SLF4JLogDelegateFactory"
COPY --chown=kroki:kroki target/kroki-server.jar /usr/local/kroki/kroki-server.jar
EXPOSE 8000
USER kroki
ENTRYPOINT exec java $JAVA_OPTS -jar /usr/local/kroki/kroki-server.jar