在Debian系统中,JavaScript(JS)自动化部署主要围绕 Node.js环境配置、进程管理、脚本自动化及可选增强功能(如反向代理、容器化)展开,以下是具体实现步骤:
自动化部署需依赖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是Node.js进程管理工具,可实现后台运行、自动重启、集群模式及一键部署:
全局安装PM2:
sudo npm install -g pm2
启动应用:
pm2 start app.js --name "my-app" # app.js为入口文件
设置开机自启:
pm2 startup # 生成开机启动脚本
pm2 save # 保存当前进程列表
配置自动化部署(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 // 后续更新(拉取代码、重启应用)
定时运行脚本(Cron):
若需定期执行自动化任务(如每日备份),可将脚本添加到Cron:
crontab -e
添加以下内容(每天凌晨2点运行deploy.js):
0 2 * * * /usr/bin/node /path/to/deploy.js >> /var/log/deploy.log 2>&1
设置为系统服务(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
容器化可确保环境一致性,适合复杂项目:
创建Dockerfile(项目根目录):
FROM node:18
WORKDIR /usr/src/app
COPY package*.json ./
RUN npm install --production
COPY . .
EXPOSE 3000
CMD ["node", "app.js"]
构建与运行镜像:
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项目的自动化部署、进程守护及环境一致性,满足不同场景的需求。