#!/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 # 仅root用户执行 if [ "$(id -u)" -eq 0 ]; then echo "当前用户是 root" else echo -e "${RED}[Err]${NC}当前用户不是 root" 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 [[ -z $DEPLOY_DOMAIN ]]; then echo echo "[${RED}Err${NC}] DEPLOY_DOMAIN is not set" echo exit 1 fi 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 TAG=${TAG:-"latest"} echo -e "[INFO] Using TAG: ${YELLOW}${TAG}${NC}" caddy_download_url="" hysteria_download_url="" if [ "$DOWNLOAD_SRC" = "gitee" ]; then echo -e "[INFO] Download from ${YELLOW}Gitee${NC} ..." caddy_download_url="https://gitee.com/xxoommd/magic/releases/download/${TAG}/caddy-linux-amd64" hysteria_download_url="https://gitee.com/xxoommd/magic/releases/download/${TAG}/hysteria-linux-amd64-avx" else echo -e "[INFO] Download from ${YELLOW}Github${NC} ..." caddy_download_url="https://github.com/xxoommd/magic/releases/download/${TAG}/caddy-linux-amd64" hysteria_download_url="https://github.com/xxoommd/magic/releases/download/${TAG}/hysteria-linux-amd64-avx" 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 $hysteria_download_url && \ curl -L -o /usr/local/bin/caddy $caddy_download_url && \ 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 <