Commit a4b5a8c0 authored by Ruslan Konviser's avatar Ruslan Konviser
Browse files

fix: Docker / DO related

parent cdfb8479
Loading
Loading
Loading
Loading
+56 −23
Original line number Diff line number Diff line
@@ -4,6 +4,13 @@ ARG API_BASE_URL
ARG API_HOST
ARG API_PORT
ARG CLIENT_BASE_URL
ARG DEMO
ARG WEB_HOST
ARG WEB_PORT
ARG HTTPS_SERVICES_ENDPOINT
ARG SERVICES_ENDPOINT
ARG GQL_ENDPOINT
ARG GQL_SUBSCRIPTIONS_ENDPOINT
ARG SENTRY_DSN
ARG CHATWOOT_SDK_TOKEN
ARG CLOUDINARY_CLOUD_NAME
@@ -13,9 +20,22 @@ ARG GOOGLE_PLACE_AUTOCOMPLETE
ARG DEFAULT_LATITUDE
ARG DEFAULT_LONGITUDE
ARG DEFAULT_CURRENCY
ARG DEMO
ARG WEB_HOST
ARG WEB_PORT
ARG DEFAULT_LANGUAGE
ARG CURRENCY_SYMBOL
ARG NO_INTERNET_LOGO
ARG MAP_MERCHANT_ICON_LINK
ARG MAP_USER_ICON_LINK
ARG MAP_CARRIER_ICON_LINK
ARG API_FILE_UPLOAD_URL
ARG COMPANY_NAME
ARG COMPANY_SITE_LINK
ARG COMPANY_GITHUB_LINK
ARG COMPANY_FACEBOOK_LINK
ARG COMPANY_TWITTER_LINK
ARG COMPANY_LINKEDIN_LINK
ARG GENERATE_PASSWORD_CHARSET
ARG SETTINGS_APP_TYPE
ARG SETTINGS_MAINTENANCE_API_URL

FROM node:16-alpine3.14 AS dependencies

