목표 및 제약사항
🎯 목표 및 평가 기준
Server 역할까지 가능한 익숙한 Windows 환경 PC / 저전력 / 팬리스 / 무소음. eGPU, 게임, 대형 LLM은 대상 아님 (성능·열·전력 제한 고려).
- 사용 편의성 – Windows 기반 GUI + 설치 마법사
- 저렴한 비용과 저전력 – $200 수준 Mini PC + 무소음 운영
- 광고 제거 – 전체 네트워크 차단 + 모바일 In-App 광고까지
- 속도 유지 – 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>&1Nextcloud 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 정상 발급 여부 확인.