목표 및 제약사항

🎯 목표 및 평가 기준

Server 역할까지 가능한 익숙한 Windows 환경 PC / 저전력 / 팬리스 / 무소음. eGPU, 게임, 대형 LLM은 대상 아님 (성능·열·전력 제한 고려).
  1. 사용 편의성 – Windows 기반 GUI + 설치 마법사
  2. 저렴한 비용과 저전력 – $200 수준 Mini PC + 무소음 운영
  3. 광고 제거 – 전체 네트워크 차단 + 모바일 In-App 광고까지
  4. 속도 유지 – Office, WebDAV 등 웹앱 기반 앱 빠르게 실행 가능

📦 제약사항 및 구성요소

  • 하드웨어 (Hardware)
  • 운영체제 (OS)
  • 애플리케이션 (Applications)

설치 및 설정

mini-pc 기본 설정: Docker Desktop + WLS2 + Ubuntu

  • mini-pc 환경: Windows 11 OS + 저전력 (예: Intel N100 or ARM Cortex 계열 PC 총 전력 약 30W)
  • Docker Desktop for Windows + WSL2 설치 : Docker Desktop for Windows 설치 시 WSL2와 통합됨
  • Win + r: cmd 또는 powershell
powershell
# WSL2 내에 설치된 Linux 배포판·버전 확인
wsl -l -v

# WSL2 내에 설치 가능한 Linux 배포판 목록확인
wsl -l -o

# WSL2 Ubuntu 설치
wsl --install -d Ubuntu
  • WSL2 Ubuntu에서 CLI 기반 관리 수행: Docker Desktop 설정에서 Settings > Resources > WSL integration에서 Ubuntu 토글 활성화

홈 공유기 (Home Router) 설정-1

  • Win + r: cmd 또는 powershell
  • ipconfig /all 로 확인할 수 있는 사항
  • Browser에서 공유기 관리 페이지(예: 192.168.219.1) 접속

AdGuard Home 설치

  • Docker desktop for Windows 실행 후 Adguard Home 의 Docker container 다운로드
  • Win + r: powershell
  • Docker container 설정 폴더 만들기 (Linux 경로)
shell
# Ubuntu CLI 진입: 
wsl -d Ubuntu

# User의 홈 디렉토리 이동: 
cd ~

# mkdir -p ~/docker/adguard/conf
# mkdir -p ~/docker/adguard/work

mkdir -p ~/docker/adguard/{conf,work}
  • 관리자 권한으로 Adguard Home 컨테이너 실행
shell
sudo docker run -d 
	--name adguardhome \
  --restart unless-stopped \
  -v ~/docker/adguard/work:/opt/adguardhome/work \
  -v ~/docker/adguard/conf:/opt/adguardhome/conf \
  -p 53:53/tcp \      # DNS 쿼리(TCP)
  -p 53:53/udp \      # DNS 쿼리(UDP)
  -p 3000:3000 \ # AdGuard Home 관리자 웹 인터페이스 포트를 3000으로 설정
  adguard/adguardhome
  • Adguard Home Admin Panel UI 진입: 브라우저에서 http://localhost:3000 또는 http://192.168.219.103:3000/ 접속하여 설정 진행.

DNS (CloudFlare)에서 Public sub-Domain 준비

  • gitsam.com 도메인이 Cloudflare로 관리되고 있어야 합니다 (도메인 등록과 관리는 다를 수 있음).
  • Cloudflare Dashboard > DNS > Add Record:
  • Cloudflare DDNS 설정용 Cloudflare API Token 생성

Cloudflare DDNS 스크립트 작성

  • 목표: 3rd party DDNS provider 없이 “DDNS 스크립트+crontab” 사용: no-ip 의 Dynamic Update Client (DUC) 대신 Cloudflare DDNS 스크립트를 사용하면 home.gitsam.com의 A 레코드를 공인 IP로 실시간 업데이트 가능. Cloudflare 자체에는 DDNS 서비스가 없지만 API Token을 이용해 DNS 레코드를 동적으로 업데이트. 아래 스크립트를 5~10분마다 실행하면 Cloudflare의 A 레코드가 no-ip 없이도 자동 갱신됩니다.
  • WSL2 Ubuntu에서 실행:
