Docker + Nginx ์ž๋™ ๋ฐฐํฌ ์‹œ์Šคํ…œ ๊ตฌ์ถ•

2024. 2. 19. 13:32ยท ๐Ÿ’ป๊ธฐ์ˆ /Docker
๋ชฉ์ฐจ
  1. 1. ์ž๋™ ๋ฐฐํฌ
  2. 2. HTTPS ์ž๋™ ์ ์šฉ
  3. 3. ๋ฐฐํฌ ์Šคํฌ๋ฆฝํŠธ
๋ฐ˜์‘ํ˜•

 

 Docker์™€ Nginx๋ฅผ ์‚ฌ์šฉํ•ด ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋นŒ๋“œํ•  ๋•Œ๋งˆ๋‹ค ์ž๋™์œผ๋กœ ๋ฐฐํฌ๋˜๋Š” ์„œ๋น„์Šค๋ฅผ ๊ตฌ์ถ•ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์ œ๊ฐ€ ์ผ์ „์— ๊ธฐ์ˆ ๋ธ”๋กœ๊ทธ์— ์˜ฌ๋ ธ๋˜ GoCD์™€ ๊ฐ™์ด ์“ฐ์‹œ๋ฉด ๋ฐฐํฌ ์ƒ์‚ฐ์„ฑ์ด ๋†’์•„์ง‘๋‹ˆ๋‹ค. ์ด๋Ÿฐ ๊ณผ์ •์„ CD(์ง€์†์ ์ธ ๋ฐฐํฌ)๋ผ๊ณ  ๋ถ€๋ฅด๋Š”๋ฐ ์ ์–ด๋„ ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ๋‹ค๋ฃจ๊ณ  ์žˆ๋‹ค๋ฉด ๊ด€๋ จ ๊ณต๋ถ€๋Š” ํ•„์ˆ˜์ ์ž…๋‹ˆ๋‹ค. ๋Œ€๋ถ€๋ถ„ DevOps ๊ณผ์ •์œผ๋กœ ํŽธ์ž…๋˜๋‹ˆ ์ธํ”„๋ผ๋‚˜ ํด๋ผ์šฐ๋“œ ๊ด€๋ จ ์ทจ์—…์ด ๋ชฉ์ ์ด๋ผ๋ฉด ๊ผญ ์•Œ์•„๋‘์…”์•ผ ํ•  ๊ธฐ์ดˆ ๊ฐœ๋…์ž…๋‹ˆ๋‹ค. ์ด ํฌ์ŠคํŠธ์—์„œ๋Š” Docker๋กœ ์ž๋™๋ฐฐํฌ + SSL ์ ์šฉ๊นŒ์ง€ ํ•œ ๋ฒˆ์— ํ•ด๊ฒฐ๋˜๋Š” ๋ฐฐํฌ ์‹œ์Šคํ…œ์„ ๊ตฌ์ถ•ํ•ด ๋ด…๋‹ˆ๋‹ค.

 

 

1. ์ž๋™ ๋ฐฐํฌ

https://hub.docker.com/r/nginxproxy/nginx-proxy

 

Docker

 

hub.docker.com

 

 ์Šคํฌ๋ฆฝํŠธ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์•„๋ž˜๋Š” Mac/Linux ๋ฒ„์ „์ด๊ณ , ์œˆ๋„์˜ ๊ฒฝ์šฐ ์ ˆ๋Œ€๊ฒฝ๋กœ๋ฅผ ๋‹ค๋ฅด๊ฒŒ ์„ค์ •ํ•˜์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค. ๊ณต๊ฐœ๋œ ํฌํŠธ๋Š” 80, 443 ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์„ค์ •ํ•ด ์ฃผ์‹œ๊ณ  ํฌํŠธํฌ์›Œ๋”ฉ์ด๋‚˜ ๋ฐฉํ™”๋ฒฝ ์„ค์ •์„ ํ†ตํ•ด ์™ธ๋ถ€๋กœ expose ๋˜๋„๋ก ํ•ด์ค๋‹ˆ๋‹ค. ์ดํ›„ ํด๋ผ์šฐ๋“œํ”Œ๋ ˆ์–ด์™€ ๊ฐ™์€ DNS์„œ๋น„์Šค์—์„œ A ๋ ˆ์ฝ”๋“œ๋ฅผ ์„ค์ •ํ•ด ์ฃผ๋ฉด ์ •์ƒ์ ์œผ๋กœ ๋ฐฐํฌ๋ฉ๋‹ˆ๋‹ค.

