如何在 DigitalOcean Droplet 云服务器上部署 Next.js 应用

news2024/12/27 10:46:15

Next.js 是一个流行的 React 框架,可轻松构建服务器渲染的 React 应用程序。在本教程中,我们将介绍如何使用 Nginx 作为反向代理,在 DigitalOcean 的 droplet 云主机上部署 Next.js 应用程序。以下是逐步指南,假设你已经准备好部署 Next.js 应用程序并且拥有一个 DigitalOcean 帐户。

以下是一些你可能需要的关键资源概述:

  1. Next.jsNext.js 框架的官方网站。
  2. ReactReact JavaScript 库的官方网站。
  3. DigitalOcean如果你还没有 DigitalOcean 帐户,请创建一个。DigitalOcean 的云服务器,最低只需 4 美元每月,支持信用卡、Paypal 支付,如果遇到信用卡验证问题可参考这篇教程。

准备工作

  • Next.js 应用程序
  • DigitalOcean 帐户
  • 注册域名(可选,但推荐有一个)
  • 本地安装 Node.js 和 npm 或 yarn

步骤 1:创建 DigitalOcean Droplet

我们将在我们自己配置的 DigitalOcean Droplet 上托管我们的 Next.js 应用程序。现在让我们创建 Droplet。

  • 登录你的 DigitalOcean 帐户并导航到 Droplets 部分。
  • 单击“创建 Droplet”。
  • 选择 Ubuntu 映像(最好是最新的 LTS 版本)。
  • 根据你的需求和预算选择所需的 Droplet 大小。
  • 选择最靠近目标受众的数据中心区域以获得更好的性能。
  • 添加您的 SSH 密钥以安全访问您的 Droplet。
  • 为您的 Droplet 选择主机名,可以是你的域名或任何首选名称。
  • 单击“创建 Droplet”。
  • 创建 Droplet

一旦创建了 Droplet,请记下分配给它的 IP 地址。

第 2 步:设置 Droplet

现在我们已经创建了 Droplet,我们需要对其进行准备,以便它可以接受传入的连接并将这些连接路由到我们的 Next.js 应用程序。

使用你在创建 Droplet 期间提供的 IP 地址和 SSH 密钥通过 SSH 进入你的 Droplet:

ssh root@<DROPLET_IP>

更新并升级droplet上的软件包:

sudo apt update && sudo apt upgrade -y

安装所需的软件包:


sudo apt install -y nodejs npm nginx

步骤 3:配置 Nginx

Nginx 是处理到我们的 Next.js 应用程序的所有路由的工具。为你的 Next.js 应用程序创建一个新的 Nginx 配置文件:


sudo nano /etc/nginx/sites-available/nextjs

粘贴以下配置,将 server_name 替换为你的域名或 droplet IP 地址:


server {
  listen 80;
  server_name YOUR_IP_ADDRESS;
  location / {
    proxy_pass http://localhost:3000;
    proxy_http_version 1.1;
    proxy_set_header Upgrade 
$http_upgrade;
    proxy_set_header Connection 'upgrade';
    proxy_set_header Host $
host;
    proxy_cache_bypass $http_upgrade;
  }
}

保存并关闭文件。创建符号链接以启用配置:


sudo ln -s /etc/nginx/sites-available/nextjs /etc/nginx/sites-enabled/

测试 Nginx 配置是否存在语法错误:

sudo nginx -t

如果配置测试成功,重启Nginx:


sudo service nginx restart

步骤 4:部署 Next.js 应用程序

接下来,我们将把一个 Next.js 应用程序部署到 Droplet 上。有很多方法可以实现这一点:

  • 在服务器上创建一个 SSH 密钥,将其连接到你的 GitHub 帐户,然后克隆你的存储库。
  • 在 Droplet 上创建一个 Next.js 应用程序。

在本教程中,我们将会在 Droplet 中创建一个全新的 Next.js 应用程序。

通过 SSH 返回你的 Droplet:

ssh root@<DROPLET_IP>

创建一个新的 Next.js 应用程序并按照提示进行操作:

cd /var/www
npx create-next-app nextjs

导航到 Next.js 应用程序目录:

cd nextjs

安装应用程序依赖项:

npm install

构建 Next.js 应用程序:

npm run build

最后,启动 Next.js 应用程序:

npm start

你的 Next.js 应用程序现在已经成功部署,可以通过你的域名或 Droplet 的 IP 地址访问。为了确保你的应用程序能够在后台运行,并在崩溃或服务器重启时自动重启,建议使用 PM2 等进程管理器。

步骤 5:设置 PM2 进程管理器

我们在 Droplet 中运行了 npm start。有时,此命令可能会因服务器重新启动或需要安装更新等原因而停止运行。我们将使用名为 PM2 的工具来确保我们的 Next.js 应用程序始终运行。如果 Next.js 应用程序出现故障,PM2 甚至会重新启动它。

要在 Droplet 上全局安装 PM2:

sudo npm install -g pm2

