만쥬의 개발일기

현재 집에서 재미 반, 흥미 반으로 홈 서버용으로 구매한 미니PC에 프록스목스 OS를 설치하고 여러 편의용 서버를 가상화, 구동 중입니다.

홈서버를 구축했던 내용을 하나씩 풀어보겠습니다.

프록스목스(Proxmox)란?

Proxmox는 KVM 가상화와 LXC 컨테이너 기술을 기반으로 하는 하이퍼바이저 OS입니다.

가상 머신과 컨테이너를 웹 기반의 UI로 쉽게 관리할 수 있습니다.

또한 백업/복원, 스토리지 관리 등 다양한 기능을 제공하며, 가장 큰 장점인 오픈소스 라이선스로 누구나 무료로 사용할 수 있습니다.

Proxmox 세팅

먼저 다음 url에 접속해 proxmox 이미지를 받아줍니다.
https://www.proxmox.com/en/downloads

OS 설치가 완료되면 무료 dns를 제공해주는 사이트에서 ip를 등록하고 도메인을 받습니다.
여기서 토큰 정보는 추후 SSL 인증서 등록 시 사용하게 됩니다.

proxmox 관리 페이지의 기본 포트는 8006입니다.
만약 같은 네트워크에서 작업한다면 사설ip를 이용해 접속하면 되고, 외부 접속시에는 포트포워딩을 통해 해당 ip의 8006 포트를 열어주어야합니다.

dns를 설정하고 dns를 통해 접속시, ( ex) https://test.duckdns.org:8006 ) 다음과 같이 크롬에서 위험한 사이트라는 알림이 나옵니다.

이 화면에서는 thisisunsafe를 치면 접속이 됩니다.

 

초기 id는 root이고, os 설치 시 설정한 비밀번호를 입력하면 로그인이 됩니다.

기본 패키지 설치

다음 명령어로 sudo와 vim를 설치해줍니다.

apt-get install -y sudo && 
sudo apt-get install vim

apt update 오류

처음 프록스목스 OS를 설치하고, 쉘에서 apt update를 하려고 하면 다음과 같은 오류가 발생합니.

E: Failed to fetch https://enterprise.proxmox.com/debian/ceph-quincy/dists/bookworm/InRelease  401  Unauthorized [IP: 51.79.228.122 443]
E: The repository 'https://enterprise.proxmox.com/debian/ceph-quincy bookworm InRelease' is not signed.

이는 엔터프라이즈 (유료) 모델을 사용하려고 하나 구독 정보가 없을 때 발생하며, non-subscribe모델을 사용하고자 하면 다음과 같이 파일들을 수정해주어야합니다.

pve-enterprise.list 파일 수정

다음 파일에 들어가서,

vi /etc/apt/sources.list.d/pve-enterprise.list

기존에 존재하는 deb https://enterprise.proxmox.com/debian/pve bookworm pve-enterprise를 주석처리해주고, 다음과 같이 파일을 작성해줍니다.

#deb https://enterprise.proxmox.com/debian/pve bookworm pve-enterprise
deb http://download.proxmox.com/debian/pve bullseye pve-no-subscription

deb http://deb.debian.org/debian bookworm main contrib
deb http://deb.debian.org/debian bookworm-updates main contrib

# security updates
deb http://security.debian.org/debian-security bookworm-security main contrib

ceph.list 파일 수정

다음 파일에 들어가서,

vi /etc/apt/sources.list.d/ceph.list

다음과 같이 파일을 수정해줍니다.

#deb https://enterprise.proxmox.com/debian/ceph-quincy bookworm enterprise
deb http://download.proxmox.com/debian/ceph-reef bookworm no-subscription

이제 정상적으로 sudo apt update가 작동합니다.

이제 다음 명령어로 기본 네트워크 툴 들을 설치해줍니다. (ping, netstat 등)

sudo apt install net-tools && sudo apt-get install iputils-ping

로그인 시 뜨는 팝업 제거

라이센스 구독을 하지 않으면 구독을 하라는 팝업이 로그인 할 때마다 나옵니다.

