温馨提示×

Debian JS怎样实现自动化部署

小樊
39
2025-10-25 14:03:45
栏目: 编程语言

在Debian系统中,JavaScript(JS)自动化部署主要围绕 Node.js环境配置进程管理脚本自动化可选增强功能(如反向代理、容器化)展开,以下是具体实现步骤:

一、前置准备:安装Node.js与npm

自动化部署需依赖Node.js运行环境,推荐通过NodeSource仓库安装最新稳定版本(避免系统自带版本过旧):

# 添加NodeSource官方仓库(以Node.js 18.x为例)
curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash -

# 安装Node.js及npm(Node包管理器)
sudo apt-get install -y nodejs

# 验证安装版本
node -v  # 输出Node.js版本(如v18.x.x)
npm -v   # 输出npm版本(如10.x.x)

若需管理多个Node.js版本,可使用NVM(Node Version Manager)

curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.5/install.sh | bash
source ~/.bashrc
nvm install 18  # 安装指定版本
nvm use 18      # 切换至该版本

二、编写自动化部署脚本

使用JavaScript编写部署逻辑(如拉取代码、安装依赖、重启服务等),例如创建deploy.js

const { exec } = require('child_process');
const fs = require('fs');

// 1. 拉取最新代码(假设使用Git)
exec('git pull origin main', (err, stdout, stderr) => {
  if (err) {
    console.error('代码拉取失败:', stderr);
    return;
  }
  console.log('代码拉取成功:', stdout);

  // 2. 安装/更新依赖
  exec('npm install --production', (err, stdout, stderr) => {
    if (err) {
      console.error('依赖安装失败:', stderr);
      return;
    }
    console.log('依赖安装成功:', stdout);

    // 3. 重启应用(通过PM2)
    exec('pm2 restart my-app', (err, stdout, stderr) => {
      if (err) {
        console.error('应用重启失败:', stderr);
        return;
      }
      console.log('应用重启成功:', stdout);
    });
  });
});

说明:脚本可根据需求扩展,如备份数据库、清理临时文件等。

三、使用PM2管理进程与自动化部署

PM2是Node.js进程管理工具,可实现后台运行自动重启集群模式一键部署

  1. 全局安装PM2

    sudo npm install -g pm2
    
  2. 启动应用

    pm2 start app.js --name "my-app"  # app.js为入口文件
    
  3. 设置开机自启

    pm2 startup  # 生成开机启动脚本
    pm2 save     # 保存当前进程列表
    
  4. 配置自动化部署(PM2内置功能)
    创建ecosystem.config.js(项目根目录),定义部署参数:

    module.exports = {
      apps: [{
        name: 'my-app',
        script: 'app.js',
        env: { NODE_ENV: 'production' }
      }],
      deploy: {
        production: {
          user: 'debian',          // 服务器用户名
          host: '192.168.1.100',   // 服务器IP
          ref: 'origin/main',      // Git分支
          repo: 'git@github.com:yourname/your-app.git', // Git仓库
          path: '/home/debian/my-app', // 部署目录
          'post-deploy': 'npm install && pm2 restart my-app' // 部署后执行的命令
        }
      }
    };
    

    执行部署命令:

    pm2 deploy ecosystem.config.js production setup  # 首次部署(创建目录、拉取代码)
    pm2 deploy ecosystem.config.js production        // 后续更新(拉取代码、重启应用)
    

四、可选增强:定时任务与系统服务

  1. 定时运行脚本(Cron)
    若需定期执行自动化任务(如每日备份),可将脚本添加到Cron:

    crontab -e
    

    添加以下内容(每天凌晨2点运行deploy.js):

    0 2 * * * /usr/bin/node /path/to/deploy.js >> /var/log/deploy.log 2>&1
    
  2. 设置为系统服务(Systemd)
    若需脚本随系统启动而运行(如监控任务),可创建Systemd服务文件:

    sudo nano /etc/systemd/system/js-automate.service
    

    写入以下内容(以deploy.js为例):

    [Unit]
    Description=JS Automation Script
    After=network.target
    
    [Service]
    ExecStart=/usr/bin/node /path/to/deploy.js
    Restart=always
    User=debian
    Group=debian
    
    [Install]
    WantedBy=multi-user.target
    

    启用并启动服务:

    sudo systemctl daemon-reload
    sudo systemctl start js-automate.service
    sudo systemctl enable js-automate.service
    

五、可选增强:Docker容器化部署

容器化可确保环境一致性,适合复杂项目:

  1. 创建Dockerfile(项目根目录):

    FROM node:18
    WORKDIR /usr/src/app
    COPY package*.json ./
    RUN npm install --production
    COPY . .
    EXPOSE 3000
    CMD ["node", "app.js"]
    
  2. 构建与运行镜像

    docker build -t my-js-app .
    docker run -d -p 3000:3000 --name my-app my-js-app
    

    结合PM2的Docker模式,可实现容器内进程管理:

    pm2-docker start app.js
    

通过以上步骤,可实现Debian系统中JavaScript项目的自动化部署进程守护环境一致性,满足不同场景的需求。

0