From d4659eee07a3f1b5699ecc630011d5bbb3c4f997 Mon Sep 17 00:00:00 2001 From: Ephraim Atta-Duncan Date: Mon, 18 Sep 2023 17:58:01 +0000 Subject: [PATCH] feat: add deploying documenso with vercel, supabase and resend --- .../deploy-with-vercel-supabase-resend.mdx | 198 ++++++++++++++++++ .../public/blog/blog-author-duncan.jpeg | Bin 0 -> 21395 bytes 2 files changed, 198 insertions(+) create mode 100644 apps/marketing/content/blog/deploy-with-vercel-supabase-resend.mdx create mode 100644 apps/marketing/public/blog/blog-author-duncan.jpeg diff --git a/apps/marketing/content/blog/deploy-with-vercel-supabase-resend.mdx b/apps/marketing/content/blog/deploy-with-vercel-supabase-resend.mdx new file mode 100644 index 000000000..fb00f40bf --- /dev/null +++ b/apps/marketing/content/blog/deploy-with-vercel-supabase-resend.mdx @@ -0,0 +1,198 @@ +--- +title: 'Deploying Documenso with Vercel, Supabase and Resend' +description: This is the first part of the new Building Documenso series, where I describe the challenges and design choices that we make while building the world’s most open signing platform. +authorName: 'Ephraim Atta-Duncan' +authorImage: '/blog/blog-author-duncan.jpeg' +authorRole: 'Software Engineer Intern' +date: 2023-09-08 +tags: + - Open Source + - Self Hosting + - Tutorial +--- + +In this article, we'll walk you through how to deploy and self-host Documenso using Vercel, Supabase, and Resend. + +You'll learn: + +- How to set up a Postgres database using Supabase, +- How to install SMTP with Resend, +- How to deploy your project with Vercel. + +If you don't know what [Documenso](https://documenso.com/) is, it's an open-source alternative to DocuSign, with the mission to create an open signing infrastructure while embracing openness, cooperation, and transparency. + +## Prerequisites + +Before we start, make sure you have a [GitHub](https://github.com/signup) account. You also need [Node.js](https://nodejs.org/en) and [npm](https://www.npmjs.com/) installed on your local machine (note: you also have the option to host it on a cloud environment using Gitpod for example; that would be another post). If you need accounts on Vercel, Supabase, and Resend, create them by visiting the [Vercel](https://vercel.com/), [Supabase](https://supabase.com/), and [Resend](https://resend.com/) websites. + +Checklist: + +- [ ] Have a GitHub account +- [ ] Install Node.js +- [ ] Install npm +- [ ] Have a Vercel account +- [ ] Have a Supabase account +- [ ] Have a Resend account + +## Step-by-Step guide to deploying Documenso with Vercel, Supabase, and Resend + +To deploy Documenso, we'll take the following steps: + +1. Fork the Documenso repository +2. Clone the forked repository and install dependencies +3. Create a new project on Supabase +4. Copy the Supabase Postgres database connection URL +5. Create a `.env` file +6. Run the migration on the Supabase Postgres Database +7. Get your SMTP Keys on Resend +8. Create a new project on Vercel +9. Add Environment Variables to your Vercel project + +So, you're ready? Let’s dive in! + +### Step 1: Fork the Documenso repository + +Start by creating a fork of Documenso on GitHub. You can do this by visiting the [Documenso repository](https://github.com/documenso/documenso) and clicking on the 'Fork' button. (Also, star the repo!) + +![Documenso](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/wkcujctpf86p56bju3mq.png) + +Choose your GitHub profile as the owner and click on 'Create fork' to create a fork of the repo. + +![Fork the Documenso repository on GitHub](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/xf49r2byu9nnd1465niy.png) + +### Step 2: Clone the forked repository and install dependencies + +Clone the forked repository to your local machine in any directory of your choice. Open your terminal and enter the following commands: + +```bash +# Clone the repo using Github CLI +gh repo clone [your_github_username]/documenso + +# Clone the repo using Git +git clone +``` + +You can now navigate into the directory and install the project’s dependencies: + +```bash +cd documenso +npm install +``` + +### Step 3: Create a new project on Supabase + +Now, let's set up the database. + +If you haven't already, create a new project on Supabase. This will automatically create a new Postgres database for you. + +On your Supabase dashboard, click the '**New project**' button and choose your organization. + +On the '**Create a new project**' page, set a database name of **documenso** and a secure password for your database. Choose a region closer to you, a pricing plan, and click on '**Create new project**' to create your project. + +![Create a new project on Supabase](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/w5lqz771iupjyi1ekfdz.png) + +### Step 4: Copy the Supabase Postgres database connection URL + +In your project, click the '**Settings**' icon at the bottom left. + +Under the '**Project Settings**' section, click '**Database**' and scroll down to the '**Connection string**' section. Copy the '**URI**' and update it with the password you chose in the previous step. + +![Copy the Supabase Postgres database connection URL](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/y1ldu3qrg9moednbzjij.png) + +### Step 5: Create a `.env` file + +Create a `.env` file in the root of your project by copying the contents of the `.env.example` file. + +Add the connection string you copied from your Supabase dashboard to the `DATABASE_URL` variable in the `.env` file. + +The `.env` should look like this: + +```bash +DATABASE_URL="postgres://postgres:[YOUR-PASSWORD]@db.[YOUR-PROJECT-REF].supabase.co:5432/postgres" +``` + +### Step 6: Run the migration on the Supabase Postgres Database + +Run the migration on the Supabase Postgres Database using the following command: + +```bash +npx prisma migrate deploy +``` + +### Step 7: Get your SMTP Keys on Resend + +So, you've just cloned Documenso, installed dependencies on your local machine, and set your database using Supabase. Now, SMTP is missing. Emails won't go out! Let's fix it with Resend. + +In the **[Resend](https://resend.com/)** dashboard, click 'Add API Key' to create a key for Resend SMTP. + +![Create a key for Resend SMTP](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/uh2rztgn09mlvecl34i5.png) + +Next, add and verify your domain in the '**Domains**' section on the sidebar. This will allow you to send emails from any address associated with your domain. + +![Verify your domain on Resend](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/nxgie0esz530vq5a494o.png) + +You can update your `.env` file with the following: + +```jsx +SMTP_MAIL_HOST = 'smtp.resend.com'; +SMTP_MAIL_PORT = '25'; +SMTP_MAIL_USER = 'resend'; +SMTP_MAIL_PASSWORD = 'YOUR_RESEND_API_KEY'; +MAIL_FROM = 'noreply@[YOUR_DOMAIN]'; +``` + +### Step 8: Create a new project on Vercel + +You set the database with Supabase and are SMTP-ready with Resend. Almost there! The next step is to deploy the project — we'll use Vercel for that. + +On your Vercel dashboard, create a new project using the forked project from your GitHub repositories. Select the project among the options and click '**Import**' to start running Documenso. + +![Create a new project on Vercel](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/gdy97tltpnu7vf4fc11f.png) + +### Step 9: Add Environment Variables to your Vercel project + +In the '**Configure Project**' page, adding the required Environmental Variables is essential to ensure the application deploys without any errors. + +Specifically, for the `NEXT_PUBLIC_WEBAPP_URL` and `NEXTAUTH_URL` variables, you must add `.vercel.app` to your Project Name. This will form the deployment URL, which will be in the format: `https://[project_name].vercel.app`. + +For example, in my case, the deployment URL is `https://documenso-supabase-web.vercel.app`. + +![Add Environment Variables to your Vercel project](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/aru33fk1i19h0valffow.png) + +This is a sample `.env` to deploy. Copy and paste it to auto-populate the fields and click ‘**Deploy.’** Now, you only need to wait for your project to deploy. You’re going live — enjoy! + +```bash +DATABASE_URL='postgresql://postgres:typeinastrongpassword@db.njuigobjlbteahssqbtw.supabase.co:5432/postgres' + +NEXT_PUBLIC_WEBAPP_URL='https://documenso-supabase-web.vercel.app' +NEXTAUTH_SECRET='something gibrish to encrypt your jwt tokens' +NEXTAUTH_URL='https://documenso-supabase-web.vercel.app' + +# Get a Sendgrid Api key here: +SENDGRID_API_KEY='' + +# Set SMTP credentials to use SMTP instead of the Sendgrid API. +SMTP_MAIL_HOST='smtp.resend.com' +SMTP_MAIL_PORT='25' +SMTP_MAIL_USER='resend' +SMTP_MAIL_PASSWORD='YOUR_RESEND_API_KEY' +MAIL_FROM='noreply@[YOUR_DOMAIN]' + +NEXT_PUBLIC_ALLOW_SIGNUP=true +``` + +## Wrapping up + +![Deploying Documenso](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/secg29j9j40o4u2oa8o8.png) + +Congratulations! 🎉 You've successfully deployed Documenso using Vercel, Supabase, and Resend. You're now ready to create and sign your own documents with your self-hosted Documenso! + +In this step-by-step guide, you learned how to: + +- set up a Postgres database using Supabase, +- install SMTP with Resend, +- deploy your project with Vercel. + +Over to you! How was the tutorial? If you enjoyed it, [please do share](https://twitter.com/documenso/status/1700141802693480482)! And if you have any questions or comments, please reach out to me on [Twitter / X](https://twitter.com/EphraimDuncan_) (DM open) or [Discord](https://documen.so/discord). + +We're building an open-source alternative to DocuSign and welcome every contribution. Head over to the GitHub repository and [leave us a Star](https://github.com/documenso/documenso)! diff --git a/apps/marketing/public/blog/blog-author-duncan.jpeg b/apps/marketing/public/blog/blog-author-duncan.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..a4a52711c7f3f60c07e41b7e1c29cf7d22a94b75 GIT binary patch literal 21395 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