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)

ContainerPORT (host)Port (container)
Server30013001
MongoDB271727017

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

NameDescriptionExample
DB_URIURI on which database is runningmongodb://localhost:27017/multiemail
GOOGLE_CLIENT_IDClient ID obtained while creating google oauth concent screen758327950938-90jskrnp9b8d2e6ljpqrstd8fdl2k9fljkhchasnnrnj8.apps.googleusercontent.com
GOOGLE_CLIENT_SECRETClient Secret obtained while creating google oauth concent screenGOCSPX-NL52LzLNzF6YGJxlAoeLAnGK-a6
NODE_ENVWhat type of environment are you running this app indevelopment
EMAIL_IDWhich ID will be used for sending emailno-reply@multiemail.com
EMAIL_PASSWORDPassword of your email idmystrongpassword
ACCESS_TOKEN_PRIVATE_KEYprivate RSA key which will be used to sign access tokencheck .env.example file
ACCESS_TOKEN_PUBLIC_KEYpublic RSA key which will be used to verify access tokencheck .env.example file
REFRESH_TOKEN_PRIVATE_KEYprivate RSA key which will be used to sign refresh tokencheck .env.example file
REFRESH_TOKEN_PUBLIC_KEYpublic RSA key which will be used to verify refresh tokencheck .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