install.sh 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. #!/bin/bash
  2. # ============================================================
  3. # ZoneAlarm 目标机安装脚本 (在解压出的 zone_alarm 目录内执行)
  4. # 用法: sudo bash install.sh
  5. # 环境变量:
  6. # ZA_INSTALL_DIR 安装目录, 默认 /opt/zone_alarm
  7. # ZA_PORT Web端口, 默认 80 (生产环境)
  8. # ZA_SKIP_SERVICE 设为1则不注册systemd服务(仅测试用)
  9. # 说明:
  10. # - 已存在的 config.json / data/ 会保留, 不会被覆盖
  11. # - 绑定80端口需要root权限(systemd以root运行即可)
  12. # ============================================================
  13. set -e
  14. INSTALL_DIR=${ZA_INSTALL_DIR:-/opt/zone_alarm}
  15. PORT=${ZA_PORT:-80}
  16. SERVICE=zone_alarm
  17. if [ "$(id -u)" != "0" ]; then
  18. echo "[ERROR] 请使用 root 运行本脚本"; exit 1
  19. fi
  20. if [ ! -f ./zone_alarm ] || [ ! -d ./lib ]; then
  21. echo "[ERROR] 请在解压后的 zone_alarm 包目录内执行"; exit 1
  22. fi
  23. echo "== 停止旧服务 =="
  24. systemctl stop $SERVICE 2>/dev/null || true
  25. echo "== 安装文件到 $INSTALL_DIR =="
  26. mkdir -p "$INSTALL_DIR"
  27. cp -r lib web models "$INSTALL_DIR/"
  28. cp logo.png logo.ico zone_alarm run.sh "$INSTALL_DIR/"
  29. chmod +x "$INSTALL_DIR/zone_alarm" "$INSTALL_DIR/run.sh"
  30. echo "== 配置文件 =="
  31. mkdir -p "$INSTALL_DIR/config" "$INSTALL_DIR/data/screenshots"
  32. if [ -f "$INSTALL_DIR/config/config.json" ]; then
  33. echo " 检测到已有配置, 保留原配置(含账号/围栏/绑定)"
  34. else
  35. cp config/config.example.json "$INSTALL_DIR/config/config.json"
  36. echo " 已写入默认配置"
  37. fi
  38. # 生产环境端口
  39. sed -i "s/\"web_port\"[[:space:]]*:[[:space:]]*[0-9]*/\"web_port\": $PORT/" \
  40. "$INSTALL_DIR/config/config.json"
  41. echo "== 注册 systemd 服务 (开机自启) =="
  42. sed "s|__INSTALL_DIR__|$INSTALL_DIR|g" zone_alarm.service > /etc/systemd/system/$SERVICE.service
  43. systemctl daemon-reload
  44. systemctl enable $SERVICE >/dev/null 2>&1
  45. if [ "$ZA_SKIP_SERVICE" != "1" ]; then
  46. systemctl restart $SERVICE
  47. sleep 2
  48. systemctl is-active $SERVICE >/dev/null && STATUS="运行中" || STATUS="启动失败(journalctl -u $SERVICE 查看)"
  49. else
  50. STATUS="跳过(ZA_SKIP_SERVICE=1)"
  51. fi
  52. IP=$(hostname -I 2>/dev/null | awk '{print $1}')
  53. echo ""
  54. echo "========================================="
  55. echo " 安装完成: $INSTALL_DIR"
  56. echo " 服务状态: $STATUS"
  57. echo " 访问地址: http://${IP:-<本机IP>}:$PORT"
  58. echo " 默认账号: admin / admin (请尽快修改)"
  59. echo " 日志查看: journalctl -u $SERVICE -f"
  60. echo "========================================="