사이드 프로젝트를 준비하면서 ubuntu에 서버를 세팅하는 과정입니다.
홈 네트워크 구성
- 맥보뎀(다산 H660N) - 브릿지모드
- 공유기(GW-ME6110) - NAT 모드
- 와이파이
- 데스크탑 (인터넷선)
- 라즈베리파이 (인터넷선)
- 공유기(GW-ME6110) - NAT 모드
- 라즈베리 파이의 ip 확인
- ssh 설정이 되어있으면 ssh로 접속, 안 되어있다면 직접 입출력장치를 연결해서 접속합니다.
- 편의 도구를 설치합니다.
sudo apt update && sudo apt-get install -y net-tools curl wget git
- ifconfig로 내부 ip를 확인합니다. inet 192.168.45.154
- 모뎀에 접속해서 브릿지 모드로 변경합니다.
- 관리자 페이지에 접속하고 비밀번호를 열심히 확인합니다. (https://dany-it.tistory.com/403)
- 브릿지모드로 변경합니다. (https://blog.naver.com/skido/222298082444)
- 1분 후 재부팅되며 5~10분정도 기다려줍니다.
- 공유기에 접속해서 라즈베리 파이의 ip를 고정 및 포트포워드
- 로그인해줍니다. (모뎀보다 비밀번호를 찾기 편합니다. https://m.blog.naver.com/pc_partner/222900294463)
- 고급설정 > 네트워크 > 네트워크 설정
- DHCP 서버 예약 IP 추가 합니다. 라즈베리파이의 MAC주소와 내부 IP가 필요합니다. 그렇게되면 할당 방법 manual로 추가됩니다.
- 저는 제 IP로 들어오는 모든 80, 443요청을 라즈베리파이로 보낼 것이기 때문에 포트포워드도 해줍니다.
내부에서 나가는 트래픽은 포트 포워딩과 무관합니다.
기타 서버 설정
# vim 설치 및 설정 추가
# 1) sudo apt-get install vim
# 2) https://gabii.tistory.com/entry/Ubuntu-vim-%EC%84%A4%EC%B9%98-%EB%B0%8F-%EC%84%A4%EC%A0%95
# nvm 설치
# https://github.com/nvm-sh/nvm?tab=readme-ov-file#additional-notes
# 1) curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh | bash
# 2) export NVM_DIR="$HOME/.nvm"
# 3) [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm
# 4) [ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion" # This loads nvm bash_completion
# 5) nvm list로 테스트
# node.js 설치
# nvm install --lts
# pm2 설치
# npm install pm2 -g
# pm2 list 로 테스트
# 기타 설정으로 root계정 로그인 비활성화 및 비밀번호 삭제 진행
# sudo 사용자 계정의 비밀번호 로그인 비활성화(ssh등록 필수)
# (라즈베리파이) sudo nano /etc/ssh/sshd_config.d/50-cloud-init.conf PasswordAuthentication를 no로 설정하지 않으면 계속 /etc/ssh/sshd_config 의 설정이 덮어써진다.
# ssh -o PreferredAuthentications=password -o PubkeyAuthentication=no gydus.dev@192.168.45.59 했을 때
# gydus.dev@192.168.45.59: Permission denied (publickey). 이렇게 나와야한다.
Nginx 설치
https://nginx.org/
1. nginx 설치
https://www.harulogs.com/ko/forum/blog/ubuntu-24-04%EC%97%90-nginx-%EC%9B%B9-%EC%84%9C%EB%B2%84-%EC%84%A4%EC%B9%98%ED%95%98%EB%8A%94-%EB%B0%A9%EB%B2%95-4256
2. 우분투 방화벽 설정
sudo ufw allow 80
sudo ufw allow 443
su1do ufw enable
로컬 인증서를 발급합니다. (개발용)
https://www.npmjs.com/package/mkcert
# 로컬 개발 환경에서만 사용되는 SSL 인증서를 생성 (mkcert)
sudo apt update
sudo apt install libnss3-tools
curl -JLO "https://dl.filippo.io/mkcert/latest?for=linux/arm64"
chmod +x mkcert-v*-linux-arm64
sudo mv mkcert-v*-linux-arm64 /usr/local/bin/mkcert
mkcert -install
Nginx를 리버스 프록시로 설정
- 서버에서는 http 요청만 받고 nginx에서 https를 http로 변환하겠습니다.
+ 서버는 pm2로 매니징되고 있으며 api문서는 swagger-doc, swagger-ui-express을 사용합니다.
# cd /etc/nginx/sites-available
server {
listen 80;
server_name _;
location / {
proxy_pass http://127.0.0.1:{$개인 서버의 포트};
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 http;
}
location /static/ {
root /var/www/html;
}
}
# HTTPS 요청을 HTTP로 리디렉트
server {
listen 443 ssl;
server_name _;
ssl_certificate ${개인 인증서의 주소.pem};
ssl_certificate_key ${개인 인증서의 키 수조-key.pem};
location / {
if ($http_x_forwarded_proto = "https") {
return 301 http://$host$request_uri;
}
proxy_pass http://127.0.0.1:{$개인 서버의 포트};
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 http;
}
}
이제 외부에서 들어오는 요청은 제 라즈베리서버로 들어옵니다. 서버가 많아지면 더 세부적으로 port또는 도메인별로 서버에 트래픽을 분배할 수 있게 변경하면 됩니다!