From e0c4a9de3d27fd8200b7aca63524eb34ec724f5e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=8B=9C=EA=B3=A8=EC=95=BD=EC=82=AC?= Date: Sat, 6 Sep 2025 16:55:35 +0900 Subject: [PATCH] =?UTF-8?q?=F0=9F=93=9D=20Add=20missing=20files:=20README.?= =?UTF-8?q?md,=20config.yaml,=20start.sh?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ✨ 추가된 파일들: - README.md: 프로젝트 문서 및 사용법 가이드 - config/config.yaml: Headscale 완전 설정 파일 - start.sh: 원클릭 자동 설치 스크립트 🔧 설정 세부사항: - SQLite 데이터베이스 기본 설정 - Magic DNS 활성화 - Korean 시간대 설정 - 보안 설정 포함 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude --- README.md | 105 +++++++++++++++++++++++++++++++++++++++++++++ config/config.yaml | 69 +++++++++++++++++++++++++++++ start.sh | 64 +++++++++++++++++++++++++++ 3 files changed, 238 insertions(+) create mode 100644 README.md create mode 100644 config/config.yaml create mode 100755 start.sh diff --git a/README.md b/README.md new file mode 100644 index 0000000..866ed48 --- /dev/null +++ b/README.md @@ -0,0 +1,105 @@ +# 🚀 Headscale + Headplane Docker Setup + +Tailscale을 완전히 대체하는 자체 호스팅 솔루션 + +## 📁 파일 구조 +``` +/srv/ +├── docker-compose.yml # Docker Compose 설정 +├── .env # 환경변수 +├── start.sh # 자동 설치 스크립트 +├── config/ +│ └── config.yaml # Headscale 설정 +├── data/ # 데이터베이스 및 키 파일 +└── run/ # 런타임 파일 +``` + +## 🚀 빠른 시작 + +### 1. 자동 설치 (권장) +```bash +chmod +x /srv/start.sh +/srv/start.sh +``` + +### 2. 수동 설치 +```bash +# 1. Headscale 시작 +docker-compose up -d headscale + +# 2. API 키 생성 +docker-compose exec headscale headscale apikeys create + +# 3. .env 파일에 API 키 입력 +vi .env + +# 4. Headplane 시작 +docker-compose up -d headplane +``` + +## 📋 접속 정보 +- **Headscale API**: http://localhost:8080 +- **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 +``` \ No newline at end of file diff --git a/config/config.yaml b/config/config.yaml new file mode 100644 index 0000000..ed7478a --- /dev/null +++ b/config/config.yaml @@ -0,0 +1,69 @@ +--- +server_url: http://localhost:8080 +listen_addr: 0.0.0.0:8080 +metrics_listen_addr: 0.0.0.0:9090 + +private_key_path: /var/lib/headscale/private.key +noise: + private_key_path: /var/lib/headscale/noise_private.key + +ip_prefixes: + - 100.64.0.0/10 + +derp: + server: + enabled: false + urls: + - https://controlplane.tailscale.com/derpmap/default + +disable_check_updates: false +ephemeral_node_inactivity_timeout: 30m +database: + type: sqlite3 + sqlite: + path: /var/lib/headscale/db.sqlite + +acme_url: https://acme-v02.api.letsencrypt.org/directory +acme_email: "" + +tls_letsencrypt_hostname: "" +tls_letsencrypt_cache_dir: /var/lib/headscale/cache +tls_letsencrypt_challenge_type: HTTP-01 +tls_letsencrypt_listen: ":http" + +tls_cert_path: "" +tls_key_path: "" + +log: + format: text + level: info + +acl_policy_path: "" + +dns_config: + override_local_dns: true + nameservers: + - 1.1.1.1 + - 8.8.8.8 + domains: [] + magic_dns: true + base_domain: headscale.local + +unix_socket: /var/run/headscale/headscale.sock +unix_socket_permission: "0770" + +logtail: + enabled: false + +randomize_client_port: false + +oidc: + only_start_if_oidc_is_available: true + issuer: "" + client_id: "" + client_secret: "" + scope: ["openid", "profile", "email"] + extra_params: {} + allowed_domains: [] + allowed_users: [] + strip_email_domain: true \ No newline at end of file diff --git a/start.sh b/start.sh new file mode 100755 index 0000000..aec3bfd --- /dev/null +++ b/start.sh @@ -0,0 +1,64 @@ +#!/bin/bash + +echo "🚀 Headscale + Headplane 설치 시작..." + +# Docker 및 Docker Compose 설치 확인 +if ! command -v docker &> /dev/null; then + echo "❌ Docker가 설치되지 않았습니다. Docker를 먼저 설치해주세요." + exit 1 +fi + +if ! command -v docker-compose &> /dev/null; then + echo "❌ Docker Compose가 설치되지 않았습니다. Docker Compose를 먼저 설치해주세요." + exit 1 +fi + +echo "✅ Docker 환경 확인 완료" + +# 컨테이너 시작 +echo "📦 Headscale 컨테이너 시작..." +docker-compose up -d headscale + +# Headscale이 시작될 때까지 대기 +echo "⏳ Headscale 서비스 시작 대기 중..." +sleep 10 + +# API 키 생성 +echo "🔑 API 키 생성..." +API_KEY=$(docker-compose exec -T headscale headscale apikeys create | grep -o 'hs_[a-zA-Z0-9]*') + +if [ -z "$API_KEY" ]; then + echo "❌ API 키 생성 실패. 수동으로 생성해주세요:" + echo "docker-compose exec headscale headscale apikeys create" + exit 1 +fi + +echo "✅ API 키 생성 완료: $API_KEY" + +# .env 파일 업데이트 +sed -i "s/HEADSCALE_API_KEY=your_api_key_here/HEADSCALE_API_KEY=$API_KEY/" .env + +echo "🌐 Headplane 웹 UI 시작..." +docker-compose up -d headplane + +echo "" +echo "🎉 설치 완료!" +echo "" +echo "📋 접속 정보:" +echo " - Headscale API: http://localhost:8080" +echo " - Headplane UI: http://localhost:3000" +echo " - API 키: $API_KEY" +echo "" +echo "📖 다음 단계:" +echo " 1. 첫 번째 사용자 생성:" +echo " docker-compose exec headscale headscale users create myuser" +echo "" +echo " 2. Pre-auth 키 생성:" +echo " docker-compose exec headscale headscale preauthkeys create --user myuser --reusable --expiration 24h" +echo "" +echo " 3. 클라이언트 연결:" +echo " tailscale up --login-server=http://localhost:8080" +echo "" +echo "📊 상태 확인:" +echo " docker-compose ps" +echo " docker-compose logs -f" \ No newline at end of file