shell
# DDNS 스크립트 준비
sudo apt update && sudo apt install -y jq curl
mkdir -p ~/cloudflare-ddns
  • 스크립트 파일 (update.sh) 생성 및 편집
shell
nano ~/cloudflare-ddns/update.sh

# nano 에디터가 열리면 아래 내용을 붙여넣고 Ctrl + O(저장) → Enter → Ctrl + X(종료).

#!/bin/bash

# Cloudflare DDNS 스크립트
CF_ZONE="gitsam.com"
CF_RECORD="home"
CF_API_TOKEN="heInJeJ3rZcd3jxbezSBSSAe0Pk4MjlEc8NLpv3A" # "YOUR_API_TOKEN"

CF_ZONE_ID=$(curl -s -H "Authorization: Bearer $CF_API_TOKEN" \
  "https://api.cloudflare.com/client/v4/zones?name=$CF_ZONE" | jq -r '.result[0].id')

CF_RECORD_ID=$(curl -s -H "Authorization: Bearer $CF_API_TOKEN" \
  "https://api.cloudflare.com/client/v4/zones/$CF_ZONE_ID/dns_records?name=$CF_RECORD.$CF_ZONE" \
  | jq -r '.result[0].id')

CURRENT_IP=$(curl -s https://ipv4.icanhazip.com)

curl -s -X PUT "https://api.cloudflare.com/client/v4/zones/$CF_ZONE_ID/dns_records/$CF_RECORD_ID" \
  -H "Authorization: Bearer $CF_API_TOKEN" \
  -H "Content-Type: application/json" \
  --data "{\"type\":\"A\",\"name\":\"$CF_RECORD\",\"content\":\"$CURRENT_IP\",\"ttl\":300,\"proxied\":false}"

  • 저장 후 실행 권한 부여:
shell
chmod +x ~/cloudflare-ddns/update.sh
  • 테스트 실행
shell
~/cloudflare-ddns/update.sh
  • Cloudflare Dashboard > DNS에서 home.gitsam.com의 IP가 현재 공인 IP로 업데이트 되었는지 확인.
  • 주기 실행 (crontab)
shell
crontab -e
  • 다음 줄 추가 (15분마다 실행):
plain text
*/15 * * * * /home/<your_user>/cloudflare-ddns/update.sh >/dev/null 2>&1

Nextcloud AIO 설치

  • Docker Desktop 동작 확인:
powershell
docker --version
wsl --list --verbose
  • Docker 볼륨 생성
shell
sudo docker volume create nextcloud_aio_mastercontainer
  • Nextcloud AIO 컨테이너 실행
shell
sudo docker run -d \
	--name nextcloud-aio-mastercontainer \
	--init \
	--sig-proxy=false \
	--restart always \
	--publish 8080:8080 \
	--publish 80:80 \
	--publish 8443:8443 \
	--volume nextcloud_aio_mastercontainer:/mnt/docker-aio-config \
	--volume /var/run/docker.sock:/var/run/docker.sock:ro \
	nextcloud/all-in-one:latest
  • 브라우저에서 https://192.168.219.103:8080 접속 → (안전하지 않은 사이트 경고 무시)→ AIO 설치 마법사 실행

홈 공유기 (Home Router) 설정-2

  • AdGuard Home과의 DNS 충돌 회피: AdGuard Home (192.168.219.103)를 내부 네트워크(192.168.x.x)의 outbound DNS로 사용 중이라면, AdGuard Home Admin Panel에서 외부 도메인(home.gitsam.com)을 Cloudflare로 포워딩해야 합니다.
  • AdGuard Home 관리자 페이지:

테스트

  • 내부 테스트: https://home.gitsam.com 접속 (AdGuard Home 경유)
  • 외부 테스트: LTE 환경에서 https://home.gitsam.com 접속
  • SSL 상태: 브라우저에서 인증서 확인 → Let's Encrypt 정상 발급 여부 확인.