Docker ์ž๋™ ๋ฐฐํฌ ์‹œ์Šคํ…œ์„ ๊ตฌ์ถ•ํ•˜๋ฉฐ.
๐Ÿค”ํšŒ๊ณ /ํ”„๋กœ์ ํŠธ ํšŒ๊ณ 

Docker ์ž๋™ ๋ฐฐํฌ ์‹œ์Šคํ…œ์„ ๊ตฌ์ถ•ํ•˜๋ฉฐ.

๋ฐ˜์‘ํ˜•

https://github.com/Team-DeVent/devent-deploy

 

๐Ÿ˜… ๊ทธ๋™์•ˆ์˜ ๋น„ํšจ์œจ์ ์ธ ๋ฐฐํฌ ๊ณผ์ •

 

 ๊ธฐ์กด ํ™ˆ์„œ๋ฒ„์— ๋ฐฐํฌํ•  ๋•Œ ๋ฒˆ๊ฑฐ๋กœ์šด ๊ณผ์ •์˜ ์—ฐ์†์ด์—ˆ๋‹ค. ์›๊ฒฉ ์ ‘์†์œผ๋กœ ํŒŒ์ผ์„ ์ด๋™ํ•˜๊ณ  ์„œ๋ฒ„๋ฅผ ์ข…๋ฃŒ์‹œํ‚จ ๋‹ค์Œ ์ฝ”๋“œ๋ฅผ ๋ฎ์–ด์“ฐ๊ณ  ๋‹ค์‹œ ์‹คํ–‰ํ•˜๋Š” ๊ณผ์ •์„ ํ†ตํ•ด ์ฝ”๋“œ๋ฅผ ์—…๋ฐ์ดํŠธํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค. ๋˜ํ•œ ๊นƒํ—ˆ๋ธŒ์™€ ๊ฐ™์€ ํˆด์„ ์“ฐ์ง€ ์•Š์•„ ๋ฒ„์ „ ๊ด€๋ฆฌ์—๋„ ๋ฌธ์ œ๊ฐ€ ์žˆ์—ˆ๋‹ค. ์ด์™ธ์—๋„ ์˜์กด์„ฑ์ด ๊นจ์ง€๋ฉด ๋‹ค๋ฅธ ์†Œํ”„ํŠธ์›จ์–ด์—๋„ ์˜ํ–ฅ์ด ๊ฐ„๋‹ค๊ฑฐ๋‚˜, ๋‹ค์šด๊ทธ๋ ˆ์ด๋“œ๋ฅผ ์œ„ํ•ด ์•ž์„  ๊ณผ์ •์„ ๋‹ค์‹œ ์ง„ํ–‰ํ•˜๋Š” ๋“ฑ ๋ฌธ์ œ์ ์ด ๋งŽ์•˜๋‹ค. 

 

 ์ฝ”๋“œ๋ž€ ์œ ๊ธฐ์ฒด์™€ ๊ฐ™๋‹ค. ์ง€์†์ ์œผ๋กœ ๊ด€๋ฆฌํ•ด์ฃผ๊ณ  ์‹ ๊ฒฝ ์จ์ฃผ์ง€ ์•Š์œผ๋ฉด ์ฐŒ๊บผ๊ธฐ(๋ ˆ๊ฑฐ์‹œ ์ฝ”๋“œ)๊ฐ€ ํ•„์—ฐ์ ์œผ๋กœ ๋ฐœ์ƒํ•˜๊ฒŒ ๋œ๋‹ค. ๊ด€๋ฆฌ ๋ฐฉ๋ฒ• ์ค‘ ํ•˜๋‚˜๊ฐ€ ๋ฐ”๋กœ ๋ฐฐํฌ์˜ ์ž๋™ํ™”๋‹ค. ์ด์ „ ๊ธ€์—์„œ๋„ ์„ค๋ช…ํ–ˆ๋“ฏ์ด, ๋ช‡ ๋…„ ์ „์—๋Š” USB๋กœ ํŒŒ์ผ์„ ์ด๋™ํ•˜๋Š” ๋งŒํ–‰(?)์„ ์ €์ง€๋ฅด๊ธฐ๋„ ํ–ˆ๋‹ค. ๋ถ„๋ช… ๋‹น์‹œ์—๋Š” ๋ฒ„์ „์ด ๊ผฌ์ด๊ณ  ๋ ˆ๊ฑฐ์‹œ ์ฝ”๋“œ๊ฐ€ ๋„˜์ณ๋‚˜๋„ ํฐ ๋ถˆํŽธํ•จ์„ ๋Š๋ผ์ง€ ๋ชปํ–ˆ๋‹ค. ๊ธฐ๋Šฅ์€ ๋งŽ์•„๋ดค์ž 6๊ฐœ ์ •๋„์˜€๊ณ  ์ฝ”๋“œ ๊ฐ„ ์˜์กด์„ฑ์ด ์—†๋‹ค์‹œํ”ผ ํ–ˆ์—ˆ๊ธฐ์— ๋ฒ„๊ทธ ๋˜ํ•œ ๋ฐœ์ƒํ•˜์ง€ ์•Š์•˜๋‹ค. 

 

 ๋ฒ„๊ทธ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š์•˜๋‹ค๊ณ  ์ข‹์€ ์ฝ”๋“œ๊ฐ€ ๋˜๋Š”๊ฑด ์•„๋‹ˆ๋‹ค. ํ’€์žฅ์— ๋ฌผ์ด ๊ฐ€๋“ ์ฐจ ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด๋ณด์ž. ๋‚ด๊ฐ€ ํ’€์žฅ์— ๋“ค์–ด๊ฐ”์„ ๋•Œ ์ ๋‹นํ–ˆ๋‹ค๊ณ  ํ•ด์„œ ์นœ๊ตฌ 100๋ช…์„ ๋ฐ๋ ค์™€๋„ ๋„˜์น˜์ง€ ์•Š์„ ๊ฑฐ๋ž€ ๋ณด์žฅ์€ ์—†๋‹ค. ์ฝ”๋“œ ํ’ˆ์งˆ๋„ ๋งˆ์ฐฌ๊ฐ€์ง€๋‹ค. ๋ฒ„๊ทธ๊ฐ€ ์—†๋‹ค๊ณ  ํ•ด์„œ ๊ธฐ๋Šฅ์„ ํ™•์žฅํ–ˆ์„ ๋•Œ๋„ ๋ฒ„๊ทธ๊ฐ€ ์—†์„ ๊ฑฐ๋ผ๋Š” ๊ฐ€์ •์€ ์„ฑ๋ฆฝ๋˜์ง€ ์•Š๋Š”๋‹ค.

 

 ๊ทธ๋ž˜์„œ ๊ทธ๋™์•ˆ์˜ ๋ฐฐํฌ ๊ณผ์ •์„ ๊ฐœ์„ ํ•˜๊ณ ์ž ๊นƒํ—ˆ๋ธŒ ์›นํ›…๊ณผ ๋„์ปค ๊ธฐ๋ฐ˜์œผ๋กœ ์„œ๋น„์Šค๋ฅผ ๋ฐฐํฌํ•˜๋Š” ํˆด์„ ๋งŒ๋“ค๊ณ ์ž ํ–ˆ๋‹ค. 

 

 

