#!/bin/bash GREEN='\033[0;32m' RED='\033[0;31m' BLUE='\033[0;34m' YELLOW='\033[0;33m' UNDERLINE='\033[4m' # 下划线 NC='\033[0m' # No Color if [[ -z $DEPLOY_DOMAIN ]]; then echo echo "[${RED}Err${NC}] DEPLOY_DOMAIN is not set" echo exit 1 fi function is_valid_domain() { local str="$1" # 使用正则表达式匹配合法域名格式 if [[ $str =~ ^[a-zA-Z0-9]([a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(\.[a-zA-Z]{2,})+$ ]]; then return 0 # 合法返回0 else return 1 # 不合法返回1 fi } # 验证域名格式是否合法 echo -e "\n[INFO] Validate DOMAN: ${BLUE}${DEPLOY_DOMAIN}${NC} ..." if is_valid_domain "$DEPLOY_DOMAIN"; then echo -e "[INFO] ${BLUE}${UNDERLINE}$DEPLOY_DOMAIN${NC} is a valid domain.\n" else echo -e "[${RED}ERR${NC}] ${BLUE}${UNDERLINE}$DEPLOY_DOMAIN${NC} is not a valid domain. Abort." exit 1 fi # 设置工作目录 WORKING_DIR="/root/.local/magic" if [ ! -d "${WORKING_DIR}" ]; then mkdir -p "${WORKING_DIR}" fi CADDY_STORAGE="${WORKING_DIR}/caddy" CERT_DIR="$CADDY_STORAGE/certificates/acme-v02.api.letsencrypt.org-directory/$DEPLOY_DOMAIN" CRT_FILE="$CERT_DIR/$DEPLOY_DOMAIN.crt" KEY_FILE="$CERT_DIR/$DEPLOY_DOMAIN.key" HY_CONFIG_FILE="${WORKING_DIR}/hy-config.yaml" CADDY_CONFIG_FILE="${WORKING_DIR}/Caddyfile" echo -e "[INFO] Download ${GREEN}hysteria${NC} and ${GREEN}caddy${NC} ..." curl -L -o /usr/local/bin/hysteria https://github.com/xxoommd/ultimate_collection/releases/download/latest/hysteria && curl -L -o /usr/local/bin/caddy https://github.com/xxoommd/ultimate_collection/releases/download/latest/caddy && chmod +x /usr/local/bin/hysteria /usr/local/bin/caddy echo -e "[INFO] Download Done\n" # Generating all config files... echo -e "[INFO] Generate ${GREEN}${CADDY_CONFIG_FILE}${NC} ..." cat >${CADDY_CONFIG_FILE} <${HY_CONFIG_FILE} </etc/systemd/system/hysteria.service </etc/systemd/system/caddy.service <