引言
在如今云计算盛行的时代,掌握一套自己的服务器部署技能,已经成为每一位开发者不可或缺的能力之一。今天,我们将一起从零开始,手把手搭建属于自己的Node.js服务端,并部署到Amazon EC2实例上。
选购亚马逊云服务器
首先,我们需要有一个亚马逊帐号。亚马逊云科技目前正在开展免费体验活动,可享12个月免费云服务器,3个月免费容器,3个月免费数据库。我们可以免费体验大部分基础服务。
步骤1:登录亚马逊云服务控制台
我们首先前往亚马逊云服务首页,注册一个免费帐号,然后登录进入云服务管理控制台。
步骤 2:进入 EC2 控制面板
登录成功后,我们在搜索栏中输入"EC2",选择展示的EC2服务。
步骤 3:启动实例
在EC2控制面板上,点击“Launch Instance”,开始新建实例。
步骤4:选择AMI镜像
为实例选择一个镜像。镜像是实例的模板,包含操作系统和虚拟机所需软件等信息。这里推荐选择符合免费套餐条件的Amazon Linux AMI或Ubuntu镜像。
步骤5:选择实例类型
选择实例类型。默认的t2.micro实例符合免费套餐条件,我们选择它。
步骤6:配置密钥对
密钥对用于构建安全连接,方便后续通过 SSH 登录实例。如果之前已创建过密钥对,从下拉菜单中选择;否则,就要创建新密钥对。配置完毕后下载密钥对文件并妥善保存。
步骤7:检查并启动实例
暂时保持所有设置为默认值,点击 Launch,就启动成功啦!
步骤8:验证实例
当出现成功提示后,就可以在实例页面查看已创建的实例。新创建的实例将会显示在实例列表中。
亚马逊云科技目前还提供了更多的云产品服务,感兴趣的话大家不妨自行前往官方网站了解一下!
连接EC2实例
我们可以通过以下方式连接EC2:在实例页面点击实例ID,然后选择"连接"选项。
也可以通过以下SSH命令连接至EC2实例:
ssh -i <PATH TO YOUR KEY PAIR FILE> ubuntu@<PUBLIC DNS OF YOUR INSTANCE>
配置Node.js环境
步骤1:安装NVM
连接成功后,可通过Node版本管理器安装Node.js。在终端中输入以下命令安装NVM:
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.4/install.sh | bash
安装完成后要加载NVM环境变量:
source ~/.nvm/nvm.sh
然后安装最新的Node.js LTS版本:
nvm install --lts
步骤2:验证Node版本
运行以下命令验证安装是否成功:
node --version
若终端显示版本号,则表明Node.js已成功安装。
步骤3:创建项目目录
使用以下命令创建存放代码的目录:
mkdir my-app
将项目传输至EC2实例
传输项目前,删除项目中的node_modules文件夹以减小体积。我们可以在实例上直接安装依赖项。要将代码推送到实例,在本地项目根目录下运行以下命令。
scp -i <PATH TO YOUR KEY PAIR FILE> -r ./ ubuntu@<PUBLIC DNS OF YOUR INSTANCE>:/home/ubuntu/my-app
对于Ubuntu系统,用户名为"ubuntu"(根据所使用的AMI不同,用户名可能会有所变化)。
启动应用程序
步骤1:安装依赖并运行项目
确认项目是否已成功传输。进入EC2实例中的项目根目录。使用npm i命令安装依赖项。安装完成后,可以通过运行node index来启动应用程序。
步骤2:验证服务器是否正常运行
打开另一个终端窗口,使用SSH连接到EC2实例。运行curl命令查看服务器的响应。
步骤3:通过添加安全组开放端口
如我们所见,服务器已成功运行。但由于创建实例时保留了默认网络设置(当前仅允许SSH连接并阻止其他连接),我们仍无法从外部访问该服务器。前往实例页面,在"安全"选项卡下选择实例所使用的安全组。
现在,在入站规则部分,点击右上角的"编辑入站规则"。
选择"添加规则"。在"类型"列中,选择"Custom TCP"并将"端口范围"设置为8000,因为我们的应用程序当前运行在8000端口。在"来源"列中,选择"Anywhere-IPv4"并点击"保存规则"。
之后可以使用< PUBLIC DNS OF YOUR INSTANCE>:8000访问你的服务器。
使用PM2启动应用程序
在上述启动示例中,一旦我们退出正在运行node index.js命令的终端,服务器就会停止运行,我们将无法再访问服务器端点。我们可以使用PM2,这是一个流行的Node.js应用程序进程管理器,它能确保应用程序正常运行时间、进程控制,以及在故障时自动重启。以下是使用PM2安装和启动应用程序的步骤。
步骤1:安装PM2
要全局安装PM2,可以使用npm:
npm install -g pm2
步骤2:使用PM2启动应用程序
使用pm2 start命令启动项目,后跟项目启动文件的路径。
pm2 start index.js
或者,我们也可以使用ecosystem.config.js文件,其中脚本应指向应用程序的启动入口。通过此文件,我们可以轻松配置环境详情和其他设置。
module.exports = {
apps: [
{
name: "my-backend",
script: "./index.js",
instances: 1,
autorestart: true,
watch: false,
max_memory_restart: "1G",
out_file: "./out.log",
error_file: "./error.log",
merge_logs: true,
log_date_format: "DD-MM HH:mm:ss Z",
log_type: "json",
env: {
NODE_ENV: "production",
PORT: 8000,
},
},
],
}
然后在终端输入
pm2 start ecosystem.config.js
步骤3:查看PM2进程列表
可以通过以下命令查看由PM2管理的运行中进程列表:
pm2 list
执行后将显示进程相关信息,包括进程名称、状态及其他详细信息。
步骤4:保存当前进程列表
要保存当前管理的进程列表,确保系统重启时能自动启动这些进程,运行:
pm2 save
设置弹性IP
EC2实例默认提供的公共IP会在服务器重启时发生变化。为确保应用程序和服务使用固定不变的IP地址,可通过设置弹性IP来实现。弹性IP是一种静态IP地址,即使重启EC2实例也不会改变。
步骤1:进入网络与安全选项
要创建弹性IP,从左导航菜单选择网络与安全选项,点击弹性IP。页面将跳转至弹性IP管理界面。
步骤2:分配新弹性IP地址
进入弹性IP页面后,点击"分配弹性IP地址"选项,将跳转至IP分配设置页面。在此页面保持所有设置为默认,直接点击"分配"即可生成新的弹性IP地址。
步骤3:关联弹性IP地址
现在,进入IP地址设置页面并选择"关联弹性IP地址"。从列表中选择需要关联新IP的特定EC2实例,点击"关联"即可将弹性IP绑定至目标实例。
步骤4:验证变更
前往实例页面并刷新,可以看到EC2实例的公共IP现已替换为弹性IP。此变更确保EC2实例即使重启也能保持固定不变的IP地址。
总结
至此,我们已经顺利完成了在 Amazon EC2 上部署 Node.js 服务器的全部流程。从服务器选购、环境搭建,到应用部署、进程管理,再到弹性 IP 的配置,每一步我们都亲手实践,确保每个细节都清晰可控。虽然刚开始接触云服务器时可能会觉得流程稍显繁琐,但真正动手做过一次之后,就会发现其实非常有成就感!