- Node v18
- Docker
We also use npm instead of yarn or pnpm to be consistent with the frontend.
-
First install the vscode extensions for a better dev experience. You can find them in the
.vscode/extensions.json
file. To install them, go to the Extensions tab, filter by Recommended and click on theWorkspace Recommendations
tab. Docs if you need help -
Setup the environment variables. There is an
.env.example
file in the root of the project. Copy it and rename it to.env
. Fill in the values. -
Install the dependencies with
npm install
. -
After you have Docker installed, run the following command:
docker-compose up -d --build
This will start the Postgres database and the NestJS API in watch mode. Any changes you make to the source code will be reflected in the container using Webpack HMR. It will also run the Prisma migrations and seed the database.
The only exposed port is 3000
.
- To use the REST APIs, call
localhost:3000
. There is also a swagger page atlocalhost:3000/api
. - To use the Chat websocket, call
localhost:3000/chat
- To use the Live Drops websocket, call
localhost:3000/live-drops
Going to localhost:3000/api
will also open up the swagger page.
There is also a pgAdmin container running, that you can access at localhost:5050
.
When installing new dependencies with npm, you will need to rebuild the Docker container. You can do this by running the following command:
docker-compose up --build -dV (note the capital V)
The -V
flag will remove any anonymous volumes that are attached to the container, such as the one were the node_modules
are stored.
Because Prisma is a terrible piece of software, it will crash if you try to do this inside docker:
- Change the schema file
- Run
prisma generate
- Restart the container
- Run
prisma migrate
from inside the container
This works locally, but not in docker for some reason. So instead, you will need to do the following:
- Have the container already running
- Change the schema file
- Run
npx prisma migrate dev --name NameOfMigration
fom inside the container with the name of the new migration - Restart the container
This will ensure that everything works as expected.
To reset the db, run npx prisma migrate reset
inside the docker container terminal.
To seed the db, run npx prisma db seed
inside the docker container terminal.
We already have a droplet setup in DigitalOcean here.
To deploy the docker-compose file manually to the droplet, do the following
- Setup a docker remote context for the droplet:
docker context create remote --docker "host=ssh://deployer@64.226.91.7"
. - Switch to the remote context:
docker context use remote
. - Run
docker compose -f docker-compose.yml up --build -dV
to deploy the docker-compose file to the droplet. - Inspect changes with
docker compose ps
- Change your context back to local with
docker context use default
Tests are run with Jest. You can run them with the following command:
npm run test
E2E test are run with:
npm run test:e2e
Sometimes you might get this message in the docker logs:
Error: Prisma Migrate has detected that the environment is non-interactive, which is not supported.
`prisma migrate dev` is an interactive command designed to create new migrations and evolve the database in development.
To apply existing migrations in deployments, use prisma migrate deploy.
See https://www.prisma.io/docs/reference/api-reference/command-reference#migrate-deploy
This is because prisma thinks the shell it is being run from is non interactive. To fix this, run the docker-compose in interactive mode.
Be aware that you need 2 cors configurations:
- One for the NestJS API
- One for the websockets server
There is a cors middleware in the NestJS API setup, but you also need to configure cors in the websockets server (chat for example).
DigitalOcean will cache the node_modules
folder between builds if the package.json
has not changed.
This will sometimes make the build fail, because of new db schema properties introduced in the latest migration. To fix this, clear the deploy cache, and rebuild.