# πŸ₯ PharmQ Headscale Network - Live Production pharmq.kr 도메인을 μ‚¬μš©ν•˜λŠ” Headscale VPN λ„€νŠΈμ›Œν¬ ꡬ좕 μ™„λ£Œ ## πŸš€ ν΄λΌμ΄μ–ΈνŠΈ μžλ™ 등둝 ### ν•œ 쀄 μ„€μΉ˜ (ꢌμž₯) ```bash curl -fsSL https://git.0bin.in/thug0bin/headscale-tailscale-replacement/raw/branch/live/pharmq-headscale-production/register-client-pharmq-live.sh | bash ``` ### λ‹€μš΄λ‘œλ“œ ν›„ μ„€μΉ˜ ```bash curl -fsSL https://git.0bin.in/thug0bin/headscale-tailscale-replacement/raw/branch/live/pharmq-headscale-production/register-client-pharmq-live.sh -o register-client.sh chmod +x register-client.sh ./register-client.sh ``` ### πŸ“‹ 슀크립트 파일 직접 λ‹€μš΄λ‘œλ“œ - [register-client-pharmq-live.sh](./register-client-pharmq-live.sh) - ν΄λΌμ΄μ–ΈνŠΈ μžλ™ 등둝 슀크립트 ## 🌐 μ„œλΉ„μŠ€ μ£Όμ†Œ ### 메인 μ„œλΉ„μŠ€ - **Headscale μ„œλ²„**: http://head.pharmq.kr:8070 - **κ΄€λ¦¬μž λŒ€μ‹œλ³΄λ“œ**: http://head.pharmq.kr:5001 ### 개발/ν…ŒμŠ€νŠΈ (λ‚΄λΆ€μš©) - **Headscale**: http://192.168.0.100:8070 - **farmq-admin**: http://192.168.0.100:5001 ## πŸ“Š λ„€νŠΈμ›Œν¬ 정보 - **λ„€νŠΈμ›Œν¬ λŒ€μ—­**: 100.64.0.0/10 - **IPv6 λŒ€μ—­**: fd7a:115c:a1e0::/48 - **Magic DNS**: headscale.local - **κΈ°λ³Έ μ‚¬μš©μž**: default ## πŸ”§ κ΄€λ¦¬μž 도ꡬ ### farmq-admin μ›Ή GUI - μ‚¬μš©μž 관리 - λ¨Έμ‹ /λ…Έλ“œ 관리 - μ‹€μ‹œκ°„ λ„€νŠΈμ›Œν¬ λͺ¨λ‹ˆν„°λ§ - Headscale CLI API 래퍼 ### μ£Όμš” κΈ°λŠ₯ - βœ… Docker 기반 Headscale μ„œλ²„ - βœ… μ›Ή 기반 관리 μΈν„°νŽ˜μ΄μŠ€ - βœ… μžλ™ ν΄λΌμ΄μ–ΈνŠΈ 등둝 슀크립트 - βœ… 1λ…„ 유효 μž¬μ‚¬μš© κ°€λŠ₯ preauth key - βœ… Magic DNS 지원 ## πŸ“‹ ν΄λΌμ΄μ–ΈνŠΈ 등둝 κ³Όμ • 1. **슀크립트 μ‹€ν–‰**: μœ„ curl λͺ…λ Ήμ–΄ μ‹€ν–‰ 2. **Tailscale μžλ™ μ„€μΉ˜**: μ‹œμŠ€ν…œμ— 맞게 μ„€μΉ˜ 3. **Headscale μ„œλ²„ μ—°κ²°**: head.pharmq.kr μ—°κ²° 4. **μžλ™ 인증**: preauth key둜 μ¦‰μ‹œ 승인 5. **λ„€νŠΈμ›Œν¬ μ°Έμ—¬**: Tailscale IP ν• λ‹Ή μ™„λ£Œ ## πŸ› οΈ 기술 μŠ€νƒ - **Headscale**: v0.26.1 (Docker) - **farmq-admin**: Flask + SQLAlchemy - **Database**: SQLite3 - **Frontend**: HTML/CSS/JavaScript - **Network**: Tailscale protocol ## πŸ“ 파일 ꡬ쑰 ``` headscale-setup/ β”œβ”€β”€ docker-compose.yml # Docker Compose μ„€μ • β”œβ”€β”€ .env # ν™˜κ²½λ³€μˆ˜ (볡사 ν•„μš”) β”œβ”€β”€ .env.example # ν™˜κ²½λ³€μˆ˜ ν…œν”Œλ¦Ώ β”œβ”€β”€ start.sh # μžλ™ μ„€μΉ˜ 슀크립트 β”œβ”€β”€ README.md # 이 λ¬Έμ„œ β”œβ”€β”€ .gitignore # Git μ œμ™Έ 파일 β”œβ”€β”€ config/ β”‚ └── config.yaml # Headscale μ„€μ • β”œβ”€β”€ data/ # λ°μ΄ν„°λ² μ΄μŠ€ 및 ν‚€ 파일 (μžλ™ 생성) └── run/ # λŸ°νƒ€μž„ 파일 (μžλ™ 생성) ``` ## πŸš€ Git Repository - **μ €μž₯μ†Œ**: https://git.0bin.in/thug0bin/headscale-tailscale-replacement - **κ΄€λ¦¬μž**: μ‹œκ³¨μ•½μ‚¬ (thug0bin@gmail.com) ## πŸš€ λΉ λ₯Έ μ‹œμž‘ ### 1. ν™˜κ²½λ³€μˆ˜ μ„€μ • ```bash # .env.example을 .env둜 볡사 cp .env.example .env ``` ### 2. μžλ™ μ„€μΉ˜ (ꢌμž₯) ```bash # μ‹€ν–‰ κΆŒν•œ λΆ€μ—¬ 및 μ‹€ν–‰ chmod +x ./start.sh ./start.sh ``` ### 3. μˆ˜λ™ μ„€μΉ˜ ```bash # 1. Headscale μ‹œμž‘ docker-compose up -d headscale # 2. API ν‚€ 생성 docker-compose exec headscale headscale apikeys create # 3. .env νŒŒμΌμ— API ν‚€ μž…λ ₯ (HEADSCALE_API_KEY κ°’ μˆ˜μ •) vi .env # 4. Headplane μ‹œμž‘ docker-compose up -d headplane ``` ## πŸ“‹ 접속 정보 - **Headscale API**: http://localhost:8070 - **Headplane UI**: http://localhost:3000 ## πŸ‘€ μ‚¬μš©μž 관리 ### μ‚¬μš©μž 생성 ```bash docker-compose exec headscale headscale users create myuser ``` ### Pre-auth ν‚€ 생성 ```bash docker-compose exec headscale headscale preauthkeys create --user myuser --reusable --expiration 24h ``` ## πŸ“± ν΄λΌμ΄μ–ΈνŠΈ μ—°κ²° ### Linux/macOS ```bash # Tailscale ν΄λΌμ΄μ–ΈνŠΈ μ„€μΉ˜ ν›„ tailscale up --login-server=http://localhost:8080 ``` ### Windows ```cmd tailscale up --login-server=http://localhost:8080 ``` ## πŸ”§ μœ μš©ν•œ λͺ…λ Ήμ–΄ ### μƒνƒœ 확인 ```bash docker-compose ps docker-compose logs -f ``` ### λ…Έλ“œ λͺ©λ‘ 확인 ```bash docker-compose exec headscale headscale nodes list ``` ### μ‚¬μš©μž λͺ©λ‘ 확인 ```bash docker-compose exec headscale headscale users list ``` ## πŸ› οΈ νŠΈλŸ¬λΈ”μŠˆνŒ… ### μ»¨ν…Œμ΄λ„ˆ μž¬μ‹œμž‘ ```bash docker-compose restart ``` ### 둜그 확인 ```bash docker-compose logs headscale docker-compose logs headplane ``` ### μ™„μ „ μ΄ˆκΈ°ν™” ```bash docker-compose down sudo rm -rf data/* docker-compose up -d ``` ## πŸ”„ Git 관리 ν•„μš”μ‹œ μˆ˜λ™μœΌλ‘œ Git 컀밋을 μ§„ν–‰ν•˜μ„Έμš”: ```bash # ν˜„μž¬ μƒνƒœ 확인 git status # 변경사항 컀밋 git add . git commit -m "Update: μ„€λͺ…" git push origin main ``` ## ⚑ μƒˆ μ„œλ²„ 원클릭 등둝 μƒˆλ‘œμš΄ λ¦¬λˆ…μŠ€ μ„œλ²„λ₯Ό 팜큐 λ„€νŠΈμ›Œν¬μ— **ν•œ 번의 λͺ…λ Ή**으둜 등둝: ### λΉ λ₯Έ μ„€μΉ˜ (ꢌμž₯) ```bash # 일반 μ‚¬μš©μž 계정 curl -fsSL https://git.0bin.in/thug0bin/headscale-tailscale-replacement/raw/branch/live/pharmq-headscale-production/quick-install.sh | sudo bash # root 계정 (Proxmox λ“±) curl -fsSL https://git.0bin.in/thug0bin/headscale-tailscale-replacement/raw/branch/live/pharmq-headscale-production/quick-install.sh | bash ``` ### κΈ°μ‘΄ Tailscale 연결이 μžˆλŠ” 경우 (κ°•μ œ μž¬λ“±λ‘) ```bash # 일반 μ‚¬μš©μž curl -fsSL https://git.0bin.in/thug0bin/headscale-tailscale-replacement/raw/branch/live/pharmq-headscale-production/quick-install.sh | sudo bash -s -- --force # root 계정 curl -fsSL https://git.0bin.in/thug0bin/headscale-tailscale-replacement/raw/branch/live/pharmq-headscale-production/quick-install.sh | bash -s -- --force ``` ### 지원 OS - Ubuntu, Debian, CentOS, RHEL, Rocky Linux, Fedora, Arch Linux - μžλ™ Tailscale μ„€μΉ˜ + Headscale 등둝 - λ°©ν™”λ²½ μžλ™ μ„€μ • + μ—°κ²° 검증 **30초 λ§Œμ— 팜큐 λ„€νŠΈμ›Œν¬ μ—°κ²° μ™„λ£Œ!** πŸŽ‰ ## πŸͺŸ Windows 원클릭 등둝 Windows PCμ—μ„œ **ν•œ 번의 볡사 λΆ™μ—¬λ„£κΈ°**둜 팜큐 λ„€νŠΈμ›Œν¬ μ—°κ²°: ### κΈ°λ³Έ μ„€μΉ˜ (ꢌμž₯) - 인코딩 문제 해결됨 ```powershell # κ΄€λ¦¬μž PowerShellμ—μ„œ 볡사 λΆ™μ—¬λ„£κΈ° (English version - ν•œκΈ€ 깨짐 ν•΄κ²°) iex ((New-Object System.Net.WebClient).DownloadString('https://git.0bin.in/thug0bin/headscale-tailscale-replacement/raw/branch/live/pharmq-headscale-production/farmq-install-en.ps1')) ``` ### κΈ°μ‘΄ Tailscale μžˆλŠ” 경우 (κ°•μ œ μž¬λ“±λ‘) ```powershell # κΈ°μ‘΄ 연결을 μžλ™μœΌλ‘œ ν•΄μ œν•˜κ³  μž¬λ“±λ‘ (English version) $Force = $true; iex ((New-Object System.Net.WebClient).DownloadString('https://git.0bin.in/thug0bin/headscale-tailscale-replacement/raw/branch/live/pharmq-headscale-production/farmq-install-en.ps1')) ``` ### ν•œκΈ€ 버전 (인코딩 문제 λ°œμƒ κ°€λŠ₯) ```powershell # ν•œκΈ€μ΄ κΉ¨μ Έ 보일 수 있음 - μœ„ English 버전 ꢌμž₯ iex ((New-Object System.Net.WebClient).DownloadString('https://git.0bin.in/thug0bin/headscale-tailscale-replacement/raw/branch/live/pharmq-headscale-production/farmq-install.ps1')) ``` ### μ‹€ν–‰ 방법 1. **Windows ν‚€ + X** β†’ **"Windows PowerShell(κ΄€λ¦¬μž)"** 클릭 2. μœ„ λͺ…λ Ήμ–΄ **볡사 β†’ λΆ™μ—¬λ„£κΈ° β†’ Enter** 3. μžλ™ μ„€μΉ˜ μ§„ν–‰ (2-3λΆ„) 4. 팜큐 λ„€νŠΈμ›Œν¬ μ—°κ²° μ™„λ£Œ! πŸŽ‰ ### Windows μžλ™ 처리 κΈ°λŠ₯ - βœ… **Tailscale μžλ™ λ‹€μš΄λ‘œλ“œ** 및 μ„€μΉ˜ - βœ… **κ΄€λ¦¬μž κΆŒν•œ** μžλ™ 확인 - βœ… **κΈ°μ‘΄ μ—°κ²° 슀마트 처리** (Linux와 동일) - βœ… **Windows Defender λ°©ν™”λ²½** μžλ™ μ„€μ • - βœ… **λ„€νŠΈμ›Œν¬ μ—°κ²° ν…ŒμŠ€νŠΈ** 및 확인