#!/bin/bash # ============================================================ # ZoneAlarm 目标机安装脚本 (在解压出的 zone_alarm 目录内执行) # 用法: sudo bash install.sh # 环境变量: # ZA_INSTALL_DIR 安装目录, 默认 /opt/zone_alarm # ZA_PORT Web端口, 默认 80 (生产环境) # ZA_SKIP_SERVICE 设为1则不注册systemd服务(仅测试用) # 说明: # - 已存在的 config.json / data/ 会保留, 不会被覆盖 # - 绑定80端口需要root权限(systemd以root运行即可) # ============================================================ set -e INSTALL_DIR=${ZA_INSTALL_DIR:-/opt/zone_alarm} PORT=${ZA_PORT:-80} SERVICE=zone_alarm if [ "$(id -u)" != "0" ]; then echo "[ERROR] 请使用 root 运行本脚本"; exit 1 fi if [ ! -f ./zone_alarm ] || [ ! -d ./lib ]; then echo "[ERROR] 请在解压后的 zone_alarm 包目录内执行"; exit 1 fi echo "== 停止旧服务 ==" systemctl stop $SERVICE 2>/dev/null || true echo "== 安装文件到 $INSTALL_DIR ==" mkdir -p "$INSTALL_DIR" cp -r lib web models "$INSTALL_DIR/" cp logo.png logo.ico zone_alarm run.sh "$INSTALL_DIR/" chmod +x "$INSTALL_DIR/zone_alarm" "$INSTALL_DIR/run.sh" echo "== 配置文件 ==" mkdir -p "$INSTALL_DIR/config" "$INSTALL_DIR/data/screenshots" if [ -f "$INSTALL_DIR/config/config.json" ]; then echo " 检测到已有配置, 保留原配置(含账号/围栏/绑定)" else cp config/config.example.json "$INSTALL_DIR/config/config.json" echo " 已写入默认配置" fi # 生产环境端口 sed -i "s/\"web_port\"[[:space:]]*:[[:space:]]*[0-9]*/\"web_port\": $PORT/" \ "$INSTALL_DIR/config/config.json" echo "== 注册 systemd 服务 (开机自启) ==" sed "s|__INSTALL_DIR__|$INSTALL_DIR|g" zone_alarm.service > /etc/systemd/system/$SERVICE.service systemctl daemon-reload systemctl enable $SERVICE >/dev/null 2>&1 if [ "$ZA_SKIP_SERVICE" != "1" ]; then systemctl restart $SERVICE sleep 2 systemctl is-active $SERVICE >/dev/null && STATUS="运行中" || STATUS="启动失败(journalctl -u $SERVICE 查看)" else STATUS="跳过(ZA_SKIP_SERVICE=1)" fi IP=$(hostname -I 2>/dev/null | awk '{print $1}') echo "" echo "=========================================" echo " 安装完成: $INSTALL_DIR" echo " 服务状态: $STATUS" echo " 访问地址: http://${IP:-<本机IP>}:$PORT" echo " 默认账号: admin / admin (请尽快修改)" echo " 日志查看: journalctl -u $SERVICE -f" echo "========================================="