Skip to content

Commit c63107e

Browse files
committed
chore(docker): Add config for question service
Signed-off-by: SeeuSim <[email protected]>
1 parent f514edf commit c63107e

File tree

11 files changed

+97
-69
lines changed

11 files changed

+97
-69
lines changed

backend/collaboration/docker-compose.yml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,8 @@ services:
1717
restart: unless-stopped
1818

1919
collab-express:
20-
image: 'collab-express'
21-
container_name: 'collab-express'
20+
image: "collab-express"
21+
container_name: "collab-express"
2222
build:
2323
context: ./
2424
dockerfile: ./express.Dockerfile
@@ -27,7 +27,7 @@ services:
2727
# For building with the correct env vars
2828
- env=${EXPRESS_ENV}
2929
ports:
30-
- '9003:8001'
30+
- "9003:8001"
3131
command: node dist/index.js
3232
environment:
3333
# Docker Compose Specific

backend/collaboration/express.Dockerfile

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,15 @@
11
FROM node:lts-alpine AS build
2-
WORKDIR /data/user-express
2+
WORKDIR /data/collab-express
33
COPY package*.json ./
44
RUN npm install
55
COPY . .
66
RUN npm run build
77

88
FROM node:lts-alpine AS production
9-
WORKDIR /data/user-express
10-
COPY --from=build /data/user-express/package*.json ./
9+
WORKDIR /data/collab-express
10+
COPY --from=build /data/collab-express/package*.json ./
1111
RUN npm ci --omit=dev
12-
COPY --from=build --chown=node:node /data/user-express/dist ./dist
12+
COPY --from=build --chown=node:node /data/collab-express/dist ./dist
1313

1414
ARG env
1515
COPY ".env.${env}" .
Lines changed: 25 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,35 +1,43 @@
1+
# Command: docker-compose --env-file .env.local up -d
2+
13
services:
2-
postgres:
3-
hostname: postgres
4+
question-db:
5+
hostname: "question-db"
46
image: postgres:16.4
5-
container_name: 'question_db'
7+
container_name: "question-db"
68
build:
79
context: ./src/lib/db
8-
environment:
9-
POSTGRES_DB: 'Question'
10-
POSTGRES_USER: 'user'
11-
POSTGRES_PASSWORD: 'user'
12-
PGDATA: '/data/question-db'
10+
env_file:
11+
- ./.env.local
1312
volumes:
14-
- 'question-db-docker:/data/question-db'
13+
- "question-db-docker:${PGDATA}"
1514
# - ./init.sql:/docker-entrypoint-initdb.d/init.sql
1615
ports:
17-
- '5433:5432'
16+
- "${EXPRESS_DB_PORT}:5432"
1817
restart: unless-stopped
1918

20-
express:
21-
image: 'question-express'
22-
container_name: 'question-express'
19+
question-express:
20+
image: "question-express"
21+
container_name: "question-express"
2322
build:
2423
context: ./
2524
dockerfile: ./express.Dockerfile
2625
target: build
26+
args:
27+
# For building with the correct env vars
28+
- env=${EXPRESS_ENV}
2729
ports:
28-
- '9002:8001'
30+
- "9002:8001"
2931
command: node dist/index.js
32+
environment:
33+
# Docker Compose Specific
34+
- EXPRESS_DB_HOST=question-db
35+
- EXPRESS_DB_PORT=5432
36+
# Env File vars
37+
- POSTGRES_DB=${POSTGRES_DB}
38+
- POSTGRES_USER=${POSTGRES_USER}
39+
- POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
3040
depends_on:
31-
postgres:
32-
condition: service_started
33-
restart: true
41+
- question-db
3442
volumes:
3543
question-db-docker:

backend/question/drizzle.config.ts

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,16 @@
11
import { defineConfig } from 'drizzle-kit';
22

3+
const config = {
4+
host: process.env.EXPRESS_DB_HOST!,
5+
port: Number.parseInt(process.env.EXPRESS_DB_PORT!),
6+
database: process.env.POSTGRES_DB!,
7+
user: process.env.POSTGRES_USER,
8+
password: process.env.POSTGRES_PASSWORD,
9+
};
10+
311
export default defineConfig({
412
schema: './src/lib/db/schema.ts',
513
out: './drizzle',
614
dialect: 'postgresql',
7-
dbCredentials: {
8-
host: 'localhost',
9-
port: 5433,
10-
database: 'Question',
11-
user: 'user',
12-
password: 'user',
13-
},
15+
dbCredentials: config,
1416
});

backend/question/drizzle.migrate.mts

