๐Ÿ’ช์˜จํ•(on-fit) ์ฒซ CI/CD ๋ฐฐํฌ๊ธฐ 2ํŽธ

์กฐ์ค€ํ˜•ยท2025๋…„ 11์›” 18์ผ

์˜จํ•

๋ชฉ๋ก ๋ณด๊ธฐ
9/16

Nginx, ๋„๋ฉ”์ธ(onfit.today), HTTPS(SSL) ๋ถ™์ด๊ธฐ

1ํŽธ์—์„œ http://EC2_IP:3000์œผ๋กœ ์ ‘์†์€ ๋˜์ง€๋งŒ, ์ด๊ฑด ์–ด๋””๊นŒ์ง€๋‚˜ ์ž„์‹œ๋‹ค.

์‹ค์„œ๋น„์Šค์ฒ˜๋Ÿผ ์“ฐ๋ ค๋ฉด:

  • ์‚ฌ๋žŒ์ด ๊ธฐ์–ตํ•˜๊ธฐ ์‰ฌ์šด ๋„๋ฉ”์ธ
  • 80/443 ํฌํŠธ๋งŒ ๋…ธ์ถœ
  • HTTPS(SSL) ์ ์šฉ

๊นŒ์ง€ ๊ฐ€์•ผ ํ•œ๋‹ค.


1. ๋„๋ฉ”์ธ ๊ตฌ์ž… (onfit.today)

๋‚˜๋Š” hosting.kr์—์„œ onfit.today๋ผ๋Š” ๋„๋ฉ”์ธ์„ ๊ตฌ๋งคํ–ˆ๋‹ค.

๋„ค์ž„์„œ๋ฒ„๋Š” ๊ธฐ๋ณธ์œผ๋กœ ํ˜ธ์ŠคํŒ…์ผ€์ด์•Œ ๋„ค์ž„์„œ๋ฒ„๋ฅผ ์‚ฌ์šฉํ–ˆ๊ณ ,

DNS ๋ ˆ์ฝ”๋“œ ๊ด€๋ฆฌ์—์„œ ์ด๋ ‡๊ฒŒ ์„ค์ •ํ–ˆ๋‹ค.

  • ํƒ€์ž…: A
    • ํ˜ธ์ŠคํŠธ ์ด๋ฆ„: @
    • ๊ฐ’: EC2_PUBLIC_IP (์˜ˆ: 35.74.238.231)
  • ํƒ€์ž…: A
    • ํ˜ธ์ŠคํŠธ ์ด๋ฆ„: www
    • ๊ฐ’: EC2_PUBLIC_IP

TTL์€ 180์ดˆ(3๋ถ„) ์ •๋„๋กœ ๋‘์—ˆ๋‹ค.

๊ทธ ๋‹ค์Œ ๋กœ์ปฌ์—์„œ ๋‹ค์Œ ๋ช…๋ น์œผ๋กœ ์ „ํŒŒ ์ƒํƒœ๋ฅผ ํ™•์ธํ–ˆ๋‹ค.

nslookup onfit.today
dig onfit.today
nslookup www.onfit.today

์ฒ˜์Œ์—๋Š” NXDOMAIN์ด ๋œจ๋‹ค๊ฐ€, ์‹œ๊ฐ„์ด ์ง€๋‚˜๋ฉด์„œ ์•„๋ž˜์ฒ˜๋Ÿผ ๋‚˜์˜ค๋ฉด ์„ฑ๊ณต์ด๋‹ค.

Name: onfit.today
Address: 35.74.238.231

2. Nginx๋กœ ๋ฆฌ๋ฒ„์Šค ํ”„๋ก์‹œ ์„ค์ •

2-1. ๊ธฐ๋ณธ ์„ค์ • ํŒŒ์ผ ๋งŒ๋“ค๊ธฐ

EC2์—์„œ:

sudo nano /etc/nginx/sites-available/onfit

์ดˆ๊ธฐ ๋ฒ„์ „์€ HTTP๋งŒ ์ด๋ ‡๊ฒŒ ์žก์•˜๋‹ค.

server {
    listen 80;
    server_name onfit.today www.onfit.today;

    location / {
        proxy_pass http://localhost:3000;

        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;
    }
}

๊ทธ๋ฆฌ๊ณ  sites-enabled์— ์‹ฌ๋ณผ๋ฆญ ๋งํฌ:

