Skip to content

Commit a611c67

Browse files
authored
Merge pull request #11 from boostcampwm-2024/refactor-be-#4
refactor: 도커 최적화 - 중복되는 볼륨 처리
2 parents 40d14f0 + 6b8db17 commit a611c67

File tree

3 files changed

+171
-139
lines changed

3 files changed

+171
-139
lines changed

compose.local.yml

Lines changed: 115 additions & 108 deletions
Original file line numberDiff line numberDiff line change
@@ -1,119 +1,126 @@
11
version: "3.8"
22

33
services:
4-
postgres:
5-
image: postgres:16-alpine
6-
environment:
7-
POSTGRES_USER: ${DB_USER}
8-
POSTGRES_PASSWORD: ${DB_PASSWORD}
9-
POSTGRES_DB: ${DB_NAME}
10-
volumes:
11-
- postgres_data:/var/lib/postgresql/data
12-
networks:
13-
- net
14-
healthcheck:
15-
test: ["CMD-SHELL", "pg_isready -U ${DB_USER} -d ${DB_NAME}"]
16-
interval: 10s
17-
timeout: 5s
18-
retries: 5
19-
ports:
20-
- "5432:5432"
4+
postgres:
5+
image: postgres:16-alpine
6+
environment:
7+
POSTGRES_USER: ${DB_USER}
8+
POSTGRES_PASSWORD: ${DB_PASSWORD}
9+
POSTGRES_DB: ${DB_NAME}
10+
volumes:
11+
- postgres_data:/var/lib/postgresql/data
12+
networks:
13+
- net
14+
healthcheck:
15+
test: ["CMD-SHELL", "pg_isready -U ${DB_USER} -d ${DB_NAME}"]
16+
interval: 10s
17+
timeout: 5s
18+
retries: 5
19+
ports:
20+
- "5432:5432"
2121

22-
redis:
23-
image: redis:latest
24-
environment:
25-
REDIS_HOST: ${REDIS_HOST}
26-
REDIS_PORT: ${REDIS_PORT}
27-
networks:
28-
- net
29-
ports:
30-
- "6379:6379"
31-
healthcheck:
32-
test: ["CMD", "redis-cli", "ping"]
33-
interval: 30s
34-
retries: 3
35-
start_period: 10s
36-
timeout: 5s
22+
redis:
23+
image: redis:latest
24+
environment:
25+
REDIS_HOST: ${REDIS_HOST}
26+
REDIS_PORT: ${REDIS_PORT}
27+
networks:
28+
- net
29+
ports:
30+
- "6379:6379"
31+
healthcheck:
32+
test: ["CMD", "redis-cli", "ping"]
33+
interval: 30s
34+
retries: 3
35+
start_period: 10s
36+
timeout: 5s
3737

