Docker-mailman: ์ „์ฒด ์Šคํƒ ๋„์ปค ์ž‘์„ฑ

์— ๋งŒ๋“  2019๋…„ 01์›” 04์ผ  ยท  7์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: maxking/docker-mailman

์šฐ์„  ๋†€๋ผ์šด ์ปจํ…Œ์ด๋„ˆ ๋•๋ถ„์— ์„ค์น˜๊ฐ€ ํ›จ์”ฌ ์‰ฌ์›Œ์กŒ์Šต๋‹ˆ๋‹ค. ์ตœ๊ทผ์— ์™„์ „ํ•œ ํ”„๋กœ๋•์…˜ docker-compose ์„ค์ •์„ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค. ์„ค์ •์„ ์ˆ˜ํ–‰ํ•˜๋ฉด์„œ ๋ฐฐ์šด ์ด ํ”„๋กœ์ ํŠธ์— ๋Œ€ํ•œ ๋ช‡ ๊ฐ€์ง€ ๋ณ€๊ฒฝ/์ถ”๊ฐ€๋ฅผ ์ œ์•ˆ/ํ† ๋ก ํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

  • MTA ๋ฐ SSL ์ข…๋ฃŒ๋ฅผ ํฌํ•จํ•œ ์ „์ฒด docker-compose ์ œ๊ณต(๊ธฐ๋ณธ์ ์œผ๋กœ #174)

    • ์‚ฌ์ดํŠธ ํŠน์ • ๋ณ€์ˆ˜๋ฅผ .env ํŒŒ์ผ(๋น„๋ฐ€ ๋ฐ ๋„๋ฉ”์ธ)๋กœ ์ด๋™

    • mailman ํŠน์ • ๊ตฌ์„ฑ๊ณผ ๊ตฌ์„ฑ ๊ฐ€๋Šฅํ•œ ๋กœ์ปฌ ์„œ๋ธŒ๋„ท์ด ์žˆ๋Š” ์ ‘๋ฏธ์‚ฌ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค(#282์— ๋„์›€์ด ๋จ).

    • ์ด๋ฏธ ์ •์  ํŒŒ์ผ๊ณผ ํ”„๋ก์‹œ๋ฅผ ํฌํ•จํ•˜๋Š” nginx ์ปจํ…Œ์ด๋„ˆ๋ฅผ uwsgi ์†Œ์ผ“์— ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค(ssl ์ข…๋ฃŒ๋ฅผ ์ฒ˜๋ฆฌํ•˜์ง€ ์•Š์œผ๋ฉฐ ์ด๋ฏธ ์ถฉ๋ถ„ํ•œ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์žˆ์Œ). #144์™€ ๊ด€๋ จ๋˜์ง€๋งŒ ์•„๋งˆ๋„ ๋‹ค๋‹จ๊ณ„ dockerfile๋กœ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

    • ๋ถ„ํ•  ๊ตฌ์„ฑ์€ ๋ฐ์ดํ„ฐ ํด๋”์—์„œ ํด๋”๋ฅผ ๋ฎ์–ด์”๋‹ˆ๋‹ค.

    • stdout์— ๊ธฐ๋ก(#2, #134)

  • docker-compose(ํ˜ธ์ŠคํŠธ ์ด๋ฆ„, ์ปจํ…Œ์ด๋„ˆ ์ด๋ฆ„, ๋งํฌ)์—์„œ ๊ธฐ๋ณธ ํ•ญ๋ชฉ์„ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค.
  • ํ•˜๋“œ ์ฝ”๋”ฉ๋œ ์„œ๋ธŒ๋„ท์„ ์ œ๊ฑฐํ•˜๊ณ  DNS ๊ธฐ๋ฐ˜ ๋ผ์šฐํŒ…์„ ์‚ฌ์šฉํ•˜์‹ญ์‹œ์˜ค(์‹คํ–‰ ๊ฐ€๋Šฅํ•œ์ง€๋Š” ํ™•์‹คํ•˜์ง€ ์•Š์ง€๋งŒ ํ›Œ๋ฅญํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค)(๊ด€๋ จ #44).

์œ„์˜ ์‚ฌํ•ญ์— ๋Œ€ํ•ด PR์„ ์ œ๊ณตํ•˜๊ณ  ์‹ถ์ง€๋งŒ ์ด ํ‹ฐ์ผ“์„ ์ž‘์„ฑํ•˜๊ณ  ๋ชจ๋“  ๊ด€๋ จ ํ‹ฐ์ผ“์„ ์ฐพ์€ ํ›„ ๋จผ์ € ํ”ผ๋“œ๋ฐฑ์„ ๋ฐ›๊ณ  ์‹ถ์—ˆ์Šต๋‹ˆ๋‹ค. ๋‚˜.

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

๋ชจ๋“  7 ๋Œ“๊ธ€

๊ด€์‹ฌ์„ ๊ฐ€์ ธ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

  • ์ €๋Š” ์ „์ฒด ์Šคํƒ ์ž‘์„ฑ์„ ํ˜„์žฌ ์˜ต์…˜๊ณผ ๋ณ„๋„์˜ ์˜ต์…˜์œผ๋กœ ์œ ์ง€ํ•ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์ฃผ๋กœ Mailman์„ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ ์™ธ์— ๋‹ค๋ฅธ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•ด ํ˜ธ์ŠคํŠธ์—์„œ MTA/์›น ์„œ๋ฒ„๊ฐ€ ํ•„์š”ํ•œ ์‚ฌ๋žŒ๋“ค์„ ์œ„ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.
  • ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ .env ํŒŒ์ผ๋กœ ์ด๋™ํ•˜๋Š” ๊ฒƒ์€ ๋‚˜์—๊ฒŒ ๊ทธ๋‹ค์ง€ ์˜๋ฏธ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ๊ท€ํ•˜์˜ ๋น„๋ฐ€์„ ๋” ์•ˆ์ „ํ•˜๊ฒŒ ์œ ์ง€ํ•˜๊ธฐ๋ฅผ ์›ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ .env ๋Œ€ํ•œ ์•ก์„ธ์Šค๋ฅผ ๊ฑฐ๋ถ€ํ•˜๊ธฐ ์œ„ํ•ด ์ผ๋ถ€ Linux ๊ถŒํ•œ์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ํ•œ docker-compose.yaml , ๊ทธ๊ฒƒ์€ ์ผ์ข…์˜ ์“ธ๋ชจ์—†๋Š” ๊ฒƒ์ž…๋‹ˆ๊นŒ? ๊ทธ๋ฆฌ๊ณ  ๊ทธ ์ผ์„ ์–ด๋–ป๊ฒŒ ํ•  ๊ฒƒ์ธ์ง€ ์ž˜ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค.
  • ์ ‘๋ฏธ์‚ฌ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์€ ํฐ ๋„์›€์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ #282 ์™€ ๊ด€๋ จ์ด ์—†์ง€๋งŒ ๋ณ„๋„์˜ MR์—์„œ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋‚˜๋Š” ์ฃผ์‹๊ณผ ๋ณผ๋ฅจํ•œ๋‹ค๋Š” Nginx์— ์ปจํ…Œ์ด๋„ˆ ์ถ”๊ฐ€ ์ƒ๊ฐ mailman-web ๊ฐ€์žฅ ์ข‹์€ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋‚˜๋Š” ํ˜„์žฌ #144์— ๋ณ„๋กœ ๊ด€์‹ฌ์ด ์—†์Šต๋‹ˆ๋‹ค. ํŠนํžˆ ์†๋„๋ฅผ ํฌ๊ฒŒ ํ–ฅ์ƒ์‹œํ‚ค์ง€ ๋ชปํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ์‹œ์ž‘ํ•  ๋•Œ ์ •์  ํŒŒ์ผ์„ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ์€ ์ผ๋ฐ˜์ ์œผ๋กœ ๋ฌธ์ œ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.
  • stdout์— ๋Œ€ํ•œ ๋กœ๊น…์€ ํ›Œ๋ฅญํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. Django๋Š” ์•„๋งˆ๋„ ์‰ฝ๊ฒŒ ํ•  ์ˆ˜ ์žˆ๊ณ  Core
  • ํ˜ธ์ŠคํŠธ ์ด๋ฆ„, ์ปจํ…Œ์ด๋„ˆ ์ด๋ฆ„, ๋งํฌ์— ๋Œ€ํ•œ ๊ธฐ๋ณธ ํ•ญ๋ชฉ์„ ์ œ๊ฑฐํ•˜๋ ค๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?
  • ํ•˜๋“œ ์ฝ”๋”ฉ๋œ ๋„คํŠธ์›Œํฌ ํ•ญ๋ชฉ์„ ์ œ๊ฑฐํ•˜๋Š” ๊ฒƒ์€ ์ œ๊ฐ€ ์ •๋ง๋กœ ํ•˜๊ณ  ์‹ถ์€ ์ผ์ž…๋‹ˆ๋‹ค. Hyperkitty๊ฐ€ Core์˜ ์š”์ฒญ์„ ์ธ์ฆํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋”ฐ๋ผ ๋ช‡ ๊ฐ€์ง€ ๋ฌธ์ œ๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ์ง€๋งŒ ์—…์ŠคํŠธ๋ฆผ์—์„œ๋„ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ „๋ฐ˜์ ์œผ๋กœ ๋Œ€๋ถ€๋ถ„์˜ ์•„์ด๋””์–ด๊ฐ€ ๋งˆ์Œ์— ๋“ญ๋‹ˆ๋‹ค. ์ด์ƒ์ ์œผ๋กœ๋Š” ๊ฐ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ๋ณ„๋„์˜ Pull Request์— ํฌํ•จ๋˜๊ธฐ๋ฅผ ์›ํ•˜๋ฉฐ ํ•ด๋‹น PR์—์„œ ๋” ์ž์„ธํžˆ ๋…ผ์˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

.env ํŒŒ์ผ ์ •๋ณด:

  • ์ „์ฒด docker-compose.yml์„ ๊ฒ€์ƒ‰ํ•˜์ง€ ์•Š๊ณ  ๋ณ€๊ฒฝํ•ด์•ผ ํ•˜๋Š” ๋ณ€์ˆ˜๋ฅผ ์ตœ์ข… ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ช…ํ™•ํ•˜๊ฒŒ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.
  • ์ค‘๋ณต ์ •์˜๋ฅผ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค(์˜ˆ: ํ•˜์ดํผํ‚คํ‹ฐ API ํ‚ค).
  • docker-compose.yml์„ ๋” ์‰ฝ๊ฒŒ ์—…๊ทธ๋ ˆ์ด๋“œํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•˜๋ฉฐ(์—…์ŠคํŠธ๋ฆผ์„ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์—) ๋กœ์ปฌ .env ์—์„œ ๋ณ€๊ฒฝ๋œ ๋ณ€์ˆ˜๋ฅผ ์ถ”๊ฐ€/์ˆ˜์ •ํ•˜๊ธฐ๋งŒ ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.
  • ์ตœ์ข… ์‚ฌ์šฉ์ž๋Š” ๋น„๋ฐ€์„ ๋…ธ์ถœํ•˜์ง€ ์•Š๊ณ  ์‹คํ–‰ ์ค‘์ธ docker-compose.yml์„ ์†Œ์Šค ์ œ์–ด์— ์ฒดํฌ์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” PR์ด ๊ทธ๊ฒƒ์„ ๋” ๋ช…ํ™•ํ•˜๊ฒŒ ํ•  ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์€ ๋งŽ์€ ์ž‘์—…์ด ์•„๋‹ˆ๋ฏ€๋กœ ์šฐ๋ฆฌ๊ฐ€ ๊ทธ๊ฒƒ์„ ๋–จ์–ด ๋œจ๋ฆฌ๋ฉด ๋ฒˆ๊ฑฐ ๋กœ์›€์ด ์—†์Šต๋‹ˆ๋‹ค.

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

๋‹ค์†Œ ๊ด€๋ จ์ด ์žˆ์œผ๋ฏ€๋กœ ์ด ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋‚˜๋จธ์ง€ ์Šคํƒ์„ ์ œ๊ณตํ•˜๋Š” Mailu(https://github.com/Mailu/Mailu)์— ํ†ตํ•ฉํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ์„ค์ •์— ๊ด€์‹ฌ์ด ์žˆ์Šต๋‹ˆ๊นŒ?

@pgeorgi ์ด ์ด๋ฏธ์ง€๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์œ ์ง€ํ•˜๊ณ  ์‹ถ์€ ํ†ตํ•ฉ์ด ์ด๋ฏธ ์žˆ๋Š” ๊ฒฝ์šฐ ๋ฌธ์„œ์— ์ €์žฅ์†Œ/๊ฒŒ์‹œ๋ฌผ์— ๋Œ€ํ•œ ๋งํฌ๋ฅผ ์ถ”๊ฐ€ํ•ด ๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค.

@pgeorgi ํ™•์‹คํžˆ

.env ํŒŒ์ผ์— ๋Œ€ํ•ด @morbidick์˜ ์˜๊ฒฌ์— ๋™์˜ํ•ฉ๋‹ˆ๋‹ค. ์ฃผ๋กœ ์—…๋ฐ์ดํŠธ๋ฅผ ํ›จ์”ฌ ์‰ฝ๊ฒŒ ๋งŒ๋“ค์–ด์ฃผ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.
์ €์žฅ์†Œ๋ฅผ ์˜ค์—ผ์‹œํ‚ค์ง€ ์•Š๊ณ  ๊ฐ„๋‹จํžˆ git pull ๋ฅผ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
๋˜ํ•œ .env ํŒŒ์ผ์€ .gitignore ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ : Sentry๊ฐ€ ์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์‚ดํŽด๋ณด์‹ญ์‹œ์˜ค.
https://github.com/getsentry/onpremise

๊ทธ๋“ค์€ ๋˜ํ•œ ์ œ๊ณต env.example ๋‹น์‹ ์ด ๋‹น์‹ ์˜ ์ž์‹ ์— ๋ณต์‚ฌ ํ•  ์ˆ˜์žˆ๋Š” ํŒŒ์ผ .env ํŒŒ์ผ์„.

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