sudo ln -s /etc/nginx/sites-available/onfit /etc/nginx/sites-enabled/
sudo rm /etc/nginx/sites-enabled/default

์„ค์ • ์ฒดํฌ & ์žฌ์‹œ์ž‘:

sudo nginx -t
sudo systemctl restart nginx

์ด์ œ ๋ธŒ๋ผ์šฐ์ €์—์„œ http://onfit.today๋กœ ์ ‘์†ํ•ด๋ณด๋ฉด

ํฌํŠธ 3000์ด ์•„๋‹ˆ๋ผ 80๋ฒˆ ํฌํŠธ๋กœ๋„ ์˜จํ• ํ™”๋ฉด์ด ๋– ์•ผ ํ•œ๋‹ค.


3. HTTPS(SSL) ์ ์šฉ โ€“ Certbot

์ด์ œ HTTPS๋ฅผ ๋ถ™์ธ๋‹ค.

sudo certbot --nginx -d onfit.today -d www.onfit.today

๊ณผ์ • ์ค‘๊ฐ„์—:

  • ์ด๋ฉ”์ผ ์ž…๋ ฅ
  • ์•ฝ๊ด€ ๋™์˜
  • HTTP โ†’ HTTPS ๋ฆฌ๋‹ค์ด๋ ‰ํŠธ ์—ฌ๋ถ€ ์„ ํƒ

๋ฅผ ๊ฑฐ์น˜๊ฒŒ ๋˜๊ณ , Certbot์ด Nginx ์„ค์ •์„ ์ž๋™์œผ๋กœ ์ˆ˜์ •ํ•ด์ค€๋‹ค.

์ตœ์ข…์ ์œผ๋กœ๋Š” ์•„๋ž˜์™€ ๋น„์Šทํ•œ ์„ค์ •์ด ์ƒ๊ฒผ๋‹ค.

server {
    server_name onfit.today www.onfit.today;

    location / {
        proxy_pass http://localhost:3000;

        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;
    }

    listen 443 ssl; # managed by Certbot
    ssl_certificate /etc/letsencrypt/live/onfit.today/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/onfit.today/privkey.pem;
    include /etc/letsencrypt/options-ssl-nginx.conf;
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
}

server {
    if ($host = www.onfit.today) {
        return 301 https://$host$request_uri;
    }

    if ($host = onfit.today) {
        return 301 https://$host$request_uri;
    }

    listen 80;
    server_name onfit.today www.onfit.today;
    return 404; # managed by Certbot
}

ํ˜น์‹œ ์„ค์ •์„ ์—ฌ๋Ÿฌ ๋ฒˆ ๋งŒ๋“ค๋‹ค๊ฐ€ server_name ์ถฉ๋Œ ๊ฒฝ๊ณ ๊ฐ€ ๋œจ๋ฉด

/etc/nginx/sites-enabled์— ์ค‘๋ณต ํŒŒ์ผ์ด ์—†๋Š”์ง€ ํ™•์ธํ•˜๊ณ  ์ •๋ฆฌํ–ˆ๋‹ค.

๋งˆ์ง€๋ง‰์œผ๋กœ ํ…Œ์ŠคํŠธ:

sudo nginx -t
sudo systemctl reload nginx

๋ธŒ๋ผ์šฐ์ €์—์„œ:

  • http://onfit.today โ†’ ์ž๋™์œผ๋กœ https://onfit.today
  • https://onfit.today ์ž๋ฌผ์‡  ํ‘œ์‹œ โœ…

์—ฌ๊ธฐ๊นŒ์ง€ ๋˜๋ฉด, ์ผ๋‹จ โ€œ์„œ๋น„์Šค ๋ฐฐํฌโ€๋Š” ์™„์„ฑ๋œ ์ƒํƒœ๋‹ค.

์ด์ œ ๋‚จ์€ ๊ฑด ๋งค๋ฒˆ ์ˆ˜๋™์œผ๋กœ:

ssh ์ ‘์† โ†’ git pull โ†’ npm run build โ†’ pm2 restart

ํ•˜๋Š” ๊ฑธ GitHub Actions๋กœ ์ž๋™ํ™”ํ•˜๋Š” ์ผ์ด๋‹ค.

profile
์ฝ”๋ฆฐ์ด

0๊ฐœ์˜ ๋Œ“๊ธ€