Lorawan-stack: Docker์˜ ๋Œ€์•ˆ์œผ๋กœ ํ‘œ์ค€ ์‹œ์Šคํ…œ ํŒจํ‚ค์ง€ ์ œ๊ณต

์— ๋งŒ๋“  2019๋…„ 02์›” 02์ผ  ยท  10์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: TheThingsNetwork/lorawan-stack

์š”์•ฝ:
๋ชจ๋“  ์ฃผ์š” Linux ๋ฐฐํฌํŒ์€ ํŒจํ‚ค์ง€ ๊ด€๋ฆฌ์ž์— ์˜์กดํ•˜์—ฌ ํ†ต์ œ๋˜๊ณ  ์•ˆ์ „ํ•œ ๋ฐฉ์‹์œผ๋กœ ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค.

์ด ์ œ์•ˆ์€ ํŒจํ‚ค์ง€๊ฐ€ ์‹œ์ž‘์ ์œผ๋กœ RPM , deb ๋ฐ opkg ํ˜•์‹์œผ๋กœ ์ƒ์„ฑ๋˜๊ณ  ๋‚˜์ค‘์— ์ถ”๊ฐ€ ํŒจํ‚ค์ง€ ํ˜•์‹์ด ์ถ”๊ฐ€๋œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์™œ ์ด๊ฒƒ์ด ํ•„์š”ํ•ฉ๋‹ˆ๊นŒ?
๋งŽ์€ ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ์กฐ์ง์—์„œ๋Š” git์ด ์ž์ฒด ์„œ๋ฒ„ ์ด์™ธ์˜ ์„œ๋ฒ„์— ์—ฐ๊ฒฐํ•˜๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•˜๊ณ  wget ๋ช…๋ น๋„ ํ—ˆ์šฉํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Docker๋Š” ์ข…์ข… ์ด๋Ÿฌํ•œ ์กฐ์ง ๋‚ด์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์ง€๋งŒ ํŒจํ‚ค์ง€ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์— ๋Œ€ํ•œ ์•ก์„ธ์Šค๋Š” "์•Œ๋ ค์ง„ ์ˆ˜๋Ÿ‰"์ด๋ฏ€๋กœ ๋ณด์•ˆ ํŒ€์— ํŒ๋งคํ•˜๊ธฐ๊ฐ€ ๋” ์‰ฝ์Šต๋‹ˆ๋‹ค. ํŠนํžˆ ํŒจํ‚ค์ง€๋Š” ์ƒ์„ฑ ํ”„๋กœ์„ธ์Šค์˜ ์ผ๋ถ€๋กœ ์™„์ „ํžˆ ์„œ๋ช…๋˜๋Š” ๊ฒฝํ–ฅ์ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

Docker๊ฐ€ ์ ํ•ฉํ•˜์ง€ ์•Š์€ ์ƒํ™ฉ๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์—๋Š” ์‹œ์Šคํ…œ ํ†ตํ•ฉ์ž/๊ด€๋ฆฌํ˜• ์„œ๋น„์Šค ๊ณต๊ธ‰์ž๊ฐ€ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์•„๋‹Œ ์ธ์Šคํ„ด์Šค๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๋Š” AWS Auto Scaling ๊ทธ๋ฃน์„ ์‚ฌ์šฉํ•˜์—ฌ ํ™•์žฅํ•˜๊ฑฐ๋‚˜ ์•ˆ์ „ํ•œ ํ™˜๊ฒฝ์—์„œ ๋ฒ ์–ด๋ฉ”ํƒˆ ์„ค์น˜๋ฅผ ์›ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ํฌํ•จ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ํŒจํ‚ค์ง€๊ฐ€ ์—†์„ ๋•Œ Ansible, Chef ๋˜๋Š” Puppet๊ณผ ๊ฐ™์€ ๊ตฌ์„ฑ ๊ด€๋ฆฌ ๋„๊ตฌ๋ฅผ ํ†ตํ•œ ์„ค์น˜๋„ ์—„์ฒญ๋‚˜๊ฒŒ ์–ด๋ ต์Šต๋‹ˆ๋‹ค.

