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

129 lines
3.6 KiB
Bash
Executable File
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/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