|
| 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