3 changed files with 174 additions and 0 deletions
@ -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 "环境检查完成!" |
@ -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 |
@ -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…
Reference in new issue