예전부터 미니PC로 홈서버를 구축하여 제한적인 AWS 프리티어에서 벗어나고 싶었다.
그래서 n8n AI RAG Agent 프로젝트를 해볼겸 꽤나 큰 투자를 했다.
https://ko.aliexpress.com/w/wholesale-n150.html?spm=a2g0o.productlist.search.0
https://ko.aliexpress.com/w/wholesale-n150.html?spm=a2g0o.productlist.search.0
ko.aliexpress.com
홈서버용으로 n150 프로세서를 추천하길래 구매했지만 알고봤더니 전작인 n100과 성능이 비슷하다나
만약 다시 살일이 있다면 n100 정도로 충분할 것 같다
아쉽지만 어쨋든, 미니PC를 홈서버로 구축하기 위해서는 꽤나 많은 준비가 필요했다.
리눅스 OS설치
새로 산 mini pc에는 정품 윈도우 라이센스 키가 내장되어 있었다.
아까우니 윈도우 제품키를 백업하는 것부터 시작했다.
미니PC에서 Microsoft 로그인을 하여 제품키를 등록하면 끝이다(로그인을 하면 등록은 자동으로 된다).
이후 다른 PC로 가서 Microsoft 로그인을 하면 해당 PC에서도 정품 윈도우를 사용할 수 있는 방식
리눅스는 우분투지.
우분투 홈페이지에 들어가 server용 LTS를 다운받는다.
https://ubuntu.com/download/server
Get Ubuntu Server | Download | Ubuntu
Get Ubuntu Server one of three ways; by using Multipass on your desktop, using MAAS to provision machines in your data centre or installing it directly on a server.
ubuntu.com
이후 rufus라는 부팅가능한 USB를 만들어주는 프로그램을 다운받아 우분투 부팅 USB를 만들어줬다.
Rufus - 부팅 가능한 USB 드라이브를 간편하게 만들기
rufus.ie
그동안 OS가 설치되어 있는 컴퓨터만 사용해봐서 OS 부팅하는 것이 처음이었다. BIOS라는 것도 이번에 새롭게 알게되었다.
BIOS란 Basic Input/Output/System으로 컴퓨터 전원을 켜면 가장 먼저 실행되어 운영체제가 실행되기 전 컴퓨터의 부팅을 설정할 수 있는 입출력 펌웨어다. 매번 컴퓨터를 킬 때마다 이 녀석이 실행되고 있었다는게 놀라울 따름이다. BIOS 모드에 들어가려면 DEL 버튼을 눌러줘야하는데 예전엔 부팅 속도가 느려서 여유로웠지만 요즘은 부팅이 순식간에 지나가서 전원을 키자마자 연타하고 있어야했다. 아무튼 BIOS 모드에서 부팅 순서 설정에 들어가서 1순위로 Windows가 되어있던걸 우분투 usb로 변경해주고 재부팅해주면 설치가 진행된다.
네트워크 설정
계획은 DuckDNS 무료 도메인 서비스를 이용하여 내부 IP의 n8n 포트에 연결하는 것이었다.
처음엔 공유기 포트포워딩만 설정했는데 아무리해도 진전이 없어 검색한 결과 아파트에는 공유기 전에 모뎀이 존재한다고 한다.
모뎀이 우리집으로 유선 인터넷을 쏴주는 역할을 하고, 이를 공유기가 받아 다시 무선 인터넷을 쏴주는 역할.
미니PC는 wifi를 이용하고 있기 때문에 네트워크 구조가 아파트 자체 모뎀 -> 공유기 -> 미니PC 이렇게 되겠다.
그래서 모뎀에서도 포트포워딩을 하려다가 Bridge라는 것에 대해서 알게 되었다. bridge는 연결 허브 역할만 하고 NAT처럼 중간에서 포트를 IP패킷에 적힌 소켓 주소의 포트 숫자와 소스 및 목적지의 IP 주소 등을 재기록하지 않는다.
오.. 좋은것 같은데? 모뎀에 바로 적용.
연결이 안된다. 문제는 모뎀 관리자 페이지, 공유기 관리자 페이지 또한 접속이 불가하다는 것.

