Docker๋ฅผ ํ์ฉํด ํ๋ก ํธ์๋ ์ ํ๋ฆฌ์ผ์ด์
์ Blue/Green ๋ฐฉ์์ผ๋ก ๋ฌด์ค๋จ ๋ฐฐํฌํ๊ณ ์์ต๋๋ค.
eventor-front-blue-1, eventor-front-blue-2 ์ ๊ฐ์ ์ปจํ
์ด๋๋ค์ ๋ก๋๋ฐธ๋ฐ์ฑํ๊ธฐ ์ํด NGINX์ upstream ์ค์ ์ ํ์ฉํ๊ณ ์์ต๋๋ค.
upstream frontend {
server eventor-front-blue-1:8001;
server eventor-front-blue-2:8002;
}
์๋ฒ๊ฐ ์ฌ๋ถํ
๋๋ฉด, NGINX ์ปจํ
์ด๋๊ฐ ๋จผ์ ์คํ๋๊ณ , ๊ทธ ๋ค์ ํ๋ก ํธ์๋ ์ ํ๋ฆฌ์ผ์ด์
์ปจํ
์ด๋๋ค์ด ์คํ๋ฉ๋๋ค.
์ด๋, NGINX๊ฐ ๋จผ์ ์ฌ๋ผ์ค๋ฉด์ upstream ์ค์ ์ ๋ช
์๋ ์ปจํ
์ด๋๊ฐ ์กด์ฌํ์ง ์์ ๋ค์๊ณผ ๊ฐ์ ์๋ฌ๊ฐ ๋ฐ์ํฉ๋๋ค:
[emerg] host not found in upstream "eventor-front-blue-1:8001"
๐จ Docker ๋คํธ์ํฌ ๋ด์์ ์ ์๋ ์ปจํ ์ด๋๊ฐ ์์ง ์์ฑ๋์ง ์์๊ธฐ ๋๋ฌธ์ ๋ฐ์ํ๋ ๋ฌธ์ ์ ๋๋ค.
nginx -s reload ์ํnginx-start.sh์์ ๋ณต์ฌํ ๊ธฐ๋ณธ ์ค์ )upstream frontend {
server 127.0.0.1:65535;
}
65535 ํฌํธ๋ ์ผ๋ฐ์ ์ผ๋ก ์ด๋ ค์์ง ์๊ธฐ ๋๋ฌธ์, ์ค์ ์์ฒญ์ ์คํจํ์ง๋ง NGINX๋ ์ ์ ๊ธฐ๋๋ฉ๋๋ค.
#!/bin/sh
DEFAULT_CONF="/nginx/nginx.base.conf"
TARGET_CONF="/nginx/nginx.conf"
cp "$DEFAULT_CONF" "$TARGET_CONF"
์ด ์คํฌ๋ฆฝํธ๋
nginx์ปจํ ์ด๋๊ฐ ์คํ๋ ๋/nginx/nginx.conf๋ฅผ ์์ ํ ์ด๊ธฐ ์ํ๋ก ์ธํ ํฉ๋๋ค.
services:
nginx:
container_name: nginx
image: nginx:1.27.4
restart: always
command: ["/bin/sh", "/nginx-start.sh"]
volumes:
- ./nginx:/nginx
- ./nginx-start.sh:/nginx-start.sh
- ./nginx/nginx.conf:/etc/nginx/nginx.conf
...
location / {
proxy_intercept_errors on;
error_page 413 /errors/413.html;
error_page 502 /errors/502.html;
location = /errors/ {
root /usr/share/nginx/html/;
internal;
}
proxy_pass http://frontend;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
โ ํ๋ก ํธ๊ฐ ์์ง ๊ธฐ๋๋์ง ์์์ ๋ ์ฌ์ฉ์์๊ฒ๋ ์ปค์คํ 502 ํ์ด์ง๋ฅผ ๋ณด์ฌ์ค๋๋ค.
#!/bin/bash
ACTIVE_VERSION=$(cat ./version.txt)
# nginx.conf ๊ต์ฒด ๋ฐ ๋ฆฌ๋ก๋
cp nginx/nginx.$ACTIVE_VERSION.conf ../nginx/nginx.conf
cd .. && docker-compose exec nginx nginx -s reload
nginx.blue.conf,nginx.green.conf๋ฑ ์ค์ upstream ์ค์ ์ ๋ฐ์ํ ํ์ผ๋ก ๊ต์ฒดํ ๋ค NGINX๋ฅผ reload ํฉ๋๋ค.
upstream frontend {
server eventor-front-blue-1:8001;
server eventor-front-blue-2:8002;
}
์ด๋ ๊ฒ ์ค์ ํ๋ฉด ์๋ฒ ์ฌ๋ถํ
์ NGINX ๊ธฐ๋ ์ค๋ฅ ์์ด ์์ ํ๊ฒ ์์๋๋ฉฐ,
ํ๋ก ํธ ์ ํ๋ฆฌ์ผ์ด์
์ด ์ฌ๋ผ์จ ์ดํ์ ์ ์ ํ ์ค์ ์ผ๋ก nginx๋ฅผ reloadํจ์ผ๋ก์จ ์์ ํ ์ฐ๊ฒฐ์ด ์๋ฃ๋ฉ๋๋ค.
| ํญ๋ชฉ | ๋ด์ฉ |
|---|---|
| ๋ฌธ์ | NGINX๊ฐ ๋จผ์ ๊ธฐ๋๋๋ฉฐ upstream ์ปจํ ์ด๋๋ฅผ ์ฐพ์ง ๋ชปํด ์๋ฌ |
| ํต์ฌ ํด๊ฒฐ ์ ๋ต | ์ด๊ธฐ dummy upstream ์ค์ โ ์ฑ ์คํ ํ ์ค์ ์ค์ ์ ์ฉ + reload |
| ์ฅ์ | ์๋ฒ ์ฌ๋ถํ ์์๋ NGINX ์ค๋ฅ ์์ด ์๋, ์ ์ฐํ ๋ฐฐํฌ ๊ฐ๋ฅ |