๊ธฐ์กด์ ๋ด๊ฐ ๊ฒ์๊ธ์์
(4) ์ธ๋ถ ์ ์ ์ค์ (์ ํ)
1. ๊ณต์ ๊ธฐ ํฌํธํฌ์๋ฉ ์ค์ ์) 80 ํฌํธ๋ฅผ ๋ผ์ฆ๋ฒ ๋ฆฌํ์ด์ 80 ํฌํธ๋ก ํฌ์๋ฉ
2. DDNS ์ค์ (์ ํ): ์ธ๋ถ์์ ์ ์ํ ์ ์๋๋ก ๋๋ฉ์ธ ์ฃผ์ ํ ๋น (No-IP, DuckDNS ๋ฑ ์ฌ์ฉ)
3. SSL ์ ์ฉ (์ ํ): certbot์ผ๋ก Let's Encrypt ์ธ์ฆ์ ์ค์ ํ๋ฉด HTTPS ์ ์ ๊ฐ๋ฅ...(์๋ต)
....๋ญ ์ด๋ฐ์์ผ๋ก ์ผ์๋๋ฐ, ์ด๊ฒ๋ AIํํ ๋ฌผ์ด๋ด์ ์ ๋ณด๋ฅผ ์ป์๊ฑฐ๋ผ ํ์คํ์ง ์์์ ๋ด๊ฐ ์ง์ ์ฐพ์๋ดค๋ค.
Let's Encrypt ์ธ์ฆ์๋?
๋ฌด๋ฃ๋ก HTTPS ๋ณด์ ์ฐ๊ฒฐ์ ๊ฐ๋ฅํ๊ฒ ํด์ฃผ๋ ์ธ์ฆ์ ๋ฐ๊ธ๊ธฐ๊ด.
์ธํฐ๋ท์์ ๋ณด์์ ์ํด ๋ฐ์ดํฐ๋ฅผ ์ํธํ ํด์ฃผ๋ HTTPS ์ธ์ฆ์๋ฅผ ์ฌ์ฉํด์ผ ํ๋ค(์ด๊ฑด ๊ธฐ์กด์ ๋๋ ์๊ณ ์๋๊ฒ). HTTPS๋ฅผ ์ฐ๋ฉด ๋ฐ์ดํฐ๊ฐ ์ํธํ๋๊ณ , ๋ก๊ทธ์ธ ์ ๋ณด ๋ฐ ์ฟ ํค๊ฐ ๋ณดํธ๋๋ค.
์นํ์ด์ง๊ฐ HTTPS๊ฐ ๋๋ ค๋ฉด ์๋ฒ์ ์ธ์ฆ์๊ฐ ์์ด์ผ ํ๋๋ฐ, ์ด ์ธ์ฆ์๋ (1) ์ด ์๋ฒ๊ฐ ์ง์ง์์ ์ฆ๋ช (2) ์ํธํ ํต์ ์์์ ์ํ ํค ์ ๊ณต ๋ฑ์ ์ญํ ์ ํ๊ณ ์๋ค.
- Let's Encrypt : ์ธ์ฆ์๋ฅผ ๋ฐ๊ธํด์ฃผ๋ ๊ธฐ๊ด(CA), ์ค์ ์ธ์ฆ์๋ฅผ ๋ง๋ค์ด์ ๋ด๋ ค์ค
- Certbot : ์ธ์ฆ์๋ฅผ ์๋์ผ๋ก ๋ฐ์์ค๋ ํ๋ก๊ทธ๋จ. Let's Encrypt์ ์์ฒญ ๋ณด๋ด๊ณ ์ธ์ฆ์ ๋ฐ์์ ์๋ฒ ์ค์นํ๊ณ ๋ง๋ฃ๋๋ฉด ์๋ ๊ฐฑ์ ๊น์ง ํด์ฃผ๊ณ ....
๊ทธ๋ฌ๋ค๊ฐ Tailscale๋ฅผ ์๊ฒ๋ฌ๋ค.
Tailscale์ด๋?
WireGuard ํ๋กํ ์ฝ์ ๊ธฐ๋ฐ์ผ๋ก ํ ํ๋์ ์ธ ๋งค์ฌ VPN์๋ฃจ์ ์ผ๋ก, ๋ณต์กํ ๋คํธ์ํฌ ์ค์ ์์ด ์ฅ์น ๊ฐ ์์ ํ๊ณ ๋น ๋ฅธ ์ฐ๊ฒฐ์ ์ ๊ณตํ๋ค. ๋ญ ๋ง์ธ์ง ์ดํด ์๊ฐ๋ค๋ฉด, "์ง ๋ฐ์์๋ ์ง ์์ ์๋๊ฒ์ฒ๋ผ ์ ์ํ๊ฒ ๋ง๋ค์ด์ฃผ๋ ๋๊ตฌ"๋ผ๊ณ ์ค๋ช ํ ์ ์์ ๊ฒ์ด๋ค.
๊ธฐ์กด์ ๋ฐฉ์์
๋ค๋ฅธ ์ฅ์ → ์ธํฐ๋ท → ๊ณต์ ๊ธฐ(ํฌํธํฌ์๋) → ๋ผ์ฆ๋ฒ ๋ฆฌํ์ด(ํ์๋ฒ)
์ ๋ฐฉ๋ฒ์ ์ด์ฉํ๊ธฐ ๋๋ฌธ์ ์ธ๋ถ ์ ์ ์ ํฌํธํฌ์๋ ์ค์ , ๊ณต์ธIP ๋ฐ DDNS ์ค์ , ๋ณด์ ๋ฑ์ ๋ฒ๊ฑฐ๋ก์์ด ์์๋ค.
Talescale์ ๊ณต์ ๊ธฐ, ํฌํธํฌ์๋ฉ ๋ฑ์ ์ ํ ์์ ์ด ๋ชจ๋ ๋ฌด์๋๋ค.
1๏ธโฃ ๊ฐ์ง ๋ด๋ถ ๋คํธ์ํฌ๋ฅผ ๋ง๋ฆ
์ง์ด๋ ํ์ฌ๋ ์ด๋ ์ฅ์๋ ์๊ด ์์ด ๋ชจ๋ ๊ธฐ๊ธฐ๋ฅผ ๊ฐ์ ๋คํธ์ํฌ์ ์๋ ๊ฒ์ฒ๋ผ ๋ง๋ค์ด์ฃผ๋๋ฐ, ๊ทธ๋์ ํ์๋ฒ์๋ Tailscale ์ ์ฉ IP๊ฐ ์๊ธด๋ค.
100.x.x.x (Tailscale ์ ์ฉ IP)
2๏ธโฃ ๊ทธ ์ฃผ์๋ก ๋ฐ๋ก ์ ์ ๊ฐ๋ฅ
ํฐ๋ฏธ๋(๋ฆฌ๋ ์ค, ์๋์ฐ powershell, ๋งฅ)์์ ๋ค์๊ณผ ๊ฐ์ด ์์ฑํ๋ฉด ์ด๋ฆฐ๋ค.
ssh pi@100.x.x.x
๋จ ์ ๋ ๊ฒ ํ๋ฉด ๋น์ฐํ ์ผ๋ฐ ์ฌ์ฉ์๋ค์ ๋ค์ด์ฌ ์ ์๊ธฐ ๋๋ฌธ์.... ๋ Tailscale Funnel ๋ฌด๋ฃ ๋ฒ์ ์ ์ฌ์ฉํ๊ธฐ๋ก ํ๋ค.
1. ๋ผ์ฆ๋ฒ ๋ฆฌํ์ด์ ์น์๋ฒ ์คํ
npm run dev, http://localhost:3000 ๋ฑ์ผ๋ก ๋ผ์ฆ๋ฒ ๋ฆฌํ์ด ๋ค๋ถ์์ ์ ์์ด ๋์ด ์์ด์ผ ํ๋ค.
2. Tailscale ์ค์น
๋ผ์ฆ๋ฒ ๋ฆฌํ์ด os์์ curl๋ช ๋ น์ด๋ฅผ ์ธ ์ ์์ผ๋ฏ๋ก
curl -fsSL https://tailscale.com/install.sh | sh
๋ฅผ ์์ฑํ๊ณ , ์ค์น ํ
sudo tailscale up
๋ฅผ ํตํด ๋ก๊ทธ์ธ ์ฐฝ์ด ๋จ๋ฉด ๋ก๊ทธ์ธ์ ํ๋ค.
3. Funnel ํ์ฑํ
sudo tailscale funnel 3000
๋ผ์ฆ๋ฒ ๋ฆฌํ์ด์ 3000๋ฒ ํฌํธ๋ฅผ ์ธ๋ถ์ ๊ณต๊ฐํ๊ฒ ๋ค๋ ๋ป์ผ๋ก, ๊ฐ ํฌํธ์ ๋ง๊ฒ ์์ฑํ๋ฉด ๋๋ค.
4. URL ์์ฑ ํ์ธ
๋ช ๋ น์ ์คํํ๋ฉด
https://xxxx.ts.net
๊ฐ ๋์ค๋๋ฐ, ์ด๊ฒ ๋ฐ๋ก ์ธ๋ถ์์ ์ ์ ๊ฐ๋ฅํ URL์ด๋ค.
๋ค๋ง ๋์ ๊ฒฝ์ฐ Vite + Typescript + React๋ฅผ ์ฌ์ฉํ web๋จ๊ณผ Spring Boot๋ฅผ ์ฌ์ฉํ WAS๋จ์ด ๋ฐ๋ก ๋๋์ด์ ธ ์๊ธฐ ๋๋ฌธ์ ๋ฆฌ๋ฒ์ค ํ๋ก์(Nginx)๋ฅผ ์ฌ์ฉํด์ผ ํ๋ค.
์ธ๋ถ (https://xxx.ts.net)
↓
nginx
โโ / → React (์ ์ ํ์ผ)
โโ /api → Spring Boot (8080)
์ ์ฒด ๋จ๊ณ๋ ๋ค์๊ณผ ๊ฐ๋ค.
(1) React ๋น๋
(2) NGINX ์ค์น
(3) NGINX ์ค์
(4) Spring Boot ์คํ
(5) Tailscale Funnel ์ฐ๊ฒฐ
1. React ๋น๋
๋ผ์ฆ๋ฒ ๋ฆฌ ํ์ด์์ react ํ๋ก์ ํธ๋ฅผ ๋น๋ํ๋ค.
npm run build
๊ฒฐ๊ณผ๋ ๋ค์๊ณผ ๊ฐ์๊ฑฐ๋ค.
dist/
โโ index.html
โโ assets/
2. nginx ์ค์น
sudo apt update
sudo apt install nginx -y
์ค์น ํ์ธ์
nginx -v
๋ก ํ์ธํ๋ค.
3. nginx ์ค์
์ค์ ํ์ผ ์ด๊ธฐ
sudo nano /etc/nginx/sites-available/default
๊ธฐ์กด ๋ด์ฉ ๋ค ์ง์ฐ๊ณ ์๋๋ก ๊ต์ฒดํ๋ค.
server {
listen 80;
server_name _;
# React (ํ๋ก ํธ)
root /home/pi/project/dist;
index index.html;
location / {
try_files $uri /index.html;
}
# Spring Boot (๋ฐฑ์๋)
location /api/ {
proxy_pass http://localhost:8080/;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
์ค์ ํฌ์ธํธ๋, root๊ฒฝ๋ก๋ฅผ ๋ด dist ํด๋ ์์น๋ก ๋ฐ๊พธ๋ ๊ฒ์ด๋ค.
root /home/pi/project/dist;
4. nginx ์ฌ์์
sudo systemctl restart nginx
5. Spring Boot ์คํ
maven ๋น๋ ๋ช ๋ น์ด๋ฅผ ์คํํด์ jar ํ์ผ์ ๋ง๋๋ ๊ฒ์ด ํต์ฌ์ด๋ค.
mvn clean package
- clean : ์ด์ ์ ๋น๋ํ๋ ์ฐ๊บผ๊ธฐ ํ์ผ์ ์ง์
- package: ์์ค ์ฝ๋๋ฅผ ์ปดํ์ผํ๊ณ ํ ์คํธ๋ฅผ ๊ฑธ์ณ targetํด๋ ์์ .jarํ์ผ์ ์์ฑํจ
์ฑ๊ณต ์ target/ ํด๋ ์์ ํ๋ก์ ํธ๋ช -0.0.1-SNAPSHOT.jar๊ณผ ๊ฐ์ ํ์ผ์ด ์์ฑ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ด ํ์ผ์ ๋ผ์ฆ๋ฒ ๋ฆฌํ์ด ์ปดํจํฐ๋ก ๋ณด๋ด์ผ ํ๋ค.
# ํ์: scp [ํ์ผ๊ฒฝ๋ก] [์ฌ์ฉ์]@[๋ผ์ฆ๋ฒ ๋ฆฌํ์ดIP]:[๋ณต์ฌํ ๊ฒฝ๋ก]
scp target/*.jar pi@raspberrypi.local:/home/pi/project/app.jar
์ ๋ช ๋ น์ด ์์ฑ ์ ๋ด pc์ ์๋ jarํ ์ผ์ด ๋ผ์ฆ๋ฒ ๋ฆฌํ์ด์ /home/pi/project/ํด๋๋ก app.jar๋ผ๋ ์ด๋ฆ์ผ๋ก ๋ณต์ฌ๋๋ค.
6. Tailscale Funnel ์ฐ๊ฒฐ
sudo tailscale funnel 80
[์ฐธ๊ณ ์๋ฃ]
Let's Encrypt - Certbot์ผ๋ก ssl ์ธ์ฆ์ ๋ฐ๊ธ๋ฐ๊ธฐ
์ด์ ๋ณธ๊ฒฉ์ ์ธ https ์ธํ ์ ์์ํด๋ณผ ๊ฒ์ด๋ค. Let's Encrypt ๋ผ๋ ๋น์๋ฆฌ ๊ธฐ๊ด์ ํตํด ๋ฌด๋ฃ๋ก SSL ์ธ์ฆ์๋ฅผ ๋ฐ๊ธ๋ฐ์ ์ ์๋ค. ์ธ์ฆ์ ๋ฐ๊ธ์ ์ํด Certbot์ ์ฌ์ฉํด๋ณด์. 1. certbot ์ค์นํ๊ธฐ Certbot ์ค์น๋
velog.io
https://devopslog.tistory.com/169
Tailscale ๊ฐ์ด๋ - ์์ ํ ๋งค์ฌ VPN ํ์ฉ๋ฒ
Tailscale์ ํต์ฌ ๊ฐ๋ , VPN ์ ์, ๋์ ๋ฐฉ์, ์ค์น ๋ฐ ๊ตฌ์ฑ ๋ฐฉ๋ฒ, ์๋ํฌ์ธํธ ๊ด๋ฆฌ, ํฌํธ ์ ์ด, ๋ค๋ฅธ ๋จ๋ง ์ ์, ๊ทธ๋ฆฌ๊ณ ๋ณด์ ์ค์ ๋ฐฉ๋ฒTailscale์ด๋?Tailscale์ WireGuard ํ๋กํ ์ฝ์ ๊ธฐ๋ฐ์ผ๋ก ํ ํ๋์ ์ธ
devopslog.tistory.com
https://www.youtube.com/watch?v=vCM-demQ4MY
https://github.com/jacking75/NewbieGameServerProgrammerLearningMaterials/blob/main/Tailscale.md
NewbieGameServerProgrammerLearningMaterials/Tailscale.md at main · jacking75/NewbieGameServerProgrammerLearningMaterials
๋ด๋น ๊ฒ์ ์๋ฒ ํ๋ก๊ทธ๋๋จธ๋ฅผ ์ํ ํ์ต ์๋ฃ. Contribute to jacking75/NewbieGameServerProgrammerLearningMaterials development by creating an account on GitHub.
github.com
https://cwpack0730.tistory.com/117
[NGINX] nginx reverse proxy
1. ๊ฐ์ํ์ฌ ๋งค ์๋ง๋ค ์๋น์ค ์ ๊ธฐ์ ๊ฒ์ ์งํํ๊ณ ์๋ค. ๋ณดํต ์๋ฒฝ์๊ฐ๋์ ์ ๊ฒ์ ์งํํ๋๋ฐ ์ด ๋ ์ผ๋ฐ ์ฌ์ฉ์๋ ์ ๊ฒ์ค์ธ ์๋น์ค์ ์ ๊ทผํ ์ ์๋๋ก ์ ๊ฒ ํ์ด์ง๋ก ์ด๋ํด์ผ ํ๋ฉฐ, ๊ฐ๋ฐ
cwpack0730.tistory.com
