남는 PC나 미니PC에 Ubuntu와 Docker를 올리고, 도메인과 Nginx Proxy Manager를 연결하면 월 서버 임대료 없이 테스트 서비스를 운영할 수 있다. 다만 완전히 공짜는 아니다. 전기료, 인터넷 회선, 도메인 비용(무료 DNS를 쓰면 생략 가능)은 남는다.7 이 글은 도메인 확보부터 외부 접속 확인까지 5단계를 순서대로 정리하고, 원본 작성 시점 이후 바뀐 부분(Ubuntu 버전, NPM 초기 로그인)을 갱신했다.
홈서버로 무엇이 필요한가?
| 단계 | 준비물 | 역할 |
|---|---|---|
| 1. 도메인 | 도메인 등록 업체 또는 무료 DNS | 이름(예: apache.example.com)을 서버 공인 IP로 연결 |
| 2. 서버 OS | PC 또는 미니PC, 8GB 이상 USB | Ubuntu Server 설치 |
| 3. Docker | Docker Engine, Compose 플러그인 | 서비스를 컨테이너로 분리 운영 |
| 4. 컨테이너 | 웹서버 등 | 실제 서비스 |
| 5. 리버스 프록시 | 공유기 포트포워딩, Nginx Proxy Manager | 도메인별로 컨테이너에 연결 |
1단계: 도메인은 어떻게 확보하고 연결하나?
사람이 읽기 어려운 IP 주소 대신 이름으로 접속하게 해 주는 것이 도메인(DNS)이다. 도메인 등록 업체(원본 작성자는 가비아를 사용)에서 원하는 이름을 검색해 구입하면 DNS 관리 화면에서 레코드를 편집할 수 있다. 비용을 아끼려면 FreeDNS 같은 무료 서브도메인 서비스도 있으며, 이 서비스는 공용 도메인 목록에 서브도메인을 붙이는 방식과 동적 DNS(IP 자동 갱신)를 제공한다.7


DNS 관리의 ‘레코드 추가’에서 서브도메인 이름(예: apache)을 입력하고 서버가 위치한 곳의 공인 IP를 넣은 뒤 저장한다. 공인 IP는 집 공유기 WAN 쪽 주소이며, 유동 IP라면 바뀔 수 있어 동적 DNS 설정이 필요할 수 있다.

반영 여부는 터미널이나 명령 프롬프트에서 nslookup 서브도메인.도메인을 실행해 확인한다. 설정한 IP가 응답에 나오면 연결된 것이다.
2단계: 서버 OS는 무엇을 설치하나?
서버용 OS는 보통 Linux를 쓴다. 원본은 Ubuntu 20.04를 사용했지만 20.04 LTS는 2025년 5월 31일 표준 지원이 끝났다.1 새로 설치한다면 2026년 4월 23일 출시되어 2031년 4월까지 지원되는 Ubuntu 26.04 LTS가 기본 선택지이고,2 Docker가 공식 지원하는 22.04·24.04·26.04도 대안이다.3
- Ubuntu 공식 사이트에서 Server ISO 파일을 내려받는다.
- 8GB 이상 USB에 Rufus(Windows용 무료 오픈소스 도구)로 ISO를 기록해 부팅 USB를 만든다.6
- 서버로 쓸 PC에 USB를 꽂고 부팅하여 설치 마법사를 따른다.

3단계: Docker와 Compose는 왜 쓰나?
Docker는 한 대의 서버에서 여러 서비스를 서로 분리된 컨테이너로 돌리게 해 준다. 아파트(서버) 안에 독립된 세대(컨테이너)를 두는 것에 비유할 수 있다. 여러 컨테이너를 묶어 한 번에 실행하는 도구가 Docker Compose이다. Ubuntu에서는 Docker 공식 apt 저장소를 등록한 뒤 docker-ce, docker-compose-plugin 등을 설치하며, 기존의 docker.io·docker-compose 패키지는 충돌하므로 먼저 제거하라고 안내한다.3 명령어도 docker-compose 대신 docker compose(공백)를 쓴다.
4단계: 컨테이너로 웹서버와 Nginx Proxy Manager를 어떻게 띄우나?
테스트용 웹서버(Apache 등)와 Nginx Proxy Manager(NPM)를 컨테이너로 실행한다. NPM은 80(HTTP)·443(HTTPS)·81(관리 화면) 포트를 쓰고, ./data와 ./letsencrypt 폴더를 볼륨으로 연결한 compose 파일로 docker compose up -d를 실행하는 방식이 공식 가이드이다.4 실행 후 docker ps로 컨테이너 상태를 확인한다.

5단계: 공유기 포트포워딩과 프록시 호스트는 어떻게 설정하나?
외부에서 들어오는 80·443 포트 요청을 서버로 보내야 한다. 공유기(원본은 ipTIME)의 포트포워딩 메뉴에서 외부 80, 443을 서버의 내부 IP(예: 192.168.0.39)로 연결한다. ipTIME은 ‘고급설정 > NAT/라우터관리 > 포트포워딩 설정’에서 한다.

그다음 NPM 관리 화면(서버IP:81)에 접속한다. 원본이 쓴 초기 계정 admin@example.com / changeme는 2.13 이전 버전 기준이다. NPM 2.13부터는 기본 관리자 계정 대신 첫 접속 시 설정 마법사가 나온다고 보도되었으므로, 사용 중인 버전에 맞게 확인한다.5 어느 경우든 초기 비밀번호를 그대로 두지 않는다.
‘Add Proxy Host’에서 도메인(예: apache.example.com), 전달 대상 호스트와 포트(예: 서버IP:8822)를 입력해 저장한다. 이렇게 하면 한 대의 서버, 하나의 공인 IP로 도메인마다 다른 컨테이너에 연결할 수 있다.


브라우저에서 해당 도메인을 열어 서비스 화면이 나오면 성공이다.

운영 전에 무엇을 점검해야 하나?
- HTTPS: NPM에서 Let’s Encrypt 인증서를 발급받을 수 있다. Let’s Encrypt는 비영리 기관이 운영하는 무료 인증기관이다.8
- 보안 업데이트: 지원이 끝난 OS(Ubuntu 20.04 등)는 보안 패치가 중단되므로 외부에 공개하는 서버에는 쓰지 않는다.1
- 최소 노출: 포트포워딩은 80·443만 열고, NPM 관리 포트(81)와 SSH는 외부에 열지 않는 것을 권한다.
- 회선 조건: 공인 IP를 받지 못하는 회선에서는 포트포워딩이 동작하지 않을 수 있어 통신사 조건을 먼저 확인한다.
이 구성을 갖추면 도메인 하나로 여러 서비스(블로그, 채팅, 사진 백업 등)를 한 서버에서 나눠 운영할 수 있다.
“무료 홈서버 구축 방법 5단계: 도메인·Ubuntu·Docker·Nginx Proxy Manager (2026 기준)”에 대한 2개의 생각
댓글은 닫혔습니다.