Create frps

This commit is contained in:
2025-11-22 21:11:54 +08:00
committed by GitHub
parent d58934eee0
commit f1241749fc

152
frps Normal file
View File

@@ -0,0 +1,152 @@
#!/bin/bash
# frps 服务端一键部署脚本
# 功能:自动配置 frps.toml 并启动 Docker 容器
set -eo pipefail
# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[0;33m'
NC='\033[0m'
# 检查 Docker 服务
check_docker() {
if ! command -v docker &>/dev/null; then
echo -e "${RED}错误Docker 未安装,请先安装 Docker${NC}"
exit 1
fi
if ! docker info &>/dev/null; then
echo -e "${RED}错误Docker 服务未运行,请先启动 Docker 服务${NC}"
exit 1
fi
echo -e "${GREEN}✓ Docker 服务可用${NC}"
}
# 准备配置文件和目录
prepare_config() {
local config_dir="/data/frps"
local config_file="$config_dir/frps.toml"
echo -e "${YELLOW}正在准备 frps 配置文件...${NC}"
mkdir -p "$config_dir"
cat > "$config_file" <<'EOF'
# ======================
# frp 服务端安全强化配置
# ======================
# 网络监听
bindAddr = "0.0.0.0"
bindPort = 7000
#kcpBindPort = 7000 # 保持KCP支持按需取消注释
quicBindPort = 7000 # 保持QUIC支持
# 端口设置
vhostHTTPPort = 8080 # HTTP代理端口
vhostHTTPSPort = 8443 # HTTPS代理端口
# 传输优化
transport.maxPoolCount = 2000
transport.tcpMux = true
transport.tcpMuxKeepaliveInterval = 60
transport.tcpKeepalive = 7200
transport.tls.force = false # 生产环境建议改为true
# 控制面板
webServer.addr = "0.0.0.0"
webServer.port = 7500
webServer.user = "admin"
webServer.password = "FrpS3cure@2024"
webServer.pprofEnable = false
# 日志配置
log.to = "/var/log/frps.log"
log.level = "info"
log.maxDays = 3
log.disablePrintColor = false
# 认证配置
auth.method = "token"
auth.token = "XH7#k9q$LzP2*4vN!R5tY8wC"
# 端口控制
allowPorts = [
{ start = 10000, end = 60000 }
]
# 高级参数
maxPortsPerClient = 8
udpPacketSize = 1500
natholeAnalysisDataReserveHours = 168
EOF
echo -e "${GREEN}✓ 配置文件已生成: $config_file${NC}"
chmod 600 "$config_file" # 设置配置文件权限
}
# 部署 Docker 容器
deploy_container() {
local container_name="frps"
local config_dir="/data/frps"
# 停止并移除旧容器(如果存在)
if docker ps -a --format '{{.Names}}' | grep -q "^$container_name$"; then
echo -e "${YELLOW}发现已存在的容器,正在清理...${NC}"
docker stop "$container_name" >/dev/null
docker rm "$container_name" >/dev/null
fi
# 启动新容器
echo -e "${YELLOW}正在启动 frps 容器...${NC}"
docker run -d \
--name "$container_name" \
--restart unless-stopped \
--network host \
-v "$config_dir/frps.toml:/etc/frp/frps.toml" \
-v "$config_dir/logs:/var/log" \
snowdreamtech/frps
echo -e "${GREEN}✓ frps 容器已启动${NC}"
}
# 检查容器状态
check_status() {
local container_name="frps"
local max_retries=5
local retry_interval=2
echo -e "\n${YELLOW}正在检查容器状态...${NC}"
for ((i=1; i<=max_retries; i++)); do
if docker ps --filter "name=$container_name" --filter "status=running" | grep -q "$container_name"; then
echo -e "${GREEN}✓ frps 运行正常${NC}"
# 获取容器使用的端口
echo -e "\n======================"
echo -e "${YELLOW}服务已启动,使用以下信息访问:${NC}"
echo -e "控制面板: http://<服务器IP>:7500"
echo -e "用户名: admin"
echo -e "密码: FrpS3cure@2024"
echo -e "\n客户端连接令牌: XH7#k9q$LzP2*4vN!R5tY8wC"
echo -e "======================"
exit 0
fi
sleep "$retry_interval"
done
echo -e "${RED}错误:容器启动失败${NC}"
docker logs "$container_name"
exit 1
}
# 主函数
main() {
echo -e "\n${GREEN}===== frps 服务端部署脚本 =====${NC}"
check_docker
prepare_config
deploy_container
check_status
}
main