@@ -71,21 +91,6 @@ 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
@@ -104,17 +109,45 @@ 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_BASE_URL=${API_BASE_URL:-http://localhost:3000}
ENV CLIENT_BASE_URL=${CLIENT_BASE_URL:-http://localhost:4200}
ENV SENTRY_DSN=${SENTRY_DSN}

ENV API_HOST=${API_HOST:-api}
ENV API_PORT=${API_PORT:-3000}

ENV API_BASE_URL=${API_BASE_URL:-http://localhost:3000}
ENV CLIENT_BASE_URL=${CLIENT_BASE_URL:-http://localhost:4200}
ENV WEB_HOST=${WEB_HOST:-0.0.0.0}
ENV WEB_PORT=${WEB_PORT:-4200}

ENV DEMO=${DEMO:-false}

ENV HTTPS_SERVICES_ENDPOINT=${HTTPS_SERVICES_ENDPOINT}
ENV SERVICES_ENDPOINT=${SERVICES_ENDPOINT}
ENV GQL_ENDPOINT=${GQL_ENDPOINT}
ENV GQL_SUBSCRIPTIONS_ENDPOINT=${GQL_SUBSCRIPTIONS_ENDPOINT}
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 DEFAULT_LANGUAGE=${DEFAULT_LANGUAGE}
ENV CURRENCY_SYMBOL=${CURRENCY_SYMBOL}
ENV NO_INTERNET_LOGO=${NO_INTERNET_LOGO}
ENV MAP_MERCHANT_ICON_LINK=${MAP_MERCHANT_ICON_LINK}
ENV MAP_USER_ICON_LINK=${MAP_USER_ICON_LINK}
ENV MAP_CARRIER_ICON_LINK=${MAP_CARRIER_ICON_LINK}
ENV API_FILE_UPLOAD_URL=${API_FILE_UPLOAD_URL}
ENV COMPANY_NAME=${COMPANY_NAME}
ENV COMPANY_SITE_LINK=${COMPANY_SITE_LINK}
ENV COMPANY_GITHUB_LINK=${COMPANY_GITHUB_LINK}
ENV COMPANY_FACEBOOK_LINK=${COMPANY_FACEBOOK_LINK}
ENV COMPANY_TWITTER_LINK=${COMPANY_TWITTER_LINK}
ENV COMPANY_LINKEDIN_LINK=${COMPANY_LINKEDIN_LINK}
ENV GENERATE_PASSWORD_CHARSET=${GENERATE_PASSWORD_CHARSET}
ENV SETTINGS_APP_TYPE=${SETTINGS_APP_TYPE}
ENV SETTINGS_MAINTENANCE_API_URL=${SETTINGS_MAINTENANCE_API_URL}

EXPOSE ${WEB_PORT}

ENTRYPOINT [ "./entrypoint.prod.sh" ]
+25 −1
Original line number Diff line number Diff line
@@ -8,7 +8,16 @@ 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_API_HOST#$API_HOST#g" *.js
sed -i "s#DOCKER_API_PORT#$API_PORT#g" *.js
sed -i "s#DOCKER_WEB_HOST#$WEB_HOST#g" *.js
sed -i "s#DOCKER_WEB_PORT#$WEB_PORT#g" *.js
sed -i "s#DOCKER_HTTPS_SERVICES_ENDPOINT#$HTTPS_SERVICES_ENDPOINT#g" *.js
sed -i "s#DOCKER_SERVICES_ENDPOINT#$SERVICES_ENDPOINT#g" *.js
sed -i "s#DOCKER_GQL_ENDPOINT#$GQL_ENDPOINT#g" *.js
sed -i "s#DOCKER_GQL_SUBSCRIPTIONS_ENDPOINT#$GQL_SUBSCRIPTIONS_ENDPOINT#g" *.js
sed -i "s#DOCKER_SENTRY_DSN#$SENTRY_DSN#g" *.js
sed -i "s#DOCKER_CHATWOOT_SDK_TOKEN#$CHATWOOT_SDK_TOKEN#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
@@ -16,7 +25,22 @@ 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_DEFAULT_LANGUAGE#$DEFAULT_LANGUAGE#g" *.js
sed -i "s#DOCKER_CURRENCY_SYMBOL#$CURRENCY_SYMBOL#g" *.js
sed -i "s#DOCKER_NO_INTERNET_LOGO#$NO_INTERNET_LOGO#g" *.js
sed -i "s#DOCKER_MAP_MERCHANT_ICON_LINK#$MAP_MERCHANT_ICON_LINK#g" *.js
sed -i "s#DOCKER_MAP_USER_ICON_LINK#$MAP_USER_ICON_LINK#g" *.js
sed -i "s#DOCKER_MAP_CARRIER_ICON_LINK#$MAP_CARRIER_ICON_LINK#g" *.js
sed -i "s#DOCKER_API_FILE_UPLOAD_URL#$API_FILE_UPLOAD_URL#g" *.js
sed -i "s#DOCKER_COMPANY_NAME#$COMPANY_NAME#g" *.js
sed -i "s#DOCKER_COMPANY_SITE_LINK#$COMPANY_SITE_LINK#g" *.js
sed -i "s#DOCKER_COMPANY_GITHUB_LINK#$COMPANY_GITHUB_LINK#g" *.js
sed -i "s#DOCKER_COMPANY_FACEBOOK_LINK#$COMPANY_FACEBOOK_LINK#g" *.js
sed -i "s#DOCKER_COMPANY_TWITTER_LINK#$COMPANY_TWITTER_LINK#g" *.js
sed -i "s#DOCKER_COMPANY_LINKEDIN_LINK#$COMPANY_LINKEDIN_LINK#g" *.js
sed -i "s#DOCKER_GENERATE_PASSWORD_CHARSET#$GENERATE_PASSWORD_CHARSET#g" *.js
sed -i "s#DOCKER_SETTINGS_APP_TYPE#$SETTINGS_APP_TYPE#g" *.js
sed -i "s#DOCKER_SETTINGS_MAINTENANCE_API_URL#$SETTINGS_MAINTENANCE_API_URL#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
+25 −1
Original line number Diff line number Diff line
@@ -6,7 +6,16 @@ set -ex
# 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_API_HOST#$API_HOST#g" *.js
sed -i "s#DOCKER_API_PORT#$API_PORT#g" *.js
sed -i "s#DOCKER_WEB_HOST#$WEB_HOST#g" *.js
sed -i "s#DOCKER_WEB_PORT#$WEB_PORT#g" *.js
sed -i "s#DOCKER_HTTPS_SERVICES_ENDPOINT#$HTTPS_SERVICES_ENDPOINT#g" *.js
sed -i "s#DOCKER_SERVICES_ENDPOINT#$SERVICES_ENDPOINT#g" *.js
sed -i "s#DOCKER_GQL_ENDPOINT#$GQL_ENDPOINT#g" *.js
sed -i "s#DOCKER_GQL_SUBSCRIPTIONS_ENDPOINT#$GQL_SUBSCRIPTIONS_ENDPOINT#g" *.js
sed -i "s#DOCKER_SENTRY_DSN#$SENTRY_DSN#g" *.js
sed -i "s#DOCKER_CHATWOOT_SDK_TOKEN#$CHATWOOT_SDK_TOKEN#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
@@ -14,7 +23,22 @@ 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_DEFAULT_LANGUAGE#$DEFAULT_LANGUAGE#g" *.js
sed -i "s#DOCKER_CURRENCY_SYMBOL#$CURRENCY_SYMBOL#g" *.js
sed -i "s#DOCKER_NO_INTERNET_LOGO#$NO_INTERNET_LOGO#g" *.js
sed -i "s#DOCKER_MAP_MERCHANT_ICON_LINK#$MAP_MERCHANT_ICON_LINK#g" *.js
sed -i "s#DOCKER_MAP_USER_ICON_LINK#$MAP_USER_ICON_LINK#g" *.js
sed -i "s#DOCKER_MAP_CARRIER_ICON_LINK#$MAP_CARRIER_ICON_LINK#g" *.js
sed -i "s#DOCKER_API_FILE_UPLOAD_URL#$API_FILE_UPLOAD_URL#g" *.js
sed -i "s#DOCKER_COMPANY_NAME#$COMPANY_NAME#g" *.js
sed -i "s#DOCKER_COMPANY_SITE_LINK#$COMPANY_SITE_LINK#g" *.js
sed -i "s#DOCKER_COMPANY_GITHUB_LINK#$COMPANY_GITHUB_LINK#g" *.js
sed -i "s#DOCKER_COMPANY_FACEBOOK_LINK#$COMPANY_FACEBOOK_LINK#g" *.js
sed -i "s#DOCKER_COMPANY_TWITTER_LINK#$COMPANY_TWITTER_LINK#g" *.js
sed -i "s#DOCKER_COMPANY_LINKEDIN_LINK#$COMPANY_LINKEDIN_LINK#g" *.js
sed -i "s#DOCKER_GENERATE_PASSWORD_CHARSET#$GENERATE_PASSWORD_CHARSET#g" *.js
sed -i "s#DOCKER_SETTINGS_APP_TYPE#$SETTINGS_APP_TYPE#g" *.js
sed -i "s#DOCKER_SETTINGS_MAINTENANCE_API_URL#$SETTINGS_MAINTENANCE_API_URL#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.
+22 −3
Original line number Diff line number Diff line
@@ -121,20 +121,38 @@ metadata:
    annotations:
        service.beta.kubernetes.io/do-loadbalancer-name: 'apidemo.ever.co'
        service.beta.kubernetes.io/do-loadbalancer-protocol: 'http2'
        service.beta.kubernetes.io/do-loadbalancer-http2-ports: '443'

        # GraphQL Subscriptions use WebSockets on Port 5050
        service.beta.kubernetes.io/do-loadbalancer-http-ports: '5050'

        # Rest API works on 443, GraphQL API works on 5555
        service.beta.kubernetes.io/do-loadbalancer-http2-ports: '443,5555'

        # Replace with your Certificate Id. You can get a list of Ids with 'doctl compute certificate list'
        service.beta.kubernetes.io/do-loadbalancer-certificate-id: 'a93346c1-d63b-4c33-84c5-4589787428ca'
        service.beta.kubernetes.io/do-loadbalancer-size-slug: 'lb-small'
        service.beta.kubernetes.io/do-loadbalancer-hostname: 'apidemo.ever.co'

        service.beta.kubernetes.io/do-loadbalancer-sticky-sessions-type: 'cookies'
        service.beta.kubernetes.io/do-loadbalancer-sticky-sessions-cookie-name: 'route'
        service.beta.kubernetes.io/do-loadbalancer-sticky-sessions-cookie-ttl: '34650'
spec:
    type: LoadBalancer
    selector:
        app: ever-demo-api
    ports:
        - name: http
        - name: rest_api_http
          protocol: TCP
          port: 443
          targetPort: 5500
        - name: gql_api_http
          protocol: TCP
          port: 5555
          targetPort: 5555
        - name: gql_subscriptions_ws
          protocol: TCP
          port: 5050
          targetPort: 5050

---
apiVersion: apps/v1
@@ -168,6 +186,7 @@ spec:
                      #   value: '5501'
                      - name: GQLPORT
                        value: '5555'
                      # WebSockets (WS) used for GraphQL Subscriptions
                      - name: GQLPORT_SUBSCRIPTIONS
                        value: '5050'
                      - name: ADMIN_PASSWORD_RESET
@@ -239,7 +258,7 @@ spec:
                      # - name: SERVICES_ENDPOINT
                      #   value: ''
                      - name: GQL_ENDPOINT
                        value: 'http://apidemo.ever.co:5555/graphql'
                        value: 'https://apidemo.ever.co:5555/graphql'
                      - name: GQL_SUBSCRIPTIONS_ENDPOINT
                        value: 'ws://apidemo.ever.co:5050/subscriptions'
                      - name: SENTRY_DSN
+1 −0
Original line number Diff line number Diff line
@@ -67,6 +67,7 @@
	"cSpell.words": [
		"AGPL",
		"changeme",
		"CLOUDINARY",
		"Codegen",
		"CQRS",
		"devkit",
Loading