想在Ubuntu上快速搭建一套Node.js微服务架构?其实整体流程并不难,重点在于把开发环境、服务拆分、服务通信以及部署运维这几个关键环节顺畅串联起来。下面这套实践流程覆盖了从零开始到项目可运行的完整步骤,每一步都附带了具体命令与代码示例,适合直接参考操作,帮助你在Ubuntu环境中完成Node.js微服务部署。

1. 设置开发环境
安装Node.js和npm
首先要确保你的Ubuntu系统已经正确安装了Node.js和npm,这是构建Node.js微服务项目的基础环境。直接执行以下命令即可完成安装:
sudo apt update
sudo apt install nodejs npm
安装完成后,建议检查版本信息,确认运行环境是否配置成功:
node -v
npm -v
安装其他必要的工具
除了基础运行环境外,还建议安装几个常用开发与运维工具:nodemon可以在代码发生变化时自动重启服务,提升本地开发效率;pm2则适合用于Node.js进程管理,方便服务守护、重启与监控。
sudo npm install -g nodemon pm2
2. 创建微服务
初始化项目
先创建一个目录用于存放微服务项目代码,然后进入该目录并初始化Node.js项目:
mkdir my-microservice
cd my-microservice
npm init -y
安装依赖
接下来根据具体业务场景安装所需依赖。如果你准备开发一个RESTful API微服务,那么express通常是最常见、最实用的Web框架:
npm install express
编写代码
下面是一个最基础的Express微服务示例,可用于快速验证Node.js服务是否正常运行:
// index.js
const express = require('express');
const app = express();
const port = 3000;
app.get('/', (req, res) => {
res.send('Hello World!');
});
app.listen(port, () => {
console.log(`Microservice listening at https://localhost:${port}`);
});
3. 配置通信机制
使用HTTP/HTTPS
在Node.js微服务架构中,服务之间最常见、最直接的通信方式就是通过HTTP或HTTPS接口发起请求。下面示例演示了服务A如何向服务B请求数据:
// serviceA.js
const axios = require('axios');
const express = require('express');
const app = express();
const port = 3000;
app.get('/data', async (req, res) => {
try {
const response = await axios.get('https://localhost:3001/data');
res.json(response.data);
} catch (error) {
res.status(500).send(error);
}
});
app.listen(port, () => {
console.log(`Service A listening at https://localhost:${port}`);
});
使用消息队列
如果微服务之间需要处理更复杂的异步通信场景,例如服务解耦、流量削峰或任务排队处理,那么引入消息队列会更加合适。这里以RabbitMQ为例,先在Ubuntu中安装RabbitMQ服务器:
sudo apt install rabbitmq-server
随后安装Node.js对应的客户端库:
npm install amqplib
下面提供一个简单的生产者与消费者示例,帮助你理解消息队列通信机制:
// producer.js
const amqp = require('amqplib');
async function sendMessage() {
const conn = await amqp.connect('amqp://localhost');
const channel = await conn.createChannel();
const queue = 'hello';
await channel.assertQueue(queue, { durable: false });
const message = 'Hello World!';
channel.sendToQueue(queue, Buffer.from(message));
console.log(" [x] Sent %s", message);
setTimeout(() => {
channel.close();
conn.close();
}, 500);
}
sendMessage().catch(console.warn);
// consumer.js
const amqp = require('amqplib');
async function consumeMessage() {
const conn = await amqp.connect('amqp://localhost');
const channel = await conn.createChannel();
const queue = 'hello';
await channel.assertQueue(queue, { durable: false });
console.log(" [*] Waiting for messages in %s. To exit press CTRL+C", queue);
channel.consume(queue, (msg) => {
const message = msg.content.toString();
console.log(" [x] Received %s", message);
channel.ack(msg);
});
}
consumeMessage().catch(console.warn);
4. 部署和管理
使用PM2管理微服务
PM2是一款非常实用的Node.js进程管理工具,能够让微服务在Ubuntu服务器上更加稳定地持续运行。你可以先使用以下命令启动一个服务:
pm2 start index.js --name my-microservice
如果需要查看当前所有正在运行的服务进程,可以执行:
pm2 list
当需要停止或重启某个微服务时,可以使用下面的命令:
pm2 stop my-microservice
pm2 restart my-microservice
使用Docker容器化微服务
在生产环境中,通常更推荐使用Docker对Node.js微服务进行容器化打包与部署,这样可以显著提升环境一致性和发布效率。首先在Ubuntu上安装Docker:
sudo apt install docker.io
接着创建一个Dockerfile,内容如下:
# Dockerfile
FROM node:14
WORKDIR /usr/src/app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 3000
CMD ["node", "index.js"]
完成后构建Docker镜像,并运行对应容器:
docker build -t my-microservice .
docker run -p 3000:3000 my-microservice
按照以上步骤操作后,一套基础可用的Node.js微服务架构就能在Ubuntu系统上顺利运行起来。后续你还可以结合实际业务需求,继续扩展服务发现、API网关、日志聚合、配置中心等能力,逐步完善整体微服务架构设计与运维体系。
