如何在共享托管上托管Gatsby + Node.js项目?

时间:2020-09-29 05:13:57

标签: node.js reactjs hosting gatsby shared-hosting

我在gatsby中有一个项目,该项目使用Node.js/express作为MySQL的后端。

现在,我知道我所要做的就是gatsby build,它将为我在html/css/js文件夹中创建静态project/public文件,我可以将所有文件粘贴到{ {1}}文件夹,它将起作用(正在起作用),但是我对数据库问题感到困惑:

我的问题是在public_html中,当我将mySql连接从gatsby-config.js更改为localhost设置时,例如:

db config

(注释之一是托管的数据库配置)

如果我在取消注释代码的同时运行hosted db。它说gatsby develop(很明显)。那么,如何在这里和No such DB Error文件中配置数据库设置以将数据库与项目连接?

我知道这听起来像是一个愚蠢的问题,但请为我下一步的工作感到困惑。

谢谢。

2 个答案:

答案 0 :(得分:1)

您应该使用environment variables在配置(本地配置和生产配置)之间切换。环境文件是存储敏感数据(例如API密钥,令牌等)的文件,因此必须忽略和取消跟踪它们,以避免将关键数据推送到公共存储库中。

默认情况下,Gatsby分别对.env.developmentenv.production命令使用gasby developgatsby build,当然,您可以覆盖此行为,但是,假设使用默认配置,您可以应该将以下代码段添加到您的gatsby-config.js

require("dotenv").config({
  path: `.env.${process.env.NODE_ENV}`,
})

然后,您需要在项目的根目录中创建一个.env.development.env.production并包含以下内容:

DB_HOST:yourHost
DB_USER:yourUserName
DB_PASSWORD:yourPassword
DB_NAME:youDatabaseName

当然,如果要在数据库或配置之间切换,每个文件应具有不同的变量。

将它们添加到您的gatsby-config.js

connectionDetails:{
  host: process.env.DB_HOST
  user: process.env.DB_USER
  password: process.env.DB_PASSWORD
  database: process.env.DB_NAME
}

最后一步是在主机中添加环境文件,以使Gatsby可以访问它们。 Amazon的S3允许配置它们,但我想这是托管服务的常见配置。

答案 1 :(得分:0)

好吧!在此上花费了很多时间。希望对别人有帮助。

静态盖茨比站点

如果您要在任何共享主机上托管静态gatsby网站。静态是指普通的盖茨比样式页面, 您可以按照gatsby doc的说明进行操作:

  • 运行:gatsby buildnpm run build

根据盖茨比:

Gatsby将为您的站点执行优化的生产构建,生成静态HTML和按路线的JavaScript代码包。

  • 之后:尝试npm run serve

根据gatsby

Gatsby启动本地HTML服务器以测试您的内置站点。在使用此命令之前,请记住使用gatsby build构建您的网站。 serve将测试您的构建文件(在yourprojectroot/public目录中新创建的文件)

这将在测试服务器(localhost:9000)上运行您的项目(使用构建文件)以基本上测试您的构建文件。

如果一切正常,请测试localhost:9000。您可以转到远程cPanel,然后将所有构建文件粘贴到public_html文件夹中。

前往您的域,您就很好了。

带有MySQL和Node / express的盖茨比

如果您要托管同时与node和mysql一起工作的gatsby网站,并且您是像我这样的托管新手,那么您将要做以下事情:

尝试上述两点。 (构建您的静态文件并尝试投放

在远程数据库上也使用与本地数据库相同的名称dbname,用户名和密码来设置数据库。

另外两件事:

现在,您要做的是在同一端口上运行节点服务器和gatsby(webpack)服务器(例如 8001 )。因此,我们将仅使用节点服务器,并将我们所有的gatsby文件(构建文件)作为静态内容保存到节点服务器。

  • 在您的节点文件中,添加:
app.use(express.static(path.join(__dirname, 'public')));

app.get('/*', function(req,res) {  
  res.sendFile(path.join(__dirname,'public/index.html'));
});

当您要通过index.html运行所有gatsby页面时,最后一个get('/*'...(上方)将处理所有请求的页面。根据您的远程文件夹结构更改公用路径

将构建文件和节点(服务器连接)文件一起添加到远程public_html文件夹中。

  • 接下来,将您的.htaccess文件(在远程文件中)添加或更改为:
RewriteEngine On
RewriteRule ^$ http://127.0.0.1:8001/ [P,L]
RewriteRule ^(.*)$ http://127.0.0.1:8001/$1 [P,L]

因此,当您通过服务器的终端运行节点文件时,上述的.htaccess不会将其重定向为yourdomainname.com:8001而不是yourdomainame.com

全部完成。

您的public_html现在应包含the build filesa node/express conn file.htaccess file

现在,只需转到您的终端即可。 cd进入public_html并运行node yournodefilename。 您现在可以转到您的域。

注意:可以使用pm2软件包使节点服务器始终运行。 希望对别人有帮助。