A dockerized TypeScript-Express App boilerplate with MongoDB and Github Actions
MIT License
This repo can be used as a starting point for backend development with Nodejs. It comes bundled with Docker and is CI/CD optimized. The development environment uses docker-compose
to start dependent services like mongo. There is an action to review all PRs with ChatGPT.
A few things to note in the project:
http://localhost:3000/dev/api-docs
curl
$ bash <(curl -s https://raw.githubusercontent.com/sidhantpanda/public/master/scripts/generate-express-ts-app.sh)
$ git clone [email protected]:sidhantpanda/docker-express-typescript-boilerplate.git your-app-name
$ cd your-app-name
$ yarn install
$ yarn setup-actions
Starting the dev server also starts MongoDB as a service in a docker container using the compose script at docker-compose.dev.yml
.
$ yarn dev
Running the above commands results in
http://localhost:3000
http://localhost:3000/dev/api-docs
mongodb://localhost:27017
The mongo container is only only available in dev environment. When you build and deploy the docker image, be sure to provide the correct environment variables.
$ yarn build && yarn start
$ docker build -t api-server .
$ docker run -t -i \
--env NODE_ENV=production \
--env MONGO_URL=mongodb://host.docker.internal:27017/books \
-p 3000:3000 \
api-server
$ docker-compose up
To edit environment variables, create a file with name .env
and copy the contents from .env.default
to start with.
Var Name | Type | Default | Description |
---|---|---|---|
NODE_ENV | string | development |
API runtime environment. eg: staging
|
PORT | number | 3000 |
Port to run the API server on |
MONGO_URL | string | mongodb://localhost:27017/books |
URL for MongoDB |
The application uses winston as the default logger. The configuration file is at src/logger.ts
.
./logs
directory and at /logs
in the docker container.docker-compose
file has a volume attached to container to expose host directory to the container for writing logs.+-- scripts
| +-- dev.sh
| +-- setup-github-actions.sh
+-- src
| +-- controllers
| | +-- book
| | | +-- add.ts
| | | +-- all.ts
| | | +-- get.ts
| | | +-- index.ts
| | | +-- remove.ts
| | | +-- search.ts
| +-- errors
| | +-- application-error.ts
| | +-- bad-request.ts
| +-- lib
| | +-- safe-mongo-connection.ts
| | +-- winston-console-transport.ts
| +-- middleware
| | +-- request-middleware.ts
| +-- models
| | +-- Book.ts
| +-- public
| | +-- index.html
| +-- app.ts
| +-- logger.ts
| +-- routes.ts
| +-- server.ts
+-- .env.default
+-- .eslintrc.json
+-- .gitignore
+-- .gitpod.yml
+-- docker-compose.dev.yml
+-- docker-compose.yml
+-- Dockerfile
+-- jest.config.js
+-- LICENSE
+-- nodemon.json
+-- openapi.yml
+-- package.json
+-- README.md
+-- renovate.json
+-- tsconfig.json
+-- yarn.lock