前言

之前我写过一篇使用 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 包含从源码构建到部署的整个流程,我们这里只需要 basefinal ,也就是把可执行文件放进去微软的基础镜像里运行。

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部署的更多相关文章

  1. ASP.NET Core开发-Docker部署运行

    ASP.NET Core开发Docker部署,.NET Core支持Docker 部署运行.我们将ASP.NET Core 部署在Docker 上运行. 大家可能都见识过Docker ,今天我们就详细 ...

  2. ASP.NET Core开发Docker部署

    ASP.NET Core开发Docker部署,.NET Core支持Docker 部署运行.我们将ASP.NET Core 部署在Docker 上运行. 大家可能都见识过Docker ,今天我们就详细 ...

  3. 在CentOS7 开发与部署 asp.net core app笔记

    原文:在CentOS7 开发与部署 asp.net core app笔记 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/lihongzhai/art ...

  4. Visual Studio 2017 ASP.NET Core开发

    Visual Studio 2017 ASP.NET Core开发,Visual Studio 2017 已经内置ASP.NET Core 开发工具. 在选择.NET Core 功能安装以后就可以进行 ...

  5. 基于Citus和ASP.NET Core开发多租户应用

    Citus是基于PsotgreSQL的扩展,用于切分PsotgreSQL的数据,非常简单地实现数据“切片(sharp)”.如果不使用Citus,则需要开发者自己实现分布式数据访问层(DDAL),实现路 ...

  6. 品尝阿里云容器服务:初步尝试ASP.NET Core Web API站点的Docker自动化部署

    部署场景是这样的,我们基于 ASP.NET Core 2.0 Preview 1 开发了一个用于管理缓存的 Web API ,想通过阿里云容器服务基于 Docker 部署为内网服务. 在这篇博文中分享 ...

  7. windows/Linux下设置ASP.Net Core开发环境并部署应用

    10分钟学会在windows/Linux下设置ASP.Net Core开发环境并部署应用 创建和开发ASP.NET Core应用可以有二种方式:最简单的方式是通过Visual Studio 2017 ...

  8. 2月送书福利:ASP.NET Core开发实战

    大家都知道我有一个公众号“恰童鞋骚年”,在公众号2020年第一天发布的推文<2020年,请让我重新介绍我自己>中,我曾说到我会在2020年中每个月为所有关注“恰童鞋骚年”公众号的童鞋们送一 ...

  9. 《ASP.NET Core项目开发实战入门》带你走进ASP.NET Core开发

    <ASP.NET Core项目开发实战入门>从基础到实际项目开发部署带你走进ASP.NET Core开发. ASP.NET Core项目开发实战入门是基于ASP.NET Core 3.1 ...

  10. [转]ASP.NET Core 开发-Logging 使用NLog 写日志文件

    本文转自:http://www.cnblogs.com/Leo_wl/p/5561812.html ASP.NET Core 开发-Logging 使用NLog 写日志文件. NLog 可以适用于 . ...

随机推荐

  1. LINIUX 查询命令的 区别 chich whereis locate fing

    我们经常在linux要查找某个文件,但不知道放在哪里了,可以使用下面的一些命令来搜索: which  查看可执行文件的位置. whereis 查看文件的位置. locate   配合数据库查看文件位置 ...

  2. MAIXIII(爱芯派)的一种配网并安装nmtui的实现方法

    关于一种MAIXIII(爱芯派)的一种配网并安装nmtui的实现方法 特别感谢sipped的大佬鼠以及多位群友这几天提供的帮助与支持! 0.目录 一,MAIXIII简介 二,到手图展示 三,具体操作方 ...

  3. Java基础之基础语法与面向对象

    前言 小知识 Java由Sun公司于1995年推出,2009年Sun公司被Oracle公司收购,取得Java的版权 Java之父:James Gosling(詹姆斯·高斯林) 专业术语 JDK:jav ...

  4. 你以为搞个流水线每天跑,团队就在使用CI/CD实践了?

    在实践中,很多团队对于DevOps 流水线没有很透彻的理解,要不就创建一大堆流水线,要不就一个流水线通吃.实际上,流水线的设计和写代码一样,需要基于"业务场景"进行一定的设计编排, ...

  5. 如何从AWS中学习如何使用AmazonVPC

    目录 如何从 AWS 中学习如何使用 Amazon VPC? 随着 AWS 的迅速发展,Amazon VPC(Virtual Private Cloud)已经成为了一种非常重要的云计算基础设施.VPC ...

  6. 如何在.net6webapi中记录每次接口请求的日志

    为什么在软件设计中一定要有日志系统? 在软件设计中日志模块是必不可少的一部分,可以帮助开发人员更好的了解程序的运行情况,提高软件的可靠性,安全性和性能,日志通常能帮我们解决如下问题: 调试和故障排查: ...

  7. matlab的gui图像处理操作界面,实现重置和退出按钮功能

    axes控件实现了展示图片,动态txt控件实现了展示或者输入参数. 重置 在gui界面右键点击重置pushbotton回到代码块callback,编写代码 以下代码是实现图片和参数数字重置,是重置按钮 ...

  8. 用虚拟机配置Linux实验环境

    我们平时经常需要利用VMware搭建Linux实验环境,下面我将搭建步骤整理了一下. 安装虚拟机 系统镜像:CentOS-7-x86_64-Everything-1708.iso 用VMware安装系 ...

  9. python打包方法

    在Python中,要编写setup.py文件,用于构建和打包你的Python项目,你可以遵循以下步骤: 创建项目目录结构:首先,你需要创建项目的目录结构,包括源代码文件.资源文件等.一个常见的项目结构 ...

  10. 加密算法解析:MD5、DES和RAS的工作原理与特点

    一.MD5不可逆加密 1.1-理解MD5 MD5公开的算法,任何语言实现后其实都是一样的.通用的 不可逆加密:原文--加密--密文,密文无法解密出原文 1.2-MD5封装 using System.I ...