#!/bin/bash # ============================================================ # 闲言APP — 文件传输服务端部署脚本 # 创建时间: 2026-05-10 # 更新时间: 2026-05-10 # 作用: 安装依赖、配置Nginx、启动信令服务 # 上次更新: 初始版本 # ============================================================ set -e SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" cd "$SCRIPT_DIR" RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' NC='\033[0m' info() { echo -e "${GREEN}[INFO]${NC} $1"; } warn() { echo -e "${YELLOW}[WARN]${NC} $1"; } error() { echo -e "${RED}[ERROR]${NC} $1"; exit 1; } check_root() { if [ "$EUID" -ne 0 ]; then error "请使用root权限运行此脚本: sudo bash install.sh" fi } check_php() { if ! command -v php &> /dev/null; then error "PHP未安装,请先安装PHP 7.4+" fi PHP_VERSION=$(php -r "echo PHP_MAJOR_VERSION.'.'.PHP_MINOR_VERSION;") info "PHP版本: $PHP_VERSION" } check_composer() { if ! command -v composer &> /dev/null; then warn "Composer未安装,正在安装..." curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer fi info "Composer版本: $(composer --version 2>/dev/null | head -1)" } install_dependencies() { info "安装PHP依赖..." if [ -f "composer.json" ]; then composer install --no-dev --optimize-autoloader info "PHP依赖安装完成" else warn "composer.json不存在,跳过依赖安装" fi } create_dirs() { info "创建必要目录..." mkdir -p "$SCRIPT_DIR/logs" mkdir -p "$SCRIPT_DIR/data" chmod 755 "$SCRIPT_DIR/logs" chmod 755 "$SCRIPT_DIR/data" info "目录创建完成" } configure_supervisord() { info "配置Supervisord进程管理..." SUPERVISOR_CONF="/etc/supervisor/conf.d/xianyan-signaling.conf" if command -v supervisorctl &> /dev/null; then mkdir -p /etc/supervisor/conf.d cat > "$SUPERVISOR_CONF" < "$SYSTEMD_CONF" < /dev/null; then warn "Nginx未安装,跳过配置" return fi read -p "请输入域名 (默认: tools.wktyl.com): " DOMAIN DOMAIN=${DOMAIN:-tools.wktyl.com} cat > "$NGINX_CONF" < /dev/null; then supervisorctl start xianyan-signaling elif command -v systemctl &> /dev/null; then systemctl start xianyan-signaling else nohup php "$SCRIPT_DIR/signaling_server.php" > "$SCRIPT_DIR/logs/nohup.log" 2>&1 & echo $! > "$SCRIPT_DIR/signaling.pid" info "信令服务已启动 (PID: $(cat "$SCRIPT_DIR/signaling.pid"))" fi } verify_installation() { info "验证安装..." sleep 2 if curl -s http://127.0.0.1:9443/health | grep -q "ok"; then info "✅ 信令服务运行正常" else warn "⚠️ 信令服务可能未正常启动,请检查日志" fi if curl -s https://${DOMAIN:-tools.wktyl.com}/api/file_transfer/health | grep -q "ok"; then info "✅ REST API运行正常" else warn "⚠️ REST API可能未正常响应" fi } print_summary() { echo "" echo "╔══════════════════════════════════════════════════╗" echo "║ 闲言APP 文件传输服务端部署完成 ║" echo "╠══════════════════════════════════════════════════╣" echo "║ 信令服务: ws://127.0.0.1:9443 ║" echo "║ 健康检查: http://127.0.0.1:9443/health ║" echo "║ REST API: https://${DOMAIN:-tools.wktyl.com}/api/file_transfer/ ║" echo "║ 日志目录: ${SCRIPT_DIR}/logs/ ║" echo "║ 数据目录: ${SCRIPT_DIR}/data/ ║" echo "╚══════════════════════════════════════════════════╝" echo "" info "常用命令:" echo " 启动: supervisorctl start xianyan-signaling" echo " 停止: supervisorctl stop xianyan-signaling" echo " 重启: supervisorctl restart xianyan-signaling" echo " 日志: tail -f ${SCRIPT_DIR}/logs/signaling.log" } main() { info "开始部署闲言APP文件传输服务端..." check_root check_php check_composer install_dependencies create_dirs configure_supervisord configure_nginx start_signaling verify_installation print_summary } main "$@"