From 091a21c8e6438b21ea6bfd59e8491f10af501c76 Mon Sep 17 00:00:00 2001 From: fred <> Date: Tue, 15 Jul 2025 12:02:11 -0700 Subject: [PATCH] dockerize app --- .gitignore | 1 + backend/Dockerfile | 13 ++++++++++ backend/backendServer.js | 7 +++-- backend/knexfile.js | 4 +-- docker-compose.yaml | 38 ++++++++++++++++++++++++++++ frontend/Dockerfile | 13 ++++++++++ frontend/package.json | 2 +- frontend/src/services/frontendApi.js | 8 +++--- postgres/docker-compose.yaml | 2 +- 9 files changed, 78 insertions(+), 10 deletions(-) create mode 100644 backend/Dockerfile create mode 100644 docker-compose.yaml create mode 100644 frontend/Dockerfile diff --git a/.gitignore b/.gitignore index fcdbad0..7b8da4b 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,5 @@ examp_frontend/ postgres/db */.env +.env todo diff --git a/backend/Dockerfile b/backend/Dockerfile new file mode 100644 index 0000000..5f442d8 --- /dev/null +++ b/backend/Dockerfile @@ -0,0 +1,13 @@ +FROM node:22 + +WORKDIR /usr/src/app + +COPY package*.json ./ + +RUN npm install + +COPY . . + +EXPOSE 3000 + +CMD ["npm", "run", "dev"] diff --git a/backend/backendServer.js b/backend/backendServer.js index db73b61..2f72b26 100644 --- a/backend/backendServer.js +++ b/backend/backendServer.js @@ -1,6 +1,6 @@ const express = require("express"); const db = require("./db"); -const port = 6063; +const port = 3000; const cors = require('cors'); // to remove cors origin error in dev TODO: remove when dockerized const app = express(); @@ -8,7 +8,10 @@ app.use(cors()); // to remove cors origin error in dev TODO: remove when docker app.use(express.json()); // ####### ROUTES ####### - +app.get("/test", async (req, res) => { + console.log('test') + res.json({ test: 'test' }) +}); // ### GET ALL RECIPES ### app.get("/recipes", async (req, res) => { try { diff --git a/backend/knexfile.js b/backend/knexfile.js index 64574eb..815faad 100644 --- a/backend/knexfile.js +++ b/backend/knexfile.js @@ -5,8 +5,8 @@ module.exports = { development: { client: 'postgresql', connection: { - host: process.env.DB_HOST, - port: process.env.DB_PORT, + host: 'db', + port: 5432, database: process.env.DB_NAME, user: process.env.DB_USER, password: process.env.DB_PASSWORD diff --git a/docker-compose.yaml b/docker-compose.yaml new file mode 100644 index 0000000..4682f1e --- /dev/null +++ b/docker-compose.yaml @@ -0,0 +1,38 @@ +services: + db: + container_name: recipes_postgres + image: docker.io/library/postgres:17 + restart: always + env_file: + - .env + environment: + - POSTGRES_USER=${DB_USER} + - POSTGRES_PASSWORD=${DB_PASSWORD} + - POSTGRES_DB=${DB_NAME} + ports: + - "5432:5432" + volumes: + - ./postgres/db:/var/lib/postgresql/data + backend: + image: recipes_backend + container_name: recipes_backend + build: ./backend + ports: + - "3000:3000" + volumes: + - ./backend:/usr/src/app + environment: + - NODE_ENV=development + - DB_USER=${DB_USER} + - DB_PASSWORD=${DB_PASSWORD} + - DB_NAME=${DB_NAME} + frontend: + image: recipes_frontend + container_name: recipes_frontend + build: ./frontend + ports: + - "8080:80" + volumes: + - ./frontend:/usr/src/app + environment: + - NODE_ENV=development diff --git a/frontend/Dockerfile b/frontend/Dockerfile new file mode 100644 index 0000000..98d1043 --- /dev/null +++ b/frontend/Dockerfile @@ -0,0 +1,13 @@ +FROM node:22 + +WORKDIR /usr/src/app + +COPY package*.json ./ + +RUN npm install + +COPY . . + +EXPOSE 80 + +CMD ["npm", "run", "dev"] diff --git a/frontend/package.json b/frontend/package.json index e36a4d1..974ef0d 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -4,7 +4,7 @@ "version": "0.0.0", "type": "module", "scripts": { - "dev": "vite", + "dev": "vite --host --port 80", "build": "tsc -b && vite build", "lint": "eslint .", "preview": "vite preview" diff --git a/frontend/src/services/frontendApi.js b/frontend/src/services/frontendApi.js index 934dc11..4ad64d8 100644 --- a/frontend/src/services/frontendApi.js +++ b/frontend/src/services/frontendApi.js @@ -1,11 +1,11 @@ export const getRecipes = async () => { - const response = await fetch("http://localhost:6063/recipes"); + const response = await fetch("http://localhost:3000/recipes"); const data = await response.json(); return data; }; export const getRecipeById = async (id) => { - const response = await fetch(`http://localhost:6063/recipe/${id}`); + const response = await fetch(`http://localhost:3000/recipe/${id}`); const data = await response.json(); return data; }; @@ -13,7 +13,7 @@ export const getRecipeById = async (id) => { export const addRecipe = async (recipeData) => { console.log(JSON.stringify(recipeData)) // return - const response = await fetch("http://localhost:6063/add-recipe", { + const response = await fetch("http://localhost:3000/add-recipe", { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(recipeData) @@ -27,7 +27,7 @@ export const deleteRecipe = async (id) => { console.log('run delete') console.log(id) // return - const response = await fetch("http://localhost:6063/delete-recipe", { + const response = await fetch("http://localhost:3000/delete-recipe", { method: 'DELETE', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ id }) diff --git a/postgres/docker-compose.yaml b/postgres/docker-compose.yaml index 78d8a66..0e4eb1a 100644 --- a/postgres/docker-compose.yaml +++ b/postgres/docker-compose.yaml @@ -10,6 +10,6 @@ services: - POSTGRES_PASSWORD=${DB_PASSWORD} - POSTGRES_DB=${DB_NAME} ports: - - "${DB_PORT}:5432" + - "5432:5432" volumes: - ./db:/var/lib/postgresql/data