๋งˆ์ง€๋ง‰์œผ๋กœ ํŒจํ‚ค์ง€๊ฐ€ ์•„๋‹Œ git ์ €์žฅ์†Œ์—์„œ ์„ค์น˜ํ•˜๋Š” ๊ฒƒ์€ ์ปดํŒŒ์ผ๋Ÿฌ ์—†์ด๋Š” ์–ด๋ ต์Šต๋‹ˆ๋‹ค. ์ด๋Š” ํ”„๋กœ๋•์…˜ ์‹œ์Šคํ…œ์— ์ปดํŒŒ์ผ๋Ÿฌ๋ฅผ ์„ค์น˜ํ•จ์œผ๋กœ์จ ๋ณด์•ˆ ์œ„ํ—˜์„ ์•ผ๊ธฐํ•ฉ๋‹ˆ๋‹ค.

์ด๋ฏธ ๊ฑฐ๊ธฐ์— ๋ฌด์—‡์ด ์žˆ์Šต๋‹ˆ๊นŒ?

ํ˜„์žฌ ์šฐ๋ฆฌ๋Š” ๋‘ ๊ฐœ์˜ ๋„์ปค ์ปจํ…Œ์ด๋„ˆ( ttn-lw-stack ๋ฐ ttn-lw-cli ) ๋˜๋Š” git์—์„œ ๋™์ผํ•œ ์ด๋ฆ„์˜ ๋ฐ”์ด๋„ˆ๋ฆฌ ๋นŒ๋“œ ์ค‘์—์„œ ์„ ํƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฐฐํฌ๋Š” docker pull ๋˜๋Š” git clone ๋ฅผ ํ†ตํ•ด ์ด๋ฃจ์–ด์ง€๋ฉฐ ๋‘˜ ๋‹ค ๊ธฐ์—…/๊ต์œก์šฉ ๋ฐฉํ™”๋ฒฝ ๋’ค์—์„œ ์ž‘๋™ํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์—†์–ด์ง„ ๋ฌผ๊ฑด ์žˆ์–ด์š”?

yum , apt ๋˜๋Š” opkg ๋ฅผ ํ†ตํ•œ ์„ค์น˜ ๊ธฐ๋Šฅ

์ด๋ฅผ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด ์–ด๋–ป๊ฒŒ ์ œ์•ˆํ•ฉ๋‹ˆ๊นŒ?

์ด๊ฒƒ์€ GO Releaser ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ตฌํ˜„ํ•˜๊ธฐ๊ฐ€ ์ƒ๋Œ€์ ์œผ๋กœ ์‰ฌ์›Œ์•ผ ํ•˜์ง€๋งŒ GO๋Š” ๋‚ด๊ฐ€ ํŠนํžˆ ์นœ์ˆ™ํ•œ ์–ธ์–ด๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค(์•„์ง!).

ํ™˜๊ฒฝ:

Linux - CentOS/RHEL ๊ธฐ๋ฐ˜, Debian/Ubuntu ๊ธฐ๋ฐ˜, OpenWRT ๊ธฐ๋ฐ˜

์Šค์Šค๋กœ ๋ฌด์—‡์„ ํ•  ์ˆ˜ ์žˆ๊ณ  ์–ด๋–ค ๋„์›€์ด ํ•„์š”ํ•ฉ๋‹ˆ๊นŒ?

์ด๊ฒƒ์ด ๋ฐฐํฌ๋ฅผ ์œ„ํ•ด go ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์„ ํŒจํ‚ค์ง•ํ•˜๋Š” ์ ์ ˆํ•œ ๋ฐฉ๋ฒ•์ธ์ง€ ํ™•์ธํ•œ ๋‹ค์Œ GO!

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

