发布于 2026-01-05 1 阅读
0

将 .NET Core 部署到 Heroku

将 .NET Core 部署到 Heroku

我一直很喜欢用 C# 编程。同样,我也很喜欢用 Heroku 来托管个人项目——他们的用户界面很棒,而且还有免费套餐!

但是,也存在一些限制。值得注意的是,.NET Core 目前不支持😢。不过我们可以解决这个问题!

修复方案

虽然 Heroku 无法直接运行 C# 代码,但它支持 Docker 容器。因此,我们的解决方案很明确——将一切容器化!

将 .NET Core 应用部署到 Docker

以下内容并非 .NET Core 课程,但如果您是初学者,或许可以从中学习到一些关于浏览基础文件的基础知识。我们将涵盖以下内容:

  • 从命令行创建一个新的 .NET Core MVC 项目
  • 修改基础文件以使其与 Heroku 和 Docker 兼容。
  • 配置新的 Heroku 应用
  • 将我们的应用部署到 Heroku 🚀

1. 入门指南

在开始修改代码之前,我们需要先理顺基础组件。继续之前,您应该具备以下条件:

  1. 您的设备上已安装 .NET Core
  2. 设备上已安装 Docker
  3. 注册一个 Heroku 账号! - https://signup.heroku.com/
  4. 安装Heroku CLI,它允许我们与容器注册表进行通信。

这些都解决了,我们准备出发。

2. 创建新的 .NET Core 应用程序

首先,我们需要创建一个新的.NET Core应用程序。我将按照这里提供的步骤来设置一个基本的.NET Core MVC项目

3. 设置新的 Dockerfile

所需的 Dockerfile 非常基础,没有太多复杂之处。

# Dockerfile

FROM mcr.microsoft.com/dotnet/core/sdk:3.1 AS build-env
WORKDIR /app

# Copy csproj and restore as distinct layers
COPY *.csproj ./
RUN dotnet restore

# Copy everything else and build
COPY . .
RUN dotnet publish -c Release -o out

# Build runtime image
FROM mcr.microsoft.com/dotnet/core/aspnet:3.1
WORKDIR /app
COPY --from=build-env /app/out .

# Run the app on container startup
# Use your project name for the second parameter
# e.g. MyProject.dll
ENTRYPOINT [ "dotnet", "HerokuApp.dll" ]
Enter fullscreen mode Exit fullscreen mode

此外,您可能还需要设置一个 .dockerignore 文件来减小镜像大小。

# .dockerignore

bin/
obj/
Enter fullscreen mode Exit fullscreen mode

如果您想测试您的容器,可以运行

docker build -t YourAppName .

# The name variable (abc) is simply used to refer to the 
# container later when we want to close everything down.
docker run -d -p 8080:80 --name abc YourAppName
Enter fullscreen mode Exit fullscreen mode

访问http://localhost:8080,您应该可以看到您的应用程序正在运行。

一切正常吗?太好了!我们先在本地关闭容器。如果它马上要上线运行,我们就不需要它在这里运行了!

docker rm --force abc
Enter fullscreen mode Exit fullscreen mode

4. 在 Heroku 中配置新应用

  1. 登录 Heroku,然后通过您的个人控制面板(https://dashboard.heroku.com/apps )创建一个新应用。
    • 您需要提供应用程序名称和部署区域
  2. Heroku 随后会显示各种部署选项。我们将使用容器注册表。 Heroku部署选项

5. 发布到 Heroku 🚀

最后,让我们把它放到网上。

1. 使用命令行登录 Heroku 容器注册表。

heroku container:login
Enter fullscreen mode Exit fullscreen mode

2. 如果你没有按照上述步骤操作,请确保构建你的 Docker
容器!

docker build -t YourAppName .
Enter fullscreen mode Exit fullscreen mode

3. 将新建的容器推送到 Heroku

# 'YourAppName' should be the name of the app you 
# configured in Heroku in step 4.
heroku container:push -a YourAppName web
Enter fullscreen mode Exit fullscreen mode

4. 最后,发布!

heroku container:release -a YourAppName web
Enter fullscreen mode Exit fullscreen mode

现在,如果您访问https://your-app-name.herokuapp.com,应该就能看到基础应用了。等等……好像不行!怎么回事?!
替代文字

请查看 Heroku 日志。

heroku logs --tail
Enter fullscreen mode Exit fullscreen mode

在这些看起来很吓人的日志中,你会看到 .NET Core 启动“Kestrel”(.NET Core 的 Web 服务器)失败了。这意味着我们的应用无法启动😢。 如果你还记得,之前我们在本地配置 Docker 容器时,传递的参数之一就是端口。当 Heroku 给我们分配端口时,我们的应用需要知道这个端口!
替代文字

修改 Dockerfile 的结尾,使其变为

# Dockerfile

# ...

# ENTRYPOINT [ "dotnet", "HerokuApp.dll" ]
# Use the following instead for Heroku
CMD ASPNETCORE_URLS=http://*:$PORT dotnet HerokuApp.dll
Enter fullscreen mode Exit fullscreen mode

这样一来,我们的容器就可以在启动时使用 Heroku 提供的端口。

将所有内容重新部署到 Heroku:

  1. 构建 Docker 镜像
  2. 执行 heroku container:push
  3. 执行 heroku container:release 命令

瞧!您自己的 .NET Core 应用就托管在网络上了。

结论

我希望以上教程对大家有所帮助,并能让一些新手开始进行自己的 .NET Core 项目。

如果读者有任何补充建议或更好的方法,请在下方留言!

感谢阅读👋

文章来源:https://dev.to/alrobilliard/deploying-net-core-to-heroku-1lfe