Skip to content

Commit bb1f894

Browse files
authored
Add files via upload
1 parent e30af23 commit bb1f894

File tree

1 file changed

+286
-0
lines changed

1 file changed

+286
-0
lines changed

Dockerfile

Lines changed: 286 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,286 @@
1+
##
2+
## Build Lowcoder api-service application
3+
##
4+
FROM maven:3.9-eclipse-temurin-17 AS build-api-service
5+
6+
# Build lowcoder-api
7+
COPY ./server/api-service /lowcoder-server
8+
WORKDIR /lowcoder-server
9+
RUN --mount=type=cache,id=s/3f639f73-fed0-42c6-90dd-b6669ada0481-/root/.m2 mvn -f pom.xml,target=/root/.m2 mvn -f pom.xml clean package -DskipTests
10+
11+
# Create required folder structure
12+
RUN mkdir -p /lowcoder/api-service/config /lowcoder/api-service/logs /lowcoder/plugins
13+
14+
# Copy lowcoder server configuration
15+
COPY server/api-service/lowcoder-server/src/main/resources/application.yaml /lowcoder/api-service/config/
16+
17+
# Add bootstrapfile
18+
COPY deploy/docker/api-service/entrypoint.sh /lowcoder/api-service/entrypoint.sh
19+
COPY deploy/docker/api-service/init.sh /lowcoder/api-service/init.sh
20+
ENV JAVA_OPTS="-Xmx2G -Xms512M"
21+
RUN chmod +x /lowcoder/api-service/*.sh
22+
23+
##
24+
## Intermediary Lowcoder api-service image
25+
##
26+
## To create a separate image out of it, build it with:
27+
## DOCKER_BUILDKIT=1 docker build -f deploy/docker/Dockerfile -t lowcoderorg/lowcoder-ce-api-service --target lowcoder-ce-api-service .
28+
##
29+
FROM eclipse-temurin:17-jammy AS lowcoder-ce-api-service
30+
LABEL maintainer="lowcoder"
31+
32+
RUN apt-get update && apt-get install -y --no-install-recommends gosu \
33+
&& rm -rf /var/cache/apt/lists \
34+
&& addgroup --system --gid 9001 lowcoder \
35+
&& adduser --system --disabled-password --no-create-home --uid 9001 --gid 9001 lowcoder
36+
37+
38+
# Copy lowcoder server configuration
39+
COPY --chown=lowcoder:lowcoder --from=build-api-service /lowcoder/api-service /lowcoder/api-service
40+
41+
# Copy lowcoder api service app, dependencies and libs
42+
COPY --chown=lowcoder:lowcoder --from=build-api-service /lowcoder-server/lowcoder-server/target/lowcoder-api-service-bin/lowcoder-api-service.jar /lowcoder/api-service/lowcoder-api-service.jar
43+
COPY --chown=lowcoder:lowcoder --from=build-api-service /lowcoder-server/lowcoder-server/target/lowcoder-api-service-bin/libs /lowcoder/api-service/libs
44+
COPY --chown=lowcoder:lowcoder --from=build-api-service /lowcoder-server/lowcoder-server/target/lowcoder-api-service-bin/plugins /lowcoder/api-service/plugins
45+
46+
EXPOSE 8080
47+
CMD [ "/bin/bash" , "/lowcoder/api-service/entrypoint.sh" ]
48+
49+
#############################################################################
50+
51+
##
52+
## Build lowcoder node service
53+
##
54+
FROM ubuntu:jammy AS build-node-service
55+
56+
RUN apt-get update
57+
RUN DEBIAN_FRONTEND=noninteractive apt-get install --no-install-recommends -y curl ca-certificates build-essential gnupg
58+
59+
# Add nodejs repo and keys
60+
RUN mkdir -p /etc/apt/keyrings \
61+
&& curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg \
62+
&& echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_20.x nodistro main" | tee /etc/apt/sources.list.d/nodesource.list
63+
64+
# Download nodejs and install yarn
65+
RUN apt-get update \
66+
&& apt-get install --no-install-recommends -y nodejs \
67+
&& npm install -g yarn
68+
69+
# Copy and build the node-service app
70+
COPY server/node-service/ /lowcoder/node-service/app/
71+
WORKDIR /lowcoder/node-service/app/
72+
RUN yarn --immutable
73+
RUN yarn build
74+
75+
# Copy startup script
76+
COPY deploy/docker/node-service/entrypoint.sh /lowcoder/node-service/entrypoint.sh
77+
COPY deploy/docker/node-service/init.sh /lowcoder/node-service/init.sh
78+
RUN chmod +x /lowcoder/node-service/*.sh
79+
80+
##
81+
## Intermediary Lowcoder node service image
82+
##
83+
## To create a separate image out of it, build it with:
84+
## DOCKER_BUILDKIT=1 docker build -f deploy/docker/Dockerfile -t lowcoderorg/lowcoder-ce-node-service --target lowcoder-ce-node-service .
85+
##
86+
FROM ubuntu:jammy AS lowcoder-ce-node-service
87+
LABEL maintainer="lowcoder"
88+
89+
RUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install --no-install-recommends -y curl ca-certificates gnupg
90+
91+
# Add nodejs repo and keys
92+
RUN mkdir -p /etc/apt/keyrings \
93+
&& curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg \
94+
&& echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_20.x nodistro main" | tee /etc/apt/sources.list.d/nodesource.list
95+
96+
# Download nodejs and install yarn
97+
RUN apt-get update \
98+
&& DEBIAN_FRONTEND=noninteractive apt-get install --no-install-recommends -y nodejs gosu \
99+
&& npm install -g yarn \
100+
&& rm -rf /var/cache/apt/lists \
101+
&& addgroup --system --gid 9001 lowcoder \
102+
&& adduser --system --disabled-password --no-create-home --uid 9001 --gid 9001 lowcoder
103+
104+
COPY --from=build-node-service /lowcoder/node-service /lowcoder/node-service
105+
106+
EXPOSE 6060
107+
CMD [ "/bin/sh", "/lowcoder/node-service/entrypoint.sh" ]
108+
109+
#############################################################################
110+
111+
##
112+
## Build lowcoder client application
113+
##
114+
FROM node:20.2-slim AS build-client
115+
116+
# curl is required for yarn build to succeed, because it calls it while building client
117+
RUN apt-get update && apt-get install -y --no-install-recommends curl ca-certificates
118+
119+
# Build client
120+
COPY ./client /lowcoder-client
121+
WORKDIR /lowcoder-client
122+
RUN yarn --immutable
123+
124+
ARG REACT_APP_COMMIT_ID=test
125+
ARG REACT_APP_ENV=production
126+
ARG REACT_APP_EDITION=community
127+
ARG REACT_APP_DISABLE_JS_SANDBOX=true
128+
RUN yarn build
129+
130+
# Build lowcoder-comps
131+
WORKDIR /lowcoder-client/packages/lowcoder-comps
132+
RUN yarn install
133+
RUN yarn build
134+
RUN tar -zxf lowcoder-comps-*.tgz && mv package lowcoder-comps
135+
136+
# Build lowcoder-sdk
137+
WORKDIR /lowcoder-client/packages/lowcoder-sdk
138+
RUN yarn install
139+
RUN yarn build
140+
141+
WORKDIR /lowcoder-client/packages/lowcoder-sdk-webpack-bundle
142+
RUN yarn install
143+
RUN yarn build
144+
145+
##
146+
## Intermediary Lowcoder client image
147+
##
148+
## To create a separate image out of it, build it with:
149+
## DOCKER_BUILDKIT=1 docker build -f deploy/docker/Dockerfile -t lowcoderorg/lowcoder-ce-frontend --target lowcoder-ce-frontend .
150+
##
151+
FROM nginx:1.27.1 AS lowcoder-ce-frontend
152+
LABEL maintainer="lowcoder"
153+
154+
# Change default nginx user into lowcoder user and remove default nginx config
155+
RUN usermod --login lowcoder --uid 9001 nginx \
156+
&& groupmod --new-name lowcoder --gid 9001 nginx \
157+
&& rm -f /etc/nginx/nginx.conf \
158+
&& mkdir -p /lowcoder/assets
159+
160+
# Copy lowcoder client
161+
COPY --chown=lowcoder:lowcoder --from=build-client /lowcoder-client/packages/lowcoder/build/ /lowcoder/client
162+
# Copy lowcoder components
163+
COPY --chown=lowcoder:lowcoder --from=build-client /lowcoder-client/packages/lowcoder-comps/lowcoder-comps /lowcoder/client-comps
164+
# Copy lowcoder SDK
165+
COPY --chown=lowcoder:lowcoder --from=build-client /lowcoder-client/packages/lowcoder-sdk /lowcoder/client-sdk
166+
# Copy lowcoder SDK webpack bundle
167+
COPY --chown=lowcoder:lowcoder --from=build-client /lowcoder-client/packages/lowcoder-sdk-webpack-bundle/dist /lowcoder/client-embed
168+
169+
170+
# Copy additional nginx init scripts
171+
COPY deploy/docker/frontend/00-change-nginx-user.sh /docker-entrypoint.d/00-change-nginx-user.sh
172+
COPY deploy/docker/frontend/01-update-nginx-conf.sh /docker-entrypoint.d/01-update-nginx-conf.sh
173+
174+
RUN chmod +x /docker-entrypoint.d/00-change-nginx-user.sh && \
175+
chmod +x /docker-entrypoint.d/01-update-nginx-conf.sh
176+
177+
COPY deploy/docker/frontend/server.conf /etc/nginx/server.conf
178+
COPY deploy/docker/frontend/nginx-http.conf /etc/nginx/nginx-http.conf
179+
COPY deploy/docker/frontend/nginx-https.conf /etc/nginx/nginx-https.conf
180+
COPY deploy/docker/frontend/ssl-certificate.conf /etc/nginx/ssl-certificate.conf
181+
COPY deploy/docker/frontend/ssl-params.conf /etc/nginx/ssl-params.conf
182+
183+
184+
EXPOSE 3000
185+
EXPOSE 3443
186+
187+
#############################################################################
188+
189+
##
190+
## Build Lowcoder all-in-one image
191+
##
192+
FROM ubuntu:jammy
193+
LABEL maintainer="lowcoder"
194+
195+
# Install essential tools
196+
RUN apt-get update \
197+
&& DEBIAN_FRONTEND=noninteractive apt-get install --no-install-recommends -y curl ca-certificates gnupg bash lsb-release \
198+
&& rm -rf /var/cache/apt/lists /var/lib/apt/lists/* /var/log/dpkg.log \
199+
&& apt-get clean
200+
201+
# Add required apt repositories and signing keys
202+
RUN curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /usr/share/keyrings/nodesource-keyring.gpg \
203+
&& echo "deb [signed-by=/usr/share/keyrings/nodesource-keyring.gpg] https://deb.nodesource.com/node_20.x nodistro main" | tee /etc/apt/sources.list.d/nodesource.list \
204+
&& curl -fsSL https://packages.redis.io/gpg | gpg --dearmor -o /usr/share/keyrings/redis-archive-keyring.gpg \
205+
&& echo "deb [signed-by=/usr/share/keyrings/redis-archive-keyring.gpg] https://packages.redis.io/deb `lsb_release -cs` main" | tee /etc/apt/sources.list.d/redis.list \
206+
&& curl -fsSL https://www.mongodb.org/static/pgp/server-7.0.asc | gpg --dearmor -o /usr/share/keyrings/mongodb-archive-keyring.gpg \
207+
&& echo "deb [signed-by=/usr/share/keyrings/mongodb-archive-keyring.gpg] https://repo.mongodb.org/apt/ubuntu `lsb_release -cs`/mongodb-org/7.0 multiverse" | tee /etc/apt/sources.list.d/mongodb-org-7.0.list \
208+
&& curl -fsSL https://nginx.org/keys/nginx_signing.key | gpg --dearmor -o /usr/share/keyrings/nginx-archive-keyring.gpg \
209+
&& echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] http://nginx.org/packages/mainline/ubuntu `lsb_release -cs` nginx" | tee /etc/apt/sources.list.d/nginx.list
210+
211+
212+
# Install required packages
213+
RUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get -y install --no-install-recommends -y \
214+
nginx=1.27.1-1~jammy \
215+
mongodb-org \
216+
redis \
217+
supervisor \
218+
gosu \
219+
nodejs \
220+
openjdk-17-jdk-headless \
221+
&& npm install -g yarn \
222+
&& rm -rf /var/cache/apt/lists /var/lib/apt/lists/* /var/log/dpkg.log \
223+
&& apt-get clean \
224+
&& rm -rf /tmp/*
225+
226+
# Use configuration setup from official nginx image
227+
RUN rm -rf /etc/nginx/nginx.conf
228+
COPY --from=nginx:1.27.1 /docker-entrypoint.d /docker-entrypoint.d
229+
COPY --from=nginx:1.27.1 /docker-entrypoint.sh /docker-entrypoint.sh
230+
231+
# Add lowcoder user
232+
RUN usermod --login lowcoder --uid 9001 nginx \
233+
&& groupmod --new-name lowcoder --gid 9001 nginx
234+
235+
# Copy additional nginx init scripts and configs
236+
COPY --chmod=0755 deploy/docker/frontend/00-change-nginx-user.sh /docker-entrypoint.d/00-change-nginx-user.sh
237+
COPY --chmod=0755 deploy/docker/frontend/01-update-nginx-conf.sh /docker-entrypoint.d/01-update-nginx-conf.sh
238+
COPY deploy/docker/frontend/server.conf /etc/nginx/server.conf
239+
COPY deploy/docker/frontend/nginx-http.conf /etc/nginx/nginx-http.conf
240+
COPY deploy/docker/frontend/nginx-https.conf /etc/nginx/nginx-https.conf
241+
COPY deploy/docker/frontend/ssl-certificate.conf /etc/nginx/ssl-certificate.conf
242+
COPY deploy/docker/frontend/ssl-params.conf /etc/nginx/ssl-params.conf
243+
244+
245+
# Add lowcoder frontend
246+
# copy lowcoder client
247+
COPY --chown=lowcoder:lowcoder --from=build-client /lowcoder-client/packages/lowcoder/build/ /lowcoder/client
248+
# copy lowcoder components
249+
COPY --chown=lowcoder:lowcoder --from=build-client /lowcoder-client/packages/lowcoder-comps/lowcoder-comps /lowcoder/client-comps
250+
# copy lowcoder SDK
251+
COPY --chown=lowcoder:lowcoder --from=build-client /lowcoder-client/packages/lowcoder-sdk /lowcoder/client-sdk
252+
# copy lowcoder SDK webpack bundle
253+
COPY --chown=lowcoder:lowcoder --from=build-client /lowcoder-client/packages/lowcoder-sdk-webpack-bundle/dist /lowcoder/client-embed
254+
RUN mkdir -p /lowcoder/assets/ && chown lowcoder:lowcoder /lowcoder/assets/
255+
256+
# Add lowcoder api-service
257+
COPY --chown=lowcoder:lowcoder --from=lowcoder-ce-api-service /lowcoder/api-service /lowcoder/api-service
258+
RUN mkdir -p /lowcoder/plugins/ && chown lowcoder:lowcoder /lowcoder/plugins/
259+
260+
# Add lowcoder node-service
261+
COPY --chown=lowcoder:lowcoder --from=lowcoder-ce-node-service /lowcoder/node-service /lowcoder/node-service
262+
263+
# Add services configuration
264+
COPY --chown=lowcoder:lowcoder deploy/docker/all-in-one/etc /lowcoder/etc
265+
266+
# Add startup script
267+
COPY --chown=lowcoder:lowcoder deploy/docker/all-in-one/entrypoint.sh /lowcoder/entrypoint.sh
268+
269+
# Fixes for OpenShift compatibility (after all files are copied)
270+
RUN echo \
271+
&& adduser lowcoder root \
272+
&& mkdir -p /lowcoder-stacks \
273+
&& for i in /lowcoder-stacks /lowcoder/assets /lowcoder/api-service/logs /lowcoder/etc/supervisord; do \
274+
chmod -R g+rw "$i"; \
275+
chown -R lowcoder:root "$i"; \
276+
done \
277+
&& chown -R lowcoder:root /var/log \
278+
&& chmod -R g+rw /run /etc/nginx /var/cache/nginx /var/log
279+
280+
EXPOSE 27017
281+
EXPOSE 3000
282+
EXPOSE 3443
283+
284+
ENTRYPOINT [ "/bin/sh" , "/lowcoder/entrypoint.sh" ]
285+
CMD ["/usr/bin/supervisord", "-n" , "-c" , "/lowcoder/etc/supervisord.conf"]
286+

0 commit comments

Comments
 (0)