基于.NetCore开发博客项目 StarBlog - (31) 发布和部署【领红包封面】

💡 原文中文,约5100字,阅读约需13分钟。
📝

内容提要

本文介绍了几种常见的部署方式,包括框架依赖发布、自包含发布、本机部署(使用supervisor)、docker部署和流水线部署。对于每种方式,文章都提供了详细的步骤和配置示例。此外,还提到了使用Nginx反向代理和正确获取IP的注意事项。总的来说,本文为读者提供了多种选择,以便根据自己的需求进行部署。

🔎

延伸解读

发布模式选择:框架依赖 vs 自包含 vs AOT

文章介绍了三种发布模式:框架依赖需要目标机器安装对应运行时,类似Java的jar包;自包含自带运行时,可直接执行;AOT生成原生二进制,无需运行时。对于AspNetCore项目,AOT在dotnet8中才较完善,且需要修改代码,因此本文项目未采用。选择时需权衡部署便利性与环境依赖。

裁剪与单文件发布的注意事项

使用PublishTrimmed和PublishSingleFile可以减小体积、简化部署,但裁剪可能误删反射调用的代码,若项目大量使用反射需谨慎。此外,单文件发布默认不包含C/C++编写的原生库(如SQLite.Interop.dll),需添加IncludeNativeLibrariesForSelfExtract参数才能一并打包。

部署方式对比:本机、Docker与流水线

本机部署搭配supervisor简单直接,适合小型项目;Docker部署灵活,可结合镜像仓库和流水线实现自动化;流水线部署能减少手动操作,但需要额外配置。文章提供了每种方式的配置示例,读者可根据团队规模和运维需求选择。

反向代理下的真实IP获取

使用Nginx反向代理或Docker部署时,若未正确配置,后端获取的访客IP会是127.0.0.1。需在Nginx中设置X-Forwarded-For和X-Forwarded-Proto头,并在后端启用ForwardedHeaders中间件,以确保访问记录等功能正常。

❓

Q&A

StarBlog 项目有哪些常见的部署方式?

文章介绍了五种部署方式:框架依赖发布、自包含发布、本机部署(使用 supervisor)、docker 部署和流水线部署。

框架依赖发布和自包含发布有什么区别?

框架依赖发布需要目标机器安装对应版本的 .NET 运行时才能运行,类似 Java 的 jar 包;自包含发布则自带运行时,可以直接执行,无需额外安装。

如何使用 supervisor 部署 StarBlog?

首先安装 supervisor(pip install supervisor),然后在 /etc/supervisord.d/ 下创建配置文件(如 star_blog.ini),配置 program 段指定目录、执行命令、自动重启等,最后启动 supervisor 服务并设置自启动。

docker 部署 StarBlog 的步骤是什么?

参考官方模板,先进行框架依赖发布,然后准备 Dockerfile 和 docker-compose.yaml,构建镜像并启动容器(docker compose up),之后更新只需上传可执行文件覆盖即可。

使用 Nginx 反向代理时如何正确获取访客真实 IP?

需要在 Nginx 配置中添加 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 和 proxy_set_header X-Forwarded-Proto $scheme;,并在后端配置中间件 app.UseForwardedHeaders 来转发头部。

AOT 发布有什么特点?StarBlog 目前支持吗?

AOT(Ahead of time)生成二进制文件,不需要运行时可以直接运行,是 .NET 8 加强的功能。但 StarBlog 开发时尚未支持 AOT,目前只使用框架依赖和自包含发布,后续会研究。

🏷️

标签

➡️

继续阅读