#!/bin/bash set -euo pipefail # SafeLine WAF 完整版安装脚本 # 使用官方二进制,包含完整 FVM WAF 功能 INSTALL_DIR="${1:-/data/safeline}" SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" RED='\033[0;31m' GREEN='\033[0;32m' NC='\033[0m' info() { echo -e "${GREEN}[INFO]${NC} $*"; } error() { echo -e "${RED}[ERROR]${NC} $*"; exit 1; } if [ "$(id -u)" -ne 0 ]; then error "需要 root 权限" fi if ! command -v docker &>/dev/null; then error "Docker 未安装" fi info "安装到: $INSTALL_DIR" # 创建目录 mkdir -p "$INSTALL_DIR"/{resources/{mgt,postgres/data,nginx,detector,chaos,cache,sock,luigi},logs/{nginx,detector},bin,lib} # 复制二进制 (使用官方完整版) cp "$SCRIPT_DIR/webserver_full" "$INSTALL_DIR/bin/webserver" cp "$SCRIPT_DIR/tcontrollerd_full" "$INSTALL_DIR/bin/tcontrollerd" cp "$SCRIPT_DIR/nginx" "$INSTALL_DIR/bin/nginx" chmod +x "$INSTALL_DIR/bin/webserver" "$INSTALL_DIR/bin/tcontrollerd" "$INSTALL_DIR/bin/nginx" # 复制 musl libc cp "$SCRIPT_DIR/ld-musl-x86_64.so.1" "$INSTALL_DIR/lib/" # 复制 FVM 动态库 if [ -f "$SCRIPT_DIR/libfvm.so" ]; then cp "$SCRIPT_DIR/libfvm.so" "$INSTALL_DIR/lib/" info "FVM 库已复制" fi info "二进制已复制 (完整版 - 包含 FVM WAF 功能)" # 生成配置 if [ ! -f "$INSTALL_DIR/.env" ]; then POSTGRES_PASSWORD=$(tr -dc 'a-zA-Z0-9' < /dev/urandom | head -c 20) cat > "$INSTALL_DIR/.env" << EOF SAFELINE_DIR=$INSTALL_DIR POSTGRES_PASSWORD=$POSTGRES_PASSWORD MGT_PORT=9443 RELEASE= CHANNEL= REGION= IMAGE_PREFIX=chaitin IMAGE_TAG=9.3.9 SUBNET_PREFIX=192.168.90 ARCH_SUFFIX= EOF info ".env 已生成" fi # 复制 compose if [ -f "$SCRIPT_DIR/compose.yaml" ]; then cp "$SCRIPT_DIR/compose.yaml" "$INSTALL_DIR/docker-compose.yaml" info "compose.yaml 已复制" fi info "安装完成!" info "" info "启动方式:" info " cd $INSTALL_DIR" info " docker compose up -d" info "" info "管理面板: https://$(hostname -I | awk '{print $1}'):9443/" info "获取密码: docker exec safeline-mgt /app/mgt-cli reset-admin --once"