- 新增日志中心功能 (api/logapi.go + Logs.vue) - 新增GRE协议服务支持 (service/gre/) - 新增流量监控组件 (TrafficChart.vue) - 新增L2TP/IPSec测试用例 - 新增日志轮转服务 (logrotate.go) - 新增部署脚本 (scripts/install.sh, uninstall.sh, service文件) - 更新i18n国际化文件 - 优化后端API和前端路由
129 lines
3.6 KiB
Bash
Executable File
129 lines
3.6 KiB
Bash
Executable File
#!/usr/bin/env bash
|
||
# OPSX VPN 管理平台 —— 安装脚本
|
||
set -euo pipefail
|
||
|
||
APP_NAME="opsx-vpn"
|
||
INSTALL_DIR="/opt/${APP_NAME}"
|
||
CONFIG_DIR="/etc/${APP_NAME}"
|
||
SERVICE_FILE="/etc/systemd/system/${APP_NAME}.service"
|
||
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
|
||
PROJECT_ROOT="$(cd "${SCRIPT_DIR}/.." && pwd)"
|
||
|
||
# 颜色输出
|
||
RED='\033[0;31m'
|
||
GREEN='\033[0;32m'
|
||
YELLOW='\033[0;33m'
|
||
NC='\033[0m'
|
||
|
||
info() { echo -e "${GREEN}[INFO]${NC} $*"; }
|
||
warn() { echo -e "${YELLOW}[WARN]${NC} $*"; }
|
||
error() { echo -e "${RED}[ERROR]${NC} $*" >&2; }
|
||
|
||
# 检查 root 权限
|
||
if [[ $EUID -ne 0 ]]; then
|
||
error "请使用 root 或 sudo 执行此脚本"
|
||
exit 1
|
||
fi
|
||
|
||
# 检查二进制文件
|
||
BINARY=""
|
||
if [[ -f "${PROJECT_ROOT}/opsx-vpn" ]]; then
|
||
BINARY="${PROJECT_ROOT}/opsx-vpn"
|
||
elif [[ -f "${PROJECT_ROOT}/build/opsx-vpn" ]]; then
|
||
BINARY="${PROJECT_ROOT}/build/opsx-vpn"
|
||
else
|
||
error "未找到 opsx-vpn 二进制文件,请先执行编译"
|
||
exit 1
|
||
fi
|
||
|
||
info "安装 OPSX VPN 管理平台..."
|
||
|
||
# 停止已有服务(如果在运行)
|
||
if systemctl is-active --quiet "${APP_NAME}" 2>/dev/null; then
|
||
info "停止现有服务..."
|
||
systemctl stop "${APP_NAME}"
|
||
fi
|
||
|
||
# 创建安装目录
|
||
info "创建安装目录: ${INSTALL_DIR}"
|
||
mkdir -p "${INSTALL_DIR}"
|
||
mkdir -p "${INSTALL_DIR}/data"
|
||
|
||
# 复制二进制文件
|
||
info "复制二进制文件..."
|
||
cp "${BINARY}" "${INSTALL_DIR}/${APP_NAME}"
|
||
chmod 755 "${INSTALL_DIR}/${APP_NAME}"
|
||
|
||
# 复制前端资源(如果有 dist 目录)
|
||
if [[ -d "${PROJECT_ROOT}/frontend/dist" ]]; then
|
||
info "前端资源已内嵌于二进制文件中"
|
||
fi
|
||
|
||
# 创建默认配置文件
|
||
info "创建默认配置: ${CONFIG_DIR}/env"
|
||
mkdir -p "${CONFIG_DIR}"
|
||
if [[ ! -f "${CONFIG_DIR}/env" ]]; then
|
||
cat > "${CONFIG_DIR}/env" << 'EOF'
|
||
# OPSX VPN 管理平台环境配置
|
||
# 监听地址(默认 :8080)
|
||
VPN_LISTEN_ADDR=:8080
|
||
|
||
# 数据目录(默认 /opt/opsx-vpn/data)
|
||
VPN_DATA_DIR=/opt/opsx-vpn/data
|
||
|
||
# 日志保留天数(默认 90 天)
|
||
VPN_LOG_RETENTION_DAYS=90
|
||
|
||
# 实例日志轮转:单文件最大大小(默认 50MB)
|
||
VPN_INSTANCE_LOG_MAX_SIZE=50MB
|
||
|
||
# 实例日志轮转:最大文件数(默认 2)
|
||
VPN_INSTANCE_LOG_MAX_FILES=2
|
||
|
||
# 访问日志轮转:单文件最大大小(默认 20MB)
|
||
VPN_ACCESS_LOG_MAX_SIZE=20MB
|
||
|
||
# 访问日志轮转:最大文件数(默认 3)
|
||
VPN_ACCESS_LOG_MAX_FILES=3
|
||
EOF
|
||
info "已创建默认配置文件"
|
||
else
|
||
warn "配置文件已存在,跳过创建: ${CONFIG_DIR}/env"
|
||
fi
|
||
|
||
# 安装 systemd 服务
|
||
info "安装 systemd 服务..."
|
||
cp "${SCRIPT_DIR}/${APP_NAME}.service" "${SERVICE_FILE}"
|
||
systemctl daemon-reload
|
||
|
||
# 启用并启动服务
|
||
info "启用并启动服务..."
|
||
systemctl enable "${APP_NAME}"
|
||
systemctl start "${APP_NAME}"
|
||
|
||
# 检查服务状态
|
||
sleep 2
|
||
if systemctl is-active --quiet "${APP_NAME}"; then
|
||
LISTEN_ADDR=$(grep -E '^VPN_LISTEN_ADDR=' "${CONFIG_DIR}/env" 2>/dev/null | cut -d= -f2 || echo ":8080")
|
||
echo ""
|
||
info "============================================"
|
||
info " OPSX VPN 管理平台安装成功!"
|
||
info "============================================"
|
||
info ""
|
||
info " 访问地址: http://localhost${LISTEN_ADDR}"
|
||
info " 默认账号: admin / admin123"
|
||
info ""
|
||
info " 服务管理:"
|
||
info " 启动: systemctl start ${APP_NAME}"
|
||
info " 停止: systemctl stop ${APP_NAME}"
|
||
info " 状态: systemctl status ${APP_NAME}"
|
||
info " 日志: journalctl -u ${APP_NAME} -f"
|
||
info ""
|
||
info " 配置文件: ${CONFIG_DIR}/env"
|
||
info " 数据目录: ${INSTALL_DIR}/data"
|
||
info "============================================"
|
||
else
|
||
error "服务启动失败,请检查日志: journalctl -u ${APP_NAME} -n 50"
|
||
exit 1
|
||
fi
|