Loading .deploy/admin-web-angular/Dockerfile +96 −29 Original line number Diff line number Diff line FROM node:alpine AS development # Ever Platform Admin UI (Angular) RUN apk update \ ARG API_BASE_URL ARG API_HOST ARG API_PORT ARG CLIENT_BASE_URL ARG SENTRY_DSN ARG CHATWOOT_SDK_TOKEN ARG CLOUDINARY_CLOUD_NAME ARG CLOUDINARY_API_KEY ARG GOOGLE_MAPS_API_KEY ARG GOOGLE_PLACE_AUTOCOMPLETE ARG DEFAULT_LATITUDE ARG DEFAULT_LONGITUDE ARG DEFAULT_CURRENCY ARG DEMO ARG WEB_HOST ARG WEB_PORT FROM node:16-alpine3.11 AS dependencies LABEL maintainer="ever@ever.co" ENV CI=true RUN apk --update add bash \ && apk add libexecinfo libexecinfo-dev \ && npm i -g npm \ && apk --no-cache add --virtual builds-deps build-base \ snappy g++ snappy-dev gcc libgcc libstdc++ linux-headers autoconf automake make nasm python git \ && apk add --no-cache --virtual build-dependencies build-base \ snappy dos2unix g++ snappy-dev gcc libgcc libstdc++ linux-headers autoconf automake make nasm python2 py2-setuptools vips-dev git \ && npm install --quiet node-gyp -g \ && npm config set python /usr/bin/python \ && npm install yarn -g --force && npm install yarn -g --force \ && mkdir /srv/ever && chown -R node:node /srv/ever COPY wait .deploy/admin-web-angular/entrypoint.compose.sh .deploy/admin-web-angular/entrypoint.prod.sh / RUN mkdir /srv/ever && chown node:node /srv/ever RUN chmod +x /wait /entrypoint.compose.sh /entrypoint.prod.sh && dos2unix /entrypoint.compose.sh && dos2unix /entrypoint.prod.sh USER node USER node:node WORKDIR /srv/ever COPY --chown=node:node package.json yarn.lock lerna.json package.workspaces.json ./ COPY --chown=node:node package.json yarn.lock lerna.json package.workspaces.json tsconfig.base.json ./ COPY --chown=node:node packages/admin-web-angular/package.json ./packages/admin-web-angular/package.json COPY --chown=node:node .snyk ./.snyk COPY --chown=node:node packages/common ./packages/common COPY --chown=node:node packages/common-angular ./packages/common-angular COPY --chown=node:node packages/common/package.json ./packages/common/package.json COPY --chown=node:node packages/common-angular/package.json ./packages/common-angular/package.json RUN yarn install RUN yarn bootstrap && yarn cache clean FROM node:alpine AS production FROM node:16-alpine3.11 AS development RUN npm install cross-env -g USER node:node RUN mkdir /srv/ever && chown node:node /srv/ever RUN mkdir -p /srv/ever/packages/admin-web-angular && chown node:node /srv/ever/packages/admin-web-angular RUN mkdir -p /srv/ever/packages/common && chown node:node /srv/ever/packages/common RUN mkdir -p /srv/ever/packages/common-angular && chown node:node /srv/ever/packages/common-angular WORKDIR /srv/ever COPY --chown=node:node --from=dependencies /wait /entrypoint.compose.sh /entrypoint.prod.sh / COPY --chown=node:node --from=dependencies /srv/ever . COPY . . USER node FROM node:16-alpine3.11 AS build WORKDIR /srv/ever ARG NODE_OPTIONS="--max-old-space-size=2048" ENV NODE_OPTIONS $NODE_OPTIONS ENV NODE_ENV production RUN mkdir dist COPY --from=development --chown=node:node /srv/ever/node_modules ./node_modules COPY --from=development --chown=node:node /srv/ever/packages/common/node_modules ./packages/common/node_modules COPY --from=development --chown=node:node /srv/ever/packages/common-angular/node_modules ./packages/common-angular/node_modules COPY --from=development --chown=node:node /srv/ever/packages/admin-web-angular/node_modules ./packages/admin-web-angular/node_modules COPY --chown=node:node package.json yarn.lock lerna.json package.workspaces.json tsconfig.base.json ./ COPY --chown=node:node packages/common ./packages/common COPY --chown=node:node packages/common-angular ./packages/common-angular COPY --chown=node:node packages/admin-web-angular ./packages/admin-web-angular No newline at end of file COPY --chown=node:node --from=development /srv/ever . ENV NODE_OPTIONS=${NODE_OPTIONS:-"--max-old-space-size=2048"} ENV NODE_ENV=${NODE_ENV:-production} ENV API_BASE_URL=${API_BASE_URL:-http://localhost:3000} ENV CLIENT_BASE_URL=${CLIENT_BASE_URL:-http://localhost:4200} ENV SENTRY_DSN=${SENTRY_DSN} ENV CHATWOOT_SDK_TOKEN=${CHATWOOT_SDK_TOKEN} ENV CLOUDINARY_CLOUD_NAME=${CLOUDINARY_CLOUD_NAME} ENV CLOUDINARY_API_KEY=${CLOUDINARY_API_KEY} ENV GOOGLE_MAPS_API_KEY=${GOOGLE_MAPS_API_KEY} ENV GOOGLE_PLACE_AUTOCOMPLETE=${GOOGLE_PLACE_AUTOCOMPLETE:-false} ENV DEFAULT_LATITUDE=${DEFAULT_LATITUDE:-42.6459136} ENV DEFAULT_LONGITUDE=${DEFAULT_LONGITUDE:-23.3332736} ENV DEFAULT_CURRENCY=${DEFAULT_CURRENCY:-USD}_DSN} ENV DEMO=${DEMO:-false} ENV IS_DOCKER=true RUN yarn build:admin FROM nginx:alpine AS production # USER nginx:nginx WORKDIR /srv/ever COPY --chown=nginx:nginx --from=dependencies /wait /entrypoint.prod.sh /entrypoint.compose.sh ./ COPY --chown=nginx:nginx .deploy/admin-web-angular/nginx.compose.conf /etc/nginx/conf.d/compose.conf.template COPY --chown=nginx:nginx .deploy/admin-web-angular/nginx.prod.conf /etc/nginx/conf.d/prod.conf.template COPY --chown=nginx:nginx --from=build /srv/ever/packages/admin-web-angular/build . RUN chmod +x wait entrypoint.compose.sh entrypoint.prod.sh && \ chmod a+rw /etc/nginx/conf.d/compose.conf.template /etc/nginx/conf.d/prod.conf.template ENV API_HOST=${API_HOST:-api} ENV API_PORT=${API_PORT:-3000} ENV API_BASE_URL=${API_BASE_URL:-http://localhost:3000} ENV WEB_HOST=${WEB_HOST:-0.0.0.0} ENV WEB_PORT=${WEB_PORT:-4200} ENV NODE_OPTIONS=${NODE_OPTIONS:-"--max-old-space-size=2048"} ENV NODE_ENV=${NODE_ENV:-production} ENV SENTRY_DSN=${SENTRY_DSN} ENV DEMO=${DEMO:-false} EXPOSE ${WEB_PORT} ENTRYPOINT [ "./entrypoint.prod.sh" ] CMD [ "nginx", "-g", "daemon off;" ] .deploy/admin-web-angular/entrypoint.compose.sh 0 → 100644 +27 −0 Original line number Diff line number Diff line #!/bin/sh set -ex # This Entrypoint used inside Docker Compose only export WAIT_HOSTS=$API_HOST:$API_PORT # In production we should replace some values in generated JS code sed -i "s#DOCKER_API_BASE_URL#$API_BASE_URL#g" *.js sed -i "s#DOCKER_CLIENT_BASE_URL#$CLIENT_BASE_URL#g" *.js sed -i "s#DOCKER_SENTRY_DSN#$SENTRY_DSN#g" *.js sed -i "s#DOCKER_CLOUDINARY_CLOUD_NAME#$CLOUDINARY_CLOUD_NAME#g" *.js sed -i "s#DOCKER_CLOUDINARY_API_KEY#$CLOUDINARY_API_KEY#g" *.js sed -i "s#DOCKER_GOOGLE_MAPS_API_KEY#$GOOGLE_MAPS_API_KEY#g" *.js sed -i "s#DOCKER_GOOGLE_PLACE_AUTOCOMPLETE#$GOOGLE_PLACE_AUTOCOMPLETE#g" *.js sed -i "s#DOCKER_DEFAULT_LATITUDE#$DEFAULT_LATITUDE#g" *.js sed -i "s#DOCKER_DEFAULT_LONGITUDE#$DEFAULT_LONGITUDE#g" *.js sed -i "s#DOCKER_DEFAULT_CURRENCY#$DEFAULT_CURRENCY#g" *.js sed -i "s#DOCKER_CHATWOOT_SDK_TOKEN#$CHATWOOT_SDK_TOKEN#g" *.js sed -i "s#DOCKER_DEMO#$DEMO#g" *.js envsubst '${API_HOST} ${API_PORT}' < /etc/nginx/conf.d/compose.conf.template > /etc/nginx/nginx.conf # in Docker Compose we should wait other services start ./wait exec "$@" No newline at end of file .deploy/admin-web-angular/entrypoint.prod.sh 0 → 100644 +24 −0 Original line number Diff line number Diff line #!/bin/sh set -ex # This Entrypoint used when we run Docker container outside of Docker Compose (e.g. in k8s) # In production we should replace some values in generated JS code sed -i "s#DOCKER_API_BASE_URL#$API_BASE_URL#g" *.js sed -i "s#DOCKER_CLIENT_BASE_URL#$CLIENT_BASE_URL#g" *.js sed -i "s#DOCKER_SENTRY_DSN#$SENTRY_DSN#g" *.js sed -i "s#DOCKER_CLOUDINARY_CLOUD_NAME#$CLOUDINARY_CLOUD_NAME#g" *.js sed -i "s#DOCKER_CLOUDINARY_API_KEY#$CLOUDINARY_API_KEY#g" *.js sed -i "s#DOCKER_GOOGLE_MAPS_API_KEY#$GOOGLE_MAPS_API_KEY#g" *.js sed -i "s#DOCKER_GOOGLE_PLACE_AUTOCOMPLETE#$GOOGLE_PLACE_AUTOCOMPLETE#g" *.js sed -i "s#DOCKER_DEFAULT_LATITUDE#$DEFAULT_LATITUDE#g" *.js sed -i "s#DOCKER_DEFAULT_LONGITUDE#$DEFAULT_LONGITUDE#g" *.js sed -i "s#DOCKER_DEFAULT_CURRENCY#$DEFAULT_CURRENCY#g" *.js sed -i "s#DOCKER_CHATWOOT_SDK_TOKEN#$CHATWOOT_SDK_TOKEN#g" *.js sed -i "s#DOCKER_DEMO#$DEMO#g" *.js # We may not need to use that env vars now in nginx.config, but we may want later. # Also we just need to copy nginx.conf to correct place anyway... envsubst '' < /etc/nginx/conf.d/prod.conf.template > /etc/nginx/nginx.conf exec "$@" .deploy/admin-web-angular/nginx.compose.conf 0 → 100644 +37 −0 Original line number Diff line number Diff line user nginx; error_log /var/log/nginx/error.log warn; pid /var/run/nginx.pid; events { worker_connections 1024; } http { include /etc/nginx/mime.types; log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log /var/log/nginx/access.log main; #gzip on; upstream api { server ${API_HOST}:${API_PORT}; } server { listen 4200; location / { root /srv/ever; try_files $uri $uri/ /index.html; } location /api/ { proxy_pass http://api; proxy_set_header Host $http_host; } } } .deploy/admin-web-angular/nginx.prod.conf 0 → 100644 +28 −0 Original line number Diff line number Diff line user nginx; error_log /var/log/nginx/error.log warn; pid /var/run/nginx.pid; events { worker_connections 1024; } http { include /etc/nginx/mime.types; log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log /var/log/nginx/access.log main; #gzip on; server { listen 4200; location / { root /srv/ever; try_files $uri $uri/ /index.html; } } } Loading
.deploy/admin-web-angular/Dockerfile +96 −29 Original line number Diff line number Diff line FROM node:alpine AS development # Ever Platform Admin UI (Angular) RUN apk update \ ARG API_BASE_URL ARG API_HOST ARG API_PORT ARG CLIENT_BASE_URL ARG SENTRY_DSN ARG CHATWOOT_SDK_TOKEN ARG CLOUDINARY_CLOUD_NAME ARG CLOUDINARY_API_KEY ARG GOOGLE_MAPS_API_KEY ARG GOOGLE_PLACE_AUTOCOMPLETE ARG DEFAULT_LATITUDE ARG DEFAULT_LONGITUDE ARG DEFAULT_CURRENCY ARG DEMO ARG WEB_HOST ARG WEB_PORT FROM node:16-alpine3.11 AS dependencies LABEL maintainer="ever@ever.co" ENV CI=true RUN apk --update add bash \ && apk add libexecinfo libexecinfo-dev \ && npm i -g npm \ && apk --no-cache add --virtual builds-deps build-base \ snappy g++ snappy-dev gcc libgcc libstdc++ linux-headers autoconf automake make nasm python git \ && apk add --no-cache --virtual build-dependencies build-base \ snappy dos2unix g++ snappy-dev gcc libgcc libstdc++ linux-headers autoconf automake make nasm python2 py2-setuptools vips-dev git \ && npm install --quiet node-gyp -g \ && npm config set python /usr/bin/python \ && npm install yarn -g --force && npm install yarn -g --force \ && mkdir /srv/ever && chown -R node:node /srv/ever COPY wait .deploy/admin-web-angular/entrypoint.compose.sh .deploy/admin-web-angular/entrypoint.prod.sh / RUN mkdir /srv/ever && chown node:node /srv/ever RUN chmod +x /wait /entrypoint.compose.sh /entrypoint.prod.sh && dos2unix /entrypoint.compose.sh && dos2unix /entrypoint.prod.sh USER node USER node:node WORKDIR /srv/ever COPY --chown=node:node package.json yarn.lock lerna.json package.workspaces.json ./ COPY --chown=node:node package.json yarn.lock lerna.json package.workspaces.json tsconfig.base.json ./ COPY --chown=node:node packages/admin-web-angular/package.json ./packages/admin-web-angular/package.json COPY --chown=node:node .snyk ./.snyk COPY --chown=node:node packages/common ./packages/common COPY --chown=node:node packages/common-angular ./packages/common-angular COPY --chown=node:node packages/common/package.json ./packages/common/package.json COPY --chown=node:node packages/common-angular/package.json ./packages/common-angular/package.json RUN yarn install RUN yarn bootstrap && yarn cache clean FROM node:alpine AS production FROM node:16-alpine3.11 AS development RUN npm install cross-env -g USER node:node RUN mkdir /srv/ever && chown node:node /srv/ever RUN mkdir -p /srv/ever/packages/admin-web-angular && chown node:node /srv/ever/packages/admin-web-angular RUN mkdir -p /srv/ever/packages/common && chown node:node /srv/ever/packages/common RUN mkdir -p /srv/ever/packages/common-angular && chown node:node /srv/ever/packages/common-angular WORKDIR /srv/ever COPY --chown=node:node --from=dependencies /wait /entrypoint.compose.sh /entrypoint.prod.sh / COPY --chown=node:node --from=dependencies /srv/ever . COPY . . USER node FROM node:16-alpine3.11 AS build WORKDIR /srv/ever ARG NODE_OPTIONS="--max-old-space-size=2048" ENV NODE_OPTIONS $NODE_OPTIONS ENV NODE_ENV production RUN mkdir dist COPY --from=development --chown=node:node /srv/ever/node_modules ./node_modules COPY --from=development --chown=node:node /srv/ever/packages/common/node_modules ./packages/common/node_modules COPY --from=development --chown=node:node /srv/ever/packages/common-angular/node_modules ./packages/common-angular/node_modules COPY --from=development --chown=node:node /srv/ever/packages/admin-web-angular/node_modules ./packages/admin-web-angular/node_modules COPY --chown=node:node package.json yarn.lock lerna.json package.workspaces.json tsconfig.base.json ./ COPY --chown=node:node packages/common ./packages/common COPY --chown=node:node packages/common-angular ./packages/common-angular COPY --chown=node:node packages/admin-web-angular ./packages/admin-web-angular No newline at end of file COPY --chown=node:node --from=development /srv/ever . ENV NODE_OPTIONS=${NODE_OPTIONS:-"--max-old-space-size=2048"} ENV NODE_ENV=${NODE_ENV:-production} ENV API_BASE_URL=${API_BASE_URL:-http://localhost:3000} ENV CLIENT_BASE_URL=${CLIENT_BASE_URL:-http://localhost:4200} ENV SENTRY_DSN=${SENTRY_DSN} ENV CHATWOOT_SDK_TOKEN=${CHATWOOT_SDK_TOKEN} ENV CLOUDINARY_CLOUD_NAME=${CLOUDINARY_CLOUD_NAME} ENV CLOUDINARY_API_KEY=${CLOUDINARY_API_KEY} ENV GOOGLE_MAPS_API_KEY=${GOOGLE_MAPS_API_KEY} ENV GOOGLE_PLACE_AUTOCOMPLETE=${GOOGLE_PLACE_AUTOCOMPLETE:-false} ENV DEFAULT_LATITUDE=${DEFAULT_LATITUDE:-42.6459136} ENV DEFAULT_LONGITUDE=${DEFAULT_LONGITUDE:-23.3332736} ENV DEFAULT_CURRENCY=${DEFAULT_CURRENCY:-USD}_DSN} ENV DEMO=${DEMO:-false} ENV IS_DOCKER=true RUN yarn build:admin FROM nginx:alpine AS production # USER nginx:nginx WORKDIR /srv/ever COPY --chown=nginx:nginx --from=dependencies /wait /entrypoint.prod.sh /entrypoint.compose.sh ./ COPY --chown=nginx:nginx .deploy/admin-web-angular/nginx.compose.conf /etc/nginx/conf.d/compose.conf.template COPY --chown=nginx:nginx .deploy/admin-web-angular/nginx.prod.conf /etc/nginx/conf.d/prod.conf.template COPY --chown=nginx:nginx --from=build /srv/ever/packages/admin-web-angular/build . RUN chmod +x wait entrypoint.compose.sh entrypoint.prod.sh && \ chmod a+rw /etc/nginx/conf.d/compose.conf.template /etc/nginx/conf.d/prod.conf.template ENV API_HOST=${API_HOST:-api} ENV API_PORT=${API_PORT:-3000} ENV API_BASE_URL=${API_BASE_URL:-http://localhost:3000} ENV WEB_HOST=${WEB_HOST:-0.0.0.0} ENV WEB_PORT=${WEB_PORT:-4200} ENV NODE_OPTIONS=${NODE_OPTIONS:-"--max-old-space-size=2048"} ENV NODE_ENV=${NODE_ENV:-production} ENV SENTRY_DSN=${SENTRY_DSN} ENV DEMO=${DEMO:-false} EXPOSE ${WEB_PORT} ENTRYPOINT [ "./entrypoint.prod.sh" ] CMD [ "nginx", "-g", "daemon off;" ]
.deploy/admin-web-angular/entrypoint.compose.sh 0 → 100644 +27 −0 Original line number Diff line number Diff line #!/bin/sh set -ex # This Entrypoint used inside Docker Compose only export WAIT_HOSTS=$API_HOST:$API_PORT # In production we should replace some values in generated JS code sed -i "s#DOCKER_API_BASE_URL#$API_BASE_URL#g" *.js sed -i "s#DOCKER_CLIENT_BASE_URL#$CLIENT_BASE_URL#g" *.js sed -i "s#DOCKER_SENTRY_DSN#$SENTRY_DSN#g" *.js sed -i "s#DOCKER_CLOUDINARY_CLOUD_NAME#$CLOUDINARY_CLOUD_NAME#g" *.js sed -i "s#DOCKER_CLOUDINARY_API_KEY#$CLOUDINARY_API_KEY#g" *.js sed -i "s#DOCKER_GOOGLE_MAPS_API_KEY#$GOOGLE_MAPS_API_KEY#g" *.js sed -i "s#DOCKER_GOOGLE_PLACE_AUTOCOMPLETE#$GOOGLE_PLACE_AUTOCOMPLETE#g" *.js sed -i "s#DOCKER_DEFAULT_LATITUDE#$DEFAULT_LATITUDE#g" *.js sed -i "s#DOCKER_DEFAULT_LONGITUDE#$DEFAULT_LONGITUDE#g" *.js sed -i "s#DOCKER_DEFAULT_CURRENCY#$DEFAULT_CURRENCY#g" *.js sed -i "s#DOCKER_CHATWOOT_SDK_TOKEN#$CHATWOOT_SDK_TOKEN#g" *.js sed -i "s#DOCKER_DEMO#$DEMO#g" *.js envsubst '${API_HOST} ${API_PORT}' < /etc/nginx/conf.d/compose.conf.template > /etc/nginx/nginx.conf # in Docker Compose we should wait other services start ./wait exec "$@" No newline at end of file
.deploy/admin-web-angular/entrypoint.prod.sh 0 → 100644 +24 −0 Original line number Diff line number Diff line #!/bin/sh set -ex # This Entrypoint used when we run Docker container outside of Docker Compose (e.g. in k8s) # In production we should replace some values in generated JS code sed -i "s#DOCKER_API_BASE_URL#$API_BASE_URL#g" *.js sed -i "s#DOCKER_CLIENT_BASE_URL#$CLIENT_BASE_URL#g" *.js sed -i "s#DOCKER_SENTRY_DSN#$SENTRY_DSN#g" *.js sed -i "s#DOCKER_CLOUDINARY_CLOUD_NAME#$CLOUDINARY_CLOUD_NAME#g" *.js sed -i "s#DOCKER_CLOUDINARY_API_KEY#$CLOUDINARY_API_KEY#g" *.js sed -i "s#DOCKER_GOOGLE_MAPS_API_KEY#$GOOGLE_MAPS_API_KEY#g" *.js sed -i "s#DOCKER_GOOGLE_PLACE_AUTOCOMPLETE#$GOOGLE_PLACE_AUTOCOMPLETE#g" *.js sed -i "s#DOCKER_DEFAULT_LATITUDE#$DEFAULT_LATITUDE#g" *.js sed -i "s#DOCKER_DEFAULT_LONGITUDE#$DEFAULT_LONGITUDE#g" *.js sed -i "s#DOCKER_DEFAULT_CURRENCY#$DEFAULT_CURRENCY#g" *.js sed -i "s#DOCKER_CHATWOOT_SDK_TOKEN#$CHATWOOT_SDK_TOKEN#g" *.js sed -i "s#DOCKER_DEMO#$DEMO#g" *.js # We may not need to use that env vars now in nginx.config, but we may want later. # Also we just need to copy nginx.conf to correct place anyway... envsubst '' < /etc/nginx/conf.d/prod.conf.template > /etc/nginx/nginx.conf exec "$@"
.deploy/admin-web-angular/nginx.compose.conf 0 → 100644 +37 −0 Original line number Diff line number Diff line user nginx; error_log /var/log/nginx/error.log warn; pid /var/run/nginx.pid; events { worker_connections 1024; } http { include /etc/nginx/mime.types; log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log /var/log/nginx/access.log main; #gzip on; upstream api { server ${API_HOST}:${API_PORT}; } server { listen 4200; location / { root /srv/ever; try_files $uri $uri/ /index.html; } location /api/ { proxy_pass http://api; proxy_set_header Host $http_host; } } }
.deploy/admin-web-angular/nginx.prod.conf 0 → 100644 +28 −0 Original line number Diff line number Diff line user nginx; error_log /var/log/nginx/error.log warn; pid /var/run/nginx.pid; events { worker_connections 1024; } http { include /etc/nginx/mime.types; log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log /var/log/nginx/access.log main; #gzip on; server { listen 4200; location / { root /srv/ever; try_files $uri $uri/ /index.html; } } }