无源标靶上位机
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

207 lines
5.0 KiB

#!/bin/bash
# 应用打包脚本 - 在开发环境运行
APP_NAME="wuyuanbiaoba-web"
# 自动读取 package.json 的 version 字段,如果失败则用 latest
if [ -f package.json ]; then
VERSION=$(grep '"version"' package.json | head -1 | sed -E 's/.*"version": *"([^"]+)".*/\1/')
[ -z "$VERSION" ] && VERSION="latest"
else
VERSION="latest"
fi
TARGET_DIR="./build"
DEPLOY_PACKAGE="${APP_NAME}-${VERSION}.tar.gz"
echo "打包 Node.js 应用..."
# 清理旧构建
rm -rf $TARGET_DIR
mkdir -p $TARGET_DIR
# 复制源代码
# 复制文件
cp package.json $TARGET_DIR/
cp package-lock.json $TARGET_DIR/
cp index.html $TARGET_DIR/
cp config.cjs $TARGET_DIR/
[ -f README.md ] && cp README.md $TARGET_DIR/
# 复制目录
cp -r client/ $TARGET_DIR/
cp -r server/ $TARGET_DIR/
cp -r script/ $TARGET_DIR/
# 创建部署脚本
cat > $TARGET_DIR/deploy.sh << 'EOF'
#!/bin/bash
# 应用部署脚本
APP_NAME="wuyuanbiaoba-web"
INSTALL_DIR="/opt/$APP_NAME"
SERVICE_NAME="$APP_NAME.service"
echo "正在部署 $APP_NAME..."
# 检查是否为 root 权限
if [ "$EUID" -ne 0 ]; then
echo "错误: 请使用 root 权限运行此脚本 (sudo ./deploy.sh)"
exit 1
fi
# 检查 systemd 是否可用
if ! pidof systemd &>/dev/null; then
echo "错误: 当前系统不支持 systemd"
exit 1
fi
# 检查 Node.js 是否安装
if ! command -v node &> /dev/null; then
echo "错误: Node.js 未安装。请为 root 用户安装 Node.js 20+"
exit 1
fi
# 检查 Node.js 版本
NODE_VERSION=$(node -v | cut -d'v' -f2 | cut -d'.' -f1)
if [ "$NODE_VERSION" -lt 20 ]; then
echo "错误: Node.js 版本过低 (当前: $(node -v)),需要 20+"
exit 1
fi
# 检查 npm 是否可用
if ! command -v npm &> /dev/null; then
echo "错误: npm 未安装或不可用"
exit 1
fi
# 停止现有服务
if systemctl is-active --quiet $SERVICE_NAME; then
echo "停止现有服务..."
systemctl stop $SERVICE_NAME
sleep 2
fi
# 禁用现有服务
if systemctl is-enabled --quiet $SERVICE_NAME; then
echo "禁用现有服务..."
systemctl disable $SERVICE_NAME
fi
# 备份现有安装(如果存在)
if [ -d "$INSTALL_DIR" ]; then
BACKUP_DIR="${INSTALL_DIR}_backup_$(date +%Y%m%d_%H%M%S)"
echo "备份现有安装到: $BACKUP_DIR"
mv "$INSTALL_DIR" "$BACKUP_DIR"
fi
# 创建安装目录
mkdir -p $INSTALL_DIR
# 复制文件
echo "复制应用文件..."
cp -r ./* $INSTALL_DIR/
# 复制隐藏文件(如果存在)
shopt -s dotglob
for file in .*; do
if [[ "$file" != "." && "$file" != ".." ]]; then
cp -r "$file" "$INSTALL_DIR/" 2>/dev/null || true
fi
done
shopt -u dotglob
# 安装依赖
echo "安装依赖包..."
cd $INSTALL_DIR
npm install
# 检查主入口文件
if [ ! -f "package.json" ]; then
echo "错误: package.json 文件不存在"
exit 1
fi
# 获取 npm 和 node 的完整路径
NPM_PATH=$(which npm)
NODE_PATH=$(which node)
echo "使用 Node.js: $NODE_PATH"
echo "使用 npm: $NPM_PATH"
# 检查是否使用 nvm 并设置环境变量
if [[ "$NODE_PATH" == *"/.nvm/"* ]]; then
echo "检测到使用 nvm 管理 Node.js"
NVM_NODE_DIR=$(dirname "$NODE_PATH")
echo "Node.js 目录: $NVM_NODE_DIR"
# 为 systemd 设置完整的 PATH
SYSTEMD_PATH="$NVM_NODE_DIR:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
# 使用 node 直接执行 npm,避免 env 查找问题
EXEC_START="$NODE_PATH $NPM_PATH start"
else
echo "使用系统安装的 Node.js"
SYSTEMD_PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
EXEC_START="$NPM_PATH start"
fi
# 创建 systemd 服务文件
cat > /etc/systemd/system/$SERVICE_NAME << SERVICE_EOF
[Unit]
Description=$APP_NAME Node.js Application
After=network.target
[Service]
Type=simple
User=root
WorkingDirectory=$INSTALL_DIR
ExecStart=$EXEC_START
Restart=on-failure
RestartSec=10
Environment=NODE_ENV=development
Environment=PATH=$SYSTEMD_PATH
[Install]
WantedBy=multi-user.target
SERVICE_EOF
# 重新加载 systemd
systemctl daemon-reload
# 启用并启动服务
systemctl enable $SERVICE_NAME
systemctl start $SERVICE_NAME
echo "部署完成! 服务状态:"
systemctl status $SERVICE_NAME --no-pager
EOF
chmod +x $TARGET_DIR/deploy.sh
# 创建安装说明
cat > $TARGET_DIR/README.md << 'EOF'
# 应用安装说明
## 要求
- Linux 系统
- Node.js 20+ 已安装
## 安装步骤
1. 上传此文件夹到目标服务器
2. 运行: ./deploy.sh
## 管理服务
- 启动: sudo systemctl start wuyuanbiaoba-web.service
- 停止: sudo systemctl stop wuyuanbiaoba-web.service
- 状态检查: sudo systemctl status wuyuanbiaoba-web.service
- 查看日志: journalctl -u wuyuanbiaoba-web.service -f
# 完全卸载
sudo systemctl stop wuyuanbiaoba-web.service
sudo systemctl disable wuyuanbiaoba-web.service
sudo rm /etc/systemd/system/wuyuanbiaoba-web.service
sudo systemctl daemon-reload
sudo rm -rf /opt/wuyuanbiaoba-web*
EOF
# 创建打包文件
tar -czf $DEPLOY_PACKAGE -C $TARGET_DIR .
echo "打包完成: $DEPLOY_PACKAGE"
echo "请将此文件上传到服务器并解压后运行 ./deploy.sh"