在 Debian 上实现 Node.js 应用的自动化部署可以通过多种方式来完成,以下是一个基本的步骤指南,使用 Git 作为代码仓库,PM2 作为进程管理器,以及一个简单的 shell 脚本来实现自动化部署。
Node.js 和 npm/yarn:确保你的 Debian 系统上已经安装了 Node.js 和 npm 或 yarn。
sudo apt update
sudo apt install nodejs npm
Git:用于代码版本控制。
sudo apt install git
PM2:用于进程管理和应用监控。
sudo npm install pm2 -g
在你的服务器上创建一个目录来存放你的 Node.js 应用代码,并初始化一个 Git 仓库。
mkdir my-node-app
cd my-node-app
git init
在你的服务器上添加一个远程 Git 仓库地址。
git remote add origin <你的远程仓库地址>
创建一个 shell 脚本来自动化部署过程。假设你的应用入口文件是 app.js。
#!/bin/bash
# 进入应用目录
cd /path/to/my-node-app
# 拉取最新代码
git pull origin master
# 安装依赖
npm install
# 重启 PM2 应用
pm2 restart my-node-app
保存这个脚本为 deploy.sh,并赋予执行权限。
chmod +x deploy.sh
在你的应用目录下创建一个 ecosystem.config.js 文件来配置 PM2。
module.exports = {
apps: [{
name: 'my-node-app',
script: 'app.js',
instances: 'max',
autorestart: true,
watch: false,
max_memory_restart: '1G',
env: {
NODE_ENV: 'production'
},
env_production: {
NODE_ENV: 'production'
}
}]
};
在你的 Git 仓库(如 GitHub 或 GitLab)上设置一个 Webhook,指向你的服务器上的一个 URL,这个 URL 将触发部署脚本。例如,你可以使用 ngrok 来暴露你的本地服务器到一个公共 URL。
ngrok http 3000
将 ngrok 提供的 URL 配置到你的 Git 仓库的 Webhook 设置中。
当代码推送到远程仓库时,Webhook 会触发一个 HTTP 请求到你的服务器上的一个端点(例如 /deploy)。你可以使用 Express 来创建一个简单的服务器来处理这个请求。
sudo apt install express-generator
cd /path/to/my-node-app
npm install express
创建一个 deploy.js 文件:
const express = require('express');
const { exec } = require('child_process');
const app = express();
const port = 3000;
app.post('/deploy', (req, res) => {
exec('./deploy.sh', (error, stdout, stderr) => {
if (error) {
console.error(`Error: ${error.message}`);
return res.status(500).send('Deployment failed');
}
console.log(stdout);
res.send('Deployment successful');
});
});
app.listen(port, () => {
console.log(`Server running at http://localhost:${port}`);
});
启动服务器:
node deploy.js
现在,当你的代码推送到远程仓库时,Webhook 会触发一个请求到 http://your-ngrok-url/deploy,从而自动执行部署脚本。
通过上述步骤,你可以在 Debian 上实现 Node.js 应用的自动化部署。这个过程包括设置代码仓库、配置远程仓库、创建部署脚本、配置 PM2、设置 Webhook 以及创建一个简单的 Express 服务器来处理部署请求。你可以根据实际需求进一步扩展和优化这个流程。