Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
51 changes: 51 additions & 0 deletions .dockerignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
# compiled output
/dist
/node_modules

# Logs
logs
*.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*
lerna-debug.log*

# OS
.DS_Store

# Tests
/coverage
/.nyc_output

# IDEs and editors
/.idea
.project
.classpath
.c9/
*.launch
.settings/
*.sublime-workspace

# IDE - VSCode
.vscode/*
!.vscode/settings.json
!.vscode/tasks.json
!.vscode/launch.json
!.vscode/extensions.json

# Elastic Beanstalk Files
.elasticbeanstalk/*
!.elasticbeanstalk/*.cfg.yml
!.elasticbeanstalk/*.global.yml

# GIT
.git/

# AWS CDK
cdk/
cdk.context.json
cdk.out

.env*
test/
.dockerignore
2 changes: 1 addition & 1 deletion .env.example
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
PORT=4000
SERVER_PORT=4000

PG_DB=nest-rest-api
PG_DB=cart
Expand Down
8 changes: 8 additions & 0 deletions .env.local
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
SERVER_PORT=4000

PG_HOST=cart.c3aey8qs0t72.us-east-1.rds.amazonaws.com
PG_DB=cart
PG_USER=postgres
PG_PASSWORD=lHkkyloIUUA7mlmr1Jbw
PG_PORT=5432
DATABASE_URL=postgresql://${PG_USER}:${PG_PASSWORD}@${PG_HOST}:${PG_PORT}/${PG_DB}
10 changes: 5 additions & 5 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -32,13 +32,13 @@ lerna-debug.log*
!.vscode/tasks.json
!.vscode/launch.json
!.vscode/extensions.json
# Elastic Beanstalk Files
.elasticbeanstalk/*
!.elasticbeanstalk/*.cfg.yml
!.elasticbeanstalk/*.global.yml

# AWS CDK
cdk.context.json
cdk.out

.env
.env
# Elastic Beanstalk Files
.elasticbeanstalk/*
!.elasticbeanstalk/*.cfg.yml
!.elasticbeanstalk/*.global.yml
37 changes: 37 additions & 0 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
FROM node:20-alpine AS base

FROM base AS install-dev
WORKDIR /tmp/dev
COPY package*.json ./
RUN npm ci

FROM base AS install-prod
WORKDIR /tmp/prod
COPY package*.json ./
RUN npm ci --omit dev

FROM install-dev AS prisma
COPY prisma ./prisma
RUN npm run db:generate

FROM prisma AS build
ENV NODE_ENV=production
COPY tsconfig* webpack.config.js ./
COPY src ./src
RUN npm run build

FROM base
WORKDIR /app
COPY --from=install-prod /tmp/prod/node_modules/@prisma ./node_modules/@prisma/
COPY --from=install-prod /tmp/prod/node_modules/prisma ./node_modules/prisma/
COPY --from=install-prod /tmp/prod/node_modules/.bin ./node_modules/.bin/

COPY --from=build /tmp/dev/node_modules/.prisma ./node_modules/.prisma/
COPY --from=build /tmp/dev/prisma ./prisma/

COPY --from=build /tmp/dev/dist/main.js ./dist/
COPY --from=build /tmp/dev/dist/seed.js ./dist/
COPY --from=build /tmp/dev/package.json ./

EXPOSE 4000
CMD ["dist/main.js"]
8 changes: 8 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -124,3 +124,11 @@ Nest is [MIT licensed](LICENSE).
## TODO

- add auth and check it in CartService

## Elastic Beanstalk

steps:

- `npm run eb:init`
- `npm run eb:create`
- `npm run eb:terminate`
11 changes: 4 additions & 7 deletions docker-compose.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,20 +6,17 @@ services:
ports:
- 5432:5432
environment:
- PG_HOST=${PG_HOST}
- PG_DB=${PG_DB}
- PG_USER=${PG_USER}
- PG_PASSWORD=${PG_PASSWORD}
- PG_PORT=${PG_PORT}
- POSTGRES_USER=${PG_USER}
- POSTGRES_PASSWORD=${PG_PASSWORD}
healthcheck:
test: ['CMD-SHELL', 'pg_isready -U ${PG_USER}']
interval: 3s
timeout: 3s
retries: 5

server:
image: mcnic/aws-cart-service
command: sh -c "npm run db:deploy && npm run db:seed && npm run start:prod"
image: mcnic/cart-api
command: sh -c "npm run db:deploy && node ./dist/seed.js && npm run start:prod"
restart: always
depends_on:
db:
Expand Down
17 changes: 17 additions & 0 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

17 changes: 16 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
"db:migrate": "npx prisma migrate dev",
"db:seed": "npx prisma db seed",
"db:seed2": "node -r dotenv/config ./scripts/seed.js",
"db:deploy": "prisma migrate deploy --schema ./prisma",
"deploy": "npm run build && cdk deploy",
"format": "prettier --write src test deploy",
"start": "nest start",
Expand All @@ -23,7 +24,21 @@
"test:watch": "jest --watch",
"test:cov": "jest --coverage",
"test:debug": "node --inspect-brk -r tsconfig-paths/register -r ts-node/register node_modules/.bin/jest --runInBand",
"test:e2e": "jest --config ./test/jest-e2e.json"
"test:e2e": "jest --config ./test/jest-e2e.json",
"docker:build": "docker build --tag mcnic/cart-api:latest .",
"docker:push": "docker push mcnic/cart-api:latest",
"docker:start": "docker run -it --rm -p 4000:4000 mcnic/cart-api",
"docker:test": "docker run -it --rm -p 4000:4000 mcnic/cart-api /bin/sh",
"docker:up": "docker compose --env-file .env up --detach",
"docker:down": "docker compose down",
"eb:init": "eb init mcnic-cart-api",
"eb:create": "eb create prod3 --cname mcnic-cart-api-prod3 --single",
"eb:create-2": "env-cmd -x -f .env eb create prod --cname mcnic-cart-api-prod --single --envvars DATABASE_URL=\\$DATABASE_URL SERVER_PORT=\\$SERVER_PORT PG_USER=\\$PG_USER PG_PASSWORD=\\$PG_PASSWORD --instance-types=t2.micro",
"eb:create-3": "env-cmd -x -f .env eb create prod --cname mcnic-cart-api-prod --single --envvars DATABASE_URL=\\$DATABASE_URL SERVER_PORT=\\$SERVER_PORT PG_USER=\\$PG_USER PG_PASSWORD=\\$PG_PASSWORD PG_HOST=\\$PG_HOST --instance-types=t2.micro",
"eb:setenv": "env-cmd -x -f .env eb setenv DATABASE_URL=\\${DATABASE_URL} SERVER_PORT=\\$SERVER_PORT PG_USER=\\$PG_USER PG_PASSWORD=\\$PG_PASSWORD PG_HOST=\\$PG_HOST",
"eb:deploy": "eb deploy prod3",
"eb:terminate": "eb terminate --all",
"eb:logs": "eb logs | grep ERROR"
},
"dependencies": {
"@codegenie/serverless-express": "^4.14.1",
Expand Down
8 changes: 6 additions & 2 deletions webpack.config.js
Original file line number Diff line number Diff line change
Expand Up @@ -11,11 +11,15 @@ module.exports = (options, webpack) => {
...options,
devtool: 'source-map',
externals: [],
entry: './src/handlers/cart.ts',
entry: {
'handlers/cart/cart': 'src/handlers/cart.ts',
main: 'src/main.ts',
seed: 'prisma/seed.ts',
},
output: {
...options.output,
libraryTarget: 'commonjs2',
filename: 'handlers/cart/cart.js',
filename: '[name].js',
},
optimization: {
minimize: false,
Expand Down