Skip to content
Ayush Chugh edited this page Oct 7, 2022 · 2 revisions

Hello reader! Welcome to multi-email. There are two ways you can set up the project locally. The first method is done manually, and the second one is with docker. Let's do the manual way first:

Manual set up

Prerequisite

  • Latest Node js version
  • Yarn installed (npm i -g yarn)
  • Mongodb installed on local system
  • .env file with all required variables (check environment variables mentioned below)
mkdir multi-email
cd multi-email
git clone https://github.com/MultiEmail/backend.git
cd backend

Installing dependencies

yarn install

Run the server

yarn dev

Create admin user

yarn build
npm i -g .
multi-email-admin -e <email> -u <username> -p <password>

PSA: If you are using unix operating system than prefix all bash commands with sudo

Docker set up

Prerequisite

  • Docker is installed on your local system
  • .env file with all required variables (check environment variables mentioned below)

Run Server

docker compose --env-file ./.env up

To rebuild the image

docker compose --env-file ./.env up --build

Create admin user

List current running docker containers

docker ps

Output

CONTAINER ID   IMAGE          COMMAND                  CREATED          STATUS          PORTS                                         NAMES
d07f06c78445   backend-api    "docker-entrypoint.s…"   46 minutes ago   Up 46 minutes   0.0.0.0:3001->3001/tcp, :::3001->3001/tcp     Server
91826c111b76   mongo:latest   "docker-entrypoint.s…"   52 minutes ago   Up 46 minutes   0.0.0.0:2717->27017/tcp, :::2717->27017/tcp   Database

now copy the CONTAINER ID of image/container backend-api and replace <container_id> in the below mentioned commands and execute them

# build and install the command line tool in docker container
docker exec <container_id> yarn build
docker exec <container_id> npm i -g .
# create new admin user in database in docker container
docker exec <container_id> multi-email-admin -e <email> -u <username> -p <password>

Extra's (Port forwarding for docker containers)

Container PORT (host) Port (container)
Server 3001 3001
MongoDB 2717 27017

if you want to access database inside docker container from host than use

mongosh --port 2717

or if you want to use mongodb compass than you can use this connection string

mongodb://mongo_db:27017/multiemail

Environment Variables

To run this project, you will need to add the following environment variables to your .env file

Name Description Example
DB_URI URI on which database is running mongodb://localhost:27017/multiemail
GOOGLE_CLIENT_ID Client ID obtained while creating google oauth concent screen 758327950938-90jskrnp9b8d2e6ljpqrstd8fdl2k9fljkhchasnnrnj8.apps.googleusercontent.com
GOOGLE_CLIENT_SECRET Client Secret obtained while creating google oauth concent screen GOCSPX-NL52LzLNzF6YGJxlAoeLAnGK-a6
NODE_ENV What type of environment are you running this app in development
EMAIL_ID Which ID will be used for sending email [email protected]
EMAIL_PASSWORD Password of your email id mystrongpassword
ACCESS_TOKEN_PRIVATE_KEY private RSA key which will be used to sign access token check .env.example file
ACCESS_TOKEN_PUBLIC_KEY public RSA key which will be used to verify access token check .env.example file
REFRESH_TOKEN_PRIVATE_KEY private RSA key which will be used to sign refresh token check .env.example file
REFRESH_TOKEN_PUBLIC_KEY public RSA key which will be used to verify refresh token check .env.example file

NOTEs

  • Your DB_URI must be mongodb://mongo_db:27017/multiemail if you are using docker
  • If you use gmail account as EMAIL_ID than you must enable 2FA for your google account and generate app password and use it as EMAIL_PASS

Resources for generating .env variables

  • You can get google credentials by following this guide
  • You can use crypto tools for generating RSA keys for access and refresh tokens
  • RSA keys must be 1024