Lines changed: 0 additions & 18 deletions
This file was deleted.
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
import postgres from 'postgres';
2+
import { drizzle } from 'drizzle-orm/postgres-js';
3+
import { migrate } from 'drizzle-orm/postgres-js/migrator';
4+
5+
const config = {
6+
host: process.env.EXPRESS_DB_HOST!,
7+
port: Number.parseInt(process.env.EXPRESS_DB_PORT!),
8+
database: process.env.POSTGRES_DB,
9+
user: process.env.POSTGRES_USER,
10+
password: process.env.POSTGRES_PASSWORD,
11+
};
12+
const migrationConnection = postgres({ ...config, max: 1 });
13+
14+
const db = drizzle(migrationConnection);
15+
16+
const main = async () => {
17+
await migrate(db, { migrationsFolder: 'drizzle' });
18+
await migrationConnection.end();
19+
};
20+
21+
void main();
Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,17 @@
11
FROM node:lts-alpine AS build
2-
WORKDIR /data/user-express
2+
WORKDIR /data/question-express
33
COPY package*.json ./
44
RUN npm install
55
COPY . .
66
RUN npm run build
77

88
FROM node:lts-alpine AS production
9-
WORKDIR /data/user-express
10-
COPY --from=build /data/user-express/package*.json ./
9+
WORKDIR /data/question-express
10+
COPY --from=build /data/question-express/package*.json ./
1111
RUN npm ci --omit=dev
12-
COPY --from=build --chown=node:node /data/user-express/dist ./dist
12+
COPY --from=build --chown=node:node /data/question-express/dist ./dist
13+
14+
ARG env
15+
COPY ".env.${env}" .
1316
EXPOSE 8001
14-
ENTRYPOINT ["node", "dist/index.js"]
17+
CMD [ "npm", "run", "start" ]

backend/question/package.json

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,15 @@
33
"version": "1.0.0",
44
"main": "dist/index.js",
55
"scripts": {
6-
"dev": "nodemon src/index.ts | pino-pretty",
7-
"build": "tsc",
8-
"start": "node dist/index.js",
6+
"dev": "env-cmd -f .env.local nodemon src/index.ts | pino-pretty",
7+
"build": "env-cmd -f .env.local tsc && tsc-alias",
8+
"start": "env-cmd -f .env.local node dist/index.js",
9+
"build:prod": "env-cmd -f .env.prod tsc && tsc-alias",
10+
"start:prod": "env-cmd -f .env.local node dist/index.js",
11+
"db:generate": "env-cmd -f .env.local drizzle-kit generate",
12+
"db:migrate": "env-cmd -f .env.local tsx drizzle.migrate.ts",
13+
"db:inspect": "env-cmd -f .env.local drizzle-kit studio",
914
"fmt": "prettier --config .prettierrc src --write",
10-
"db:generate": "drizzle-kit generate",
11-
"db:migrate": "tsx drizzle.migrate.mts",
1215
"test": "echo \"Error: no test specified\" && exit 1"
1316
},
1417
"keywords": [],
@@ -17,7 +20,9 @@
1720
"description": "",
1821
"dependencies": {
1922
"drizzle-orm": "^0.33.0",
23+
"env-cmd": "^10.1.0",
2024
"express": "^4.21.0",
25+
"http-status-codes": "^2.3.0",
2126
"pino": "^9.4.0",
2227
"pino-http": "^10.3.0",
2328
"postgres": "^3.4.4"
@@ -28,6 +33,7 @@
2833
"drizzle-kit": "^0.24.2",
2934
"nodemon": "^3.1.4",
3035
"pino-pretty": "^11.2.2",
31-
"ts-node": "^10.9.2"
36+
"ts-node": "^10.9.2",
37+
"tsc-alias": "^1.8.10"
3238
}
3339
}

backend/question/src/lib/db/index.ts

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,15 @@
11
import { drizzle } from 'drizzle-orm/postgres-js';
22
import postgres from 'postgres';
33

4-
const queryClient = postgres({
5-
host: 'localhost',
6-
port: 5433,
7-
database: 'Question',
8-
user: 'user',
9-
password: 'user',
10-
});
4+
export const config = {
5+
host: process.env.EXPRESS_DB_HOST!,
6+
port: Number.parseInt(process.env.EXPRESS_DB_PORT!),
7+
database: process.env.POSTGRES_DB,
8+
user: process.env.POSTGRES_USER,
9+
password: process.env.POSTGRES_PASSWORD,
10+
};
11+
12+
const queryClient = postgres(config);
1113

1214
export const db = drizzle(queryClient);
1315

backend/question/src/server.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import express, { json } from 'express';
44
import pino from 'pino-http';
55
import { sql } from 'drizzle-orm';
66

7-
import { db } from '@/lib/db';
7+
import { config, db } from '@/lib/db';
88
import { logger } from '@/lib/utils';
99

1010
const app = express();
@@ -24,6 +24,7 @@ export const dbHealthCheck = async () => {
2424
} catch (error) {
2525
const { message } = error as Error;
2626
logger.error('Cannot connect to DB: ' + message);
27+
logger.error(`DB Config: ${JSON.stringify({ ...config, password: '<REDACTED>' })}`);
2728
exit(1);
2829
}
2930
};

0 commit comments

Comments
 (0)