|
| 1 | +## |
| 2 | +## Create custom JRE for running Openblocks server application |
| 3 | +## |
| 4 | +FROM eclipse-temurin:17-jdk-jammy AS jre-build |
| 5 | +RUN jlink --add-modules java.base,java.compiler,java.datatransfer,java.desktop,java.instrument,java.logging,java.management,java.management.rmi,java.naming,java.net.http,java.prefs,java.rmi,java.scripting,java.se,java.security.jgss,java.security.sasl,java.smartcardio,java.sql,java.sql.rowset,java.transaction.xa,java.xml,java.xml.crypto,jdk.accessibility,jdk.charsets,jdk.crypto.cryptoki,jdk.crypto.ec,jdk.dynalink,jdk.httpserver,jdk.incubator.foreign,jdk.incubator.vector,jdk.internal.vm.ci,jdk.jdwp.agent,jdk.jfr,jdk.jsobject,jdk.localedata,jdk.management,jdk.management.agent,jdk.management.jfr,jdk.naming.dns,jdk.naming.rmi,jdk.net,jdk.nio.mapmode,jdk.sctp,jdk.security.auth,jdk.security.jgss,jdk.unsupported,jdk.xml.dom,jdk.zipfs,jdk.attach \ |
| 6 | + --output /build/jre \ |
| 7 | + --no-man-pages \ |
| 8 | + --no-header-files \ |
| 9 | + --compress=2 |
| 10 | + |
| 11 | +## |
| 12 | +## Build Openblocks api-service application |
| 13 | +## |
| 14 | +FROM maven:3.8-eclipse-temurin-17-alpine AS build-api-service |
| 15 | +COPY ./server/api-service /openblocks-server |
| 16 | +WORKDIR /openblocks-server |
| 17 | +RUN --mount=type=cache,target=/root/.m2 mvn -f pom.xml clean package -DskipTests |
| 18 | + |
| 19 | +# Create required folder structure |
| 20 | +RUN mkdir -p /openblocks/api-service/plugins /openblocks/api-service/config /openblocks/api-service/logs |
| 21 | + |
| 22 | +# Define openblocks main jar and plugin jars |
| 23 | +ARG JAR_FILE=/openblocks-server/openblocks-server/target/openblocks-server-1.0-SNAPSHOT.jar |
| 24 | +ARG PLUGIN_JARS=/openblocks-server/openblocks-plugins/*/target/*.jar |
| 25 | + |
| 26 | +# Copy Java runtime for running server |
| 27 | +COPY --from=jre-build /build/jre /openblocks/api-service/jre |
| 28 | + |
| 29 | +# Copy openblocks server application and plugins |
| 30 | +RUN cp ${JAR_FILE} /openblocks/api-service/server.jar \ |
| 31 | + && cp ${PLUGIN_JARS} /openblocks/api-service/plugins/ |
| 32 | + |
| 33 | +# Copy openblocks server configuration |
| 34 | +COPY server/api-service/openblocks-server/src/main/resources/selfhost/ce/application.yml /openblocks/api-service/config/ |
| 35 | +COPY server/api-service/openblocks-server/src/main/resources/selfhost/ce/application-selfhost.yml /openblocks/api-service/config/ |
| 36 | + |
| 37 | +# Add bootstrapfile |
| 38 | +COPY deploy/docker/api-service/entrypoint.sh /openblocks/api-service/entrypoint.sh |
| 39 | +COPY deploy/docker/api-service/init.sh /openblocks/api-service/init.sh |
| 40 | +RUN chmod +x /openblocks/api-service/*.sh |
| 41 | + |
| 42 | +## |
| 43 | +## Intermediary Openblocks api-service image |
| 44 | +## |
| 45 | +## To create a separate image out of it, build it with: |
| 46 | +## DOCKER_BUILDKIT=1 docker build -f deploy/docker/Dockerfile -t openblocksdev/openblocks-ce-api-service --target openblocks-ce-api-service . |
| 47 | +## |
| 48 | +FROM ubuntu:jammy as openblocks-ce-api-service |
| 49 | +LABEL maintainer="openblocks" |
| 50 | + |
| 51 | +RUN apt-get update && apt-get install -y --no-install-recommends gosu \ |
| 52 | + && rm -rf /var/cache/apt/lists \ |
| 53 | + && addgroup --system --gid 9001 openblocks \ |
| 54 | + && adduser --system --disabled-password --no-create-home --uid 9001 --gid 9001 openblocks |
| 55 | + |
| 56 | +# Copy openblocks server configuration |
| 57 | +COPY --chown=openblocks:openblocks --from=build-api-service /openblocks/api-service /openblocks/api-service |
| 58 | + |
| 59 | +EXPOSE 8080 |
| 60 | +CMD [ "sh" , "/openblocks/api-service/entrypoint.sh" ] |
| 61 | + |
| 62 | +############################################################################# |
| 63 | + |
| 64 | +## |
| 65 | +## Build openblocks node service |
| 66 | +## |
| 67 | +FROM ubuntu:jammy as build-node-service |
| 68 | + |
| 69 | +RUN apt update && DEBIAN_FRONTEND=noninteractive apt-get install --no-install-recommends -y curl xz-utils ca-certificates \ |
| 70 | + && mkdir -p /openblocks/node-service/nodejs |
| 71 | + |
| 72 | +# Download and extract nodejs |
| 73 | +RUN curl -fsSL 'https://nodejs.org/dist/v19.4.0/node-v19.4.0-linux-x64.tar.xz' | tar --directory /openblocks/node-service/nodejs --strip-components=1 -Jxf - |
| 74 | + |
| 75 | +# Install yarn |
| 76 | +ENV PATH="/openblocks/node-service/nodejs/bin:${PATH}" |
| 77 | +#RUN export PATH=${PATH}:/openblocks/node-service/nodejs/bin \ |
| 78 | +RUN npm install -g yarn |
| 79 | + |
| 80 | +# Copy and build the node-service app |
| 81 | +COPY server/node-service/ /openblocks/node-service/app/ |
| 82 | +WORKDIR /openblocks/node-service/app/ |
| 83 | +RUN yarn --immutable |
| 84 | +RUN yarn build |
| 85 | + |
| 86 | +# Copy startup script |
| 87 | +COPY deploy/docker/node-service/entrypoint.sh /openblocks/node-service/entrypoint.sh |
| 88 | +COPY deploy/docker/node-service/init.sh /openblocks/node-service/init.sh |
| 89 | +RUN chmod +x /openblocks/node-service/*.sh |
| 90 | + |
| 91 | +## |
| 92 | +## Intermediary Openblocks node service image |
| 93 | +## |
| 94 | +## To create a separate image out of it, build it with: |
| 95 | +## DOCKER_BUILDKIT=1 docker build -f deploy/docker/Dockerfile -t openblocksdev/openblocks-ce-node-service --target openblocks-ce-node-service . |
| 96 | +## |
| 97 | +FROM ubuntu:jammy as openblocks-ce-node-service |
| 98 | +LABEL maintainer="openblocks" |
| 99 | + |
| 100 | +RUN apt-get update && apt-get install -y --no-install-recommends gosu \ |
| 101 | + && rm -rf /var/cache/apt/lists \ |
| 102 | + && addgroup --system --gid 9001 openblocks \ |
| 103 | + && adduser --system --disabled-password --no-create-home --uid 9001 --gid 9001 openblocks |
| 104 | + |
| 105 | +COPY --from=build-node-service /openblocks/node-service /openblocks/node-service |
| 106 | + |
| 107 | +EXPOSE 6060 |
| 108 | +CMD [ "/bin/sh", "/openblocks/node-service/entrypoint.sh" ] |
| 109 | + |
| 110 | +############################################################################# |
| 111 | + |
| 112 | +## |
| 113 | +## Build openblocks client application |
| 114 | +## |
| 115 | +FROM node:19.4-slim AS build-client |
| 116 | +COPY ./client /openblocks-client |
| 117 | +WORKDIR /openblocks-client |
| 118 | +RUN yarn --immutable |
| 119 | + |
| 120 | +# curl is required for yarn build to succeed, because it calls it while building client |
| 121 | +RUN apt-get update && apt-get install -y --no-install-recommends curl ca-certificates |
| 122 | + |
| 123 | +ARG REACT_APP_COMMIT_ID=test |
| 124 | +ARG REACT_APP_ENV=production |
| 125 | +ARG REACT_APP_EDITION=community |
| 126 | +RUN yarn build |
| 127 | + |
| 128 | + |
| 129 | +## |
| 130 | +## Intermediary Openblocks client image |
| 131 | +## |
| 132 | +## To create a separate image out of it, build it with: |
| 133 | +## DOCKER_BUILDKIT=1 docker build -f deploy/docker/Dockerfile -t openblocksdev/openblocks-ce-frontend --target openblocks-ce-frontend . |
| 134 | +## |
| 135 | +FROM nginx:1.23.3 as openblocks-ce-frontend |
| 136 | +LABEL maintainer="openblocks" |
| 137 | + |
| 138 | +# Change default nginx user into openblocks user |
| 139 | +RUN usermod --login openblocks --uid 9001 nginx \ |
| 140 | + && groupmod --new-name openblocks --gid 9001 nginx |
| 141 | + |
| 142 | +# Copy openblocks client data |
| 143 | +COPY --chown=openblocks:openblocks --from=build-client /openblocks-client/packages/openblocks/build/ /openblocks/client |
| 144 | + |
| 145 | +# Copy additional nginx init scripts |
| 146 | +COPY deploy/docker/frontend/00-change-nginx-user.sh /docker-entrypoint.d/00-change-nginx-user.sh |
| 147 | +COPY deploy/docker/frontend/01-update-nginx-conf.sh /docker-entrypoint.d/01-update-nginx-conf.sh |
| 148 | + |
| 149 | +RUN chmod +x /docker-entrypoint.d/00-change-nginx-user.sh && \ |
| 150 | + chmod +x /docker-entrypoint.d/01-update-nginx-conf.sh |
| 151 | + |
| 152 | +COPY deploy/docker/frontend/nginx.conf /etc/nginx/nginx.conf |
| 153 | +EXPOSE 3000 |
| 154 | + |
| 155 | +############################################################################# |
| 156 | + |
| 157 | +## |
| 158 | +## Build Openblocks all-in-one image |
| 159 | +## |
| 160 | +FROM openblocks-ce-frontend |
| 161 | +LABEL maintainer="openblocks" |
| 162 | + |
| 163 | +# Install required packages |
| 164 | +RUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install --no-install-recommends -y bash gnupg curl lsb-release \ |
| 165 | + && curl -fsSL https://packages.redis.io/gpg | gpg --dearmor -o /usr/share/keyrings/redis-archive-keyring.gpg \ |
| 166 | + && echo "deb [signed-by=/usr/share/keyrings/redis-archive-keyring.gpg] https://packages.redis.io/deb bullseye main" | tee /etc/apt/sources.list.d/redis.list \ |
| 167 | + && curl -fsSL https://www.mongodb.org/static/pgp/server-4.4.asc | gpg --dearmor -o /usr/share/keyrings/mongodb-archive-keyring.gpg \ |
| 168 | + && echo "deb [signed-by=/usr/share/keyrings/mongodb-archive-keyring.gpg] http://repo.mongodb.org/apt/debian buster/mongodb-org/4.4 main" | tee /etc/apt/sources.list.d/mongodb-org-4.4.list \ |
| 169 | + && apt-get update && DEBIAN_FRONTEND=noninteractive apt-get -y install --no-install-recommends -y \ |
| 170 | + mongodb-org=4.4.6 \ |
| 171 | + redis \ |
| 172 | + supervisor \ |
| 173 | + gosu \ |
| 174 | + && rm -rf /var/cache/apt/lists |
| 175 | + |
| 176 | +# Add openblocks api-service |
| 177 | +COPY --chown=openblocks:openblocks --from=openblocks-ce-api-service /openblocks/api-service /openblocks/api-service |
| 178 | + |
| 179 | +# Add openblocks node-service |
| 180 | +COPY --chown=openblocks:openblocks --from=openblocks-ce-node-service /openblocks/node-service /openblocks/node-service |
| 181 | + |
| 182 | +# Add services configuration |
| 183 | +COPY --chown=openblocks:openblocks deploy/docker/all-in-one/etc /openblocks/etc |
| 184 | + |
| 185 | +# Add startup script |
| 186 | +COPY --chown=openblocks:openblocks deploy/docker/all-in-one/entrypoint.sh /openblocks/entrypoint.sh |
| 187 | + |
| 188 | +EXPOSE 3000 |
| 189 | + |
| 190 | +ENTRYPOINT [ "/bin/sh" , "/openblocks/entrypoint.sh" ] |
| 191 | +CMD ["/usr/bin/supervisord", "-n" , "-c" , "/openblocks/etc/supervisord.conf"] |
| 192 | + |
0 commit comments