【问题标题】:How to use deno in production如何在生产中使用 deno
【发布时间】:2020-09-16 18:29:51
【问题描述】:

我在本地 pc 中尝试了 Deno (https://deno.land/) 及其一些示例,我们必须在本地环境中执行 API 之前运行服务器。

我需要将它托管在服务器中,以便在我们请求时调用该 API,但我不知道该怎么做。

我有在生产模式下托管 PHP,.NET 的经验,我还没有使用过 Nodejs,所以我不知道那个过程。

【问题讨论】:

  • 我可能错了,但 Deno 和 NodeJS 不是两个不同的系统吗?它们是不一样的权利(即使两者都允许您在浏览器之外运行 Javascript)?
  • @Mathyn,是的,两者完全不同,但它们是 javascript,我不知道如何在生产模式下使用它们。
  • @Mathyn NodeJS 和 deno,都使用 chrome 的 V8 引擎作为运行时运行 Javascript。
  • 与其他服务器设置相比,Node 和 Deno 实际上是相似的......如果你想启动一个服务器,你需要在你的服务器机器上安装 Deno 运行时,然后添加你的项目代码并运行它...
  • @AshwynHorton Deno 由 NodeJS 创建者自己创建。他想创建一个安全的运行时以及更好的包管理器解决方案(npm 是一个大泥球)

标签: javascript deno


【解决方案1】:

您可以使用您喜欢的云提供商 AWS、DigitalOcean、Azure... 和 install deno 然后您可以使用 pm2 使用 interpreter 标志在服务器崩溃和/或在启动时启动服务器。

最简单的方法是创建一个ecosystem.config.js

module.exports = {
  apps: [
    {
      name: "app",
      script: "./deno.js",
      interpreter: "deno",
      interpreterArgs: "run --allow-net --allow-read",
    },
  ],
};

并使用interpreterArgs 传递您需要传递给deno 的参数。

现在你需要做的就是:

pm2 start

现在您的服务器将在您设置服务器的任何端口上可用。如果你愿意,你也可以使用 Nginx 作为反向代理。

您也可以使用您喜欢的任何流程管理器

【讨论】:

  • 在 deno 运行命令之前设置的 DENO_DIR 放在哪里?
【解决方案2】:

你可以使用:

pm2 start index.ts --interpreter="deno" --interpreter-args="run --allow-net" 

【讨论】:

    【解决方案3】:

    您可以考虑使用官方 denoland/deno Docker image 将您的应用程序容器化,如果容器编排平台无法满足您的特定需求,您可以将其部署到 AWS Fargate、Kubernetes 甚至只是运行在静态 Linux 机器上的 Docker 等。这是我根据上述图像为Deno microservice 编写的 Dockerfile:

    # Production Dockerfile that caches
    # project dependencies at build time
    
    FROM denoland/deno:1.15.3
    
    ARG postgres_host
    ARG postgres_user
    ARG postgres_password
    ARG postgres_db
    ARG postgres_pool_connections
    
    COPY . /microservice
    WORKDIR /microservice
    USER deno
    
    ENV POSTGRES_HOST=$postgres_host
    ENV POSTGRES_USER=$postgres_user
    ENV POSTGRES_PASSWORD=$postgres_password
    ENV POSTGRES_DB=$postgres_db
    ENV POSTGRES_POOL_CONNECTIONS=$postgres_pool_connections
    
    RUN ["deno", "cache", "deps.ts"]
    EXPOSE 8000
    CMD ["run", "--allow-env", "--allow-net", "service/server.ts"]
    

    【讨论】:

      【解决方案4】:

      您可以使用 NodeJS 生态系统提供的工具来托管 Node 应用程序:

      1. Netlify:可以部署您提交的节点应用程序的工具。使用 Gitops 的概念来触发自动构建。

      2. Surge

      3. Zeit Now/Vercel

      请注意,这些示例适用于静态网站。

      【讨论】:

      • 他们询问的是 Deno 应用程序,而不是 Node 应用程序。
      • 不要将 Zeit 用于 Node 或后端,他们现在明确告诉人们仅将他们的服务用于前端优先应用程序。
      • @Quentin Deno 刚刚发布。将其用于生产需要时间。
      • 虽然您可以提出不应在生产环境中使用 Deno 的论点,但没有理由不能。无论哪种方式,这个答案都不能远程回答文斯提出的问题。
      • 必须有人成为 deno 的第一个采用者,如果你不想成为它,那就不要成为它,但是,不要因为你自己的信仰而告诉人们使用不同的解释器,尤其是如果那不是 OP 的问题。
      猜你喜欢
      • 2020-09-17
      • 1970-01-01
      • 1970-01-01
      • 2022-12-24
      • 2020-09-01
      • 2020-10-31
      • 2020-10-22
      • 2020-09-24
      • 2015-03-23
      相关资源
      最近更新 更多