我的 MERN 应用程序部署在 Namecheap / cPanel 上,但它没有访问 Mongo Atlas DB

问题描述 投票:0回答:2

问题

我的应用程序托管在 Namecheap 共享主机上,但它无法连接到我的 Mongo Atlas DB。

详情

我对此很陌生,并且只部署到 Heroku。 我一开始尝试使用它们,但我不知道如何使用 S3 上传/检索图像文件。

所以我正在尝试 Namecheap。

无论如何,在cPanel文件目录中,我的应用程序位于:

/home/username/repositories/myapp

我还在本地运行了

npm run build
命令,并将新创建的
/build/
目录的内容放入 cPanel 的
/home/username/public_html

我几乎可以肯定,不必这样做,但到目前为止,这是唯一能让我的实际网站在浏览器上呈现的方法。

我使用 cPanel 的“Setup NodeJS App”菜单来放置我的应用程序,并将“Application Starter File”设置为

server.js

我的server.js文件

const mongoose = require('mongoose');
const express = require('express');
const app = express();
const dotenv = require('dotenv');
const cors = require('cors');
const path = require('path');

// Activate dotenv for secure keys
dotenv.config();


// Middleware to recognize incoming Request Object as a JSON object
app.use(express.json());


// Local file storage
app.use('/uploads', express.static('uploads'));


// Bind Routes
const commissions = require('./routes/api/commissions');
const projects = require('./routes/api/projects');
const users = require('./routes/api/users');
// Use Routes
app.use(cors());
app.use('/commissions', commissions);
app.use('/projects', projects);
app.use('/users', users);


// Mongo connect
mongoose
  .connect(process.env.URI || process.env.MONGO_URI, {
    useNewUrlParser: true,
    useUnifiedTopology: true,
    useCreateIndex: true
  })
  .then(() => console.log("Connected to MongoDB"))
  .catch(err => console.log(err));


// For Deployment
if(process.env.NODE_ENV === 'production') {
  app.use(express.static(path.join(__dirname, 'client', 'build')));

  app.get('*', (req, res) => {
    res.sendFile(path.join(__dirname, 'client', 'build', 'index.html'));
  });
};


// Run server
const port = process.env.PORT || 5000;
app.listen(port, () => console.log(`Server started on port ${port}`));

我在 cPanel 中运行了 NPM 安装(以及我的 package.json 中的脚本以在客户端运行

npm install
),希望这两者都能使我的应用程序正常工作(就像在开发中一样)。

我还检查了我的 Mongo Atlas IP 白名单,但它已经允许

0.0.0.0/0
(来自我的 Heroku 部署)。

此外,namecheap 支持人员为我打开了端口 5000(我在另一个论坛上读到,这是针对有类似问题的人的解决方案),但这对我来说也不起作用。

reactjs deployment cpanel mern namecheap
2个回答
1
投票

解决者:

  • 将我的共享主机 IP 地址(位于 cPanel 中)添加到 Mongo Atlas IP 白名单

  • 联系 cPanel 支持并让他们打开适当的后端端口

  • 在 cPanel 的“设置 NodeJS 应用程序”菜单上更改我的应用程序的 NodeJS 版本

最重要的是 Node 版本。 Node 有很多版本,但截至本文为止,cPanel 只有以下 Node Version 选项:

12.19.1
11.15.0
10.22.0
9.11.2
8.17.0
6.17.1

我的特定版本不是这些,所以我被告知只选择可用的最高版本。 但这就是破坏与我的 Mongo Atlas DB 的连接的原因。

我测试了每一个选项,最有效的是

8.17.0


0
投票

将数据库托管在云服务器(如 mongo db atlas)上的最佳解决方案,将您的主机地址添加到允许的 IP 地址列表中,然后可能使用 mongoose 将我连接到您的项目

© www.soinside.com 2019 - 2024. All rights reserved.