commit 9e7d0cd1bb409e9ddbd4d17dd4618a6dea166c7f Author: 시골약사 Date: Sat Sep 6 16:50:25 2025 +0900 ✨ Initial commit: Headscale + Headplane 완전 구축 프로젝트 🎯 프로젝트 목표: - Tailscale 완전 대체하는 자체 호스팅 솔루션 구축 - Headscale + Headplane Docker Compose로 원클릭 설치 - Headplane 한글화 및 커스터마이징 - 완전한 VPN 관리 시스템 개발 🛠️ 기술 스택: - Headscale: Tailscale 호환 컨트롤 서버 - Headplane: 웹 기반 관리 UI - Docker & Docker Compose - SQLite 데이터베이스 - 향후 PostgreSQL 지원 예정 🔧 주요 구성: - docker-compose.yml: 멀티 컨테이너 구성 - config/config.yaml: Headscale 상세 설정 - start.sh: 자동화된 설치 스크립트 - .env: 환경변수 관리 📋 개발 계획: 1. 기본 설치 및 테스트 2. HTTPS/TLS 보안 구성 3. Headplane UI 한글화 4. 고급 네트워킹 설정 5. 모니터링 및 백업 시스템 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude diff --git a/.env.example b/.env.example new file mode 100644 index 0000000..c22cf5d --- /dev/null +++ b/.env.example @@ -0,0 +1,20 @@ +# Headscale API Key (will be generated after first startup) +HEADSCALE_API_KEY=your_api_key_here + +# Server configuration +SERVER_URL=http://localhost:8080 +LISTEN_ADDR=0.0.0.0:8080 + +# Database (SQLite by default) +DB_TYPE=sqlite3 +DB_PATH=/var/lib/headscale/db.sqlite + +# Magic DNS +MAGIC_DNS=true +BASE_DOMAIN=headscale.local + +# Network settings +IP_PREFIXES=100.64.0.0/10 + +# Timezone +TZ=Asia/Seoul \ No newline at end of file diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..f7d1df2 --- /dev/null +++ b/.gitignore @@ -0,0 +1,64 @@ +# Environment variables +.env* +!.env.example + +# Database files +*.db +*.sqlite +*.sqlite3 + +# Data directories +data/ +run/ +logs/ + +# Docker volumes +volumes/ + +# SSL certificates +*.crt +*.key +*.pem + +# Backup files +*.backup +*.bak + +# IDE +.vscode/ +.idea/ + +# OS +.DS_Store +Thumbs.db + +# Logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* + +# Runtime data +pids +*.pid +*.seed +*.pid.lock + +# Dependency directories +node_modules/ + +# Build outputs +dist/ +build/ +out/ + +# API keys and secrets +api_keys.txt +secrets.txt + +# Temporary files +tmp/ +temp/ + +# Docker Compose override files +docker-compose.override.yml \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..d7d340d --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,50 @@ +version: '3.8' + +services: + headscale: + image: headscale/headscale:latest + container_name: headscale + restart: unless-stopped + command: headscale serve + environment: + - TZ=Asia/Seoul + volumes: + - ./config:/etc/headscale + - ./data:/var/lib/headscale + - ./run:/var/run/headscale + ports: + - "8080:8080" # Headscale HTTP API + - "9090:9090" # Metrics (optional) + networks: + - headscale-net + healthcheck: + test: ["CMD", "curl", "-f", "http://localhost:8080/health"] + interval: 30s + timeout: 10s + retries: 3 + start_period: 40s + + headplane: + image: ghcr.io/tale/headplane:latest + container_name: headplane + restart: unless-stopped + environment: + - TZ=Asia/Seoul + - HEADSCALE_URL=http://headscale:8080 + - HEADSCALE_API_KEY=${HEADSCALE_API_KEY} + ports: + - "3000:3000" # Headplane Web UI + depends_on: + headscale: + condition: service_healthy + networks: + - headscale-net + +networks: + headscale-net: + driver: bridge + +volumes: + headscale_config: + headscale_data: + headscale_run: \ No newline at end of file