์ด๋ฒ์๋ Github Actions CI/CD(1) - git submodule ํฌํจ์ํคํค์์ ์ถ๊ฐ์ ์ผ๋ก NGINX๋ฅผ ์ ์ฉํด๋ณด๊ฒ ๋ค.
๊ฐ๋ฐ ํ๊ฒฝ์ ๋ค์๊ณผ ๊ฐ๋ค.
- Window 11
- Spring Boot 2.7.7
- java 11
- Ubuntu Server.22.04 LTS
- Intellij IDEA Ultimate
0. NGINX๋?
NGINX๋ ํธ๋ํฝ์ด ๋ง์ ์น์ฌ์ดํธ์ ์๋ฒ(WAS)๋ฅผ ๋์์ฃผ๋ ๋น๋๊ธฐ ์ด๋ฒคํธ ๊ธฐ๋ฐ ๊ตฌ์กฐ์ ์น ์๋ฒ ํ๋ก๊ทธ๋จ์ด๋ค.
ํด๋ผ์ด์ธํธ๋ก๋ถํฐ ์์ฒญ์ ๋ฐ์์ ๋ ์์ฒญ์ ๋ง๋ ์ ์ ํ์ผ์ ์๋ตํด ์ฃผ๋ Web Server๋ก ํ์ฉ๋๊ธฐ๋ ํ๊ณ , ๋ฆฌ๋ฒ์ค ํ๋ก์ ์๋ฒ๋ก ํ์ฉ๋์ด ๋ก๋ ๋ฐธ๋ฐ์ฑ์ ์ญํ ์ ํ๊ธฐ๋ ํ๋ค.
์ฌ๊ธฐ์ ๋ฆฌ๋ฒ์ค ํ๋ก์ ๊ฐ๋ ์ด ์ค์ํ๋ฐ, ํด๋ผ์ด์ธํธ์ ์์ฒญ์ ๋ฐ์ ์๋ฒ๋ก ์์ฒญ์ ๋์ ์ ๋ฌํ๋ ๊ฒ์ ์๋ฏธํ๋ค.
๋ฆฌ๋ฒ์ค ํ๋ก์ ์๋ฒ(port:80)๊ฐ ํด๋ผ์ด์ธํธ์ ์์ฒญ์ ๋จ์ํ ์ ๋ฌ(ํฌ์๋ฉ)ํ๊ณ ์ค์ ์์ฒญ์ ๋ํ ์์ ์ ๋ด๋ถ์ ์ ํ๋ฆฌ์ผ์ด์ ์๋ฒ(ex.์คํ๋ง๋ถํธ 8080)์์ ์ฒ๋ฆฌํ๊ฒ ํ๋ ๊ฒ์ด๋ค.
์ด๋ ๊ฒ ๋๋ฉด ์์ฒญ์ ๋ถ์ฐ์์ผ ์ฃผ์ด ์์์ ๋งํ ๋ก๋ ๋ฐธ๋ฐ์ฑ์ ์ญํ ์ ํ ์ ์๊ณ , ์บ์ฑ์ด ๊ฐ๋ฅํด ์๋ต์ฑ์ด ์ฆ๊ฐํ๋ฉฐ, ํด๋ผ์ด์ธํธ์๊ฒ ์ ํ๋ฆฌ์ผ์ด์ ์๋ฒ๋ฅผ ๊ฐ์ถ๊ธฐ ๋๋ฌธ์ ๋ณด์๋ ๊ฐํ๋๋ค.
๊ทธ๋ผ NGINX์ ๋ํ ๊ฐ๋ ์ ์ฌ๊ธฐ๊น์ง ํ๊ณ , ์ค์ ์ ์ฉ์ ํด๋ณด๋๋ก ํ๊ฒ ๋ค.
1. NGINX ํ์ผ(app.conf) ์์ฑ
๋ค์๊ณผ ๊ฐ์ด, ํ๋ก์ ํธ root ๊ฒฝ๋ก์ nginx/conf.d
๊ฒฝ๋ก๋ฅผ ๋ง๋ค๊ณ app.conf
ํ์ผ์ ์์ฑํด์ค๋ค.
ํ์ผ ๋ด์ฉ์ ๋ค์๊ณผ ๊ฐ๋ค.
proxy_pass http://myacademy:8080
๋ถ๋ถ์์ docker container ์ด๋ฆ์ ๋ฃ์ด์ค๋ค.
๋์ ๊ฒฝ์ฐ์ myacademy.
server {
listen 80;
listen [::]:80;
location / {
proxy_pass http://myacademy:8080;
proxy_set_header Host $host:$server_port;
proxy_set_header X-Forwarded-Host $server_name;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
2. Nignx DockerFile ์์ฑ
๋ค์์ผ๋ก, Github Actions์์ CI/CD ํ๊ธฐ ์ํ NGINX DockerFile์ ์์ฑ ํด๋ณด๊ฒ ๋ค.
๊ฒฝ๋ก๋ ์์์ ๋ง๋ /nginx
๊ฒฝ๋ก์ ์์ฑํด์ฃผ๋ฉด ๋๋ค.
๋ด์ฉ์ ๋ค์๊ณผ ๊ฐ๋ค.
๋ง์ง๋ง์ COPY ๋ถ๋ถ์ ํ๋ก์ ํธ ./nginx/conf.d/
๊ฒฝ๋ก์ app.conf ํ์ผ์ docker์ ์ค์น๋์ด ์๋ NGINX
๊ฒฝ๋ก์ธ /etc/nginx/conf.d/ ๊ฒฝ๋ก๋ก ๋ณต์ฌํ๋ผ๋ ์๋ฏธ์ด๋ค.
FROM nginx:latest
RUN rm -rf /etc/nginx/conf.d/default.conf
COPY ./nginx/conf.d/app.conf /etc/nginx/conf.d/app.conf
3. docker-compose.yml ์์
๊ธฐ์กด์ NGINX ์ ์ฉ ์ ์๋ docker-compose.yml ํ์ผ์ด ๋ค์๊ณผ ๊ฐ์๋ค.
version: '3'
services:
web:
container_name: myacademy
image: percyfrank/myacademy
ports:
- '8080:8080'
NGINX๋ฅผ ์ ์ฉํ๊ฒ ๋๋ฉด ๋ค์๊ณผ ๊ฐ์ด ์์ ๋๋ค.
ํด๋ผ์ด์ธํธ๊ฐ ์ ๊ทผํ ์ ์๋ ํฌํธ์ธ 80:80
๋ก NGINX ports
์ต์
์ ์ค์ ํด ์ค๋ค.
๊ทธ๋ฆฌ๊ณ , ์ ํ๋ฆฌ์ผ์ด์
์๋ฒ์ ๊ฒฝ์ฐ NGINX๋ฅผ ๊ฑฐ์ณ์ ์ค๊ธฐ ๋๋ฌธ์ ์ปจํ
์ด๋ ๋ด๋ถ์์ ์ฐ๊ฒฐํด ์ค 8080
ํฌํธ๋ก ์ง์ ํด ์ค๋ค.
์ฌ๊ธฐ์ expose
์ต์
์ ํด๋ผ์ด์ธํธ์๊ฒ ๊ณต๊ฐํ๋ ๊ฒ์ด ์๋๋ผ ๋์ปค ๋ด์ ์ปจํ
์ด๋์๊ฒ๋ง ํฌํธ๋ฅผ ๊ณต๊ฐํ๋ค.
version: '3'
services:
web:
container_name: myacademy
image: percyfrank/myacademy
expose:
- 8080
nginx:
container_name: myacademy-nginx
image: percyfrank/nginx
restart: always
ports:
- '80:80'
depends_on:
- web
4. Github Actions CI/CD ์คํฌ๋ฆฝํธ ์์
๋ง์ง๋ง์ผ๋ก, ๊ธฐ์กด์ CI/CD ์คํฌ๋ฆฝํธ๋ฅผ ์์ ํด์ผ ํ๋ค.
์์ ํ ๋ถ๋ถ๋ง ๊ฐ์ ธ์์ ๋ณด์ฌ์ฃผ๊ฒ ๋ค.
4-1. docker image ์์ฑ ๋ฐ docker hub์ push
Before
- name: build and release to DockerHub
env:
NAME: $
APP: myacademy
run: |
docker build -t $NAME/$APP -f ./DockerFile .
docker push $NAME/$APP:latest
After
- name: build and release to DockerHub
env:
NAME: $
APP: myacademy
NGINX: nginx
run: |
docker build -t $NAME/$APP -f ./DockerFile .
docker build -t $NAME/$NGINX -f ./nginx/DockerFile .
docker push $NAME/$APP:latest
docker push $NAME/$NGINX:latest
4-2. docker-compose๋ฅผ ํตํด EC2 ์ธ์คํด์ค์ ์ปจํ ์ด๋ ์ฌ๋ฆฌ๊ธฐ
Before
- name: EC2 Docker Run
uses: appleboy/ssh-action@master
env:
APP: "myacademy"
COMPOSE: "/home/ubuntu/compose/docker-compose.yml"
with:
username: ubuntu
host: $
key: $
envs: APP, COMPOSE
script_stop: true
script: |
sudo docker-compose -f $COMPOSE down --rmi all
sudo docker pull $/$APP:latest
sudo docker-compose -f $COMPOSE up -d
After
- name: EC2 Docker Run
uses: appleboy/ssh-action@master
env:
APP: "myacademy"
NGINX: "nginx"
COMPOSE: "/home/ubuntu/compose/docker-compose.yml"
with:
username: ubuntu
host: $
key: $
envs: APP, NGINX, COMPOSE
script_stop: true
script: |
sudo docker-compose -f $COMPOSE down --rmi all
sudo docker pull $/$APP:latest
sudo docker pull $/$NGINX:latest
sudo docker-compose -f $COMPOSE up -d
5. ๊ฒฐ๊ณผ ํ์ธ
NGINX๋ฅผ ์ํ ๋ชจ๋ ์์ ์ด ๋๋ฌ๋ค.
์ฝ๋ PUSH ํ, Github Actions์์ CI/CD๊ฐ ์ฑ๊ณตํ๋ฉด ์ปจํ ์ด๋๊ฐ 2๊ฐ ์ฌ๋ผ์ฌ ๊ฒ์ด๋ค.
ํ์ธํด๋ณด์.
์ ๋๋ก ์ฌ๋ผ์๋ค. ์ด์ ๋ฐฐํฌ ์ฃผ์ ๋ค์ :8080์ ๋ถ์ด์ง ์์๋ ๋๋ค.
Leave a comment