feat: 日志中心 + GRE协议支持 + 流量监控 + 部署脚本

- 新增日志中心功能 (api/logapi.go + Logs.vue)
- 新增GRE协议服务支持 (service/gre/)
- 新增流量监控组件 (TrafficChart.vue)
- 新增L2TP/IPSec测试用例
- 新增日志轮转服务 (logrotate.go)
- 新增部署脚本 (scripts/install.sh, uninstall.sh, service文件)
- 更新i18n国际化文件
- 优化后端API和前端路由
This commit is contained in:
opsx-tools committed 2026-07-25 08:50:34 +08:00
1 parent 7de1f70905
commit a14d9e62e6
25 files changed
+2285 -25

No files matched your search

+128
View File
@@ -0,0 +1,128 @@
#!/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
+19
View File
@@ -0,0 +1,19 @@
[Unit]
Description=OPSX VPN Management Platform
Documentation=https://github.com/opsx-vpn/opsx-vpn
After=network.target
[Service]
Type=simple
WorkingDirectory=/opt/opsx-vpn
ExecStart=/opt/opsx-vpn/opsx-vpn
EnvironmentFile=-/etc/opsx-vpn/env
Restart=always
RestartSec=5
LimitNOFILE=65536
# VPN 管理需要 iptables 和网络访问权限
User=root
Group=root
[Install]
WantedBy=multi-user.target
+78
View File
@@ -0,0 +1,78 @@
#!/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"
# 颜色输出
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
echo ""
warn "============================================"
warn " 卸载 OPSX VPN 管理平台"
warn "============================================"
echo ""
# 停止并禁用服务
if systemctl is-active --quiet "${APP_NAME}" 2>/dev/null; then
info "停止服务..."
systemctl stop "${APP_NAME}"
fi
if systemctl is-enabled --quiet "${APP_NAME}" 2>/dev/null; then
info "禁用服务..."
systemctl disable "${APP_NAME}"
fi
# 删除 systemd 服务文件
if [[ -f "${SERVICE_FILE}" ]]; then
info "删除 systemd 服务文件..."
rm -f "${SERVICE_FILE}"
systemctl daemon-reload
fi
# 询问是否删除数据
REMOVE_DATA=""
echo ""
read -p "是否删除安装目录 ${INSTALL_DIR}?[y/N] " -r REMOVE_DATA
if [[ "${REMOVE_DATA}" =~ ^[Yy]$ ]]; then
info "删除安装目录: ${INSTALL_DIR}"
rm -rf "${INSTALL_DIR}"
else
info "保留安装目录: ${INSTALL_DIR}"
fi
REMOVE_CONFIG=""
read -p "是否删除配置目录 ${CONFIG_DIR}?[y/N] " -r REMOVE_CONFIG
if [[ "${REMOVE_CONFIG}" =~ ^[Yy]$ ]]; then
info "删除配置目录: ${CONFIG_DIR}"
rm -rf "${CONFIG_DIR}"
else
info "保留配置目录: ${CONFIG_DIR}"
fi
echo ""
info "============================================"
info " OPSX VPN 管理平台已卸载"
info "============================================"
info ""
info " 残留文件(如未删除):"
info " 安装目录: ${INSTALL_DIR}"
info " 配置目录: ${CONFIG_DIR}"
info "============================================"