在VPS上部署JavaScript应用:从A到Z的逐步指南

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

引言:为什么VPS是您Node.js应用的理想解决方案?

\n

您用JavaScript(Node.js)编写了一个很棒的应用,在本地进行了测试,现在希望它能24/7在线运行。共享主机通常因限制而不适合Node.js,而云服务(Heroku、Railway)可能价格昂贵或性能不可预测。虚拟专用服务器(VPS)是黄金选择:完全控制、高性能且价格实惠。

\n

在本逐步指南中,我们将从零开始讲解如何在VPS上部署JavaScript(Node.js)应用。您将学习如何配置服务器、安装必要软件、安全启动应用并通过域名使其可访问。所有代码示例均为可用且经过验证的。

\n\n

1. 服务器准备:VPS初始配置

\n

首先,您需要从任何提供商(DigitalOcean、Vultr、Timeweb、Selectel)租用一台VPS。最低配置:1 vCPU、1-2 GB RAM、20-30 GB SSD。操作系统——Ubuntu 22.04 LTS(最稳定的版本)。

\n\n

1.1. 通过SSH连接到服务器

\n

获取IP地址和密码后,通过终端(Mac/Linux)或PuTTY(Windows)连接到服务器:

\n
ssh root@您的_服务器_IP
\n

立即更改密码并创建新用户(以root身份操作是不良实践):

\n
adduser deploy_user\nusermod -aG sudo deploy_user\nsu - deploy_user
\n\n

1.2. 更新系统并安装基础软件包

\n
sudo apt update && sudo apt upgrade -y\nsudo apt install -y curl git ufw build-essential
\n

配置基础防火墙UFW(仅保留SSH和我们将使用的端口):

\n
sudo ufw allow OpenSSH\nsudo ufw allow 80/tcp\nsudo ufw allow 443/tcp\nsudo ufw enable
\n\n

2. 安装Node.js和进程管理器PM2

\n

为了在服务器上运行JavaScript应用,我们需要Node.js。使用官方版本管理器NodeSource来安装最新的LTS版本:

\n\n

2.1. 安装Node.js(v20 LTS)

\n
curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -\nsudo apt install -y nodejs
\n

检查安装:

\n
node -v   # v20.x.x\nnpm -v    # 10.x.x
\n\n

2.2. 安装和配置PM2

\n

PM2是Node.js的高级进程管理器。它能在应用崩溃时自动重启、管理日志,并允许运行多个实例(集群模式)。

\n
sudo npm install -g pm2
\n

配置PM2在服务器重启时自动启动:

\n
pm2 startup systemd\nsudo env PATH=$PATH:/usr/bin pm2 startup systemd -u deploy_user --hp /home/deploy_user
\n\n

3. 部署应用并通过PM2启动

\n

现在,我们准备将您的JavaScript应用迁移到服务器。有两种流行的方法:通过Git(推荐)或通过SCP/FileZilla。

\n\n

3.1. 克隆仓库(Git)

\n
cd /home/deploy_user\ngit clone https://github.com/您的用户名/您的仓库.git myapp\ncd myapp
\n

安装依赖并构建项目(如果需要):

\n
npm install\n# 如果有构建脚本:npm run build
\n\n

3.2. 创建配置文件.env

\n

切勿将机密信息存储在代码中。在项目文件夹中创建.env文件:

\n
nano .env
\n

示例内容:

\n
PORT=3000\nNODE_ENV=production\nDATABASE_URL=mongodb://localhost:27017/myapp\nJWT_SECRET=您的超级密钥
\n\n

3.3. 通过PM2启动应用

\n

假设您应用的入口点是app.js或server.js。启动:

\n
pm2 start app.js --name "myapp"
\n

检查状态:

\n
pm2 status\npm2 logs myapp                

博客

书籍推荐