【发布时间】:2021-01-15 20:29:08
【问题描述】:
问题
我的应用托管在 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