From c40c14a4817758f519ad56cb1c0d4316b8b76ee3 Mon Sep 17 00:00:00 2001 From: Nemo D'ACREMONT Date: Fri, 25 Oct 2024 18:52:06 +0200 Subject: [PATCH 01/12] feat: copy the templates folder to dist when compiling --- back-end/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/back-end/package.json b/back-end/package.json index 7c8cdf5..52aae97 100644 --- a/back-end/package.json +++ b/back-end/package.json @@ -5,7 +5,7 @@ "scripts": { "startonly": "node dist/app.js", "start": "tsc && node dist/app.js", - "build": "tsc", + "build": "tsc && cp -r src/templates dist", "test": "echo \"Error: no test specified\" && exit 1" }, "keywords": [], From 2aa20308f6f520c164e511a58f8fa6ac3b4a155b Mon Sep 17 00:00:00 2001 From: Nemo D'ACREMONT Date: Fri, 25 Oct 2024 18:52:29 +0200 Subject: [PATCH 02/12] feat: add dotenv to load .env, ejs for templates, morgan for logging --- back-end/package.json | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/back-end/package.json b/back-end/package.json index 52aae97..591ffb8 100644 --- a/back-end/package.json +++ b/back-end/package.json @@ -13,13 +13,18 @@ "license": "ISC", "description": "", "devDependencies": { + "@types/ejs": "^3.1.5", "@types/express": "^5.0.0", + "@types/morgan": "^1.9.9", "@types/pg": "^8.11.10", "globals": "^15.11.0", "typescript": "^5.6.3" }, "dependencies": { + "dotenv": "^16.4.5", + "ejs": "^3.1.10", "express": "^4.21.1", + "morgan": "^1.10.0", "pg": "^8.13.1" } } From b42d40303126e101773fb68c5caadedf0ac17d41 Mon Sep 17 00:00:00 2001 From: Nemo D'ACREMONT Date: Fri, 25 Oct 2024 18:53:13 +0200 Subject: [PATCH 03/12] feat: create .env.example for dev mode, and .env.production for prod environnement --- back-end/.env.example | 15 +++++++++------ back-end/.env.production | 6 ++++++ 2 files changed, 15 insertions(+), 6 deletions(-) create mode 100644 back-end/.env.production diff --git a/back-end/.env.example b/back-end/.env.example index 8abc227..9731b96 100644 --- a/back-end/.env.example +++ b/back-end/.env.example @@ -1,7 +1,10 @@ -NODE_ENV="dev" +# This .env file is meant for developpement usage, use +# .env.production for production +NODE_PORT=3000 +NODE_ENV=dev -DB_HOST="postgres" -DB_NAME="briques" -DB_USER="briques_db" -DB_PASSWORD="briques_password" -DB_PORT=5432 \ No newline at end of file +# those values must be the same as in ../docker-compose.dev.yml +DB_HOST=localhost +DB_NAME=briques_db +DB_USER=briques_llm +DB_PASSWORD=briques_password_2025 diff --git a/back-end/.env.production b/back-end/.env.production new file mode 100644 index 0000000..f63a029 --- /dev/null +++ b/back-end/.env.production @@ -0,0 +1,6 @@ +NODE_PORT=3000 +NODE_ENV=production +DB_HOST=briques_postegres +DB_NAME=briques_db +DB_USER=briques_llm +DB_PASSWORD=briques_password_2025 From d95109a86ea045b929c32839204228d350bc473d Mon Sep 17 00:00:00 2001 From: Nemo D'ACREMONT Date: Fri, 25 Oct 2024 18:54:01 +0200 Subject: [PATCH 04/12] refactor: use .env to configure the server in Dockerfile, it uses the .env.production --- back-end/.dockerignore | 5 +++++ back-end/Dockerfile.back | 21 ++------------------- 2 files changed, 7 insertions(+), 19 deletions(-) create mode 100644 back-end/.dockerignore diff --git a/back-end/.dockerignore b/back-end/.dockerignore new file mode 100644 index 0000000..19d5689 --- /dev/null +++ b/back-end/.dockerignore @@ -0,0 +1,5 @@ +node_modules +dist +.env +.env.example +nodemon.json diff --git a/back-end/Dockerfile.back b/back-end/Dockerfile.back index 9079939..269cce1 100644 --- a/back-end/Dockerfile.back +++ b/back-end/Dockerfile.back @@ -4,30 +4,14 @@ FROM node:22-alpine # Workdir definition WORKDIR /usr/src/back -# Environment declaration variables -ENV NODE_ENV="dev" -ENV DB_HOST="briques_postgres" -ENV DB_NAME="briques_db" -ENV DB_USER="briques_llm" -ENV DB_PASSWORD="briques_password_2025" -ENV DB_PORT=5432 - COPY package.json ./ RUN npm install - RUN npm install -g pm2 # Copy sources COPY . . - -# Setting up environment -RUN echo "NODE_ENV=${NODE_ENV}" > .env \ - && echo "DB_HOST=${DB_HOST}" >> .env \ - && echo "DB_NAME=${DB_NAME}" >> .env \ - && echo "DB_USER=${DB_USER}" >> .env \ - && echo "DB_PORT=${DB_PORT}" >> .env \ - && echo "DB_PASSWORD=${DB_PASSWORD}" >> .env +COPY .env.production .env # Compilation des fichiers TypeScript RUN npm run build @@ -40,5 +24,4 @@ RUN chmod -R u=rwx,g=,o= ./ EXPOSE 3000 # Start app -CMD ["npm", "run", "startonly"] -#CMD ["pm2", "start", "dist/app.js", "--no-daemon"] +CMD ["pm2", "start", "dist/app.js", "--no-daemon"] From 9fc9d871268e99222d450a8bfe1bcb80ff0125e5 Mon Sep 17 00:00:00 2001 From: Nemo D'ACREMONT Date: Fri, 25 Oct 2024 18:54:35 +0200 Subject: [PATCH 05/12] feat: add a first example template --- back-end/src/templates/index.ejs | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 back-end/src/templates/index.ejs diff --git a/back-end/src/templates/index.ejs b/back-end/src/templates/index.ejs new file mode 100644 index 0000000..f875856 --- /dev/null +++ b/back-end/src/templates/index.ejs @@ -0,0 +1,13 @@ + + + + + + Leohl !dworl + + +