๐ŸŽ™ ์–ด๋–ค ๊ธฐ๋Šฅ์ด ํ•„์š”ํ•œ๊ฐ€

 

 ์šฐ์„  ๊นƒํ—ˆ๋ธŒ ์›นํ›…์„ ๋ฐ›๊ณ  ๋ ˆํฌ์ง€ํ† ๋ฆฌ ๋งํฌ๋ฅผ ํŒŒ์‹ฑํ•˜๋Š” ๋กœ์ง์ด ํ•„์š”ํ•˜๋‹ค. ๋‹ค์Œ์œผ๋กœ git clone <link>๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ์ง€์ •๋œ ๋””๋ ‰ํ† ๋ฆฌ์— ํŒŒ์ผ์„ ์ €์žฅํ•œ๋‹ค. ์ดํ›„ ํ•ด๋‹น ๋””๋ ‰ํ† ๋ฆฌ์— ์žˆ๋Š” dockerfile๋กœ ๋„์ปค ์ด๋ฏธ์ง€๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์ด๋ฏธ์ง€๋ฅผ ์‹คํ–‰์‹œํ‚ค๋ฉด ๋œ๋‹ค. ์•„๋ž˜ ๋กœ์ง์„ ๋ณด๋ฉด ์‰ฝ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋‹ค.

 

