从零开始:在阿里云 Ubuntu 服务器部署 Node+Express 接口(基于公司 GitLab)

作为后端新手,最近我完成了一个简单的 Node+Express 接口从开发到部署的全过程。从本地代码编写到阿里云服务器发布,踩了不少坑也积累了一些经验,整理成这篇教程,希望能帮到和我一样刚入门的同学。

前提

先去阿里云购买一台轻量应用服务器或者云ECS服务器,我购买的是轻量应用服务器,配置如下: 系统镜像我选的是Ubuntu(友帮拓),因为这个镜像比较纯净,可以自己安装各个依赖的版本。

一、本地开发:创建简单的 Express 接口

首先我们需要在本地开发一个基础的 Express 服务,返回固定测试数据。

1. 初始化项目

新建项目文件夹并初始化(我这里命名为 node-api-test):

bash 复制代码
# 创建文件夹 
mkdir node-api-test && cd node-api-test 
# 初始化 npm 项目 
npm init -y 
# 安装 
Express npm install express

2. 编写服务代码

在文件夹中创建 app.js 文件,代码如下:

js 复制代码
const express = require('express');
const app = express();
const port = 3000;  // 服务端口

// 允许跨域(方便前端调用)
app.use((req, res, next) => {
  res.setHeader('Access-Control-Allow-Origin', '*');
  res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS');
  res.setHeader('Access-Control-Allow-Headers', 'Content-Type');
  next();
});

// 测试接口:返回固定数据
app.get('/api/test', (req, res) => {
  const data = {
    status: 200,
    message: '成功返回测试数据',
    data: {
      name: '测试用户',
      age: 25,
      hobbies: ['编程', '服务器部署']
    }
  };
  res.json(data);
});

// 启动服务
app.listen(port, () => {
  console.log(`服务已启动,访问:http://localhost:${port}/api/test`);
});

3. 本地测试

运行服务并验证是否正常工作:

js 复制代码
node app.js

打开浏览器访问 http://localhost:3000/api/test,如果能看到 JSON 格式的返回数据,说明本地服务没问题。

二、代码托管:提交到公司 GitLab

由于使用公司内部 GitLab 托管代码,需要将本地代码推送到远程仓库(如果还没创建仓库,先在 GitLab 上新建一个)。

1. 本地 Git 配置

bash 复制代码
# 初始化 Git 仓库(如果未初始化)
git init 
# 添加文件到暂存区 
git add .
# 提交到本地仓库 
git commit -m "初始化:简单的 Express 测试接口"

2. 关联 GitLab 仓库

