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 可以适用于 . ...
随机推荐
- 代码随想录算法训练营Day7哈希表| 454.四数相加II383. 赎金信15. 三数之和18. 四数之和 |总结
454.四数相加Ⅱ 题目链接:454.四数相加 给你四个整数数组 nums1.nums2.nums3 和 nums4 ,数组长度都是 n ,请你计算有多少个元组 (i, j, k, l) 能满足:. ...
- SD协议-命令响应
1.CRC 发送命令或数据的时候,都需要经过芯片的IO口,SD Host和SD卡是通过PCB的走线连接在一起的,SD Host IO --> PCB线 --> SD Card IO,PCB ...
- Vue——计算属性、监听属性、Vue生命周期、组件介绍和使用、组件间通信、ref属性
计算属性 // 1 计算属性是基于他们的依赖变量进行缓存的 // 2 计算属性只有在它的相关依赖变量发生改变时才会重新求值,否则不会变(函数只要页面变化,就会重新运算) // 3 计算属性就像pyth ...
- BGP 反射器;BGP联盟
目录 BGP反射器 实验拓扑 实验需求 实验步骤 在R2上查看BGP邻居表 在R2上做反射器 在R3上查看1.1.1.1 路由表,进行观察 在R3上查看1.1.1.1 路由详细信息 BGP联盟实验 实 ...
- XMLConfiguration -- Poco
Library : Util Package: Configuration Header : Poco/Util.XMLConfiguration.h 此配置类从 XML 文档中提取配置属性. 支持类 ...
- 图书搜索领域重大突破!用Apache SeaTunnel、Milvus和OpenAI提高书名相似度搜索精准度和效率
作者 | 刘广东,Apache SeaTunnel Committer 背景 目前,现有的图书搜索解决方案(例如公共图书馆使用的解决方案)十分依赖于关键词匹配,而不是对书名实际内容的语义理解.因此会导 ...
- 离线安装mysql报错解决方法:/usr/sbin/mysqld: error while loading shared libraries: libaio.so.1: cannot open sha --九五小庞
Linux:centos 7.6 64位 mysql:5.6使用离线方式安装:rpm -ivh --nodeps mysql* ,执行 systemctl start mysqld.service发现 ...
- PHP生成随机中文姓名
<?phpfunction &xingming(){ for ($i = 0; $i < 1; $i++) { $xing = "赵,钱,孙,李,周,吴,郑,王,冯,陈, ...
- IoTOS-v1.2.1接入J-IM(t-io)后台通知App
IoTOS v1.2.1 一.登录页增加可修改轮播 登录页增加可修改数据轮播: 首页轮播图由背景图片.标题.介绍.按钮一.按钮二(可配置跳转地址打开方式)组合而成 二.登录页增加常用运营商平台& ...
- 【转载】Linux虚拟化KVM-Qemu分析(八)之virtio初探
原文信息 作者:LoyenWang 出处:https://www.cnblogs.com/LoyenWang/ 公众号:LoyenWang 版权:本文版权归作者和博客园共有 转载:欢迎转载,但未经作者 ...