问题描述
我无法解决某个 Heroku 问题(图像存储/检索),所以我正在尝试使用 Namecheap。
我从 Namecheap 购买了一个域和网络主机服务器,因此我可以部署我为客户制作的完整 MERN 堆栈应用程序。
应用文件结构:
AppName
|
--client <<~~create-react-app
|
--middleware
|
--models
|
--node_modules
|
--routes
|
--uploads
|
--.env
|
--.gitignore
|
--package-lock.json
|
--package.json
|
--README.md
|
--server.js
-
将我的域的名称服务器设置为
Namecheap Web hosting DNS
(namecheap 指南说明) -
在
npm run build
中运行/client
(虽然没有执行serve -s build
)以生成/client/build
server.js
// 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,'build','index.html'));
});
};
-
通过
Git Version Control
cPanel 选项将我的 git 存储库连接到域 -
将我所有的应用文件上传到 cPanel
File Manager
(由Git Version Control
自动完成) -
使用了 cPanel 的
Setup NodeJS App
功能
设置 NodeJS 应用程序需要多个表单字段:
NodeJS version: 12.19.1 <<~~slightly higher than mine,their support team advised me to do that
Application mode: Production
Application root: repositories/AppName <<~~path from the cPanel File Manager
Application URL: my-domain.com
Application Startup File: repositories/ChrisPortfolio/client/build/index.html <<~~this has been a guessing game,more notes below
至于 Application Startup File
,我尝试了 server.js
并在这里尝试了一些东西。
我尝试过的一切都导致,在浏览器中访问应用程序并点击“未找到”页面。
然而,使用 repositories/ChrisPortfolio/client/build/index.html
时,应用程序会说“它有效!”并显示我选择的 Node 版本,但是......它没有显示实际的应用程序。
有一个选项可以从 cPanel npm install
仪表板内部运行 NodeJS
,我确保这样做。
我想也许我还需要让它在 npm install
目录中运行 /client
,但仪表板不允许您选择希望运行命令的位置。
无论如何,这就是我所在的地方。希望这对某人来说很熟悉。
解决方法
解决部署问题:
cPanel 的 Git 版本控制选项来克隆我的存储库,在我的文件管理器中创建 /home/username/repositories/appname
目录
在我的npm run build
中运行/client
后,直接将/build
的内容上传到/home/username/public_html
(需要index.html
在这个文件夹的根目录)
cPanel 的 Setup NodeJS App 功能,引用上面提到的目录为 Application Root,server.js
为 Application Startup File
应用现已部署。