📝 Add missing files: README.md, config.yaml, start.sh
✨ 추가된 파일들: - README.md: 프로젝트 문서 및 사용법 가이드 - config/config.yaml: Headscale 완전 설정 파일 - start.sh: 원클릭 자동 설치 스크립트 🔧 설정 세부사항: - SQLite 데이터베이스 기본 설정 - Magic DNS 활성화 - Korean 시간대 설정 - 보안 설정 포함 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
parent
9e7d0cd1bb
commit
e0c4a9de3d
105
README.md
Normal file
105
README.md
Normal file
@ -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
|
||||||
|
```
|
||||||
69
config/config.yaml
Normal file
69
config/config.yaml
Normal file
@ -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
|
||||||
64
start.sh
Executable file
64
start.sh
Executable file
@ -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"
|
||||||
Loading…
Reference in New Issue
Block a user