docker run --detach \
    --name deploy-nginx-proxy \
    --publish 80:80 \
    --publish 443:443 \
 	  -e HTTP_PORT=80 \
	  -e HTTPS_PORT=443 \
    --volume certs:/etc/nginx/certs \
    --volume vhost:/etc/nginx/vhost.d \
    --volume html:/usr/share/nginx/html \
    --volume /var/run/docker.sock:/tmp/docker.sock:ro \
    nginxproxy/nginx-proxy:alpine

 

 

 

2. HTTPS ์ž๋™ ์ ์šฉ

https://hub.docker.com/r/nginxproxy/acme-companion

 

Docker

 

hub.docker.com

 

 ๋งŒ์•ฝ ์ € ์Šคํฌ๋ฆฝํŠธ๋งŒ ๋™์ž‘ํ•œ๋‹ค๋ฉด HTTPํ†ต์‹ ๋งŒ์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค. ํ˜„์žฌ ๋Œ€๋ถ€๋ถ„์˜ ์›น์€ HTTPS๋ฅผ ์šฐ์„ ํ•˜๊ณ  ์žˆ๊ณ  ๋ณด์•ˆ์ƒ ํ•„์ˆ˜์ด๊ธฐ ๋•Œ๋ฌธ์— ์ธ์ฆ์„œ๋ฅผ ๋ฐœ๊ธ‰๋ฐ›์•„์ฃผ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋•Œ letsencrypt๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ •์ƒ์ ์œผ๋กœ ํ•ด๊ฒฐ๋ฉ๋‹ˆ๋‹ค. ๋ฌด๋ฃŒ๋กœ TLS์ธ์ฆ์„œ๋ฅผ ๋ฐœ๊ธ‰ํ•ด ์ฃผ๋Š” ์„œ๋น„์Šค์ธ๋ฐ ์—ฌ๊ธฐ์„œ ๊ตฌ์ฒด์ ์ธ ์„ค๋ช…์€ ์ƒ๋žตํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

 

docker run --detach \
    --name deploy-nginx-proxy-letsencrypt \
    --volumes-from deploy-nginx-proxy \
    --volume /var/run/docker.sock:/var/run/docker.sock:ro \
    --volume acme:/etc/acme.sh \
    --env "DEFAULT_EMAIL=hhj@devent.kr" \
    nginxproxy/acme-companion

 

 DEFAULT_EMAIL์—๋Š” ์ž์‹ ์˜ ์ด๋ฉ”์ผ์„ ๊ธฐ์ž…ํ•˜์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค. ์œ„์˜ Nginx Reverse Proxy ์Šคํฌ๋ฆฝํŠธ์—์„œ ์ƒˆ๋กœ์šด ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ๋“ฑ๋ก๋˜๋ฉด ๋„๋ฉ”์ธ์˜ ์œ ํšจ์„ฑ์„ ์ธ์ฆํ•œ ๋‹ค์Œ letsencrypt๋ฅผ ์ธ์ฆ์„œ๋ฅผ ๋ฐœ๊ธ‰ํ•˜๊ณ  ์ž๋™์œผ๋กœ HTTPS ํ†ต์‹ ์ด ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค. ๋ณ„๋„์˜ ๋ถˆํŽธํ•œ ์„ค์ • ์—†์ด ๋ฐ”๋กœ ์„ธํŒ…์ด ๊ฐ€๋Šฅํ•˜๊ณ  ํŠนํžˆ ๋งค๋ฒˆ ๊ฐฑ์‹ ํ•ด์ค˜์•ผ ํ•˜๋Š” ๋‹จ์ ์„ ์œ„ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ํ†ตํ•ด ์•Œ์•„์„œ ๊ฐฑ์‹ ํ•ด ์ฃผ์–ด ๊ด€๋ฆฌ์˜ ๋ถˆํŽธํ•จ์ด ์‚ฌ๋ผ์ง‘๋‹ˆ๋‹ค. ์ด ๋ฐฉ๋ฒ•์œผ๋กœ ์ œ๊ฐ€ ์šด์˜ ์ค‘์ธ ํ™ˆ์„œ๋ฒ„๋ฅผ ๋ณ„๋‹ค๋ฅธ ๊ด€๋ฆฌ ์—†์ด ์ž˜ ์šด์˜ํ•  ์ˆ˜ ์žˆ์—ˆ๊ณ  ์ง€๊ธˆ ๋ฒŒ์จ 2๋…„์ด ๋‹ค๋˜์–ด ๊ฐ€๋„๋ก ์•„๋ฌด๋Ÿฐ ๋ฌธ์ œ ์—†์ด ๊ฐ€๋™ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

 

 ์•„๋ž˜ ๊ทธ๋ฆผ์ฒ˜๋Ÿผ Reverse Proxy ์ปจํ…Œ์ด๋„ˆ๋กœ ์š”์ฒญ์ด ๋“ค์–ด์˜ค๊ณ  ์ƒˆ ๋„์ปค ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์‹คํ–‰๋  ๋•Œ๋งˆ๋‹ค acme-companion ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹คํ–‰ํ•˜๋ฉด์„œ Letsencrypt ์ธ์ฆ์„œ๋ฅผ ๋ฐ›์•„์˜ค๋Š” ๊ตฌ์กฐ์ž…๋‹ˆ๋‹ค. ๊ทธ ์ธ์ฆ์„œ ํŒŒ์ผ์„ ๊ธฐ๋ฐ˜์œผ๋กœ nginx์—์„œ ๋ณด์•ˆ ํ†ต์‹ ์„ ํ•˜๊ฒŒ ๋˜๋Š” ๊ตฌ์กฐ์ธ ๊ฒƒ์ด์ฃ .

