An opinionated library of common functionality to bootstrap an API application using MongoDb and Firebase. Currently either Fastify or Koa can be used as the web server; Fastify will be the focus going forward due to lack of support and updates with the Koa stack.
Requires NodeJs version 22+.
npm -g i nodemon
Install the NPM dependencies for the server.
npm install
Mongo is the only currently supposed option as the server side data source.
- Install the MongoDb (either locally or in the cloud) server
- Recommendation is MongoDb Atlas (https://www.mongodb.com/cloud/atlas) for development/sandbox
- Create a new MongoDb database in the Mongo server
- Restore the default SocietySidekick MongoDb
- Use the following MongoDb CLI tool to restore the default database located at (https://github.com/thzero/societySidekick-database)
.\bin\mongorestore --host <mongodb host name> --ssl --username <mongo user name> --password <mongo user password> --authenticationDatabase admin -d production <location of default database>
Recommended tools for managing Mongo database
- MongoDb Compass (https://www.mongodb.com/products/compass)
- Robo3T (https://robomongo.org)
Google Firebase (https://firebase.google.com) provides the social based authentication; currently only Google social accounts are supported.
- Add a new project
- Setup Authentication, enabled Google in the Sign-in method.
- Get the Firebase SDK configuration
- Go to Project Overview->Settings->Service accounts
- Select Node.js option
- Click Generate new private key
- Copy the contents of the file that was downloaded when generating a new private key into the 'config\ServiceAccountKey.json' file.
The following setup for configuration is required for an application using this library_server dependency
- Setup the configuration found in the config\development.json
- Note that this is ignored in the .gitignore
- Configuration looks like the following
{
"app": {
"auth": {
"apiKey": "<generate a GUID as key in standard nomeclature '#######-####-####-####-############'>",
"claims": {
"check": <true of false, false by default>,
"useDefault": <true of false, false by default>
}
},
"cors": {
"origin": "*"
},
"db": {
"default": "mongo"
"mongo": {
"connection": "<mongo connection string>",
"name": "<environment name>"
}
},
"logging": {
"level": <see https://github.com/pinojs/pino/issues/123 for logging levels>,
"prettify": <true of false if you want prettify, if true requres 'pino-prettify' as a dependency>
},
"port": <port to run the server on>
}
}
The following environmnent variables override the above configuration settings found in the config file.
- AUTH_API_KEY
- AUTH_CLAIMS_CHECK
- AUTH_CLAIMS_USE_DEFAULT
- CORS_ORIGIN
- DB_DEFAULT
- DB_CONNECTION_ATLAS
- DB_NAME_ATLAS
- DB_CONNECTION_MONGO
- DB_NAME_MONGO
- IP_ADDRESS
- LOGGING_LEVEL
- LOGGING_PRETTIFY
- PORT
- Include the following in the package.json for the application.
"version_major": #,
"version_minor": #,
"version_patch": #,
"version_date": "MM/DD/YYYY",
Run the application server locally in debug mode with hot reloading via Nodemon.
npm run debug
Install VisualCode, open the 'server' folder via 'Open Folder'.
Using the Menu->Run->Start Debugging will launch the application in debug mode with hot reloading via Nodemon
See Google Cloud Hosting.
Login to Google Cloud hosting, select the same account that was setup for Firebase.
Enable the following APIs in the Enable APIs & Services section for the project.
- Cloud Source Repositories API
- Cloud Build API
Update the cloudbuild.yaml file in the source project and change the following based on your account name
https://source.developers.google.com/p/<account name>/r/github_thzero_rocket_sidekick-common
This is a mirror of the GitHub repo for the following repos:
-
https://img.shields.io/github/package-json/v/thzero/rocket_sidekick-common
-
https://img.shields.io/github/package-json/v/thzero/rocket_sidekick-server
-
Add Repository
-
Connect external repository
-
Select the project setup by Firebase, then GitHub
-
Select the web-common repo
-
Connect selected repositories
Select repository, then permissions. Verify that the Cloud Build Service Account is listed.
https://cloud.google.com/run/docs/continuous-deployment-with-cloud-build https://cloud.google.com/run/docs/deploying#service
- Continuously deploy new revisions from a source repository
- Use Set Up With Cloud Build
- Select the Repository Provide and Repository
- Click Next
- Branch: ^master$
- Build Type: Dockerfile
- Source location: /Dockerfile
- Click Save
- CPU is only allocated during request processing
- Minimum 0
- Maximum 1000
- All
- Allow unauthenticated invocations
- 512mb 1 cpu
- Requested Timeout 300
- Max Request per Container 80
Add these variables:
- SERVICE_ACCOUNT_KEY -
- AUTH_API_KEY -
- DB_DEFAULT - atla
- DB_CONNECTION_ALTAS -
- DB_NAME_ALTAS - production
- DB_CONNECTION_MONGO -
- optional
- DB_NAME_MONGO - production
- optional
- LOG_LEVEL - debug
- IP_ADDRESS - 0.0.0.0
In Cloud Build, go to the Repositories section.
- Select an appropriate region, should be for the same region as your Cloud Run is running on
- Select 2nd Gen
- Link Repository to create a link to your repository
- Create a new Host Connection
- Select the same region as your Cloud Run is running on
-
Set name for the connection
-
Click Connect to create the connection
-
You may require the Security Manager API to be enabled
-
Click Continue in the confirmation dialog
- Select an installation user or Install a new account
- Push to branch
- Select the same region as used with the Cloud Source Repository
- Select 2nd
- Select the repository
- Select "^master$" branch
- Cloud Build configuration file (yaml or json)
- Repository
- Cloud Build configuration file location
- / cloudbuild.yaml
Run the trigger to kick of a deploy.