An email automation solution written in Golang. It facilitate users to register, send & schedule custom HTML mails for their clients.
- Api-server built using Go-fiber.
- Apache Kafka as a message broker.
- Postgres as database.
- Redis as cache.
- Client CLI built using Cobra.
- Mailgun as Email service.
- K6 for load testing.
- Prometheus & Grafana for Api-server monitoring.
- Authentication & authorization using JWT.
- Swagger included, built using Swago
- Full proof auth features - signup, login, update password, forgot password, logout.
- Cors, Helmet, Api-rate limiter included as middleware from security perspective.
- Users can register their clients & custom HTML templates.
- Mail scheduling (daily, weekly, monthly) using cron jobs.
- Subscription & Payment (payment has been stubbed for now and can be replaced with any suitable payment gateway).
- Api-server can be consumed by any client-side API, however for easy interaction - CLI (built using Cobra) has been included.
- Go,Docker,Docker compose & Make should be pre-installed.
- Clone the repository: git clone https://github.com/Harry-027/go-notify.git.
- Run the command make download(this will install go modules).
- Create a new file .env under root directory & copy the env variables from .sample-env. (Note that mailgun env variables should be replaced with original credentials. Rest may remain untouched)
- Run the command make setup(this will start the required docker containers - postgres, redis, apache kafka & zoo-keeper).
- Run the command docker psto ensure all the four containers are up & running.
- Open a new terminal & run the command make serverto spin up the api server.
- Open a new terminal & run the command make consumerto spin up the kafka consumer.
- Open a new terminal & run the command make cronjobto start the cron processes.
- Open a new terminal & run the command cli-go. This will install the go-notify cli on your machine.
- Cli is now ready to operate. Run the command go-notify --helpto explore various commands.
- Once the server starts listening on port 3001, visit http://localhost:3001/swagger/ on browser for swagger definition.
- Before spinning up Prometheus & Grafana for monitoring, replace the HOST_IP variable (under monitoring/prometheus/config.yml) with your machine IP.
- Run the command make monitorto start Api-server monitoring.
- Once the containers - Prometheus & Grafana are up, visit http://localhost:3000 on browser for Grafana dashboard.
- Default credentials for Grafana: username - 'admin' , password - 'admin'
- Once logged into Grafana, visit settings to select prometheus data source as target to view the dashboard.
- Before running load tests, replace the hostip variable value with your machine ip, under loadtesting/tests/loadtests.js
- Run the command make load-testingto run the load tests.
- Performance improvements, bug fixes, better design approaches are welcome. Please discuss any changes by raising an issue, beforehand.
Harish Bhawnani Linkedin Email
MIT © Harish Bhawnani