复制公司 GitLab 仓库的 HTTPS 地址(格式类似 https://gitlab公司域名/用户名/node-api-test.git),然后关联:

bash 复制代码
# 关联远程仓库 
git remote add origin 你的GitLab仓库HTTPS地址
# 推送到远程仓库(首次推送需要输入账号密码)
git push -u origin main 
# 若默认分支是master则用git push -u origin master

三、服务器部署:阿里云 Ubuntu 环境配置

接下来开始配置阿里云轻量应用服务器,我使用的是 Ubuntu 系统,以下是详细步骤。

1. 连接服务器

通过 SSH 连接到你的阿里云服务器(替换为你的服务器公网 IP):

登录阿里云控制台,在这里这是服务器密码

登录服务器

bash 复制代码
ssh 用户名@服务器公网IP # 例如:ssh root@123.45.67.89

首次登录需要输入密码,登录成功后进入服务器终端。

2. 修复可能的包管理问题

如果执行 apt 命令时出现 dpkg was interrupted 错误,先修复:

bash 复制代码
# 修复 dpkg 配置 
sudo dpkg --configure -a 
# 清理缓存并更新系统 
sudo apt clean
sudo apt autoremove -y 
sudo apt update -y 
sudo apt upgrade -y

3. 服务器上安装必要工具

(1)安装 Git
bash 复制代码
sudo apt install git -y 
# 验证安装 
git --version
# 输出 git version x.x.x 即成功
(2)配置 Git 凭证缓存

为了避免每次拉取代码都输入账号密码,配置缓存:

bash 复制代码
# 配置全局用户名和邮箱(与 GitLab 一致)
git config --global user.name "你的Git用户名"
git config --global user.email "你的公司邮箱"
# 缓存凭证 24 小时(86400秒) 
git config --global credential.helper 'cache --timeout=86400'
(3)安装 Node.js(使用 NVM)

NVM(Node Version Manager)是管理 Node 版本的工具,推荐使用:

bash 复制代码
# 安装 NVM(如果连接 raw.githubusercontent.com 超时,见下方解决方法)
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.3/install.sh | bash

# 若上面命令超时,改用国内镜像
curl -o- https://cdn.jsdelivr.net/gh/nvm-sh/nvm/v0.39.3/install.sh | bash

# 刷新环境变量
source ~/.bashrc

# 安装 Node.js 16.x(稳定版本)
nvm install 16
nvm use 16

# 验证安装
node -v  # 输出 v16.x.x
npm -v   # 输出 8.x.x

四、部署服务:拉取代码并启动

1. 拉取 GitLab 代码

bash 复制代码
# 创建项目目录
mkdir -p /root/projects && cd /root/projects

# 克隆仓库(使用 HTTPS 地址)
git clone https://gitlab公司域名/用户名/node-api-test.git

# 进入项目目录
cd node-api-test

首次克隆会提示输入 GitLab 用户名和密码(或个人访问令牌),输入后等待代码拉取完成。

2. 安装项目依赖

bash 复制代码
# 安装 express 依赖
npm install

3. 用 PM2 启动服务

PM2 是 Node 应用的进程管理工具,能保证服务在后台持续运行:要不然关闭窗口之后,就无法访问了

bash 复制代码
# 全局安装 PM2
npm install pm2 -g

# 启动服务并命名(方便管理)
pm2 start app.js --name "node-api-test"

# 查看服务状态
pm2 list  # 若 Status 为 online 则表示启动成功

PM2 常用命令:

  • 重启服务:pm2 restart node-api-test
  • 停止服务:pm2 stop node-api-test
  • 查看日志:pm2 logs node-api-test

五、开放端口:配置防火墙,(下面2步都要)

服务启动后,需要开放 3000 端口才能外部访问。因为node代码写的是3000

1. 服务器内部防火墙(UFW)

bash 复制代码
# 开放 3000 端口
sudo ufw allow 3000/tcp

# 启用防火墙(首次启用需确认)
sudo ufw enable

# 验证端口是否开放
sudo ufw status  # 看到 3000/tcp 允许即为成功

2. 阿里云控制台配置

登录阿里云轻量应用服务器控制台:

  1. 找到你的服务器,进入「防火墙」配置
  2. 点击「添加规则」,端口范围填 3000,授权对象填 0.0.0.0/0
  3. 保存规则

如图:

六、测试接口:验证部署结果

所有配置完成后,通过以下方式测试接口:

  1. 浏览器访问 直接在地址栏输入:http://你的服务器公网IP:3000/api/test

结果如图:

  1. Postman 测试

选择 GET 方法,输入上述 URL,发送请求查看返回结果。

  1. 前端代码调用
js 复制代码
fetch('http://你的服务器公网IP:3000/api/test') .then(res => res.json()) .then(data => console.log(data)) .catch(err => console.error('请求失败', err));

如果看到和本地测试相同的 JSON 数据,说明部署成功!

七、后续更新代码流程

当本地代码更新后,只需以下步骤即可同步到服务器:

  1. 本地提交并推送
bash 复制代码
git add .
git commit -m "更新说明"
git push
  1. 服务器拉取并重启
bash 复制代码
cd /root/projects/node-api-test  # 进入项目目录
git pull  # 拉取最新代码
pm2 restart node-api-test  # 重启服务

总结

整个过程从本地开发到服务器部署,核心步骤包括:

  1. 开发基础接口并本地验证
  2. 代码托管到 GitLab
  3. 服务器环境配置(Node、Git、PM2)
  4. 拉取代码并启动服务
  5. 开放端口并测试访问

作为后端新手,第一次部署时遇到了不少网络和权限问题,但一步步排查后终于成功。如果大家在操作中遇到类似问题,欢迎留言交流~

相关推荐
Hyyy4 分钟前
很多Desktop都在上的Computer Use是什么
前端·llm
慢功夫6 分钟前
开篇:VS Code 为什么不是一个普通 React App
前端·visual studio code
你挚爱的强哥17 分钟前
Vue2 实现 1.5s 十连击监听(连续点击若干次),封装通用可复用点击检测工具,不用 data!Vue 封装通用连击监听方法,支持自定义时长与点击次数
前端·javascript·vue.js
程序员张321 分钟前
SpringBoot集成BCrypt密码加密库
java·spring boot·后端
CaffeinePro28 分钟前
FastAPI数据库集成SQLAlchemy异步ORM全方案
后端·fastapi
小旭Coding31 分钟前
凌晨告警轰炸!Go 服务协程只增不减,内存持续暴涨直至 OOM
后端
半个落月34 分钟前
用 LangChain.js 手写一个能读写文件和执行命令的 Mini Cursor
javascript·人工智能·后端
huashengzsj1 小时前
Shopify个人建站如何搭建独立站:从零开始的完整指南
前端·网络·人工智能
程序猿小泓1 小时前
从 Claude Code 学 Agent Harness:一个前端工程师的 AI Agent 学习笔记
前端·人工智能·学习
952361 小时前
RabbitMQ-基础操作
java·spring boot·分布式·后端·spring·rabbitmq