์šฐ๋ฆฌ๋Š” CD์˜ ์ด ๋ถ€๋ถ„๋„ ๋งŒ๋“ค ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋˜ํ•œ ์œ„์‹œ๋ฆฌ์ŠคํŠธ์— brew ์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

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

APT, AUR ๋ฐ https://github.com/nixos/nixpkgs ์— ํŒจํ‚ค์ง€๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ํ˜•์‹์— ์ด๋ฏธ ์ต์ˆ™ํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ๊ฒƒ๋“ค์€ ๋‚˜์ค‘์— ์ถ”๊ฐ€๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.
๋ฌผ๋ก  ๊ธฐ์—ฌ๋Š” ์–ธ์ œ๋‚˜ ํ™˜์˜์ž…๋‹ˆ๋‹ค!

@rvolosatovs go-releaser๋ฅผ ์‚ฌ์šฉํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ, ์•„๋‹ˆ๋ฉด ํŒจํ‚ค์ง€๋ฅผ ๋งŒ๋“œ๋Š” ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?

๋‚˜๋Š” ๋‹น์‹ ์ด ๊ทธ๊ฒƒ๋“ค์„ ๋งŒ๋“œ๋Š” ๋ฐ ๋ฌด์—‡์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š”์ง€ ์•„๋Š” ํ•œ RPM ์ธก๋ฉด์—์„œ ์ผํ•˜๊ฒŒ ๋˜์–ด ๊ธฐ์ฉ๋‹ˆ๋‹ค! :)

์šฐ๋ฆฌ๋Š” CD์˜ ์ด ๋ถ€๋ถ„๋„ ๋งŒ๋“ค ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋˜ํ•œ ์œ„์‹œ๋ฆฌ์ŠคํŠธ์— brew ์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

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

์ด๊ฒƒ์— ๋Œ€ํ•œ ๋ชจ๋“  ์ž‘์—…์— ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค. ์•ž์œผ๋กœ ๋ฉฐ์น  ๋‚ด์— RPM ์ง€์›์„ ์ถ”๊ฐ€ํ•˜๊ณ  ํ…Œ์ŠคํŠธํ•  ์‹œ๊ฐ„์„ ๊ฐ–๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.

