【问题标题】:How to host a Gatsby+Node.js project on a shared hosting?如何在共享主机上托管 Gatsby+Node.js 项目?
【发布时间】:2021-01-14 16:35:26
【问题描述】:

我在gatsby 有一个项目,它使用Node.js/express 作为后端和MySQL

现在,我知道我所要做的就是gatsby build,这将为我在project/public 文件夹中创建静态html/css/js 文件,我可以将它们全部粘贴到public_html 文件夹中,这将工作(它正在工作),但我对数据库的事情感到困惑:

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

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

如果我在取消注释代码时运行gatsby develop。它说No such DB Error(显然)。那么如何在此处以及gatsby-node.js 文件中配置数据库设置以将数据库与项目连接?

我知道这听起来可能是个愚蠢的问题,但请帮忙,因为我不知道下一步该做什么。

谢谢。

【问题讨论】:

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


    【解决方案1】:

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

    默认情况下,Gatsby 对gasby developgatsby build 命令分别使用.env.developmentenv.production,当然,您可以覆盖此行为,但是,假设默认配置,您应该将以下sn-p 添加到你的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 允许配置它们,但我猜这是托管的常见配置。

    【讨论】:

    • 谢谢。但无法访问process.env.DB_USER,正如它所说的undefined。有什么可能的原因吗?
    • 设置在您的.env.development.env.production?
    • 是的,我为生产和开发分别制作了两个 .env。另外,dotenv 配置了这个require("dotenv").config({ path: `.env.${process.env.NODE_ENV}`, })
    • 等等...DB_HOST:yourHost 不对。将其更改为 = 而不是 :
    • 问题:我应该在节点代理中进行哪些更改:proxy: { prefix: "/api", url: "http://localhost:8001", }, 以检测对节点/快递的调用??
    【解决方案2】:

    好的!在这上面花了很多时间。希望对其他人有所帮助。

    静态盖茨比网站

    如果您尝试在任何共享主机上托管静态 gatsby 网站。静态的,我的意思是简单的盖茨比风格的页面, 您可以按照gatsby doc 所说的那样做:

    • 运行:     gatsby build       或       npm 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 的 Gatsby

    ​​>

    如果您正在尝试托管您的 gatsby 站点,该站点也适用于 node 和 mysql,并且您像我一样是托管新手,那么您需要执行以下操作:

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

    在远程设置您的数据库,并使用与本地数据库相同的名称、用户名和密码。

    两个额外的东西:

    现在,您要做的是在同一个端口(比如 8001)上同时运行节点和 gatsby(webpack) 服务器。所以我们将只使用节点服务器并将我们所有的 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 将仅将其重定向到 yourdomainame.com 而不是 yourdomainname.com:8001

    全部完成。

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

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

    注意:您可以使用pm2 包来保持您的节点服务器始终运行。 希望它可以帮助某人。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-12-24
      • 2019-07-31
      • 1970-01-01
      • 1970-01-01
      • 2014-09-06
      • 1970-01-01
      • 2020-08-31
      • 2020-10-22
      相关资源
      最近更新 更多