导航到 Next.js 应用程序目录(如果尚未存在):

cd /var/www/nextjs

使用 PM2 启动 Next.js 应用程序:

pm2 start npm --name "nextjs" -- start

此命令将使用 npm start 命令启动名为“nextjs”的 Next.js 应用程序。如果应用程序崩溃或服务器重新启动,PM2 将自动重新启动该应用程序。

要确保 PM2 在启动时启动,请运行:

pm2 startup

此命令将生成一个脚本,你可以将其复制并粘贴到终端中,以使 PM2 在启动时启动。

保存当前的 PM2 进程:

pm2 save

结论

现在,你已经成功地使用 Nginx 作为反向代理,并使用 PM2 作为进程管理器,在 DigitalOcean 的 Droplet 上部署了 Next.js 应用程序。你的应用程序应该可以通过域名或 Droplet 的 IP 地址访问。

如果你使用域名,请记得配置 DNS 设置。将域名的 A 记录指向 Droplet 的 IP 地址,以便通过域名访问应用程序。

为了提高安全性和 SEO,建议使用 Let’s Encrypt 设置 SSL 证书并强制执行 HTTPS 连接。此外,你还可以探索使用缓存和其他性能优化措施来提升你的 Next.js 应用程序的效率。

就是这样!你已成功在 DigitalOcean Droplet 上部署了 Next.js 应用程序。

如果你需要了解 DigitalOcean 云服务的更多产品,可访问英文官网。如果你需要中文 支持,可联系 DigitalOcean 中国区独家战略合作伙伴卓普云。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2118330.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

数学建模笔记—— 线性规划

数学建模笔记—— 线性规划 线性规划1. 模型引出1.1 线性规划模型的三要素1.2 线性规划模型建立步骤1.3 线性规划的表现形式1.4 线性规划的模型特点 2.典型例题3. python代码求解3.1 求解KK升级的问题3.2 求解投资收益问题 线性规划 在人们的生产实践中&#xff0c;经常会遇到…

jenkins工具的介绍和gitlab安装

使用方式 替代手动&#xff0c;自动化拉取、集成、构建、测试&#xff1b;是CI/CD持续集成、持续部署主流开发模式中重要工具&#xff1b;必须组件 jenkins-gitlab&#xff0c;代码公共仓库服务器&#xff08;至少6G内存&#xff09;&#xff1b;jenkins-server&#xff0c;需…

【LoRa】对TX与RX的TOA时间的理解

目录 1 前言2 解释说明3 延申-计算TOA 1 前言 大家可能已经知道在射频传输中&#xff0c;TOA&#xff08;Time on Air&#xff09;是指本包传输所需时间。本章主要来讨论如何理解这段时间&#xff0c;并从发送端和接收端一起来理解。本章是基于LoRa所做的测试&#xff0c;但我…

OutBrain原生广告新赛道助力欧美流量变现优势与实战策略

揭秘欧美流量变现新蓝海&#xff1a;OutBrain原生广告的优势与实战策略 在数字化时代&#xff0c;流量即金钱的观念深入人心&#xff0c;尤其是对于欧美市场而言&#xff0c;高效、精准的流量变现策略成为了众多网站主、博主及内容创作者关注的焦点。OutBrain&#xff0c;作为…

凭什么要买净水器?

近年来&#xff0c;购买净水器的人越来越多&#xff0c;净水器似乎成了一件必不可少的家电。 但仍有部分人保持着传统的观念&#xff0c;认为喝自来水烧开的白开水是最健康的&#xff0c;净水器都是商家炒作出来的&#xff0c;不可信。 可事实是这样吗&#xff1f;其实你家水…

多语言ASO – 本地化的10个技巧

ASO优化是一个复杂的领域&#xff0c;即使你只关注讲英语的用户。如果您想面向国际受众并在全球范围内发展您的应用程序业务&#xff0c;您必须在App Store和Google Play Store上本地化应用程序的产品页面。不过&#xff0c;应用程序商店本地化的过程也有很多陷阱。 应用商店本…

U盘数据恢复秘籍:四款软件的亲测推荐!

U盘作为便捷的存储工具被广泛使用&#xff0c;但随之而来的是数据丢失的风险。面对U盘中的宝贵资料不慎丢失&#xff0c;如何高效、安全地恢复成为关键。推荐几款亲测好用的U盘数据恢复软件&#xff01; 第一款&#xff1a;福昕数据恢复 直达链接&#xff1a;www.pdf365.cn/f…

elementui Cascader 级联选择器的使用总结

实现效果 技术要点总结如下&#xff1a; 1、点击添加自动增加多行&#xff0c;实现自主选择增加多条节点数据 2、节点地址使用的是Cascader 级联选择器&#xff0c;需要动态生成&#xff0c;涉及到一个技术要点是&#xff1a;因v-modal只能获取value不能获取label&#xff0c;故…

CCF编程能力等级认证GESP—C++7级—20240907

