feat: Headscale 자동 등록 시 약국 및 계정 자동 생성
주요 변경사항: - 약국 정보 수집 함수 추가 (collect_pharmacy_info) - VPN IP 자동 확인 함수 추가 (get_assigned_vpn_ip) - farmq-admin API 호출 함수 추가 (create_pharmacy_via_api) - gateway API 호출 함수 추가 (create_gateway_user_via_api) - 로그인 정보 출력 함수 추가 (display_login_credentials) 플로우: 1. Headscale VPN 등록 2. VPN IP 자동 확인 (최대 10초 대기) 3. 약국 정보 수집 (약국명 필수, 나머지 선택) 4. farmq.db에 약국 생성 (https://demo.pharmq.kr/api/pharmacy) 5. gateway.db에 admin 계정 생성 (https://gateway.pharmq.kr/api/auth/register) 6. 로그인 정보 출력 (아이디: p{pharmacy_code}, 비밀번호: 1234) API 엔드포인트: - farmq-admin: https://demo.pharmq.kr/api/pharmacy - gateway: https://gateway.pharmq.kr/api/auth/register 백업 파일: headscale-quick-install.sh.backup 🤖 Generated with Claude Code Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
parent
60be9daff4
commit
9d4142ddb6
@ -486,28 +486,185 @@ show_final_info() {
|
||||
print_header "설치 완료 - 팜큐 네트워크를 사용할 수 있습니다!"
|
||||
}
|
||||
|
||||
# ================================
|
||||
# 약국 자동 등록 함수들
|
||||
# ================================
|
||||
|
||||
# 약국 정보 수집
|
||||
collect_pharmacy_info() {
|
||||
echo -e "${CYAN}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}"
|
||||
echo -e "${WHITE}약국 정보 입력${NC}"
|
||||
echo -e "${CYAN}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}"
|
||||
|
||||
# 약국명 입력 (필수)
|
||||
while [ -z "$PHARMACY_NAME" ]; do
|
||||
read -p "약국명을 입력하세요: " PHARMACY_NAME
|
||||
done
|
||||
|
||||
# 요양기관부호 입력 (선택)
|
||||
read -p "요양기관부호 (선택, Enter로 건너뛰기): " HIRA_CODE
|
||||
|
||||
# 약국 주소 입력 (선택)
|
||||
read -p "약국 주소 (선택): " PHARMACY_ADDRESS
|
||||
|
||||
# 약국장 이름 입력 (선택)
|
||||
read -p "약국장 이름 (선택): " OWNER_NAME
|
||||
|
||||
# 연락처 입력 (선택)
|
||||
read -p "약국 연락처 (선택): " PHARMACY_PHONE
|
||||
|
||||
echo -e "${GREEN}✓ 약국 정보 입력 완료${NC}"
|
||||
}
|
||||
|
||||
# VPN IP 확인
|
||||
get_assigned_vpn_ip() {
|
||||
echo -e "${BLUE}VPN IP 확인 중...${NC}"
|
||||
|
||||
# tailscale status로 IP 추출 (최대 10초 대기)
|
||||
for i in {1..10}; do
|
||||
VPN_IP=$(tailscale status --json 2>/dev/null | grep -oP '"TailscaleIPs":\["\K[^"]+' | head -1)
|
||||
|
||||
if [ -n "$VPN_IP" ]; then
|
||||
echo -e "${GREEN}✓ VPN IP: $VPN_IP${NC}"
|
||||
return 0
|
||||
fi
|
||||
|
||||
echo -e "${YELLOW}⏳ VPN IP 할당 대기 중... ($i/10)${NC}"
|
||||
sleep 1
|
||||
done
|
||||
|
||||
echo -e "${RED}✗ VPN IP를 가져올 수 없습니다${NC}"
|
||||
return 1
|
||||
}
|
||||
|
||||
# farmq-admin API 호출하여 약국 생성
|
||||
create_pharmacy_via_api() {
|
||||
echo -e "${BLUE}약국 등록 중 (farmq.db)...${NC}"
|
||||
|
||||
# JSON 데이터 구성
|
||||
JSON_DATA=$(cat <<EOF
|
||||
{
|
||||
"pharmacy_name": "$PHARMACY_NAME",
|
||||
"vpn_ip": "$VPN_IP",
|
||||
"hira_code": "$HIRA_CODE",
|
||||
"address": "$PHARMACY_ADDRESS",
|
||||
"owner_name": "$OWNER_NAME",
|
||||
"phone": "$PHARMACY_PHONE",
|
||||
"api_port": 8082
|
||||
}
|
||||
EOF
|
||||
)
|
||||
|
||||
# API 호출 (외부 도메인)
|
||||
RESPONSE=$(curl -s -X POST https://demo.pharmq.kr/api/pharmacy \
|
||||
-H "Content-Type: application/json" \
|
||||
-d "$JSON_DATA")
|
||||
|
||||
# pharmacy_code 추출
|
||||
PHARMACY_CODE=$(echo "$RESPONSE" | grep -oP '"pharmacy_code":"[^"]*"' | cut -d'"' -f4)
|
||||
|
||||
if [ -z "$PHARMACY_CODE" ]; then
|
||||
echo -e "${RED}✗ 약국 생성 실패${NC}"
|
||||
echo "$RESPONSE"
|
||||
return 1
|
||||
fi
|
||||
|
||||
echo -e "${GREEN}✓ 약국 생성 완료: $PHARMACY_CODE${NC}"
|
||||
return 0
|
||||
}
|
||||
|
||||
# gateway API 호출하여 관리자 계정 생성
|
||||
create_gateway_user_via_api() {
|
||||
echo -e "${BLUE}관리자 계정 생성 중 (gateway.db)...${NC}"
|
||||
|
||||
# username: pharmacy_code 소문자 (P0005 → p0005)
|
||||
USERNAME=$(echo "$PHARMACY_CODE" | tr '[:upper:]' '[:lower:]')
|
||||
PASSWORD="1234" # 기본 비밀번호
|
||||
EMAIL="${USERNAME}@pharmq.internal"
|
||||
|
||||
# JSON 데이터 구성
|
||||
JSON_DATA=$(cat <<EOF
|
||||
{
|
||||
"username": "$USERNAME",
|
||||
"email": "$EMAIL",
|
||||
"password": "$PASSWORD",
|
||||
"name": "${PHARMACY_NAME} 관리자",
|
||||
"phone": "$PHARMACY_PHONE",
|
||||
"primary_pharmacy_code": "$PHARMACY_CODE",
|
||||
"role": "admin"
|
||||
}
|
||||
EOF
|
||||
)
|
||||
|
||||
# API 호출 (외부 도메인)
|
||||
RESPONSE=$(curl -s -X POST https://gateway.pharmq.kr/api/auth/register \
|
||||
-H "Content-Type: application/json" \
|
||||
-d "$JSON_DATA")
|
||||
|
||||
# 성공 여부 확인
|
||||
if echo "$RESPONSE" | grep -q '"success":true'; then
|
||||
echo -e "${GREEN}✓ 관리자 계정 생성 완료${NC}"
|
||||
return 0
|
||||
else
|
||||
echo -e "${RED}✗ 관리자 계정 생성 실패${NC}"
|
||||
echo "$RESPONSE"
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
# 로그인 정보 출력
|
||||
display_login_credentials() {
|
||||
echo -e "\n${CYAN}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}"
|
||||
echo -e "${WHITE}🎉 설치 및 등록 완료!${NC}"
|
||||
echo -e "${CYAN}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}"
|
||||
|
||||
echo -e "\n${GREEN}약국 정보:${NC}"
|
||||
echo -e " 약국 코드: ${WHITE}$PHARMACY_CODE${NC}"
|
||||
echo -e " 약국명: ${WHITE}$PHARMACY_NAME${NC}"
|
||||
echo -e " VPN IP: ${WHITE}$VPN_IP${NC}"
|
||||
|
||||
echo -e "\n${GREEN}프론트엔드 로그인 정보:${NC}"
|
||||
echo -e " URL: ${WHITE}https://pharmq.kr${NC}"
|
||||
echo -e " 아이디: ${WHITE}$(echo "$PHARMACY_CODE" | tr '[:upper:]' '[:lower:]')${NC}"
|
||||
echo -e " 비밀번호: ${WHITE}1234${NC}"
|
||||
echo -e " ${YELLOW}⚠ 최초 로그인 후 비밀번호를 변경하세요!${NC}"
|
||||
|
||||
echo -e "\n${CYAN}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}"
|
||||
}
|
||||
|
||||
# ================================
|
||||
# 메인 함수
|
||||
# ================================
|
||||
main() {
|
||||
print_header "팜큐(FARMQ) Headscale 원클릭 설치"
|
||||
|
||||
print_header "팜큐(FARMQ) Headscale 원클릭 설치 및 약국 등록"
|
||||
|
||||
# 사전 체크
|
||||
detect_os
|
||||
check_requirements
|
||||
|
||||
|
||||
# 설치 과정
|
||||
install_tailscale
|
||||
start_tailscale
|
||||
register_headscale
|
||||
|
||||
|
||||
# VPN IP 확인 (Headscale 등록 직후)
|
||||
sleep 3 # Headscale에서 IP 할당 대기
|
||||
get_assigned_vpn_ip || exit 1
|
||||
|
||||
# 약국 정보 수집
|
||||
collect_pharmacy_info
|
||||
|
||||
# 약국 및 계정 생성
|
||||
create_pharmacy_via_api || exit 1
|
||||
create_gateway_user_via_api || exit 1
|
||||
|
||||
# 사후 설정
|
||||
configure_firewall
|
||||
verify_connection
|
||||
|
||||
|
||||
# 정리 및 완료
|
||||
cleanup
|
||||
show_final_info
|
||||
display_login_credentials
|
||||
}
|
||||
|
||||
# ================================
|
||||
|
||||
Loading…
Reference in New Issue
Block a user