๐Ÿ˜ญ ์ฝœ๋ฐฑ ์ง€์˜ฅ

 

 NodeJS ๊ฐœ๋ฐœ์ž๋ผ๋ฉด ์ฝœ๋ฐฑ ์ง€์˜ฅ์— ๋Œ€ํ•ด์„œ๋Š” ์ž˜ ์•Œ๊ณ  ์žˆ๋‹ค. ๋„์ปค API ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ค‘์—์„œ dockerode๋ผ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์žˆ๋‹ค. ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๋„์ปค ์ •๋ณด๋ฅผ ๋ถˆ๋Ÿฌ์˜ค๊ณ  ์‚ญ์ œํ•˜๋Š” ๋ฐ์— ์ฝœ๋ฐฑ์— ์ฝœ๋ฐฑ์„ ๋ถˆ๋Ÿฌ์˜ค๋ฉฐ ์ฝ”๋“œ๊ฐ€ ๋”๋Ÿฌ์›Œ์ง€๋Š” ๋‹จ์ ์ด ์žˆ์—ˆ๋‹ค. ํšจ์œจ์ ์ธ ์ฝ”๋“œ๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ๊ธฐ๋Šฅ๋ณ„๋กœ ์ฝœ๋ฐฑ์„ ๋ฌถ์–ด ์„œ๋น„์Šค ๋กœ์ง์œผ๋กœ ๋งŒ๋“ค๊ณ  ๋ชจ๋“  ๋กœ์ง์€ ์ด๋ฒคํŠธ ๊ธฐ๋ฐ˜์œผ๋กœ ์ž‘์„ฑํ–ˆ๋‹ค. ์›น ํ›… ์š”์ฒญ์ด ์˜ค๋ฉด eventemitter๋กœ ์ด๋ฒคํŠธ๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ๋™๊ธฐ์ ์œผ๋กœ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค. 

 

 

