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:
1 parent
7de1f70905
commit
a14d9e62e6
25 files changed
+2285
-25
No files matched your search
Executable
+128
@@ -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
|
||||
@@ -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
|
||||
Executable
+78
@@ -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 "============================================"
|
||||
Reference in new issue
Block a user