BYO Database
Nitric currently does not have out of the box support for databases. This way you can use whatever tooling and ORMs you prefer for directly interfacing with your database. Our recommendation for local development is to set up a container that runs alongside your Nitric processes. For a production environment, you can use any of the database services for your preferred cloud:
You can track the support for relational databases here.
PostgreSQL
Image
For a local PostgreSQL instance, we recommend the official docker image. It has the following configuration variables:
- POSTGRES_USER
- POSTGRES_PASSWORD
- POSTGRES_DB
Connect
The official postgres driver is recommended for basic connections to a PostgreSQL instance. However, if you would prefer a higher abstraction, we recommend Prisma ORM. You can read our guide on using Prisma here.
import { Client } from 'pg'
const client = new Client()
await client.connect()
Run Locally
To start, make sure you have a .env file containing your environment variables.
POSTGRES_USER=root
POSTGRES_PASSWORD=root
POSTGRES_DB=my-database
You can then create a docker compose file to simplify running your docker container each time.
version: '3.6'
services:
  postgres:
    image: postgres
    restart: always
    environment:
      - POSTGRES_USER=$POSTGRES_USER
      - POSTGRES_PASSWORD=$POSTGRES_PASSWORD
      - POSTGRES_DB=$POSTGRES_DB
    ports:
      - '5432:5432'
You can add a script to your package.json which will run the docker compose file.
"scripts": {
  "db": "docker compose up --wait"
}
Then for any local development you can just run yarn db.
MySQL
Image
For a local MySQL instance, we recommend the official docker image. It has the following configuration variables:
- MYSQL_ROOT_PASSWORD
- MYSQL_USER
- MYSQL_PASSWORD
- MYSQL_DATABASE
Connect
The official mysql driver is recommended for basic connections to a MySQL instance. However, if you would prefer a higher abstraction, we recommend Prisma ORM. You can read our guide on using Prisma here.
import mysql from 'mysql'
var con = mysql.createConnection({
  host: HOST,
  user: USERNAME,
  password: PASSWORD,
})
con.connect(function (err) {
  if (err) throw err
  console.log('Connected!')
})
You can then create a docker compose file to simplify running your docker container each time.
version: '3.6'
services:
  mysql:
    image: mysql
    restart: always
    environment:
      - MYSQL_ROOT_PASSWORD=$MYSQL_ROOT_PASSWORD
      - MYSQL_USER=$MYSQL_USER
      - MYSQL_PASSWORD=$MYSQL_PASSWORD
      - MYSQL_DATABASE=$MYSQL_DATABASE
    ports:
      - '5432:5432'
You can add a script to your package.json which will run the docker compose file.
"scripts": {
  "db": "docker compose up --wait"
}
Then for any local development you can just run yarn db.
MongoDB
Image
For a local MongoDB instance, we recommend the official docker image. It has the following configuration variables:
- MONGO_INITDB_ROOT_USERNAME
- MONGO_INITDB_ROOT_PASSWORD
- MONGO_INITDB_DATABASE
Connect
The official mongodb driver is recommended for basic connections to a MongoDB instance. However, if you would prefer a higher abstraction, we recommend Prisma ORM. You can read our guide on using Prisma here.
const client = new MongoClient(
  `mongodb://${USERNAME}:${PASSWORD}@${HOST}/${DATABASE}`
)
await client.connect()
You can then create a docker compose file to simplify running your docker container each time.
version: '3.6'
services:
  mongodb:
    image: mongodb
    restart: always
    environment:
      - MONGO_INITDB_ROOT_USERNAME=$MONGO_INITDB_ROOT_USERNAME
      - MONGO_INITDB_ROOT_PASSWORD=$MONGO_INITDB_ROOT_PASSWORD
      - MONGO_INITDB_DATABASE=$MONGO_INITDB_DATABASE
    ports:
      - '27017:27017'
You can add a script to your package.json which will run the docker compose file.
"scripts": {
  "db": "docker compose up --wait"
}
Then for any local development you can just run yarn db.