ACI Multi-Containers Group ExpressWebAPI, MongoDB,

https://github.com/w3cj/express-api-starter

Includes API Server utilities:

  • morgan
    • HTTP request logger middleware for node.js
  • helmet
    • Helmet helps you secure your Express apps by setting various HTTP headers. It's not a silver bullet, but it can help!
  • dotenv
    • Dotenv is a zero-dependency module that loads environment variables from a .env file into process.env

Development utilities:

  • nodemon
    • nodemon is a tool that helps develop node.js based applications by automatically restarting the node application when file changes in the directory are detected.
  • eslint
    • ESLint is a tool for identifying and reporting on patterns found in ECMAScript/JavaScript code.
  • mocha
    • ☕️ Simple, flexible, fun JavaScript test framework for Node.js & The Browser ☕️
  • supertest
    • HTTP assertions made easy via superagent.

Setup

npm install

Lint

npm run lint

Test

npm run test

Development

npm run dev

Azure AD - Open ID Connect JWT validation middleware for Node.

npm install passport-azure-ad

passport-azure-ad

Repo

Google, Facebook, Twitter

Passportjs.org

Deploy Multi-Containers Group

(Resource Manager Template - ARM)(https://docs.microsoft.com/en-us/azure/container-instances/container-instances-multi-container-group)

az deployment group create -g myRG -f acig-web-mongo-arm.json

ARM Template: acig-web-mongo-arm.json

  • 3 containers (2 web, 1 mongo):
    • 1 public web port, 1 private web port, 1 private mongodb port

ARM Template: acig-mongo-arm.json

  • 1 container mongo
    • 1 public mongo port - require authentication

Azure Secret

MongoDB

Create User / Role

Admin root

use admin
db.createUser({ user: "username", pwd: "password", roles: ["root"] })
use mydb
db.createUser({ user: "username", pwd: "password", roles: ["dbOwner"] })

Authentication

Allow anonymous:

  • Mongo start arm: "command": [ "mongod", "--dbpath=/aci/data", "--bind_ip_all" ]
  • connectionString: mongodb://myaci.eastus.azurecontainer.io/?retryWrites=true

Authenticated users only (--auth):

  • Mongo start arm: "command": [ "mongod", "--dbpath=/aci/data", "--bind_ip_all", "--auth" ]
  • connectionString: mongodb://username:password@myaci.eastus.azurecontainer.io/?authSource=mydb&retryWrites=true

References