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
45 changes: 45 additions & 0 deletions .github/workflows/deploy.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
name: CI/CD Deploy to EC2

on:
push:
branches:
- deploy

jobs:
build-and-deploy:
runs-on: ubuntu-latest

steps:
# checkout code
- name: Checkout code
uses: actions/checkout@v3

# log in to docker
- name: Log in to Docker Hub
uses: docker/login-action@v2
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_PASSWORD }}

# build docker image
- name: Build Docker Image
run: |
docker build -t thepujon/simple_blog_backend:latest .

# push docker image
- name: Push Docker Image
run: |
docker push thepujon/simple_blog_backend:latest

# deploy to EC2
- name: Deploy to EC2
uses: appleboy/ssh-action@v0.1.6
with:
host: ${{ secrets.EC2_HOST }}
username: ${{ secrets.EC2_USER }}
key: ${{ secrets.EC2_SSH_KEY }}
port: 22
script: |
cd /home/ec2-user/my-app
docker-compose -f docker-compose.yaml -f docker-compose.prod.yaml pull
docker-compose -f docker-compose.yaml -f docker-compose.prod.yaml up -d
57 changes: 44 additions & 13 deletions Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -47,29 +47,60 @@



FROM node:20-alpine
# FROM node:20-alpine

# WORKDIR /app

# # Copy package.json and package-lock.json first for better caching
# COPY package*.json ./
# # Copy prisma folder
# COPY prisma ./prisma/

# # Install dependencies
# RUN npm install

# # Copy the rest of your app
# COPY . .


# # Generate Prisma client
# RUN npx prisma generate

# # Build NestJS app
# RUN npm run build

# EXPOSE 5000

# # Start the app in production mode
# CMD ["node", "dist/src/main.js"]

# ---------- Build Stage ----------
FROM node:22-alpine AS builder

WORKDIR /app

# Copy package.json and package-lock.json first for better caching
COPY package*.json ./
# Copy prisma folder
COPY prisma ./prisma/

# Install dependencies
RUN npm install
RUN npm ci

# Copy the rest of your app
COPY . .


# Generate Prisma client
RUN npx prisma generate

# Build NestJS app
RUN npm run build

EXPOSE 5000

# Start the app in production mode
CMD ["node", "dist/src/main.js"]
# ---------- Runtime Stage ----------
FROM node:22-alpine

WORKDIR /app

COPY --from=builder /app/node_modules ./node_modules
COPY --from=builder /app/dist ./dist
COPY --from=builder /app/prisma ./prisma
COPY package*.json ./

ENV NODE_ENV=production

EXPOSE 5000
CMD ["node", "dist/src/main.js"]
25 changes: 25 additions & 0 deletions docker-compose.override.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
services:

backend:
container_name: simple_blog_backend
# image: thepujon/simple_blog_backend:1.5
build:
context: ./
dockerfile: Dockerfile
ports:
- "5000:5000"
environment:
DATABASE_URL: postgresql://${POSTGRES_USER}:${POSTGRES_PASSWORD}@postgres_db:5432/${POSTGRES_DB}
DATABASE_HOST: postgres_db
DATABASE_PORT: 5432
DATABASE_USER: ${POSTGRES_USER}
DATABASE_PASSWORD: ${POSTGRES_PASSWORD}
DATABASE_NAME: ${POSTGRES_DB}
NODE_ENV: ${NODE_ENV}
CHOKIDAR_USEPOLLING: "true"
CHOKIDAR_INTERVAL: 1000
depends_on:
- postgres_db
- pg_admin
networks:
- blog_network
26 changes: 26 additions & 0 deletions docker-compose.prod.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
services:


backend:
container_name: simple_blog_backend
image: thepujon/simple_blog_backend:latest
# build:
# context: ./
# dockerfile: Dockerfile
ports:
- "5000:5000"
environment:
DATABASE_URL: postgresql://${POSTGRES_USER}:${POSTGRES_PASSWORD}@postgres_db:5432/${POSTGRES_DB}
DATABASE_HOST: postgres_db
DATABASE_PORT: 5432
DATABASE_USER: ${POSTGRES_USER}
DATABASE_PASSWORD: ${POSTGRES_PASSWORD}
DATABASE_NAME: ${POSTGRES_DB}
NODE_ENV: ${NODE_ENV}
CHOKIDAR_USEPOLLING: "true"
CHOKIDAR_INTERVAL: 1000
depends_on:
- postgres_db
- pg_admin
networks:
- blog_network
23 changes: 0 additions & 23 deletions docker-compose.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -29,29 +29,6 @@ services:
networks:
- blog_network

backend:
container_name: simple_blog_backend
image: thepujon/simple_blog_backend:1.5
# build:
# context: ./
# dockerfile: Dockerfile
ports:
- "5000:5000"
environment:
DATABASE_HOST: ${DATABASE_HOST}
DATABASE_PORT: ${DATABASE_PORT}
DATABASE_USER: ${POSTGRES_USER}
DATABASE_PASSWORD: ${POSTGRES_PASSWORD}
DATABASE_NAME: ${POSTGRES_DB}
NODE_ENV: ${NODE_ENV}
CHOKIDAR_USEPOLLING: "true"
CHOKIDAR_INTERVAL: 1000
depends_on:
- postgres_db
- pg_admin
networks:
- blog_network

networks:
blog_network:
driver: bridge
Expand Down
2 changes: 1 addition & 1 deletion lib/prisma.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import 'dotenv/config';
import { PrismaPg } from '@prisma/adapter-pg';
import { PrismaClient } from '../generated/prisma/client';
import { PrismaClient } from '@prisma/client';

const connectionString = `${process.env.DATABASE_URL}`;

Expand Down
Loading