node.js - 如何在服务器上部署 Node Js 后端和 React Js 前端?
问题描述
我使用运行在port 5000
. 我的前端使用的是运行在port 3000
. 并且它们都位于根目录的不同文件夹中。
我想上传这两个并部署在数字海洋服务器上。我是这个部门流程的新手。请问如何在服务器上部署这两个并通过一个命令运行
解决方案
这是一种方法(使用节点服务器作为由 Apache 服务器提供的 React 网站的 API)。
您可以让 nodejs 在端口 5000(在远程服务器上)上运行,但请确保您没有使用localhost
but 0.0.0.0
.
IE。app.listen(5000, "0.0.0.0")
;
现在,您应该能够通过该端口上的公共 IP/DNS 名称与节点服务器通信,即。myPublicIpOrDNSname:5000。(假设您已经安装nodejs
了npm
=> 注意版本,apt-get install nodejs
默认情况下,将获取旧版本)
如果您需要更新版本,nodejs
则可以按照以下步骤获取它(您可以将该setup_8.x
部分替换为您的首选版本)。
cd ~
curl -sL https://deb.nodesource.com/setup_8.x -o nodesource_setup.sh
sudo bash nodesource_setup.sh
sudo apt-get install nodejs
使用 Apache2 服务器为您的静态(React、css、...)文件提供服务(您不需要运行create-react-app server
)。
sudo apt-get update
sudo apt-get install apache2
使用构建您的 React 项目npm run build
,然后将在文件/build
夹内(在 React 文件夹中)创建的文件放置到/var/www/html
(在远程服务器上)。请注意,您需要从文件夹中放置文件和文件/build
夹,而不是/build
文件夹本身。
现在,当您键入myPublicIpOrDNSname地址时,您应该能够看到您的反应网站正在运行(假设 Apache 正在运行sudo systemctl start apache2
)。
为了让 Apache 正常工作(如果您使用的是前端路由 - 即。react-router-dom
),您需要转到/etc/apache2/sites-enabled/000-default.conf
并放置此配置
<Directory "/var/www/html">
RewriteEngine on
# Don't rewrite files or directories
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]
# Rewrite everything else to index.html to allow html5 state links
RewriteRule ^ index.html [L]
</Directory>
在<VirtualHost ...>
该文件中的部分下。(Apache 不知道您的 React 路由。这将使其将每个不知道如何处理的请求推送到根并让 React 处理路由)
然后需要确保 RewriteEngine 正在运行(否则重启 Apache 服务器时会报错)。
sudo a2enmod rewrite
最后,重启 Apache 服务器
sudo /etc/init.d/apache2 restart
现在,它应该可以工作了。
请注意,您需要使用新的公共 IP/DNS 修改 React 中的 ajax 调用。
推荐阅读
- flutter - Flutter 应用程序在 iPhone Xr (iOS 13) 上崩溃,但在 Android(物理和模拟器)、旧 iPhone 或 iOS 模拟器上从未崩溃
- c# - 给定一个点和方向,如何得到一个距离左边 1 个单位的新点?
- flutter - 错误:没有为“FirebaseAuth”类定义方法“signInWithPhoneNumber”
- javascript - iFrame 关闭时会话存储未重置
- android - 如何在界面中更改 TextView 的文本
- javascript - 遍历 JSON
- javascript - Chrome 在高迭代次数上意外减速
- c# - 如何让 View 在 ASP.NET MVC 中接受并清空列表?
- sql - SQL。如何检查插入的数据是否包含另一个表中正确组的值?
- node.js - 更新 DynamoDb 项目属性时更新 React 前端