CCF编程能力等级认证GESP—C1级真题 单选题&#xff08;每题 2 分&#xff0c;共 30 分&#xff09;判断题&#xff08;每题 2 分&#xff0c;共 20 分&#xff09;编程题 (每题 25 分&#xff0c;共 50 分)小杨寻宝矩阵移动 单选题&#xff08;每题 2 分&#xff0c;共 30 分&…

Spring AOP,通知使用,spring事务管理,spring_web搭建

spring AOP AOP概述 AOP面向切面编程是对面向对象编程的延续&#xff08;AOP &#xff08;Aspect Orient Programming&#xff09;,直译过来就是 面向切面编程,AOP 是一种编程思想&#xff0c;是面向对象编程&#xff08;OOP&#xff09;的一种补充。&#xff09; 面向切面编…

开放系统,面向各类业务需求可提供定制化服务的智慧物流开源了

智慧物流视频监控平台是一款功能强大且简单易用的实时算法视频监控系统。它的愿景是最底层打通各大芯片厂商相互间的壁垒&#xff0c;省去繁琐重复的适配流程&#xff0c;实现芯片、算法、应用的全流程组合&#xff0c;从而大大减少企业级应用约95%的开发成本。构建基于Ai技术的…

高效录音转文字:2024年四大工具精选!

在快节奏的工作生活中&#xff0c;能够快速将录音转换成文字是一项非常实用的能力。特别是在需要记录会议纪要、讲座内容或者是采访素材的时候&#xff0c;一款优秀的在线录音转文字工具能派上大用场。以下推荐几个好用的录音转文字工具&#xff01; 365在线转文字 直达链接&…

性能测试工程师必须掌握的诊断工具及应用实例

“工欲善其事&#xff0c;必先利其器”&#xff0c;那么作为一名性能测试工程师需要了解到的诊断工具有哪些呢&#xff1f;在实际工作中要怎么去应用呢&#xff1f; 1、应用层报文抓取工具-HTTPWatch 快速定位请求、响应时间 快速查找请求、响应完整HTTP报文 快速定位请求、…

1、程序如何生成和运行

程序如何生成和运行 一、生成可执行文件1、 源文件2、 预处理&#xff1a;g -E hello.cpp -o hello.i //将头文件&#xff0c;宏定义等替换到源文件3、 编译&#xff1a;g -S hello.i -o hello.s // 生成汇编代码4、 汇编&#xff1a;g -c hello.s -o hello.o // 生成二进制目标…

【区块链 + 基层治理】链动社区:基于 FISCO BCOS 的智慧社区数字化治理平台 | FISCO BCOS应用案例

“链动社区——基于 FISCO BCOS 的智慧社区数字化治理平台”是智慧社区治理服务一套完整系统&#xff0c;通过使用 FISCO BCOS 联盟链方案进行社区数据管理&#xff08;积分交易数据和行为数据等&#xff09;、对社区工作进行数字化支持&#xff0c;激发社区治理的多元主体参与…

Linux相关概念和重要知识点(1)(交互方式、存储结构、定位方式)

1.Linux是什么&#xff1f; Linux是一款继Unix之后开发的一款开源操作系统。 操作系统是基础性系统软件&#xff0c;是人机交互的一个媒介&#xff0c;我们日常使用的Windows、iOS、Android都是操作系统&#xff0c;用户都是和操作系统打交道的。像Windows、iOS是闭源的&…

【西电电装实习】流水灯(高级贴片焊接练习)

前言 说明书 左边实现流水&#xff0c;右边实现灯&#xff0c;灯与灯之间独立 此练习板具有功能 注意事项 不能焊错芯片&#xff0c;会影响功能先焊右侧比较好焊的用万用表检测电路质量 引脚序号 有圆点是第一个脚&#xff0c;然后逆时针按自然数顺序标引脚

随手记:uniapp小程序登录方式和小程序使用验证码登录

小程序登录方式&#xff1a; 方式一&#xff1a;小程序授权登录 通过uni.login获取 临时登录凭证code&#xff0c;向后端换取token。 <u-button type"primary" shape"circle" click"login">登 录</u-button>login() {uni.login({p…

零基础国产GD32单片机编程入门(十六)DMA详解及ADC-DMA方式采集含源码

文章目录 一.概要二.GD32F103C8T6单片机DMA外设特点三.GD32单片机DMA内部结构图四.DMA各通道请求五.GD32F103C8T6单片机ADC-DMA采集例程六.工程源代码下载七.小结 一.概要 基本概念&#xff1a; DMA是Direct Memory Access的首字母缩写,是一种完全由硬件执行数据交换的工作方式…

QML学习三:qml设计器报错 Line: 0: The Design Mode requires a valid Qt kit

开发环境:Qt 6.5.3 LTS 1、Qt 6.5.3 LTS 2、Pyside6 3、Python 3.11.4 4、win11 默认不打开设计器的时候可以看到我们默认是有Python的环境,而且点击运行是可以运行的。但是当打开qml设计器时提示下面这个错误,提示需要一个可用的套件。 解决办法: 点击+号创建新的套件…