@proffalken ์šฐ๋ฆฌ๋Š” CI์˜ ์ผ๋ถ€๋กœ RPM ํŒจํ‚ค์ง€๋ฅผ ๋นŒ๋“œํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋ฆด๋ฆฌ์Šค๊ฐ€ ์™„๋ฃŒ๋˜๋ฉด ๋ฆด๋ฆฌ์Šค ํŽ˜์ด์ง€ ์—์„œ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. (์ฐธ๊ณ ๋กœ github์€ ๋ฆด๋ฆฌ์Šค์šฉ Atom ํ”ผ๋“œ๋„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. https://github.com/thethingsnetwork/lorawan-stack/releases.atom)

goreleaser ์‚ฌ์šฉ์— ๋Œ€ํ•œ ๊ท€ํ•˜์˜ ์ œ์•ˆ์„ ๋”ฐ๋ž์Šต๋‹ˆ๋‹ค.
RPM ํŒจํ‚ค์ง€ ์ž์ฒด์™€ ๊ด€๋ จํ•˜์—ฌ - ํ˜„์žฌ๋กœ์„œ๋Š” https://github.com/TheThingsNetwork/lorawan-stack/blob/b1183962c502e6b53191086c23567c546c2b8ec5/.goreleaser.yml#L79 -L92์ž…๋‹ˆ๋‹ค.
์˜ˆ๋ฅผ ๋“ค์–ด ํ”„๋ก ํŠธ์—”๋“œ์˜ ์œ„์น˜๋Š” RPM ํŒจํ‚ค์ง€์˜ ๋น„ํ‘œ์ค€ ์œ„์น˜์ด๋ฉฐ ์‹ค์ œ๋กœ ์Šคํƒ์˜ ๊ธฐ๋ณธ๊ฐ’๋„ ์•„๋‹™๋‹ˆ๋‹ค( /srv/ttn-lorawan/public ์— ์žˆ์„ ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒํ•จ).
๋”ฐ๋ผ์„œ ์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ๊ท€ํ•˜์˜ ์˜๊ฒฌ์€ ๋งค์šฐ ๋„์›€์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด brew ์˜ ๊ฒฝ์šฐ ์Šคํƒ ๋ฐ”์ด๋„ˆ๋ฆฌ๋ฅผ ๋ž˜ํ•‘ํ•˜์—ฌ ํ”„๋ก ํŠธ์—”๋“œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋„๋ก ๊ด€๋ จ ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.
https://github.com/TheThingsNetwork/lorawan-stack/blob/b1183962c502e6b53191086c23567c546c2b8ec5/.goreleaser.yml#L116 -L119

RPM ํŒจํ‚ค์ง€์—์„œ ์˜ˆ์ƒ๋˜๋Š” ์œ„์น˜๊ฐ€ ๋‹ค๋ฅด๋‹ค๊ณ  ํ™•์‹ ํ•˜์ง€๋งŒ, ๋™์ผํ•œ ์ ‘๊ทผ ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.

@rvolosatovs ๋Š” ๋‚˜์—๊ฒŒ ์™„๋ฒฝํ•ฉ๋‹ˆ๋‹ค.

ํ™˜๊ฒฝ ๋ณ€์ˆ˜์˜ ์„ค์ •์€ ์•„๋งˆ๋„ systemd ์„œ๋น„์Šค ์Šคํฌ๋ฆฝํŠธ์—์„œ ๊ฐ€์žฅ ์ž˜ ์ˆ˜ํ–‰๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ฐ€๋Šฅํ•œ ํ•œ ๋นจ๋ฆฌ ํ•˜๋‚˜๋ฅผ ํ†ตํ•ฉํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

/srv/ttn-lorawan/public ์— ๋ฌผ๊ฑด์„ ์ง‘์–ด๋„ฃ๋Š” ๊ฒƒ๋„ ์™„๋ฒฝํ•˜๊ฒŒ ํ—ˆ์šฉ๋ฉ๋‹ˆ๋‹ค. :)

@rvolosatovs ๋ ˆ์ด๋ธ” ๋ฐ/๋˜๋Š” ์›๋ž˜ ์˜๊ฒฌ์„ ์—…๋ฐ์ดํŠธํ•˜์—ฌ ๋” ์ด์ƒ ๋„์›€์ด ํ•„์š”ํ•˜์ง€ ์•Š๊ฑฐ๋‚˜ ํŠน์ • ๋ฐฐํฌ์— ๋Œ€ํ•œ ๋„์›€์ด ํ•„์š”ํ•˜์ง€ ์•Š์Œ์„ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ์ปค๋ฎค๋‹ˆํ‹ฐ ๊ตฌ์„ฑ์›์ด ๋Œ€๋ถ€๋ถ„์ด ์ง„ํ–‰ ์ค‘์ธ ๋™์•ˆ ์ด๋ฅผ ์—ด์‹ฌํžˆ ๊ตฌํ˜„ํ•˜๊ธฐ ์ „์—.

v3.0.0 ๋ฆด๋ฆฌ์Šค ๋ถ€์กฑ์œผ๋กœ ์ฐจ๋‹จ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
์‹œํ—˜ํŒ ๋ฒ„์ „์„ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์— ๊ฒŒ์‹œํ•˜๋Š” ๊ฒƒ์€ ์˜๋ฏธ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

์ถœ์‹œ๋กœ ์ธํ•ด ํ์‡„๋˜์—ˆ์Šต๋‹ˆ๋‹ค. Snappy ๋ฐ Brew ์ง€์›๊ณผ deb ๋ฐ rpm ํŒŒ์ผ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

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