Asp-Net-Core开发笔记:FrameworkDependent搭配docker部署
前言
之前我写过一篇使用 docker 部署 AspNetCore 应用的文章,这种方式搭配 CICD 非常方便, build 之后 push 到私有的 dockerhub ,在生产服务器上 pull 下来镜像就可以直接运行了。
然而,有时需要一种更传统的部署方式,比如在本地打包可执行文件之后直接放到服务器上执行。
.NetCore 打包可执行文件有两种方式
- 独立可执行文件 - 不依赖任何运行时环境,直接执行就可以启动
- 框架依赖 - 需要先安装对应版本的 dotnet-runtime 才可以运行
前者虽然方便,但打包出来比较大,据说在 .net8 版本会有优化,但后面的事后面再说,本文记录第二种方式,框架依赖,搭配 docker 部署,这样就无需在服务器上安装 runtime 了。
(PS:有点Java部署内味了)
这种方式配置完成之后,每次更新只需要重新本地重新 publish 后把可执行文件上传覆盖服务器上的版本即可,非常方便~
不生成 PDB
每次打包会生成一堆 pdb 调试文件,但部署的时候我们不需要这些文件,可以通过配置 .csproj 文件关闭。
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|AnyCPU'">
<DebugType>none</DebugType>
<DebugSymbols>false</DebugSymbols>
</PropertyGroup>
更好的方式是在解决方案的目录下创建 common.props 文件,把以上配置放在这个文件中,然后每个 .csproj 都引用这个文件,具体路径根据实际情况而定。
<Import Project="../../common.props" />
打包
使用以下命令打包
dotnet publish -f net7.0 -c Release -p:PublishSingleFile=true
打包之后生成一个需要依赖 runtime 运行的可执行文件,接下来准备一下 docker 的配置。
dockerfile
官方的 dockerfile 包含从源码构建到部署的整个流程,我们这里只需要 base 和 final ,也就是把可执行文件放进去微软的基础镜像里运行。
FROM mcr.microsoft.com/dotnet/aspnet:7.0 AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443
FROM base AS final
WORKDIR /app
COPY . .
ENTRYPOINT ["./AIHub.Blazor"]
docker-compose
不想每次都打一堆 docker 的命令,或者不想写 bash 脚本的话,docker-compose 是最好的选择,还可以很方便的和其他容器编排使用。
version: '3.6'
services:
web:
image: ${DOCKER_REGISTRY-}web
container_name: aihub
restart: always
environment:
- ASPNETCORE_ENVIRONMENT=Production
- ASPNETCORE_URLS=http://+:80
build:
context: .
volumes:
- .:/app
ports:
- "12001:80"
networks:
- default
- swag
networks:
swag:
name: swag
external: true
default:
name: aihub
补充:
ports节点映射了容器内的 80 端口- 我使用了 swag 来提供 web 服务,所以其实不需要使用
ports映射端口 - 后续再试用 candy / traefik 来替代 nginx (本项目没有nginx,直接用 kestrel)
启动!
使用命令行启动!
docker compose up
如果没有映射端口的话,还需要接着配置一下反向代理。
swag配置
直接上配置
/path/to/swag/config/nginx/proxy-confs/aihub.subdomain.conf
server {
listen 443 ssl;
listen [::]:443 ssl;
server_name aihub.*;
include /config/nginx/ssl.conf;
client_max_body_size 0;
# enable for ldap auth, fill in ldap details in ldap.conf
#include /config/nginx/ldap.conf;
# enable for Authelia
#include /config/nginx/authelia-server.conf;
location / {
# enable the next two lines for http auth
#auth_basic "Restricted";
#auth_basic_user_file /config/nginx/.htpasswd;
# enable the next two lines for ldap auth
#auth_request /auth;
#error_page 401 =200 /ldaplogin;
# enable for Authelia
#include /config/nginx/authelia-location.conf;
include /config/nginx/proxy.conf;
include /config/nginx/resolver.conf;
set $upstream_app aihub;
set $upstream_port 80;
set $upstream_proto http;
proxy_pass $upstream_proto://$upstream_app:$upstream_port;
proxy_hide_header X-Frame-Options; # Possibly not needed after Portainer 1.20.0
}
}
Asp-Net-Core开发笔记:FrameworkDependent搭配docker部署的更多相关文章
- ASP.NET Core开发-Docker部署运行
ASP.NET Core开发Docker部署,.NET Core支持Docker 部署运行.我们将ASP.NET Core 部署在Docker 上运行. 大家可能都见识过Docker ,今天我们就详细 ...
- ASP.NET Core开发Docker部署
ASP.NET Core开发Docker部署,.NET Core支持Docker 部署运行.我们将ASP.NET Core 部署在Docker 上运行. 大家可能都见识过Docker ,今天我们就详细 ...
- 在CentOS7 开发与部署 asp.net core app笔记
原文:在CentOS7 开发与部署 asp.net core app笔记 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/lihongzhai/art ...
- Visual Studio 2017 ASP.NET Core开发
Visual Studio 2017 ASP.NET Core开发,Visual Studio 2017 已经内置ASP.NET Core 开发工具. 在选择.NET Core 功能安装以后就可以进行 ...
- 基于Citus和ASP.NET Core开发多租户应用
Citus是基于PsotgreSQL的扩展,用于切分PsotgreSQL的数据,非常简单地实现数据“切片(sharp)”.如果不使用Citus,则需要开发者自己实现分布式数据访问层(DDAL),实现路 ...
- 品尝阿里云容器服务:初步尝试ASP.NET Core Web API站点的Docker自动化部署
部署场景是这样的,我们基于 ASP.NET Core 2.0 Preview 1 开发了一个用于管理缓存的 Web API ,想通过阿里云容器服务基于 Docker 部署为内网服务. 在这篇博文中分享 ...
- windows/Linux下设置ASP.Net Core开发环境并部署应用
10分钟学会在windows/Linux下设置ASP.Net Core开发环境并部署应用 创建和开发ASP.NET Core应用可以有二种方式:最简单的方式是通过Visual Studio 2017 ...
- 2月送书福利:ASP.NET Core开发实战
大家都知道我有一个公众号“恰童鞋骚年”,在公众号2020年第一天发布的推文<2020年,请让我重新介绍我自己>中,我曾说到我会在2020年中每个月为所有关注“恰童鞋骚年”公众号的童鞋们送一 ...
- 《ASP.NET Core项目开发实战入门》带你走进ASP.NET Core开发
<ASP.NET Core项目开发实战入门>从基础到实际项目开发部署带你走进ASP.NET Core开发. ASP.NET Core项目开发实战入门是基于ASP.NET Core 3.1 ...
- [转]ASP.NET Core 开发-Logging 使用NLog 写日志文件
本文转自:http://www.cnblogs.com/Leo_wl/p/5561812.html ASP.NET Core 开发-Logging 使用NLog 写日志文件. NLog 可以适用于 . ...
随机推荐
- IT入门深似海,入门到放弃你学废了嘛
我一直觉得IT行业 程序员行业.甚至觉得程序员人群 是一个特殊存在的群体. 入门到放弃,是真的,IT门槛高嘛. 其实吧,IT编程门槛,是有的,但是对于感兴趣的,想学习IT编程同学来说,也是一件容易事情 ...
- Spring Boot 自动配置一篇概览
一.什么是自动配置 bean 自动配置类通过添加 @AutoConfiguration 注解实现. 因为 @AutoConfiguration 注解本身是以 @Configuration 注解的,所以 ...
- 基于nerdctl+buildkitd+containerd实现镜像构建
1.容器技术简介 容器技术除了的docker之外,还有coreOS的rkt.google的gvisor.以及docker开源的containerd.redhat的podman.阿⾥的pouch等,为了 ...
- PHP反序列化字符逃逸 学习记录
PHP反序列化字符逃逸的原理 当开发者使用先将对象序列化,然后将对象中的字符进行过滤, 最后再进行反序列化.这个时候就有可能会产生PHP反序列化字符逃逸的漏洞. 详解PHP反序列化字符逃逸 过滤后字符 ...
- 通过redis学网络(1)-用go基于epoll实现最简单网络通信框架
本系列主要是为了对redis的网络模型进行学习,我会用golang实现一个reactor网络模型,并实现对redis协议的解析. 系列源码已经上传github https://github.com/H ...
- .NET Core(C#)使用Titanium.Web.Proxy实现Http(s)代理服务器监控HTTP请求
关于Titanium.Web.Proxy详细信息可以去这里仔细看看,这里只记录简单用法 安装引用Titanium.Web.Proxy NuGet直接获取Titanium.Web.Proxy 使用 配置 ...
- 如何从AWS中学习如何使用AWS的AmazonDynamoDB存储卷
目录 引言 随着云计算.大数据和人工智能等技术的发展,AWS(亚马逊云)成为了备受瞩目的云计算平台之一.AWS提供了许多先进的云计算服务和功能,包括Amazon DynamoDB(Amazon Dyn ...
- 将 -Xms 参数设置和-Xmx 参数的相等,对比 -Xms参数 设置为-Xmx 参数的一半,有哪些优势?
将 -Xms 参数设置为与 -Xmx 参数相等,相比于将 -Xms 参数设置为 -Xmx 参数的一半,具有以下优势: 1. 程序启动时间更短 当将 -Xms 参数设置为与 -Xmx 参数相等时,JVM ...
- 驱动开发:应用DeviceIoContro模板精讲
在笔者上一篇文章<驱动开发:应用DeviceIoContro开发模板>简单为大家介绍了如何使用DeviceIoContro模板快速创建一个驱动开发通信案例,但是该案例过于简单也无法独立加载 ...
- SpringBoot 2 种方式快速实现分库分表,轻松拿捏!
大家好,我是小富- (一)好好的系统,为什么要分库分表? (二)分库分表的 21 条法则,hold 住! 本文是<分库分表ShardingSphere5.x原理与实战>系列的第三篇文章,本 ...