https://github.com/nginx-proxy/acme-companion/blob/main/schema.png

 

 

3. ๋ฐฐํฌ ์Šคํฌ๋ฆฝํŠธ

 ๋ฐฐํฌ๋Š” ํ™˜๊ฒฝ์—

VIRTUAL_HOST: domain.app
LETSENCRYPT_HOST: domain.app
LETSENCRYPT_EMAIL: hhj@devent.kr

 

์ด 3๊ฐ€์ง€๋งŒ ์ž‘์„ฑํ•ด ์ฃผ๋ฉด ๋ฉ๋‹ˆ๋‹ค. ๋”๋ถˆ์–ด ๋„คํŠธ์›Œํฌ ๋ชจ๋“œ(network_mode)๋Š” ๋ธŒ๋ฆฟ์ง€๋กœ ์„ค์ •ํ•ด์•ผ ์ •์ƒ์ ์œผ๋กœ ์™ธ๋ถ€ ๋„คํŠธ์›Œํฌ์™€ ํ†ต์‹ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 

 

version: '3.1'

networks:
  app: {}

services:

  main:
    container_name: test
    env_file:
      - .env.production
    build:
      context: .
      dockerfile: ./Dockerfile
    ports:
      - 9300:9300
    environment:
      NODE_ENV: production
      VIRTUAL_HOST: domain.app
      LETSENCRYPT_HOST: domain.app
      LETSENCRYPT_EMAIL: hhj@devent.kr
    network_mode: "bridge"

 

 

 ์—ฌ๊ธฐ์— GoCD, Github Action๊ณผ ๊ฐ™์€ CI/CD๋„๊ตฌ๋ฅผ ์–น์œผ๋ฉด ์ตœ๊ณ ์˜ ๋ฐฐํฌ ๋„๊ตฌ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค. ์ ์–ด๋„ ์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ์ž๋ผ๋ฉด ์ž์‹ ์ด ๊ฐœ๋ฐœํ•œ ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ํ”„๋กœ๋•์…˜์œผ๋กœ ๋ฐฐํฌํ•˜๊ณ  ์šด์˜ํ•˜๋Š” ๊ณผ์ •์€ ํ•„์ˆ˜๋ผ๊ณ  ๋ด…๋‹ˆ๋‹ค. AI์‹œ๋Œ€์ธ ๋งŒํผ ๊ธฐ์ˆ ์— ๋Œ€ํ•œ ๋‚œ์ด๋„๋Š” ๋‚ฎ์•„์ง€๊ณ  ์ธํ”„๋ผ ๊ตฌ์ถ•๋„ ๋›ฐ์–ด๋‚œ ์˜คํ”ˆ์†Œ์Šค ๋•์— ์‰ฌ์›Œ์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ํŠนํžˆ ์ตœ๊ทผ ๋“ค์–ด ๊ฐœ๋ฐœ์ž๋“ค ์‚ฌ์ด์—์„œ ํ™ˆ์„œ๋ฒ„ ๊ตฌ์ถ•์ด ํ•˜๋‚˜์˜ ์ทจ๋ฏธ๋กœ ์ž๋ฆฌ ์žก๋Š” ๋งŒํผ ํ•œ ๋ฒˆ์ฏค ๋„์ „ํ•ด ๋ณด์…จ์œผ๋ฉด ํ•ฉ๋‹ˆ๋‹ค.

 