๐Ÿ›  ์ปจํ…Œ์ด๋„ˆ ๋ฐฐํฌ ๋ฌธ์ œ

 

 ์ปจํ…Œ์ด๋„ˆ ๋ฐฐํฌ ๋ฌธ์ œ๋ฅผ ํ†ตํ•ด ๋ฌธ์„œ๋ฅผ ์ž์„ธํ•˜๊ฒŒ ์ฝ์–ด์•ผ ํ•œ๋‹ค๋Š” ๊ตํ›ˆ์„ ์–ป์—ˆ๋‹ค. ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋ฐฐํฌํ•˜๊ธฐ ์œ„ํ•ด nginx reverse proxy์— ์ปจํ…Œ์ด๋„ˆ๋ฅผ ํ• ๋‹นํ•˜๊ณ  letsencrypt SSL์„ ๋ฐœ๊ธ‰๋ฐ›๋Š” ๊ณผ์ •์„ ๊ฑฐ์นœ๋‹ค. ๋ฐฐํฌ ์ค‘๊ฐ„์— SSL ์ธ์ฆ์„œ๊ฐ€ ์ œ๋Œ€๋กœ ๋ฐœ๊ธ‰๋˜์ง€ ์•Š์•„์„œ ์ปจํ…Œ์ด๋„ˆ์˜ ์ ‘์† ์˜ค๋ฅ˜๊ฐ€ ๋œจ๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค. ๋ถ„๋ช… ์„œ๋ธŒ ๋„๋ฉ”์ธ ์—ฐ๊ฒฐํ–ˆ๊ณ  ์ปจํ…Œ์ด๋„ˆ๋„ ์ •์ƒ ์ž‘๋™ํ•˜๋Š”๋ฐ well-known/acme-challenge/* ๋งํฌ๋กœ ์ ‘์†ํ•  ์ˆ˜ ์—†์–ด์„œ ์ธ์ฆ์„œ๋ฅผ ๋ฐœ๊ธ‰๋ฐ›์ง€ ๋ชปํ•œ๋‹ค๊ณ  ์˜ค๋ฅ˜๊ฐ€ ๋‚ฌ์—ˆ๋‹ค.

 

 2์ผ๋™์•ˆ ๊ณ ๋ฏผํ•ด๋ณธ ๋์— ์ปจํ…Œ์ด๋„ˆ ํ™˜๊ฒฝ ์„ค์ • ๋ฌธ์ œ์˜€๋‹ค๋Š” ์‚ฌ์‹ค์„ ์•Œ๊ฒŒ ๋˜์—ˆ๋‹ค. ๋ฐฐํฌ๋  ์„œ๋น„์Šค ๋‚ด์— ./deployenv๋ผ๋Š” ํŒŒ์ผ์—์„œ ์„œ๋ธŒ ๋„๋ฉ”์ธ ์ •๋ณด์™€ ์ธ์ฆ์„œ ๋„๋ฉ”์ธ ์ •๋ณด๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์„ค์ •ํ•˜๋Š”๋ฐ, ์ด ๋‘ ๋„๋ฉ”์ธ์˜ ์ฃผ์†Œ๊ฐ€ ๋‹ฌ๋ผ์„œ ์ธ์ฆํ•  ์ˆ˜ ์—†์—ˆ๋‹ค. ์ฆ‰, ์„œ๋ธŒ ๋„๋ฉ”์ธ์€ dds.devent.kr๋ฅผ ํ˜ธ์ถœํ•˜๋Š”๋ฐ ์ธ์ฆ์„œ ๋„๋ฉ”์ธ์€ dds1.devent.kr๋ฅผ ํ˜ธ์ถœํ•˜๊ฒŒ ๋˜์–ด ์ •์ƒ์ ์œผ๋กœ ๋ฐœ๊ธ‰๋ฐ›์„ ์ˆ˜ ์—†์—ˆ๋‹ค.

 

 ์ค‘๊ฐ„์ค‘๊ฐ„ ์‚ฝ์งˆ์ด ๋งŽ์•˜๋‹ค. reverse proxy ๋Œ€์‹  ํ˜ธ์ŠคํŠธ์— ๋‹ค์ด๋ ‰ํŠธ๋กœ ์„ค์น˜ํ•ด๋ณด๊ธฐ๋„ ํ•˜๊ณ , ์ธ์ฆ์„œ ๋ฐœ๊ธ‰ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๊ต์ฒดํ•ด๋ณด๊ธฐ๋„ ํ–ˆ์ง€๋งŒ ๋๋‚ด ํ•ด๊ฒฐ๋˜์ง€ ์•Š์•˜๋‹ค. ํ•ด๋‹น ๋ชจ๋“ˆ์˜ ๋ฌธ์„œ๋ฅผ ์กฐ๊ธˆ ๋” ์„ธ์„ธํ•˜๊ฒŒ ์ฝ์–ด๋ณด์•˜๋‹ค๋ฉด ๋ฌธ์ œ๋ฅผ ๋นจ๋ฆฌ ์•Œ์•„๋‚ผ ์ˆ˜ ์žˆ์—ˆ๊ฒ ๋‹ค๋Š” ์•„์‰ฌ์›€์€ ๋‚จ์•˜์ง€๋งŒ ๊ทธ๋ž˜๋„ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•ด์„œ ํ›„๋ จํ–ˆ๋‹ค.

 

 

๐Ÿš€ ์ž๋™ํ™” ํˆด์„ ๋งŒ๋“ค๊ธฐ๊นŒ์ง€

 

 ์ฒ˜์Œ์— CI ๋„์ž…์„ ๊ณ ๋ คํ–ˆ์—ˆ๋‹ค. circleCI๋ผ๋Š” ์ข‹์€ ํ”„๋กœ๊ทธ๋žจ์ด ์žˆ๊ธธ๋ž˜ ์‚ฌ์šฉํ•ด๋ณด์•˜๋”๋‹ˆ ์•„์ง TDD์™€ ์ฝ”๋“œ ํ†ตํ•ฉ์— ๋Œ€ํ•ด ์ต์ˆ™ํ•˜์ง€ ์•Š์•„ ์‚ฌ์šฉํ•˜๊ธฐ์— ์–ด๋ ค์›€์ด ์žˆ์—ˆ๋‹ค. ์ž๋™ ๋ฐฐํฌ๋งŒ ๋˜๋ฉด ๋˜๋Š”๋ฐ ๊ทธ ์ด์ƒ์˜ ๊ธฐ๋Šฅ๋“ค๋„ ๋งŽ์•„์„œ CI๋ฅผ ์“ฐ๊ธฐ์— ์•„์ง์€ ์ด๋ฅธ ์‹œ๊ธฐ๋ผ๊ณ  ํŒ๋‹จํ–ˆ๋‹ค. ์ดํ›„, ๋ฐฐํฌ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์—†์„๊นŒ ๊ณ ๋ฏผํ•˜๋‹ค๊ฐ€ ์ง์ ‘ ๋งŒ๋“ค์–ด๋ณด๊ธฐ๋กœ ๊ฒฐ์ •ํ–ˆ๋‹ค.

 

 ๊ทธ๋ ‡๊ฒŒ ๋„์ปค ๊ธฐ๋ฐ˜์œผ๋กœ ์ž๋™๋ฐฐํฌ+SSL ์ ์šฉ๊นŒ์ง€ ๊ฐ€๋Šฅํ•œ ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ๋งŒ๋“ค๊ฒŒ ๋˜์—ˆ๋‹ค.

 

 

โŒจ๏ธ ๊ด€๋ จ ๋งํฌ

 

์ฝ”๋“œ๋Š” ์˜คํ”ˆ์†Œ์Šค๋กœ ๊ณต๊ฐœ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ๊ถ๊ธˆํ•œ ์‚ฌํ•ญ์€ ๋Œ“๊ธ€๋กœ ๋‚จ๊ฒจ์ฃผ์„ธ์š”.

 

https://github.com/Team-DeVent/devent-deploy

 

GitHub - Team-DeVent/devent-deploy: Auto Deployment Service with Docker

Auto Deployment Service with Docker. Contribute to Team-DeVent/devent-deploy development by creating an account on GitHub.

github.com

 

๋ฐ˜์‘ํ˜•