Naisu

+

<%= message %>

+

Lorem, ipsum dolor sit amet consectetur adipisicing elit. Sapiente quod dicta molestiae harum veniam iste, nostrum nemo earum commodi fugit modi, ratione obcaecati, beatae ullam. Debitis ducimus dignissimos rem at.

+ + From 55334fa2b1150025128a0b18ea4e3319a4044304 Mon Sep 17 00:00:00 2001 From: Nemo D'ACREMONT Date: Fri, 25 Oct 2024 18:55:21 +0200 Subject: [PATCH 06/12] feat: load .env on app startup --- back-end/src/app.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/back-end/src/app.ts b/back-end/src/app.ts index dee7341..899ca35 100644 --- a/back-end/src/app.ts +++ b/back-end/src/app.ts @@ -1,3 +1,7 @@ +// Load dotenv before any process.env is accessed +import dotenv from 'dotenv'; +dotenv.config() + import express from 'express'; import db from './db'; From 0904acb9a965bc06549e98ee2debd9e3c008980e Mon Sep 17 00:00:00 2001 From: Nemo D'ACREMONT Date: Fri, 25 Oct 2024 19:00:55 +0200 Subject: [PATCH 07/12] feat: move routes definition to ./routes/ --- back-end/src/app.ts | 5 ----- back-end/src/routes/index.ts | 16 ++++++++++++++++ 2 files changed, 16 insertions(+), 5 deletions(-) create mode 100644 back-end/src/routes/index.ts diff --git a/back-end/src/app.ts b/back-end/src/app.ts index 899ca35..5dd59ec 100644 --- a/back-end/src/app.ts +++ b/back-end/src/app.ts @@ -3,15 +3,10 @@ import dotenv from 'dotenv'; dotenv.config() import express from 'express'; -import db from './db'; const app = express(); const port = process.env.PORT ?? 3000; -app.get('/', async (_req, res) => { - const message = await db.example_request(); - res.send(message); -}); app.listen(port, () => { return console.log(`Express is listening at http://localhost:${port}`); diff --git a/back-end/src/routes/index.ts b/back-end/src/routes/index.ts new file mode 100644 index 0000000..7a7c473 --- /dev/null +++ b/back-end/src/routes/index.ts @@ -0,0 +1,16 @@ +import { Router } from "express"; +import db from '../db'; + +const routes = Router(); + +routes.get('/', async (_req, res) => { + const message = await db.example_request(); + res.send(message); +}); + +routes.get("/message", async (_req, res) => { + const message = await db.example_request(); + res.render('index.ejs', { message }); +}); + +export default routes; From 622c59df4d335f289ddc889c7d3a91589a2344ee Mon Sep 17 00:00:00 2001 From: Nemo D'ACREMONT Date: Fri, 25 Oct 2024 19:02:16 +0200 Subject: [PATCH 08/12] feat: add logs and setup ejs templates --- back-end/src/app.ts | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/back-end/src/app.ts b/back-end/src/app.ts index 5dd59ec..17c6482 100644 --- a/back-end/src/app.ts +++ b/back-end/src/app.ts @@ -3,11 +3,25 @@ import dotenv from 'dotenv'; dotenv.config() import express from 'express'; +import morgan from 'morgan'; +import path from 'path'; +import routes from './routes'; const app = express(); const port = process.env.PORT ?? 3000; +const log_format = (process.env.NODE_ENV === "dev") ? "dev": "combined"; +console.log("=== LOG CONFIG ==="); +console.log(`log format: ${log_format}`); +console.log("=== END LOG CONFIG ==="); + +// Need the path.join for node to resolve correctly the templates directory +app.set('views', path.join(__dirname, 'templates')); +app.set('view engine', 'ejs'); + +// Add logs +app.use(morgan(log_format)); app.listen(port, () => { - return console.log(`Express is listening at http://localhost:${port}`); + return console.log(`Briques is listening at http://localhost:${port}`); }); From fda268a0331053b8381a13a2072fc29035324d57 Mon Sep 17 00:00:00 2001 From: Nemo D'ACREMONT Date: Fri, 25 Oct 2024 19:02:30 +0200 Subject: [PATCH 09/12] feat: use routes in app.ts --- back-end/src/app.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/back-end/src/app.ts b/back-end/src/app.ts index 17c6482..060cfd4 100644 --- a/back-end/src/app.ts +++ b/back-end/src/app.ts @@ -8,6 +8,7 @@ import path from 'path'; import routes from './routes'; const app = express(); + const port = process.env.PORT ?? 3000; const log_format = (process.env.NODE_ENV === "dev") ? "dev": "combined"; @@ -22,6 +23,9 @@ app.set('view engine', 'ejs'); // Add logs app.use(morgan(log_format)); +// Defines endpoints +app.use(routes); + app.listen(port, () => { return console.log(`Briques is listening at http://localhost:${port}`); }); From 13900399305867511831aab5d7e2cc778a2593e4 Mon Sep 17 00:00:00 2001 From: Nemo D'ACREMONT Date: Fri, 25 Oct 2024 19:03:02 +0200 Subject: [PATCH 10/12] feat: use a function instead of arrow for new_client, martin will be happy --- back-end/src/db/db_client.ts | 26 ++++++++++++++------------ 1 file changed, 14 insertions(+), 12 deletions(-) diff --git a/back-end/src/db/db_client.ts b/back-end/src/db/db_client.ts index 52d29ca..aafefb6 100644 --- a/back-end/src/db/db_client.ts +++ b/back-end/src/db/db_client.ts @@ -7,17 +7,19 @@ const db_host = process.env.DB_HOST ?? "localhost"; const db_port = parseInt(process.env.DB_PORT ?? "5432"); console.log("=== DB CONFIG ==="); -console.log(`DB_USER:\t\t${db_user}`); +console.log(`DB_USER:\t${db_user}`); console.log(`DB_PASSWORD:\t${db_user}`); -console.log(`DB_NAME:\t\t${db_name}`); -console.log(`DB_HOST:\t\t${db_host}`); -console.log(`DB_PORT:\t\t${db_port}`); +console.log(`DB_NAME:\t${db_name}`); +console.log(`DB_HOST:\t${db_host}`); +console.log(`DB_PORT:\t${db_port}`); +console.log("=== END DB CONFIG ==="); - -export const new_client = () => new pg.Client({ - user: db_user, - password: db_password, - database: db_name, - host: db_host, - port: db_port, -}); +export function new_client() { + return new pg.Client({ + user: db_user, + password: db_password, + database: db_name, + host: db_host, + port: db_port, + }); +} From e6c2760814481db2efda82d8a28e2345ef5d5239 Mon Sep 17 00:00:00 2001 From: Nemo D'ACREMONT Date: Fri, 25 Oct 2024 19:05:27 +0200 Subject: [PATCH 11/12] feat: create docker-compose.dev.yml for dev environnement, and docker-compose.prod.yml for production --- docker-compose.dev.yml | 20 ++++++++++++++++++ docker-compose.yml => docker-compose.prod.yml | 21 ------------------- 2 files changed, 20 insertions(+), 21 deletions(-) create mode 100644 docker-compose.dev.yml rename docker-compose.yml => docker-compose.prod.yml (74%) diff --git a/docker-compose.dev.yml b/docker-compose.dev.yml new file mode 100644 index 0000000..0dfabcb --- /dev/null +++ b/docker-compose.dev.yml @@ -0,0 +1,20 @@ +services: + database: + hostname: database + container_name: briques_postgres + image: postgres + restart: always + environment: + - POSTGRES_DB=${DB_NAME} + - POSTGRES_USER=${DB_USER} + - POSTGRES_PASSWORD=${DB_PASSWORD} + ports: + - 5432:5432 + volumes: + - ./database:/var/lib/postgresql/data + + adminer: + image: adminer + restart: always + ports: + - 8080:8080 diff --git a/docker-compose.yml b/docker-compose.prod.yml similarity index 74% rename from docker-compose.yml rename to docker-compose.prod.yml index bf9b6ff..ed9bc76 100644 --- a/docker-compose.yml +++ b/docker-compose.prod.yml @@ -11,9 +11,6 @@ services: volumes: - ./database:/var/lib/postgresql/data - networks: - - briques-db - back: hostname: back @@ -32,21 +29,3 @@ services: - '${NODE_PORT}:3000' depends_on: - database - - networks: - - briques-db - - adminer: - image: adminer - restart: always - ports: - - 8080:8080 - - networks: - - briques-db - - -networks: - briques-db: - driver: bridge - From bbef6e6755fce79b4dbbbce1c7a27b7f9b026074 Mon Sep 17 00:00:00 2001 From: Nemo D'ACREMONT Date: Fri, 25 Oct 2024 19:06:59 +0200 Subject: [PATCH 12/12] feat: add a few instruction to start the app --- README.md | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 README.md diff --git a/README.md b/README.md new file mode 100644 index 0000000..b545aa5 --- /dev/null +++ b/README.md @@ -0,0 +1,19 @@ +# Briques + +On aime les briques + +## Dev + +To run postgresql server + adminer in dev environnement (assuming you're running the backend manually with node), run : + +``` +docker compose -f docker-compose.dev.yml up +``` + +## Production + +Use the file `docker-compose.prod.yml` to start the app in production mode, it can be done using the following command : + +``` +docker compose -f docker-compose.dev.yml up +```