๋ฐ˜์‘ํ˜•
์ €์ž‘์žํ‘œ์‹œ (์ƒˆ์ฐฝ์—ด๋ฆผ)

'๐Ÿ’ป๊ธฐ์ˆ  > Docker' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[ Docker ] ๋„์ปค API์™€ ์†Œ์ผ“์„ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•  (0) 2021.01.04
[ Docker ] Docker ๋ฅผ ๊ณต๋ถ€ํ•˜๋ฉด์„œ ๋„์›€์ด ๋งŽ์ด ๋˜์—ˆ๋˜ ์‚ฌ์ดํŠธ  (0) 2020.05.29
  1. 1. ์ž๋™ ๋ฐฐํฌ
  2. 2. HTTPS ์ž๋™ ์ ์šฉ
  3. 3. ๋ฐฐํฌ ์Šคํฌ๋ฆฝํŠธ
'๐Ÿ’ป๊ธฐ์ˆ /Docker' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • [ Docker ] ๋„์ปค API์™€ ์†Œ์ผ“์„ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•
  • [ Docker ] Docker ๋ฅผ ๊ณต๋ถ€ํ•˜๋ฉด์„œ ๋„์›€์ด ๋งŽ์ด ๋˜์—ˆ๋˜ ์‚ฌ์ดํŠธ
DipokalHHJ
DipokalHHJ
์•ˆ๋…•ํ•˜์„ธ์š” ๐Ÿ”ญ ์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ์ž ํ—ˆํ˜•์ค€์ž…๋‹ˆ๋‹ค. ๊ฐœ์ธ์ ์ธ ์—์„ธ์ด์™€ ๋Œ€์ค‘์ ์ธ ๊ธฐ์ˆ  ์นผ๋Ÿผ์„ ์“ฐ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ํ…Œ์ŠคํŠธ๋ฒ ๋“œ ์Šคํƒ€ํŠธ์—… ๋ฐ์นด๋ฅดํŠธ์ขŒํ‘œ๊ณ„๋ฅผ ์ฐฝ๋ฆฝํ•˜๊ณ  bleeding edge ๊ธฐ์ˆ ์„ ๋‹ค๋ฃจ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
DipokalHHJ
ํ—ˆํ˜•์ค€
DipokalHHJ
์ „์ฒด
์˜ค๋Š˜
์–ด์ œ
  • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (140)
    • ๐Ÿ’ป๊ธฐ์ˆ  (64)
      • Python (2)
      • JavaScript (6)
      • NodeJS (7)
      • Docker (3)
      • Architecture (1)
      • DevOps (3)
      • CTF (3)
      • Security (2)
      • UIUX (1)
      • ์—๋Ÿฌ์™€์˜ ์ „์Ÿ (12)
      • ์ •๋ณด๊ณต์œ  (8)
      • ๊ธฐํƒ€ (7)
    • ๐Ÿ˜„์ƒ๊ฐ (57)
      • ์Šคํ† ๋ฆฌ (10)
      • ํ”„๋กœ์ ํŠธ (9)
      • ํ”„๋ฆฌ์Šคํƒ€์ผ (5)
      • ์งง์€๊ธ€ (7)
      • ์‹œ๋ฆฌ์ฆˆ (2)
      • Advertisement (1)
      • ์—์„ธ์ด (1)
      • ์ƒ๊ฐ์กฐ๊ฐ (0)
    • ๐Ÿค”ํšŒ๊ณ  (9)
      • ์—ฐ๊ฐ„ ํšŒ๊ณ  (3)
      • ํ”„๋กœ์ ํŠธ ํšŒ๊ณ  (4)
      • ์งง์€ ๊ธฐ๋ก (2)
    • ๐ŸŽธ๊ธฐํƒ€ (1)
      • ์Šค๋ฌด๋”-ํ”„๋กœ์ ํŠธ๊ณต์ง€ (2)
    • ๐Ÿš€์—์„ธ์ด (3)
    • ์ฒ ํ•™ (1)
    • ๋น„์ฆˆ๋‹ˆ์Šค (2)

๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

  • ํ™ˆ
  • ํƒœ๊ทธ
  • ๋ฐฉ๋ช…๋ก

๊ณต์ง€์‚ฌํ•ญ

  • ๋ธ”๋กœ๊ทธ ์†Œ๊ฐœ

์ธ๊ธฐ ๊ธ€

ํƒœ๊ทธ

  • ํšŒ๊ณ 
  • ์ฒญ์†Œ๋…„
  • ์†Œํ”„ํŠธ์›จ์–ด
  • github
  • ์Šค๋ฌด๋”ํ”„๋กœ์ ํŠธ
  • ์Šคํƒ€ํŠธ์—…
  • ์ค‘ํ•™์ƒ
  • ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ
  • docker
  • TypeScript
  • js
  • ๋””์ž์ธ
  • php
  • webpack
  • ๊ฐœ๋ฐœ
  • ๊ฐœ๋ฐœ์ž
  • ๋””์ž์ธ ์‹œ์Šคํ…œ
  • ๊ธฐ์ˆ 
  • ๊ต์œก
  • Nodejs
  • ๊นƒํ—ˆ๋ธŒ
  • ๋‹จ์ˆœํ•˜๊ฒŒ ์‚ด๊ธฐ
  • ํ”„๋กœ๊ทธ๋ž˜๋ฐ
  • ์ •๋ณด๋ณด์•ˆ
  • ๋„์ปค
  • ์—๋Ÿฌ
  • vscode
  • ์›นํŒฉ
  • ๋ณด์•ˆ
  • HackCTF

์ตœ๊ทผ ๋Œ“๊ธ€

์ตœ๊ทผ ๊ธ€

hELLO ยท Designed By ์ •์ƒ์šฐ.v4.2.2
DipokalHHJ
Docker + Nginx ์ž๋™ ๋ฐฐํฌ ์‹œ์Šคํ…œ ๊ตฌ์ถ•
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”

๋‹จ์ถ•ํ‚ค

๋‚ด ๋ธ”๋กœ๊ทธ

๋‚ด ๋ธ”๋กœ๊ทธ - ๊ด€๋ฆฌ์ž ํ™ˆ ์ „ํ™˜
Q
Q
์ƒˆ ๊ธ€ ์“ฐ๊ธฐ
W
W

๋ธ”๋กœ๊ทธ ๊ฒŒ์‹œ๊ธ€

๊ธ€ ์ˆ˜์ • (๊ถŒํ•œ ์žˆ๋Š” ๊ฒฝ์šฐ)
E
E
๋Œ“๊ธ€ ์˜์—ญ์œผ๋กœ ์ด๋™
C
C

๋ชจ๋“  ์˜์—ญ

์ด ํŽ˜์ด์ง€์˜ URL ๋ณต์‚ฌ
S
S
๋งจ ์œ„๋กœ ์ด๋™
T
T
ํ‹ฐ์Šคํ† ๋ฆฌ ํ™ˆ ์ด๋™
H
H
๋‹จ์ถ•ํ‚ค ์•ˆ๋‚ด
Shift + /
โ‡ง + /

* ๋‹จ์ถ•ํ‚ค๋Š” ํ•œ๊ธ€/์˜๋ฌธ ๋Œ€์†Œ๋ฌธ์ž๋กœ ์ด์šฉ ๊ฐ€๋Šฅํ•˜๋ฉฐ, ํ‹ฐ์Šคํ† ๋ฆฌ ๊ธฐ๋ณธ ๋„๋ฉ”์ธ์—์„œ๋งŒ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.