Browse Source

feat: 添加环境检查、服务器部署和应用打包脚本

master
qinjian 1 month ago
parent
commit
a1cd6540c6
  1. 42
      script/check-environment.sh
  2. 23
      script/deploy-on-server.sh
  3. 109
      script/package-app.sh

42
script/check-environment.sh

@ -0,0 +1,42 @@
#!/bin/bash
# 环境检查脚本
echo "检查部署环境..."
# 检查 Node.js
if command -v node &> /dev/null; then
NODE_VERSION=$(node -v)
echo "✓ Node.js 已安装: $NODE_VERSION"
# 检查版本是否 >= 20
NODE_MAJOR_VERSION=$(node -v | cut -d'v' -f2 | cut -d'.' -f1)
if [ "$NODE_MAJOR_VERSION" -ge 20 ]; then
echo "✓ Node.js 版本符合要求 (v20+)"
else
echo "✗ Node.js 版本过低,需要 v20+"
exit 1
fi
else
echo "✗ Node.js 未安装"
echo "请先安装 Node.js 20+:"
echo "curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -"
echo "sudo apt-get install -y nodejs"
exit 1
fi
# 检查 npm
if command -v npm &> /dev/null; then
echo "✓ npm 已安装: $(npm -v)"
else
echo "✗ npm 未安装"
exit 1
fi
# 检查 systemd
if systemctl --version &> /dev/null; then
echo "✓ systemd 可用"
else
echo "✗ systemd 不可用,将无法设置开机自启"
fi
echo "环境检查完成!"

23
script/deploy-on-server.sh

@ -0,0 +1,23 @@
#!/bin/bash
# 服务器端部署脚本 - 在服务器上运行
APP_NAME="my-node-app"
PACKAGE_PATH="./$APP_NAME-1.0.0.tar.gz"
INSTALL_DIR="/tmp/$APP_NAME-install"
if [ ! -f "$PACKAGE_PATH" ]; then
echo "错误: 找不到部署包 $PACKAGE_PATH"
exit 1
fi
# 创建临时安装目录
mkdir -p $INSTALL_DIR
tar -xzf $PACKAGE_PATH -C $INSTALL_DIR
# 运行部署脚本
cd $INSTALL_DIR
chmod +x deploy.sh
./deploy.sh
# 清理
rm -rf $INSTALL_DIR

109
script/package-app.sh

@ -0,0 +1,109 @@
#!/bin/bash
# 应用打包脚本 - 在开发环境运行
APP_NAME="my-node-app"
VERSION="1.0.0"
TARGET_DIR="./build"
DEPLOY_PACKAGE="${APP_NAME}-${VERSION}.tar.gz"
echo "打包 Node.js 应用..."
# 清理旧构建
rm -rf $TARGET_DIR
mkdir -p $TARGET_DIR
# 复制源代码
cp -r ./* $TARGET_DIR/
# 创建部署脚本
cat > $TARGET_DIR/deploy.sh << 'EOF'
#!/bin/bash
# 应用部署脚本
APP_NAME="my-node-app"
INSTALL_DIR="/opt/$APP_NAME"
SERVICE_NAME="$APP_NAME.service"
echo "正在部署 $APP_NAME..."
# 检查 Node.js 是否安装
if ! command -v node &> /dev/null; then
echo "错误: Node.js 未安装。请先安装 Node.js 20+"
exit 1
fi
# 停止现有服务
if systemctl is-active --quiet $SERVICE_NAME; then
systemctl stop $SERVICE_NAME
fi
# 禁用现有服务
if systemctl is-enabled --quiet $SERVICE_NAME; then
systemctl disable $SERVICE_NAME
fi
# 创建安装目录
mkdir -p $INSTALL_DIR
# 复制文件
cp -r ./* $INSTALL_DIR/
# 安装依赖
cd $INSTALL_DIR
npm install
# 创建 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=/usr/bin/npm start
Restart=on-failure
RestartSec=10
[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 my-node-app.service
- 停止: sudo systemctl stop my-node-app.service
- 状态检查: sudo systemctl status my-node-app.service
- 查看日志: journalctl -u my-node-app.service -f
EOF
# 创建打包文件
tar -czf $DEPLOY_PACKAGE -C $TARGET_DIR .
echo "打包完成: $DEPLOY_PACKAGE"
echo "请将此文件上传到服务器并解压后运行 ./deploy.sh"
Loading…
Cancel
Save