From 5d786f59cc6802945908040be86662690903807e Mon Sep 17 00:00:00 2001 From: Baptiste Arnaud Date: Wed, 25 May 2022 08:13:35 -0700 Subject: [PATCH] =?UTF-8?q?build:=20=F0=9F=91=B7=20New=20compose=20file=20?= =?UTF-8?q?and=20entrypoints?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 3 +- Dockerfile | 12 ++++- apps/builder/.env.docker | 13 +++++ apps/builder/components/auth/SignInForm.tsx | 13 ++--- .../components/auth/SocialLoginButtons.tsx | 14 ++++-- .../share/codeSnippets/Chat/EmbedCode.tsx | 6 ++- .../codeSnippets/Container/EmbedCode.tsx | 6 ++- .../share/codeSnippets/Iframe/EmbedCode.tsx | 6 ++- .../share/codeSnippets/Popup/EmbedCode.tsx | 6 ++- .../share/codeSnippets/ReactCode.tsx | 16 ++++--- .../share/customDomain/CustomDomainModal.tsx | 8 +++- .../modals/GtmModal/GtmInstructions.tsx | 6 ++- .../share/integrations/modals/NotionModal.tsx | 11 +++-- .../ShopifyModal/ShopifyInstructions.tsx | 6 ++- .../integrations/modals/WordpressModal.tsx | 11 +++-- apps/builder/components/shared/CodeEditor.tsx | 3 +- .../ImageUploadContent/ImageUploadContent.tsx | 3 +- .../components/shared/SearchableDropdown.tsx | 3 +- .../components/shared/SmartNumberInput.tsx | 3 +- .../components/shared/SupportBubble.tsx | 6 ++- .../components/shared/Textbox/TextBox.tsx | 3 +- .../components/shared/VariableSearchInput.tsx | 4 +- .../FontSelector/FontSelector.tsx | 3 +- .../TypebotContext/TypebotContext.tsx | 4 +- apps/builder/pages/api/auth/[...nextauth].ts | 17 +++---- .../api/typebots/[typebotId]/invitations.ts | 3 +- apps/builder/services/api/dbRules.ts | 3 +- apps/builder/services/folders.ts | 8 +++- apps/builder/services/stripe.ts | 4 +- apps/builder/services/typebots/invitations.ts | 8 +++- apps/builder/services/typebots/typebots.ts | 5 +- apps/builder/services/workspace/member.ts | 4 +- apps/docs/docs/self-hosting/docker.md | 12 ++--- apps/viewer/.env.docker | 3 ++ apps/viewer/.env.production.example | 3 +- apps/viewer/layouts/ErrorPage.tsx | 3 +- apps/viewer/services/api/dbRules.ts | 3 +- builder-entrypoint.sh | 12 +++++ docker-compose.build.yml | 46 ++++++++++++++++++ docker-compose.yml | 47 ++++++++----------- entrypoint.sh | 35 ++++++++++++++ .../src/components/TypebotViewer.tsx | 3 +- packages/utils/src/utils.ts | 6 +++ viewer-entrypoint.sh | 7 +++ 44 files changed, 288 insertions(+), 113 deletions(-) create mode 100644 apps/builder/.env.docker create mode 100644 apps/viewer/.env.docker create mode 100644 builder-entrypoint.sh create mode 100644 docker-compose.build.yml create mode 100644 entrypoint.sh create mode 100644 viewer-entrypoint.sh diff --git a/.gitignore b/.gitignore index ab355bf90..c6264d861 100644 --- a/.gitignore +++ b/.gitignore @@ -2,7 +2,6 @@ node_modules .next .env .env.local -.env.production workspace.code-workspace .DS_Store .turbo @@ -18,6 +17,8 @@ test-results build firebaseServiceAccount.json +.env.production + # Wordpress .svn tags diff --git a/Dockerfile b/Dockerfile index aacf2009e..7d0f042b4 100644 --- a/Dockerfile +++ b/Dockerfile @@ -17,6 +17,7 @@ RUN yarn install --frozen-lockfile FROM base AS builder COPY --from=installer /app/ . COPY --from=pruner /app/out/full/ . +COPY ./apps/${SCOPE}/.env.docker ./apps/${SCOPE}/.env.production RUN apt-get -qy update && apt-get -qy install openssl RUN yarn turbo run build --scope=${SCOPE} --include-dependencies --no-deps RUN find . -name node_modules | xargs rm -rf @@ -31,7 +32,14 @@ COPY --from=builder /app/apps/${SCOPE}/public ./public COPY --from=builder /app/apps/${SCOPE}/package.json ./package.json COPY --from=builder /app/apps/${SCOPE}/.next/standalone ./ COPY --from=builder /app/apps/${SCOPE}/.next/static ./.next/static +COPY --from=builder /app/apps/${SCOPE}/.env.docker ./.env.production RUN apt-get -qy update && apt-get -qy install openssl + +COPY entrypoint.sh ./ +COPY ${SCOPE}-entrypoint.sh ./ +RUN chmod +x ./${SCOPE}-entrypoint.sh +RUN chmod +x ./entrypoint.sh +ENTRYPOINT ./${SCOPE}-entrypoint.sh + EXPOSE 3000 -ENV PORT 3000 -CMD ["node", "server.js"] \ No newline at end of file +ENV PORT 3000 \ No newline at end of file diff --git a/apps/builder/.env.docker b/apps/builder/.env.docker new file mode 100644 index 000000000..f64c57428 --- /dev/null +++ b/apps/builder/.env.docker @@ -0,0 +1,13 @@ +# Don't edit this file +NEXT_PUBLIC_VIEWER_URL=DOCKER_PUBLIC_VIEWER_URL +NEXT_PUBLIC_SMTP_FROM=DOCKER_NEXT_PUBLIC_SMTP_FROM +NEXT_PUBLIC_SMTP_AUTH_DISABLED=DOCKER_NEXT_PUBLIC_SMTP_AUTH_DISABLED +NEXT_PUBLIC_GOOGLE_CLIENT_ID=DOCKER_NEXT_PUBLIC_GOOGLE_CLIENT_ID +NEXT_PUBLIC_GOOGLE_API_KEY=DOCKER_NEXT_PUBLIC_GOOGLE_API_KEY +NEXT_PUBLIC_GITHUB_CLIENT_ID=DOCKER_NEXT_PUBLIC_GITHUB_CLIENT_ID +NEXT_PUBLIC_GITLAB_CLIENT_ID=DOCKER_NEXT_PUBLIC_GITLAB_CLIENT_ID +NEXT_PUBLIC_GITLAB_NAME=DOCKER_NEXT_PUBLIC_GITLAB_NAME +NEXT_PUBLIC_FACEBOOK_CLIENT_ID=DOCKER_NEXT_PUBLIC_FACEBOOK_CLIENT_ID +NEXT_PUBLIC_GIPHY_API_KEY=DOCKER_NEXT_PUBLIC_GIPHY_API_KEY +NEXT_PUBLIC_STRIPE_PUBLIC_KEY=DOCKER_NEXT_PUBLIC_STRIPE_PUBLIC_KEY +NEXT_PUBLIC_SENTRY_DSN=DOCKER_NEXT_PUBLIC_SENTRY_DSN diff --git a/apps/builder/components/auth/SignInForm.tsx b/apps/builder/components/auth/SignInForm.tsx index daad9ec1a..33a2d2efc 100644 --- a/apps/builder/components/auth/SignInForm.tsx +++ b/apps/builder/components/auth/SignInForm.tsx @@ -14,14 +14,15 @@ import { DividerWithText } from './DividerWithText' import { SocialLoginButtons } from './SocialLoginButtons' import { useRouter } from 'next/router' import { NextChakraLink } from 'components/nextChakra/NextChakraLink' +import { isEmpty } from 'utils' const hasNoAuthProvider = - (!process.env.NEXT_PUBLIC_SMTP_FROM || + (isEmpty(process.env.NEXT_PUBLIC_SMTP_FROM) || process.env.NEXT_PUBLIC_SMTP_AUTH_DISABLED === 'true') && - !process.env.NEXT_PUBLIC_GOOGLE_CLIENT_ID && - !process.env.NEXT_PUBLIC_GITHUB_CLIENT_ID && - !process.env.NEXT_PUBLIC_FACEBOOK_CLIENT_ID && - !process.env.NEXT_PUBLIC_GITLAB_CLIENT_ID + isEmpty(process.env.NEXT_PUBLIC_GOOGLE_CLIENT_ID) && + isEmpty(process.env.NEXT_PUBLIC_GITHUB_CLIENT_ID) && + isEmpty(process.env.NEXT_PUBLIC_FACEBOOK_CLIENT_ID) && + isEmpty(process.env.NEXT_PUBLIC_GITLAB_CLIENT_ID) type Props = { defaultEmail?: string @@ -77,7 +78,7 @@ export const SignInForm = ({ return ( - {process.env.NEXT_PUBLIC_SMTP_FROM && + {!isEmpty(process.env.NEXT_PUBLIC_SMTP_FROM) && process.env.NEXT_PUBLIC_SMTP_AUTH_DISABLED !== 'true' && ( <> Or with your email diff --git a/apps/builder/components/auth/SocialLoginButtons.tsx b/apps/builder/components/auth/SocialLoginButtons.tsx index 0c9805cbf..55b22535c 100644 --- a/apps/builder/components/auth/SocialLoginButtons.tsx +++ b/apps/builder/components/auth/SocialLoginButtons.tsx @@ -5,6 +5,7 @@ import { useRouter } from 'next/router' import React from 'react' import { stringify } from 'qs' import { FacebookLogo, GoogleLogo, GitlabLogo } from 'assets/logos' +import { isEmpty } from 'utils' export const SocialLoginButtons = () => { const { query } = useRouter() @@ -32,7 +33,7 @@ export const SocialLoginButtons = () => { return ( - {process.env.NEXT_PUBLIC_GITHUB_CLIENT_ID && ( + {!isEmpty(process.env.NEXT_PUBLIC_GITHUB_CLIENT_ID) && ( )} - {process.env.NEXT_PUBLIC_GOOGLE_CLIENT_ID && ( + {!isEmpty(process.env.NEXT_PUBLIC_GOOGLE_CLIENT_ID) && ( )} - {process.env.NEXT_PUBLIC_FACEBOOK_CLIENT_ID && ( + {!isEmpty(process.env.NEXT_PUBLIC_FACEBOOK_CLIENT_ID) && ( )} - {process.env.NEXT_PUBLIC_GITLAB_CLIENT_ID && ( + {!isEmpty(process.env.NEXT_PUBLIC_GITLAB_CLIENT_ID) && ( )} diff --git a/apps/builder/components/share/codeSnippets/Chat/EmbedCode.tsx b/apps/builder/components/share/codeSnippets/Chat/EmbedCode.tsx index a9ae3a54f..c2974d967 100644 --- a/apps/builder/components/share/codeSnippets/Chat/EmbedCode.tsx +++ b/apps/builder/components/share/codeSnippets/Chat/EmbedCode.tsx @@ -5,6 +5,7 @@ import { BubbleParams } from 'typebot-js' import { parseInitBubbleCode, typebotJsHtml } from '../params' import { useTypebot } from 'contexts/TypebotContext' import { CodeEditor } from 'components/shared/CodeEditor' +import { isEmpty } from 'utils' type ChatEmbedCodeProps = { withStarterVariables?: boolean @@ -20,8 +21,9 @@ export const ChatEmbedCode = ({ const snippet = prettier.format( createSnippet({ url: `${ - process.env.NEXT_PUBLIC_VIEWER_INTERNAL_URL ?? - process.env.NEXT_PUBLIC_VIEWER_URL + isEmpty(process.env.NEXT_PUBLIC_VIEWER_INTERNAL_URL) + ? process.env.NEXT_PUBLIC_VIEWER_URL + : process.env.NEXT_PUBLIC_VIEWER_INTERNAL_URL }/${typebot?.publicId}`, button, proactiveMessage, diff --git a/apps/builder/components/share/codeSnippets/Container/EmbedCode.tsx b/apps/builder/components/share/codeSnippets/Container/EmbedCode.tsx index 4cb68abad..d2dd0e094 100644 --- a/apps/builder/components/share/codeSnippets/Container/EmbedCode.tsx +++ b/apps/builder/components/share/codeSnippets/Container/EmbedCode.tsx @@ -5,6 +5,7 @@ import { parseInitContainerCode, typebotJsHtml } from '../params' import { IframeParams } from 'typebot-js' import { useTypebot } from 'contexts/TypebotContext' import { CodeEditor } from 'components/shared/CodeEditor' +import { isEmpty } from 'utils' type ContainerEmbedCodeProps = { widthLabel: string @@ -22,8 +23,9 @@ export const ContainerEmbedCode = ({ const snippet = prettier.format( parseSnippet({ url: `${ - process.env.NEXT_PUBLIC_VIEWER_INTERNAL_URL ?? - process.env.NEXT_PUBLIC_VIEWER_URL + isEmpty(process.env.NEXT_PUBLIC_VIEWER_INTERNAL_URL) + ? process.env.NEXT_PUBLIC_VIEWER_URL + : process.env.NEXT_PUBLIC_VIEWER_INTERNAL_URL }/${typebot?.publicId}`, heightLabel, widthLabel, diff --git a/apps/builder/components/share/codeSnippets/Iframe/EmbedCode.tsx b/apps/builder/components/share/codeSnippets/Iframe/EmbedCode.tsx index 44f185403..8656aca81 100644 --- a/apps/builder/components/share/codeSnippets/Iframe/EmbedCode.tsx +++ b/apps/builder/components/share/codeSnippets/Iframe/EmbedCode.tsx @@ -1,6 +1,7 @@ import { FlexProps } from '@chakra-ui/react' import { CodeEditor } from 'components/shared/CodeEditor' import { useTypebot } from 'contexts/TypebotContext' +import { isEmpty } from 'utils' type Props = { widthLabel: string @@ -13,8 +14,9 @@ export const IframeEmbedCode = ({ }: Props & FlexProps) => { const { typebot } = useTypebot() const src = `${ - process.env.NEXT_PUBLIC_VIEWER_INTERNAL_URL ?? - process.env.NEXT_PUBLIC_VIEWER_URL + isEmpty(process.env.NEXT_PUBLIC_VIEWER_INTERNAL_URL) + ? process.env.NEXT_PUBLIC_VIEWER_URL + : process.env.NEXT_PUBLIC_VIEWER_INTERNAL_URL }/${typebot?.publicId}` const code = `