部署到 Heroku:Docker、Go 和 React 什么是 Heroku?使用 CRA 设置 React 应用 编写 Go 后端服务 构建应用程序的生产版本 Docker Heroku

2025-06-08

部署到 Heroku:Docker、Go 和 React

Heroku 是什么?

使用 CRA 设置 React 应用

编写 Go 后端来提供服务

构建production我们的应用程序版本

Docker

赫罗库

我们将向 Heroku 部署一个React应用程序,该应用程序将由Go 后端提供服务,然后整齐地包装在Docker 镜像中。

您需要以下物品:

  • Golang(我正在使用 v1.13.5)
  • npm
  • 文本编辑器(我正在使用 VSCode)
  • 基于unix的终端
  • Docker
  • Heroku 帐户和 Heroku CLI

Heroku 是什么?

从他们的页面

“Heroku 是一个平台即服务 (PaaS),使开发人员能够完全在云中构建、运行和操作应用程序。”

使用 CRA 设置 React 应用

我们将使用create-react-app来引导我们的 React 项目。

npx create-react-app deployment-demo

编写 Go 后端来提供服务

让我们将目录更改为我们新创建的 React 项目,创建一个名为的子目录server在其中创建一个名为server.go 的文件:

cd deployment-demo/ && mkdir "server" && cd "$_" && touch server.go

打开您最喜欢的文本编辑器并将以下内容粘贴到server.go中:

package main

import (
    "log"
    "net/http"
    "os"
)

func main() {
    /*
        Grab the environment variable that has been hopefully set, but also set up a default
    */
    port := os.Getenv("PORT")
    defaultPort := "8080"
    /*
        Serve the contents of the build directory that was produced as a part of `npm run build` on the root `/`
    */
    http.Handle("/", http.FileServer(http.Dir("./build")))

    /*
        Check if the port environment variable has been set and if so, use that, otherwise let's use a reasonable default
    */
    if !(port == "") {
        log.Fatal(http.ListenAndServe(":"+port, nil))
    } else {
        log.Fatal(http.ListenAndServe(":"+defaultPort, nil))
    }
}

Enter fullscreen mode Exit fullscreen mode

警告:Heroku 为我们提供了一个端口来绑定我们的 Web 应用程序,因此我们从环境变量中获取该端口,您可以在此处阅读更多相关信息

构建production我们的应用程序版本

从我们当前目录../deployment-demo/server返回到我们的 React 项目的根目录,然后运行:

npm run build

这将生成一个名为的目录build

让我们将其复制到我们的server目录中,它将作为我们的生产有效载荷。

cp -r build/ server/

我们现在可以导航回我们的server目录并开始部署。

Docker

在服务器目录中创建以下 Dockerfile

# Stage 1
FROM golang:alpine as builder
RUN apk update && apk add --no-cache git
RUN mkdir /build 
ADD . /build/
WORKDIR /build
RUN go get -d -v
RUN go build -o deployment-demo .
# Stage 2
FROM alpine
RUN adduser -S -D -H -h /app appuser
USER appuser
COPY --from=builder /build/ /app/
WORKDIR /app
CMD ["./deployment-demo"]
Enter fullscreen mode Exit fullscreen mode

赫罗库

创建应用程序

如果您没有 Heroku 帐户,请立即创建一个!(创建时间应该不到 5 分钟)

完成后,您将需要 Heroku CLI,可以通过运行以下命令轻松在 Ubuntu 上安装:

sudo snap install heroku --classic

安装CLI后,运行以下命令登录:

heroku login

这将打开一个浏览器窗口供您登录(这是一个非常酷的系统)

现在运行:

heroku create [YOUR_APP_NAME]

deployment-demo/server/目录中。

您的 Heroku 帐户上将创建一个应用程序,您应该能够在仪表板上看到它

容器注册表

Heroku 容器注册表允许您将 Docker 镜像部署到 Heroku。

您可以在此处阅读更多相关信息

运行以下命令登录注册表:

heroku container:login

运行此命令来构建您的 Docker 镜像并将其推送到 Heroku:

heroku container:push web --app [YOUR_APP_NAME]

注意,我们指定了web,这表示我们想要与此应用程序关联的进程类型。有关进程类型的更多内容,请参阅此处

最后,运行此命令将图像发布到您的应用程序:

heroku container:release web --app [YOUR_APP_NAME]

现在,我们应该能够通过运行以下命令导航到 Heroku 上托管的应用程序:

heroku open --app [YOUR_APP_NAME]

我们应该看到以下内容:

最终应用程序在 Heroku 上运行

就这样!这就是你需要做的全部工作,将一个运行着 Go 服务器的 Docker 镜像部署到 Heroku,该镜像为 React 应用程序提供服务!

鏂囩珷鏉ユ簮锛�https://dev.to/cishiv/deploying-to-heroku-docker-go-and-react-38hh
PREV
2022 年最值得使用的 7 个 Angular 组件库 因此,以下是 2020 年最值得使用的一些 Angular 组件库:-
NEXT
如何在 Linux 中为初学者设置 Django 环境