๐ docker-compose dev, prod ๋ชจ๋๋ก ๋ฆฌํฉํ ๋งํ๊ธฐ
docker-compose
๋ฅผ ์ฌ์ฉํ์ฌ nginx
๋ฅผ ๋ฐฐํฌํ ๋ ๋งค๋ฒ ๊ฐ์ ํ๊ฒฝ์์ SSL
์ ์ ์ฉํ๋ ๊ณผ์ ์ ๊ฑฐ์ณ์ผ ํ๋ค. ์๋ฅผ ๋ค์ด nginx.conf
์ server
์ฝ๋๋ฅผ 80
์์ 443
์ผ๋ก ๋ฐ๊พธ๊ณ ์ธ์ฆ์์ ๊ฒฝ๋ก๋ฅผ ์ถ๊ฐํ๋ ๊ณผ์ ๊ณผ docker-compose - volumes
์ letsencrypt
์ธ์ฆ์๋ฅผ ๋ฃ๋ ๊ณผ์ ์ด ํฌํจ๋๋ค. ํ์ง๋ง ๋งค๋ฒ SSL
์ ์ ์ฉํ๋ ๊ณผ์ ์ ๊ฑฐ์น๋ค ๋ณด๋ ๋ฒ๊ฑฐ๋กญ๊ณ ๋ฌด์๋ณด๋ค ๊ท์ฐฎ์๋ค. ๊ทธ๋์ docker-compose์ ์์ SSL
์ ์ ์ฉํ ๋ฒ์ ๊ณผ SSL
์ ์ ์ฉํ์ง ์์ ๋ฒ์ ์ผ๋ก ๋๋๋ฉด ์ด๋จ๊น?๋ผ๋ ์๊ฐ์ ํ๋ค.
docker ๊ณต์๋ฌธ์๋ฅผ ์ฐพ์๋ณด๋ -f
๋ช
๋ น์ด๋ฅผ ์ฌ์ฉํ์ฌ ํน์ ํ์ผ์ ๋น๋ํ ์ ์๋ค๊ณ ํ๋ค. ๋ง์ฝ, ์ฌ๋ฌ ๊ฐ์ docker-compose
ํ์ผ์ ๋น๋ํ๊ณ ์ถ์ผ๋ฉด -f
๋ฅผ ์ฌ๋ฌ ๋ฒ ์ฌ์ฉํ๋ฉด ๋๊ณ -f
๋ฅผ ์ฌ์ฉํ ์์๋๋ก ๋น๋ํ๋ค๊ณ ๋์์์๋ค. ๋ docker-compose
์ service
์ด๋ฆ์ด ๊ฐ๋ค๋ฉด ์ด์ ํ์ผ์ override
ํ๋ค๊ณ ๋ช
์๋์ด์๋ค.
๊ทธ๋์ ํ์ผ ๊ตฌ์กฐ๋ฅผ ๊ธฐ์กด์ docker-compose.yml
ํ๋๋ง ์ฌ์ฉํ๋ค๋ฉด docker-compose.yml
, docker-compose-dev.yml
, docker-compose-prod.yml
์ฒ๋ผ ํ์ผ์ 3๊ฐ๋ก ๋๋์๊ณ , ๊ณตํต์ผ๋ก ์ ์ฉํ๋ ์ฝ๋๋ docker-compose.yml
ํ์ผ์ ์์ฑํ๊ณ SSL
์ ์ ์ฉํ์ง ์๋ ๋ฒ์ ์ docker-compose-dev.yml
์ ์ ์ฅํ๊ณ , SSL
์ ์ ์ฉํ๋ ๋ฒ์ ์ docker-compose-prod.yml
์ ์ ์ฅํ๋ค. ๊ทธ๋ฌ๋ฉด ๊ณตํต์ผ๋ก ์์ฑํ ํ์ผ์ dev
๋ฒ์ ๊ณผ prod
๋ฒ์ ์ด override
๋๋๊น ๋ช
๋ น์ด๋ง ๋ฐ๊ฟ์ฃผ๋ฉด ํด๊ฒฐ๋๋ ๊ฒ์ด๋ค. ๋ง์ฐฌ๊ฐ์ง๋ก nginx
์ volume
๋ํ SSL
์ ์ ์ฉํ ๋์ nginx.conf
์ SSL
์ ์ ์ฉํ์ง ์์ ๋์ nginx.dev.conf
๋ก ๋๋์ด ์ ์ฉํ๋๋ ๊ฐ์ ํ๊ฒฝ์์ ํ์ผ์ ์์ ํ๋ ๋ฒ๊ฑฐ๋ก์์ ๋ ์ ์์๋ค.
doc
์ ๋ฐ๋ผ ์์
ํด๋ณด๋ ์ด ๋ฐฉ์์ ํ๋ก ํธ์์ webpack
์ ์ฌ์ฉํ ๋ webpack-merge
๋ฅผ ์ฌ์ฉํ์ฌ development
์ production
๋ชจ๋๋ก ๋๋ ๋ webpack.config.js
๋ฅผ ์ ๊ฑฐํ๊ณ webpack.common.js
, webpack.dev.js
, webpack.prod.js
๋ก ๋๋๋ ๊ณผ์ ๊ณผ ๋น์ทํ๋ค๊ณ ์๊ฐํ๋ค.
๋์ ๊ฐ์ ๋ฌธ์ ๋ก ๊ณ ๋ฏผํ๊ณ ์๋ ๋ถ๋ค์๊ฒ ๋์์ด ๋์์ผ๋ฉด ์ข๊ฒ ๊ณ , ๋ง์ง๋ง์ผ๋ก ์ค์ ๋ก ์ด๋ป๊ฒ ์ฝ๋๋ฅผ ๋ถํ ํ๋์ง ๋ช
๋ น์ด, docker-compose
, nginx
์ฝ๋๋ฅผ ์ฌ๋ฆฌ๋ฉฐ ๊ธ์ ๋ง์น๊ฒ ๋ค.
# before command
docker-compose -f docker-compose.yml up -d --build
# after command
docker-compose -f docker-compose.yml -f docker-compose-prod.yml up -d --build
# before refactor docker-compose.yml
# docker-compose.yml
version: "3"
services:
nginx:
image: nginx
volumes:
- ./Frontend/dist/:/usr/share/nginx/html
- ./Nginx/nginx.conf:/etc/nginx/nginx.conf
ports:
- "80:80"
depends_on:
- backend
backend:
build:
context: ./Backend
dockerfile: Dockerfile
ports:
- "7777:7777"
env_file:
- ./Backend/.env
# after refactor docker-compose.yml
# docker-compose.yml
version: "3"
services:
backend:
build:
context: ./Backend
dockerfile: Dockerfile
ports:
- "7777:7777"
env_file:
- ./Backend/.env
# docker-compose-dev.yml
version: "3"
services:
nginx:
image: nginx
volumes:
- ./Frontend/dist/:/usr/share/nginx/html
- ./Nginx/nginx-dev.conf:/etc/nginx/nginx.conf
ports:
- "1111:80"
depends_on:
- backend
backend:
build:
context: .
args:
NODE_ENV: development
volumes:
- ./:/app
command: npm run dev
# docker-compose-prod.yml
version: "3"
services:
nginx:
image: nginx
volumes:
- ./Frontend/dist/:/usr/share/nginx/html
- ./Nginx/nginx.conf:/etc/nginx/nginx.conf
- ./dhparam:/etc/nginx/dhparam
- /etc/letsencrypt:/etc/nginx/ssl
ports:
- "80:80"
- "443:443"
depends_on:
- backend
backend:
build:
context: ./Backend
dockerfile: Dockerfile
args:
NODE_ENV: production
command: npm run deploy
# nginx.conf
user nginx;
worker_processes 1;
events {
worker_connections 1024;
}
http {
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
include /etc/nginx/mime.types;
default_type application/octet-stream;
server {
listen 80;
server_name <domain>;
root /usr/share/nginx/html/;
location ~ /.well-known/acme-challenge {
allow all;
root /usr/share/nginx/html/;
}
location / {
return 301 <domain>;
}
}
server {
listen 443 ssl;
server_name <domain>;
root /usr/share/nginx/html/;
server_tokens off;
ssl_certificate /etc/nginx/ssl/live/<domain>/fullchain.pem;
ssl_certificate_key /etc/nginx/ssl/live/<domain>/privkey.pem;
ssl_dhparam /etc/nginx/dhparam/dhparam-2048.pem;
ssl_buffer_size 8k;
ssl_protocols TLSv1.2 TLSv1.1 TLSv1;
ssl_prefer_server_ciphers on;
ssl_ciphers ECDH+AESGCM:ECDH+AES256:ECDH+AES128:DH+3DES:!ADH:!AECDH:!MD5;
location / {
try_files $uri /index.html;
}
location /api {
proxy_pass http://backend:7777;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
}
}
# nginx.dev.conf
user nginx;
worker_processes 1;
events {
worker_connections 1024;
}
http {
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
include /etc/nginx/mime.types;
default_type application/octet-stream;
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name localhost;
root /usr/share/nginx/html/;
location / {
try_files $uri /index.html;
}
location /api {
proxy_pass http://backend:7777;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
}
}
reference
๋๊ธ