38-
backend:
39-
build:
40-
context: .
41-
dockerfile: ./services/backend/Dockerfile.local
42-
image: backend:latest
43-
env_file:
44-
- .env
45-
volumes:
46-
- .env:/app/.env
47-
# 소스 코드 마운트
48-
- ./apps/backend:/app/apps/backend
49-
- ./apps/frontend:/app/apps/frontend
50-
# 의존성 캐시를 위한 볼륨
51-
- backend_node_modules:/app/node_modules
52-
- backend_app_node_modules:/app/apps/backend/node_modules
53-
- frontend_app_node_modules:/app/apps/frontend/node_modules
54-
depends_on:
55-
postgres:
56-
condition: service_healthy
57-
redis:
58-
condition: service_healthy
59-
networks:
60-
- net
61-
ports:
62-
- "5173:5173" # Vite dev server
63-
- "3000:3000" # 백엔드 API 포트
38+
backend:
39+
build:
40+
context: .
41+
dockerfile: ./services/backend/Dockerfile.local
42+
image: backend:latest
43+
env_file:
44+
- .env
45+
volumes:
46+
- .env:/app/.env
47+
- ./apps/backend:/app/apps/backend
48+
- ./apps/frontend:/app/apps/frontend
49+
- root_node_modules:/app/node_modules
50+
- backend_app_node_modules:/app/apps/backend/node_modules
51+
- frontend_app_node_modules:/app/apps/frontend/node_modules
52+
depends_on:
53+
postgres:
54+
condition: service_healthy
55+
redis:
56+
condition: service_healthy
57+
networks:
58+
- net
59+
ports:
60+
- "5173:5173" # Vite dev server
61+
- "3000:3000" # 백엔드 API 포트
62+
entrypoint: |
63+
sh -c "
64+
yarn install &&
65+
yarn dev
66+
"
6467
65-
websocket:
66-
build:
67-
context: .
68-
dockerfile: ./services/websocket/Dockerfile.local
69-
image: websocket:latest
70-
env_file:
71-
- .env
72-
volumes:
73-
- .env:/app/.env
74-
# 소스 코드 마운트
75-
- ./apps/websocket:/app/apps/websocket
76-
# 의존성 캐시를 위한 볼륨
77-
- websocket_node_modules:/app/node_modules
78-
- websocket_app_node_modules:/app/apps/websocket/node_modules
79-
depends_on:
80-
postgres:
81-
condition: service_healthy
82-
redis:
83-
condition: service_healthy
84-
networks:
85-
- net
86-
ports:
87-
- "4242:4242" # WebSocket 포트
68+
websocket:
69+
build:
70+
context: .
71+
dockerfile: ./services/websocket/Dockerfile.local
72+
image: websocket:latest
73+
env_file:
74+
- .env
75+
volumes:
76+
- .env:/app/.env
77+
- ./apps/websocket:/app/apps/websocket
78+
- root_node_modules:/app/node_modules
79+
- websocket_app_node_modules:/app/apps/websocket/node_modules
80+
depends_on:
81+
postgres:
82+
condition: service_healthy
83+
redis:
84+
condition: service_healthy
85+
networks:
86+
- net
87+
ports:
88+
- "4242:4242" # WebSocket 포트
89+
entrypoint: |
90+
sh -c "
91+
yarn install &&
92+
yarn dev
93+
"
8894
89-
nginx:
90-
build:
91-
context: .
92-
dockerfile: ./services/nginx/Dockerfile.local
93-
ports:
94-
- "80:80"
95-
- "443:443"
96-
depends_on:
97-
- backend
98-
- websocket
99-
networks:
100-
- net
101-
volumes:
102-
- type: bind
103-
source: ./services/nginx/ssl
104-
target: /etc/nginx/ssl
105-
bind:
106-
create_host_path: true
107-
propagation: rprivate
108-
- ./services/nginx/conf.d:/etc/nginx/conf.d
95+
nginx:
96+
build:
97+
context: .
98+
dockerfile: ./services/nginx/Dockerfile.local
99+
ports:
100+
- "80:80"
101+
- "443:443"
102+
depends_on:
103+
- backend
104+
- websocket
105+
networks:
106+
- net
107+
volumes:
108+
- type: bind
109+
source: ./services/nginx/ssl
110+
target: /etc/nginx/ssl
111+
bind:
112+
create_host_path: true
113+
propagation: rprivate
114+
- ./services/nginx/conf.d:/etc/nginx/conf.d
109115

110116
networks:
111-
net:
117+
net:
112118

113119
volumes:
114-
postgres_data:
115-
backend_node_modules:
116-
backend_app_node_modules:
117-
frontend_app_node_modules:
118-
websocket_node_modules:
119-
websocket_app_node_modules:
120+
postgres_data:
121+
root_node_modules:
122+
backend_node_modules:
123+
backend_app_node_modules:
124+
frontend_app_node_modules:
125+
websocket_node_modules:
126+
websocket_app_node_modules:

package.json

