🚀 Pharmq.kr Live Production Setup Complete
✅ Headscale + farmq-admin 라이브 서버 구축 완료 - Docker Headscale 서버 설정 (포트 8070) - farmq-admin 웹 GUI 연동 완료 (포트 5001) - head.pharmq.kr 도메인 연결 - 1년 유효 재사용 가능 preauth key 생성 - 클라이언트 자동 등록 스크립트 완성 🔧 farmq-admin 설정: - Headscale CLI API 래퍼 구현 - 실시간 노드/사용자 관리 GUI - 데이터베이스 경로 수정 (/srv/headscale-tailscale-replacement/data/) - 안전한 JSON 파싱 및 에러 처리 개선 📋 클라이언트 등록: - register-client-pharmq-live.sh 스크립트 - head.pharmq.kr 도메인 사용 - 자동 Tailscale 설치 및 등록 - 테스트 완료 (100.64.0.1 IP 할당됨) 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
163
register-client-pharmq-live.sh
Executable file
163
register-client-pharmq-live.sh
Executable file
@@ -0,0 +1,163 @@
|
||||
#!/bin/bash
|
||||
|
||||
# 팜큐(FARMQ) Headscale 클라이언트 등록 스크립트 - LIVE 서버용
|
||||
# 사용법: ./register-client-pharmq-live.sh
|
||||
# 대상 서버: head.pharmq.kr (Live Production)
|
||||
|
||||
set -e
|
||||
|
||||
# 설정
|
||||
HEADSCALE_SERVER="http://head.pharmq.kr"
|
||||
PREAUTH_KEY="b46923995afeaec90e588168f2e1bf99801775e8657ce003"
|
||||
|
||||
# 색상 출력 함수
|
||||
print_status() {
|
||||
echo -e "\n🔧 $1"
|
||||
}
|
||||
|
||||
print_success() {
|
||||
echo -e "\n✅ $1"
|
||||
}
|
||||
|
||||
print_error() {
|
||||
echo -e "\n❌ $1"
|
||||
}
|
||||
|
||||
print_info() {
|
||||
echo -e "\n📋 $1"
|
||||
}
|
||||
|
||||
# 운영체제 감지
|
||||
detect_os() {
|
||||
if [[ "$OSTYPE" == "linux-gnu"* ]]; then
|
||||
if command -v apt &> /dev/null; then
|
||||
OS="ubuntu"
|
||||
elif command -v yum &> /dev/null; then
|
||||
OS="centos"
|
||||
else
|
||||
OS="linux"
|
||||
fi
|
||||
elif [[ "$OSTYPE" == "darwin"* ]]; then
|
||||
OS="macos"
|
||||
elif [[ "$OSTYPE" == "msys" ]] || [[ "$OSTYPE" == "cygwin" ]]; then
|
||||
OS="windows"
|
||||
else
|
||||
OS="unknown"
|
||||
fi
|
||||
echo $OS
|
||||
}
|
||||
|
||||
# Tailscale 설치 확인 및 설치
|
||||
install_tailscale() {
|
||||
OS=$(detect_os)
|
||||
|
||||
if command -v tailscale &> /dev/null; then
|
||||
print_info "Tailscale이 이미 설치되어 있습니다."
|
||||
return 0
|
||||
fi
|
||||
|
||||
print_status "Tailscale 설치 중..."
|
||||
|
||||
case $OS in
|
||||
"ubuntu")
|
||||
curl -fsSL https://tailscale.com/install.sh | sh
|
||||
;;
|
||||
"centos")
|
||||
curl -fsSL https://tailscale.com/install.sh | sh
|
||||
;;
|
||||
"macos")
|
||||
echo "macOS용 Tailscale을 다운로드합니다."
|
||||
echo "다음 URL에서 수동으로 설치하세요: https://tailscale.com/download/mac"
|
||||
exit 1
|
||||
;;
|
||||
"windows")
|
||||
echo "Windows용 Tailscale을 다운로드합니다."
|
||||
echo "다음 URL에서 수동으로 설치하세요: https://tailscale.com/download/windows"
|
||||
exit 1
|
||||
;;
|
||||
*)
|
||||
print_error "지원되지 않는 운영체제입니다: $OSTYPE"
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
# 기존 Tailscale 연결 해제
|
||||
disconnect_existing() {
|
||||
if tailscale status --json &> /dev/null; then
|
||||
local current_status=$(tailscale status --json 2>/dev/null || echo "{}")
|
||||
if echo "$current_status" | grep -q '"BackendState":"Running"'; then
|
||||
print_status "기존 Tailscale 연결을 해제합니다..."
|
||||
sudo tailscale logout || true
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
# Headscale에 등록
|
||||
register_to_headscale() {
|
||||
print_status "팜큐 Headscale 서버에 등록 중..."
|
||||
print_info "서버: $HEADSCALE_SERVER"
|
||||
|
||||
# Tailscale을 Headscale 서버로 설정하고 등록
|
||||
sudo tailscale up \
|
||||
--login-server="$HEADSCALE_SERVER" \
|
||||
--authkey="$PREAUTH_KEY" \
|
||||
--accept-routes \
|
||||
--accept-dns=false
|
||||
}
|
||||
|
||||
# 연결 상태 확인
|
||||
check_connection() {
|
||||
print_status "연결 상태 확인 중..."
|
||||
|
||||
# 잠시 대기
|
||||
sleep 3
|
||||
|
||||
# 상태 확인
|
||||
if tailscale status &> /dev/null; then
|
||||
local tailscale_ip=$(tailscale ip -4 2>/dev/null || echo "")
|
||||
if [[ -n "$tailscale_ip" ]]; then
|
||||
print_success "성공적으로 연결되었습니다!"
|
||||
print_info "할당된 IP: $tailscale_ip"
|
||||
|
||||
print_info "네트워크 상태:"
|
||||
tailscale status
|
||||
|
||||
return 0
|
||||
fi
|
||||
fi
|
||||
|
||||
print_error "연결에 실패했습니다."
|
||||
print_info "수동으로 상태를 확인해보세요: tailscale status"
|
||||
return 1
|
||||
}
|
||||
|
||||
# 메인 함수
|
||||
main() {
|
||||
echo "=========================================="
|
||||
echo " 🏥 팜큐(FARMQ) Headscale 클라이언트 등록"
|
||||
echo "=========================================="
|
||||
|
||||
# 루트 권한 확인
|
||||
if [[ $EUID -ne 0 ]] && ! sudo -n true 2>/dev/null; then
|
||||
print_error "이 스크립트는 sudo 권한이 필요합니다."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 단계별 실행
|
||||
install_tailscale
|
||||
disconnect_existing
|
||||
register_to_headscale
|
||||
|
||||
if check_connection; then
|
||||
print_success "🎉 등록 완료!"
|
||||
print_info "이제 팜큐 네트워크에 연결되었습니다."
|
||||
print_info "문제가 있으면 관리자에게 문의하세요."
|
||||
else
|
||||
print_error "등록 과정에서 문제가 발생했습니다."
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
# 스크립트 실행
|
||||
main "$@"
|
||||
Reference in New Issue
Block a user