๋ฆฌ์กํธ ํ๋ก์ ํธ๋ฅผ ๊นํ๋ธ ์ก์ ์ ํตํด ๋์ปค ํ๋ธ์ ํธ์ฌํ๋ ๊ณผ์ ๊น์ง๋ ์ด์ ๊ธ์.
์กฐ์ง ๋ด์ deploy์ฉ ๋ ํฌ์งํ ๋ฆฌ๋ฅผ ํ๋ ํ์ ์ฌ์ฉํ๋ค. ์ด๊ณณ์์ ๋์ปค ์ปดํฌ์ฆ๋ฅผ ์ด์ฉํด ๋ฐฑ์๋, ํด๋ผ์ด์ธํธ, nginx ์ธ๊ฐ์ ์ด๋ฏธ์ง๋ฅผ ๋ฐ์์ ์คํํ๋ค. ๋จผ์ ๊นํ๋ธ ์ก์ ๋ถํฐ.
prod-deploy.yml
name: Deploy to Ec2
on:
workflow_dispatch:
push:
branches:
- main
jobs:
build:
name: Build
runs-on: ubuntu-latest
steps:
- name: checkout
uses: actions/checkout@master
- name: create remote directory
uses: appleboy/ssh-action@master
with:
host: ${{ secrets.HOST }}
username: ubuntu
key: ${{ secrets.KEY }}
script: mkdir -p ~/srv/bankids
- name: copy source via ssh key
uses: burnett01/rsync-deployments@4.1
with:
switches: -avzr --delete
remote_path: ~/srv/bankids
remote_host: ${{ secrets.HOST }}
remote_user: ubuntu
remote_key: ${{ secrets.KEY }}
- name: excuting remote ssh commands using password
uses: appleboy/ssh-action@master
with:
host: ${{ secrets.HOST }}
username: ubuntu
key: ${{ secrets.KEY }}
script: |
sh ~/srv/bankids/deploy.sh
echo "start docker-compose up: ubuntu"
sudo docker-compose -f ~/srv/bankids/docker-compose.yml pull
sudo docker-compose -f ~/srv/bankids/docker-compose.yml up --build -d
create remote directory
- ๋ ํฌ์งํ ๋ฆฌ secret์ ์ ์ฅ๋ ํธ์คํธ ์ฃผ์์ pem key๋ฅผ ์ด์ฉํด์ EC2์ ์ ์ํ๋ค.
- ์ด๊ธฐ์ ๋๋ ํ ๋ฆฌ๊ฐ ์์ผ๋ฉด ์์ฑํ๋ค.
copy source via ssh key
- ssh๋ฅผ ์ด์ฉํด rsync๋ฅผ ํตํด ์๊ฒฉ ํด๋์ ํ์ผ์ ๋ฐฐํฌํ๋ค..?
- ์ก์ ์ด ๊ฐ์ง๋ ๋ ํฌ์์ ๋ฆฌ๋ ์ค๋ก ์์ค๋ฅผ ๋ณต์ฌํด์ค๋ ๊ฒ ๊ฐ์
excuting remote ssh commands using password
- EC2์ ์ ์ํด, script์ ์์ฑํ ์์ค๋ฅผ ์คํํ๋ค.
deploy.sh
์ ์คํํ๋ค.Deploy.sh
์์ ๋์ปค๋ฅผ ์คํํ๊ธฐ ์ ์ ํ์ํ ์์ ์ ์ํํ ์ํ์ผ์ ์์ฑํ๋ค. ๋ด์ฉ์ ๊ตฌ๊ธ๋งํ๋ฉด ๋ค ๋์ค๋๊น ์๋ต.
(๋์ปค์ ๋์ปค-์ปดํฌ์ฆ๊ฐ ์ค์น๋์ด ์์ง ์์ผ๋ฉด ์ค์นํ๋ค.)-f
์ต์ ์ docker compose ์ค์ ํ์ผ์ ๊ฒฝ๋ก๋ฅผ ์ง์ ํด์ค ๋ ์ฌ์ฉํ๋ค.- Up : ๋์ปค ์ปดํฌ์ฆ์ ์ ์๋์ด ์๋ ๋ชจ๋ ์๋น์ค ์ปจํ ์ด๋๋ฅผ ํ๋ฒ์ ์์ฑํ๊ณ ์คํํ๋ค.
- Pull : ์ด๋ฏธ์ง์ ์ต์ ๋ณธ์ ๊ฐ์ ธ์ค๋ ๋ฏ..?
docker-compose.yml
ํ๋ก์ ํธ ์ ์ฒด๊ฐ ๋ฐฐํฌ๊ฐ ๋๊ธฐ ์ํด์ ์คํ๋ง ์๋ฒ, ๋ฆฌ์กํธ, nginx ์น์๋ฒ ์ธ๊ฐ๊ฐ ๋ชจ๋ ๋์๊ฐ์ผ ํ๋ค. ์ฌ๋ฌ๊ฐ์ ์ปจํ ์ด๋์ ์คํ์ ํ๋ฒ์ ๊ด๋ฆฌํ๊ธฐ ์ํด ๋์ปค ์ปดํฌ์ฆ๋ฅผ ์ฌ์ฉํ๋ค.
version: "3"
services:
backend:
image: ******/bankids-server-prod:main
container_name: backend
hostname: backend
expose:
- "8080"
client:
image: ******/bankids-client:main
container_name: client
ports:
- "3000:3000"
nginx:
depends_on:
- backend
- client
restart: always
build:
dockerfile: Dockerfile
context: ./nginx
ports:
- "80:80"
์์์ ์ธ๊ธํ ์ธ๊ฐ์ ์๋น์ค๋ก ๊ตฌ์ฑ๋์ด ์๋ค. ํ๋ธ์์ ํด๋น ๋์ปค ์ด๋ฏธ์ง๋ฅผ ๊ฐ์ ธ์จ ๋ค์ client๋ผ๋ ์ด๋ฆ์ผ๋ก ์ปจํ ์ด๋๋ฅผ ๋ง๋ ๋ค. ๋์ปค ํ๋ธ์ pushํ๋ ๊ฒ์ ๋ํ ๋ด์ฉ์ ์ ๋ฒ ๊ธ์์ ์ ๋ฆฌํ๋ค. client์ ํฌํธํฌ์๋ฉ์ 3000:3000, nginx๋ 80:80. ์์๋๋ก <ํธ์คํธ ํฌํธ>:<์ปจํ ์ด๋ ํฌํธ>์ด๋ค.
nginx/default.conf
server{
listen 80;
server_name ******.com;
location / {
proxy_pass http://client:3000;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real_IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
deploy ๋๋ ํ ๋ฆฌ์ nginx ์ค์ ์ด๋ค. ํด๋ผ์ด์ธํธ์ ์ฐ๊ฒฐ๋ ์๋ฒ ๋ธ๋ก๋ง ๊ฐ์ ธ์๋ค. 80๋ฒ ํฌํธ๋ฅผ listenํ๋ค. ์๊น ๋์ปค ์ปดํฌ์ฆ ํ์ผ์์ nginx ์ปจํ ์ด๋๋ฅผ ๋ง๋ค๋ 80๋ฒ์ ์ด์ด๋จ์๊ธฐ ๋๋ฌธ์. https ์ค์ ์ route53 ๋ก๋๋ฐธ๋ฐ์๋ฅผ ์ด์ฉํด ๋ญ ์ด์ฉ๊ตฌ์ ์ฉ๊ตฌ ํ๋ค๊ณ ํ๋ค. ์ ๋ชจ๋ฆ.
server_name์ ๋ฑ๋กํ ๋๋ฉ์ธ์ผ๋ก ์์ฒญ์ด ์ค๋ฉด ํ๋ก์ ํจ์ค๋ฅผ ์ด์ฉํด http://client:3000
์ผ๋ก ๋๋ ค์ค๋ค. client๋ ๋์ปค ์ปดํฌ์ฆ๋ก ์์ฑํ ๋ฆฌ์กํธ ํ๋ก์ ํธ ์ปจํ
์ด๋์ ์ด๋ฆ์ด๋ค. client ์ปจํ
์ด๋๋ 3000๋ฒ ํฌํธ๋ก ์ด๋ ค ์๋ค.
server {
listen 3000;
root /usr/share/nginx/html;
index index.html;
location / {
try_files $uri /index.html;
}
error_log /var/log/nginx/api_error.log;
access_log /var/log/nginx/api_access.log;
}
์ ๋ฒ ๊ธ์๋ ์ฌ๋ฆฐ, client ๋ ํฌ์งํ ๋ฆฌ์ nginx ์ค์ ํ์ผ์ด๋ค. ์ฌ๊ธฐ์ 3000๋ฒ ํฌํธ๋ฅผ ์ด๊ณ ๋๊ธฐํ๊ณ ์๋ค๊ฐ ์์ฒญ์ด ๋ค์ด์ค๋ฉด ํด๋น ๊ฒฝ๋ก์์ ํ์ผ์ ์ฐพ์์ ํธ์คํ
ํด์ค๋ค.
์ฆ, nginx๊ฐ ๋ค๋ฅธ nginx๋ก ๊ฐ์ธ์ ธ ์๋ ํํ. deploy ์์ ์คํ๋ nginx๊ฐ 80์์ ๋ฐ๊ณ ์๊ณ , ์น์ฌ์ดํธ ๋๋ฉ์ธ์ผ๋ก ์์ฒญ์ด ๋ค์ด์ค๋ฉด client ์ปจํ
์ด๋์ 3000๋ฒ ํฌํธ๋ก ํ๋ก์๋ก ๋๋ ค์ค๋ค. client์์ ๋ง์์ฌ๋ฆฐ ๋์ปค ์์ ์๋ nginx์์ 3000๋ฒ์ ์ด๊ณ ์๊ธฐ ๋๋ฌธ์ ์์ฒญ์ด ๋๋ฌํ๊ฒ ๋๋ ๊ฒ.
์ฑ๊ณต์ ์ผ๋ก ํ ์คํธํ์ด์ง๊ฐ ๋ฐฐํฌ๋ ๊ฒ์ ํ์ธํ ์ ์๋ค. ๋์ปค๋ฅผ ์ด์ฉํด์ ๋ฐฐํฌ๋ฅผ ์ธํ ํ๊ฑด ์์ ์ฒ์์ด์์ง๋ง ์์๋ณด๋ค ํ๋ฆ์ ์ดํดํ๋๊ฒ ์ฝ๊ฒ ๋๋ฌ๋ค. ๋ผ์ด์ง์บ ํ ์ด์ฉ๋ฉด ๋์ ๋๋๊ฑธ์ง๋..?
๋ฏผ์ค์ด๊ฐ ๊ทธ๋ ค์จ ์ํคํ ์ณ. ์ ํฌ ์ฑ์ ์ด๋ ๊ฒ ๋ฐฐํฌ ๋๋ต๋๋ค.