기존에 외부 IP -> 모뎀 -> 공유기 -> 미니pc 로 연결되던 내부 IP가 모뎀을 건너뛰고 공유기로 직접 들어가게 되면서 꼬인 듯하다.
미니pc의 ip를 검색해보니 내부 ip를 받아오지 못하고 있었다. 공유기를 껐다가 다시 키면 내부 IP가 재설정된다는 말에 시도해보았지만 해결되지 않았다. 결국 공장 초기화로 모뎀을 되돌리는 수밖에 없었다.
이렇게 고생했던 이유는 n8n의 일부 노드의 엔드포인트가 사용자 지정이 불가했기 때문이다. 집에서 사용중인 SK 브로드밴드 인터넷은 외부포트에 주요 포트를 설정해놓을 수 없게 해뒀는데 이로인해 서비스 이용이 불가능한 상황까지 이르렀다.

결국 무료 DNS를 포기하고 도메인 구매 및 Cloudflare 터널 서비스를 사용하기로 결정했다.
cloudflare tunnel 등록
그러기 위해선 도메인을 하나 구매해야했다.
가비아로 가서 도메인을 검색한다.


결제 단계에서 비싼 가격때문에 당황하지 말자. 1년 이후에는 이벤트 가격이 아닌 원래 가격으로 책정되기 때문에
2,750 + 71,500 * 2 이런식으로 가격 책정이 된것.
저렴한 가격으로 사용할 것이므로 1년으로 변경했다.
다음은 네임서버 설정을 해줘야 한다.
네임서버는 도메인 이름(Domain Name)을 컴퓨터가 알아듣는 숫자 주소인 IP 주소로 변환해주는 서버다.
이를 등록하면 해당 회사 서버에서 도메인 이름을 숫자 ip로 변환해주는 역할을 한다.
참고로 나는 외부 dns 서비스인 cloudflare를 사용할 예정이어서 cloudflare의 네임서버를 적어줬다.
등록할 네임서버는 cloudflare에 사이트 등록을 완료하면 친절히 변경 방법을 알려준다.

등록완료했다면 이후 DNS 관리는 Cloudflare에서 하면된다.
대시보드에서 Zero Trust -> Networks -> Connectors -> Create a tunnel

Cloudflared를 선택

원하는 tunnel 이름을 작성해주고 Save tunnel 클릭
tunnel의 edit를 클릭하면 Connector를 연결하는 방법이 나온다.
여기서 Connector란 웹서버에 tunnel을 뚫어주는 프로그램을 의미한다.
나는 미니pc와의 tunnel을 뚫고 싶으므로 미니pc에 접속해 docker로 Connector를 설치하는 방법을 설명대로 따라했다.

연결이 되었다면 Connectors 대시보드에서 Status가 Healthy로 뜰 것이다.

다음은 DNS 레코드를 설정해줄 차례다.
tunnel edit로 들어가, Published application routes를 클릭

Subdomain, Domain, Path는 Subdomain.Domain/Path로 입력해서 접속할 주소를 입력하는 것이고, Service에는 tunnel이 뚫린 내부에서 어떤 서비스, 포트로 요청을 전송해줄까를 의미하는 것이다.
나는 Docker로 tunnel을 뚫었기 때문에 이 요청은 컨테이너 내부에서 작동할 것이다.
도커 설정으로 별도의 포트를 열어주지 않았다면 도커 내부 가상 네트워크가 적용되어 그 안에서만 통신하는 완전 격리 통신이 이루어 진다. 이 경우 서비스 이름으로 통신이 가능하다.
n8n의 경우 cloudflare tunnel과 같이 도커에서 실행했기 때문에 http://n8n:5678로 설정해줬다.
만약 도커 외부에 설치했다면 docker-compose.yml 파일에 extra_hosts: - "host.docker.internal:host-gateway" 설정을 추가해주고 URL을 http://host.docker.internal:5678로 설정해주면 된다.
이는 컨테이너 안에서 서버 본체를 부를 때 사용할 이름(도메인)을 host.docker.internal로 설정한 것으로 이렇게하면 서버 본체를 찾아가게 된다.
길어져서 다음 포스트에서 이어서 작성하겠다.
다음 포스트에서는 도커 설정부터 트러블 슈팅 과정에 대해서 살펴보겠다.
'네트워크' 카테고리의 다른 글
| TLP(Transport Layer Protocol) - 2. TCP(Transmission Control Protocol) (1) | 2024.07.19 |
|---|---|
| TLP(Transport Layer Protocol) - 1. 프로토콜과 포트 (0) | 2024.07.18 |
| DHCP(Dynamic Host Configuration Protocol) (0) | 2024.07.16 |
| Private IP vs Public IP (4) | 2024.07.16 |
| Internet Protocol - IPv4 (6) | 2024.07.16 |