해결 방법은 다음 스크립트를 노드 쉘에서 실행 해주고, reboot 버튼을 눌러주면 끝!

curl --proto '=https' --tlsv1.2 -sSf https://raw.githubusercontent.com/rickycodes/pve-no-subscription/main/no-subscription-warning.sh | sh

리버스 프록시 설정

왜 리버스 프록시 설정을 해줘야 할까?

리버스 프록싱은 로드 밸런싱, 보안, 캐싱 등 다양한 역할이 있지만 사용성에서도 큰 의의가 있습니다.

만약 리버스 프록싱 없이 사용을 하게 된다면 vm과 ct를 생성할때마다 포트 포워딩을 해줘야 할 것이고, 서비스들은 각각 1개의 포트를 필요로 하게됩니다. 이렇게 되면 사용하는 포트가 많아질 뿐만 아니라 관리도 힘들고, 접속마다 포트를 입력해주어야 한다는 불편함이 생기고, 이런 문제들을 리버스 프록시를 통해서 해결해줄 수 있습니다.

이제 리버스 프록시 설정을 해주도록 하겠습니다.
저는 nginx proxy manager를 통해 리버스 프록싱을 해줄 생각입니다.

간단하게 스크립트를 이용해 npm vm을 생성해 보겠습니다.
노드 쉘에서 다음 명령어를 입력해줍니다.

bash -c "$(wget -qLO - https://github.com/tteck/Proxmox/raw/main/ct/nginxproxymanager.sh)"


이렇게 설치에 대한 설정들이 나오게 되는데, default로 쭉쭉 넘어가 줍니다.


설치가 완료되면 위처럼 생성된 VM의 IP 정보와 함께 완료가 됩니다.

이렇게 노드 하위에 nginx 프록시 매니저 리눅스 컨테이가 생성되었습니다.
해당 VM의 쉘에 접속해 기본 패키지들을 설치해줍니다.

apt-get install -y sudo && 
sudo apt-get install vim &&
sudo apt install net-tools && 
sudo apt-get install iputils-ping

포트포워딩

먼저 소유중인 공유기,라우터에서 포트포워딩을 해주어야 합니다.
반드시 80/443이 npm의 80/443 포트로 포트포워딩 되어있어야 정상적으로 리버스프록시 역할과 인증서를 받아오므로 유의해야합니다. (npm의 관리 페이지는 81 포트입니다.)
만약 방화벽 서버가 존재한다면, 방화벽 서버에서 포워딩을 해줍니다.

NPM 설정

npm 관리 페이지로 접속을 하면 다음과 같이 로그인 화면이 나옵니다.


초기 계정은 다음과 같습니다.

초기 아이디 : admin@example.com
초기 비밀번호 : changeme

 

H04z5nV.png|680


접속 후 오른쪽 위 계정 아이콘을 눌러 계정 정보를 수정해줍니다.


이후 SSL Certificates ➡️ Add SSL Certificate를 눌러 SSL 인증서를 추가해줍니다.
이때 Domain Name은 아까 등록한 도메인과 와일드카드를 이용해 서브도메인들을 등록해줍니다.

your-duckdns-token이라고 된 부분은 아까 duckdns 페이지에 있었던 토큰을 복사해 붙여넣어줍니다.

서브 도메인 등록

Hosts ➡️ Proxy Hosts ➡️ Add Proxy Host 로 프록시 호스트를 추가해줍니다.


Domain Names : 사용할 서브도메인을 입력해줍니다. (복수 등록도 가능)
IP : 해당 vm 혹은 ct의 사설 ip를 입력해줍니다.
Port : 접속 포트를 입력해줍니다.


SSL은 아까 등록해준 인증서를 선택해줍니다.


이제 도메인으로도 접속이 잘 됩니다.
다음 포스팅에서는 proxmox에서 직접 vm과 ct를 만들고 구동하는 방법에 대해 다뤄보겠습니다.

reference

profile

만쥬의 개발일기

@KangManJoo

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!