|
1 |
| -FROM maven:3.8.4-openjdk-17-slim AS build-server |
| 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 |
2 | 15 | COPY ./server/api-service /openblocks-server
|
3 | 16 | WORKDIR /openblocks-server
|
4 | 17 | RUN --mount=type=cache,target=/root/.m2 mvn -f pom.xml clean package -DskipTests
|
5 | 18 |
|
6 |
| -FROM node:slim AS build-client |
7 |
| -COPY ./client /openblocks-client |
8 |
| -WORKDIR /openblocks-client |
9 |
| -RUN yarn --immutable |
| 19 | +# Create required folder structure |
| 20 | +RUN mkdir -p /openblocks/api-service/plugins /openblocks/api-service/config /openblocks/api-service/logs |
10 | 21 |
|
11 |
| -ARG REACT_APP_COMMIT_ID=test |
12 |
| -ARG REACT_APP_ENV=production |
13 |
| -ARG REACT_APP_EDITION=community |
14 |
| -RUN yarn build |
| 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 |
15 | 25 |
|
16 |
| -FROM node:slim AS build-node |
17 |
| -COPY ./server/node-service /openblocks-node |
18 |
| -WORKDIR /openblocks-node |
19 |
| -RUN yarn --immutable |
20 |
| -RUN yarn build |
| 26 | +# Copy Java runtime for running server |
| 27 | +COPY --from=jre-build /build/jre /openblocks/api-service/jre |
21 | 28 |
|
22 |
| -FROM openjdk:17-slim AS jre-build |
23 |
| -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 \ |
24 |
| - --output /build/jre \ |
25 |
| - --no-man-pages \ |
26 |
| - --no-header-files \ |
27 |
| - --compress=2 |
| 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/ |
28 | 36 |
|
29 |
| -FROM ubuntu:20.04 |
| 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 |
30 | 49 | LABEL maintainer="openblocks"
|
31 | 50 |
|
32 |
| -# Update APT packages - Base Layer python-setuptools |
33 |
| -RUN apt-get update && DEBIAN_FRONTEND=noninteractive \ |
34 |
| - apt-get install --no-install-recommends -y \ |
35 |
| - supervisor curl nginx wget netcat software-properties-common gettext python3-pip git gnupg vim iputils-ping gosu\ |
36 |
| - && add-apt-repository ppa:redislabs/redis \ |
37 |
| - && apt-get remove -y git python3-pip \ |
38 |
| - && apt-get clean \ |
39 |
| - && rm -rf /var/lib/apt/lists/* |
| 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" ] |
40 | 61 |
|
41 |
| -# Install MongoDB v4.0.5, Redis - Service Layer |
42 |
| -RUN wget -qO - https://www.mongodb.org/static/pgp/server-4.4.asc | apt-key add - |
| 62 | +############################################################################# |
43 | 63 |
|
44 |
| -RUN echo "deb [ arch=amd64,arm64 ]http://repo.mongodb.org/apt/ubuntu focal/mongodb-org/4.4 multiverse" | tee /etc/apt/sources.list.d/mongodb-org-4.4.list \ |
45 |
| - && apt-get remove wget -y |
| 64 | +## |
| 65 | +## Build openblocks node service |
| 66 | +## |
| 67 | +FROM ubuntu:jammy as build-node-service |
46 | 68 |
|
47 |
| -RUN curl -sL https://deb.nodesource.com/setup_18.x | bash - \ |
48 |
| - && apt-get -y install --no-install-recommends -y mongodb-org=4.4.6 redis nodejs \ |
49 |
| - && apt-get clean \ |
50 |
| - && rm -rf /var/lib/apt/lists/* |
| 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 |
51 | 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 \ |
52 | 78 | RUN npm install -g yarn
|
53 | 79 |
|
54 |
| -# Clean up cache file - Service layer |
55 |
| -RUN rm -rf \ |
56 |
| - /root/.cache \ |
57 |
| - /root/.npm \ |
58 |
| - /root/.pip \ |
59 |
| - /usr/local/share/doc \ |
60 |
| - /usr/share/doc \ |
61 |
| - /usr/share/man \ |
62 |
| - /var/lib/apt/lists/* \ |
63 |
| - /tmp/* |
| 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 |
64 | 85 |
|
65 |
| -# Define volumes - Service Layer |
66 |
| -VOLUME [ "/openblocks-stacks" ] |
| 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" |
67 | 99 |
|
68 |
| -ENV OPENBLOCKS_SERVER_PROXY_PASS http://localhost:8080 |
69 |
| -ENV OPENBLOCKS_NODE_PROXY_PASS http://localhost:6060 |
| 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 |
70 | 104 |
|
71 |
| -# copy jre |
72 |
| -COPY --from=jre-build /build/jre /app |
| 105 | +COPY --from=build-node-service /openblocks/node-service /openblocks/node-service |
73 | 106 |
|
74 |
| -ARG JAR_FILE=/openblocks-server/openblocks-server/target/openblocks-server-1.0-SNAPSHOT.jar |
75 |
| -ARG PLUGIN_JARS=/openblocks-server/openblocks-plugins/*/target/*.jar |
| 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 |
76 | 127 |
|
77 |
| -RUN mkdir -p /openblocks /openblocks/plugins /var/www/openblocks /env2 |
78 | 128 |
|
79 |
| -COPY --from=build-server ${JAR_FILE} /openblocks/server/api-service/server.jar |
80 |
| -COPY --from=build-server ${PLUGIN_JARS} /openblocks/server/api-service/plugins/ |
| 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" |
81 | 137 |
|
82 |
| -# copy tace-fe build |
83 |
| -COPY --from=build-client /openblocks-client/packages/openblocks/build/ /openblocks/client/ |
| 138 | +# Change default nginx user into openblocks user |
| 139 | +RUN usermod --login openblocks --uid 9001 nginx \ |
| 140 | + && groupmod --new-name openblocks --gid 9001 nginx |
84 | 141 |
|
85 |
| -# copy node-service |
86 |
| -COPY --from=build-node /openblocks-node /openblocks/server/node-service |
87 |
| -COPY ./deploy/docker/scripts/start-node-service.sh /openblocks/server/node-service/start-node-service.sh |
| 142 | +# Copy openblocks client data |
| 143 | +COPY --chown=openblocks:openblocks --from=build-client /openblocks-client/packages/openblocks/build/ /openblocks/client |
88 | 144 |
|
89 |
| -# copy nginx conf |
90 |
| -COPY ./deploy/docker/templates/nginx/* /openblocks/nginx/ |
91 |
| -COPY ./deploy/docker/scripts/start-nginx.sh /openblocks/nginx/start-nginx.sh |
| 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 |
92 | 148 |
|
93 |
| -# copy redis conf |
94 |
| -COPY ./deploy/docker/templates/redis.conf /etc/redis/redis.conf |
| 149 | +RUN chmod +x /docker-entrypoint.d/00-change-nginx-user.sh && \ |
| 150 | + chmod +x /docker-entrypoint.d/01-update-nginx-conf.sh |
95 | 151 |
|
96 |
| -# Add process config to be run by supervisord |
97 |
| -COPY ./deploy/docker/templates/supervisord.conf /etc/supervisor/supervisord.conf |
98 |
| -COPY ./deploy/docker/templates/supervisord/* /etc/supervisor/conf.d/ |
| 152 | +COPY deploy/docker/frontend/nginx.conf /etc/nginx/nginx.conf |
| 153 | +EXPOSE 3000 |
99 | 154 |
|
100 |
| -# copy application.yml |
101 |
| -COPY ./server/api-service/openblocks-server/src/main/resources/selfhost/ce/application.yml /openblocks/env/ |
102 |
| -COPY ./server/api-service/openblocks-server/src/main/resources/selfhost/ce/application-selfhost.yml /openblocks/env2/ |
| 155 | +############################################################################# |
103 | 156 |
|
104 |
| -# Add bootstrapfile |
105 |
| -COPY ./deploy/docker/entrypoint.sh /openblocks/ |
106 |
| -RUN chmod +x /openblocks/entrypoint.sh |
| 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 |
107 | 187 |
|
108 | 188 | EXPOSE 3000
|
109 | 189 |
|
110 |
| -ENTRYPOINT [ "sh" , "/openblocks/entrypoint.sh" ] |
111 |
| -CMD ["/usr/bin/supervisord", "-n" , "-c" , "/etc/supervisor/supervisord.conf"] |
| 190 | +ENTRYPOINT [ "/bin/sh" , "/openblocks/entrypoint.sh" ] |
| 191 | +CMD ["/usr/bin/supervisord", "-n" , "-c" , "/openblocks/etc/supervisord.conf"] |
112 | 192 |
|
0 commit comments