Lines changed: 28 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,30 @@
11
{
2-
"name": "octodocs",
3-
"version": "1.0.0",
4-
"main": "index.js",
5-
"repository": "https://github.com/boostcampwm-2024/web15-OctoDocs.git",
6-
"author": "ez <[email protected]>",
7-
"license": "MIT",
8-
"scripts": {
9-
"dev": "turbo run dev --parallel",
10-
"build": "turbo run build",
11-
"start": "node apps/backend/dist/main.js",
12-
"start:backend": "node apps/backend/dist/main.js",
13-
"start:websocket": "node apps/websocket/dist/main.js",
14-
"lint": "turbo run lint",
15-
"test": "turbo run test",
16-
"docker:dev": "docker compose -f compose.local.yml up",
17-
"docker:dev:down": "docker compose -f compose.local.yml down",
18-
"docker:dev:clean": "docker compose -v -f compose.local.yml down",
19-
"docker:dev:fclean": "docker compose -v -f compose.local.yml down --rmi all",
20-
"ssl:generate": "cd services/nginx/ssl && bash ./generate-cert.sh"
21-
},
22-
"dependencies": {
23-
"turbo": "^2.3.0"
24-
},
25-
"private": true,
26-
"workspaces": [
27-
"apps/*"
28-
],
29-
"packageManager": "[email protected]"
2+
"name": "octodocs",
3+
"version": "1.0.0",
4+
"main": "index.js",
5+
"repository": "https://github.com/boostcampwm-2024/web15-OctoDocs.git",
6+
"author": "ez <[email protected]>",
7+
"license": "MIT",
8+
"scripts": {
9+
"dev": "turbo run dev --parallel",
10+
"build": "turbo run build",
11+
"start": "node apps/backend/dist/main.js",
12+
"start:backend": "node apps/backend/dist/main.js",
13+
"start:websocket": "node apps/websocket/dist/main.js",
14+
"lint": "turbo run lint",
15+
"test": "turbo run test",
16+
"docker:dev": "docker compose -f compose.local.yml up",
17+
"docker:dev:down": "docker compose -f compose.local.yml down",
18+
"docker:dev:clean": "docker compose -v -f compose.local.yml down",
19+
"docker:dev:fclean": "docker compose -v -f compose.local.yml down --rmi all",
20+
"ssl:generate": "cd services/nginx/ssl && bash ./generate-cert.sh"
21+
},
22+
"dependencies": {
23+
"turbo": "^2.3.0"
24+
},
25+
"private": true,
26+
"workspaces": [
27+
"apps/*"
28+
],
29+
"packageManager": "[email protected]"
3030
}

yarn.lock

Lines changed: 28 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9999,7 +9999,16 @@ string-length@^4.0.1:
99999999
char-regex "^1.0.2"
1000010000
strip-ansi "^6.0.0"
1000110001

10002-
"string-width-cjs@npm:string-width@^4.2.0", "string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3:
10002+
"string-width-cjs@npm:string-width@^4.2.0":
10003+
version "4.2.3"
10004+
resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010"
10005+
integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==
10006+
dependencies:
10007+
emoji-regex "^8.0.0"
10008+
is-fullwidth-code-point "^3.0.0"
10009+
strip-ansi "^6.0.1"
10010+
10011+
"string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3:
1000310012
version "4.2.3"
1000410013
resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010"
1000510014
integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==
@@ -10031,7 +10040,14 @@ string_decoder@~1.1.1:
1003110040
dependencies:
1003210041
safe-buffer "~5.1.0"
1003310042

10034-
"strip-ansi-cjs@npm:strip-ansi@^6.0.1", strip-ansi@^6.0.0, strip-ansi@^6.0.1:
10043+
"strip-ansi-cjs@npm:strip-ansi@^6.0.1":
10044+
version "6.0.1"
10045+
resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9"
10046+
integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==
10047+
dependencies:
10048+
ansi-regex "^5.0.1"
10049+
10050+
strip-ansi@^6.0.0, strip-ansi@^6.0.1:
1003510051
version "6.0.1"
1003610052
resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9"
1003710053
integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==
@@ -10979,7 +10995,7 @@ word-wrap@^1.2.5:
1097910995
resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.5.tgz#d2c45c6dd4fbce621a66f136cbe328afd0410b34"
1098010996
integrity sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==
1098110997

10982-
"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0", wrap-ansi@^7.0.0:
10998+
"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0":
1098310999
version "7.0.0"
1098411000
resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43"
1098511001
integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==
@@ -10997,6 +11013,15 @@ wrap-ansi@^6.0.1, wrap-ansi@^6.2.0:
1099711013
string-width "^4.1.0"
1099811014
strip-ansi "^6.0.0"
1099911015

11016+
wrap-ansi@^7.0.0:
11017+
version "7.0.0"
11018+
resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43"
11019+
integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==
11020+
dependencies:
11021+
ansi-styles "^4.0.0"
11022+
string-width "^4.1.0"
11023+
strip-ansi "^6.0.0"
11024+
1100011025
wrap-ansi@^8.1.0:
1100111026
version "8.1.0"
1100211027
resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz#56dc22368ee570face1b49819975d9b9a5ead214"

0 commit comments

Comments
 (0)