首页 > 编程语言 >Asp-Net-Core学习笔记:部署,早知道,还是docker,以及一点碎碎念

Asp-Net-Core学习笔记:部署,早知道,还是docker,以及一点碎碎念

时间:2024-02-08 11:45:26浏览次数:36  
标签:Core Asp 部署 Redis DataMiddlePlatform compose build 碎碎念 docker

前言

AspNetCore技术栈在我们团队里的使用也有一段时间了,之前的部署方式一直是本地编译之后上传可执行文件到服务器,使用supervisor来管理进程这种很原始的方式。

参考之前的文章:

对于小项目来说尚可,够用,但是存在几个问题:

  1. 每次更新花费的时间太长了,无论是Framework-Dependent还是Self-Contained,都要上传很大的文件~
  2. 更新的时候需要在supervisor里把进程停掉,不然无法覆盖
  3. 每次更新都是手动操作,一点也不geek

鉴于之前使用Django的项目里docker用得非常愉快,而且到处在宣传.netcore新技术对docker的官方支持有多好多好,于是我这也不能落后,必须上docker部署啊!

更关键的一点理由是,最近搞了个新的小项目,用到了Redis,但服务器上没装Redis,作为一个被docker惯坏的人,我也不可能去安装配置这些东西~

那就开始吧,直接从微软官方文档开始(MSDN真是好东西啊)

开始

事实上,我现在已经开始尝鲜使用 .net6.0 来新建项目了,默认的项目模板中就带有docker配置,完全是傻瓜式的,不用自己写什么配置文件,上传到服务器里就是docker build一把梭(或者是docker-compose up更好)

没有的也没事,把VS升级到最新的2022版本(其他版本应该也有,请自测),项目右键添加就能选择Docker支持了~

image.png

其实Rider也可以,并且我在此前也是一直使用Rider开发的,但截至本文编写时,Rider的2021.3版本还没推出,尚未支持 .net6.0 ,因此我没有使用Rider测试自动添加docker支持~

image.png

不想使用傻瓜式生成dockerfile也行,下面给出我部署的这个项目的dockerfile,可以参考一下。(项目名称为:DataMiddlePlatform

#See https://aka.ms/containerfastmode to understand how Visual Studio uses this Dockerfile to build your images for faster debugging.

FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443

FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build
WORKDIR /src
COPY ["DataMiddlePlatform/DataMiddlePlatform.csproj", "DataMiddlePlatform/"]
RUN dotnet restore "DataMiddlePlatform/DataMiddlePlatform.csproj"
COPY . .
WORKDIR "/src/DataMiddlePlatform"
RUN dotnet build "DataMiddlePlatform.csproj" -c Release -o /app/build

FROM build AS publish
RUN dotnet publish "DataMiddlePlatform.csproj" -c Release -o /app/publish

FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "DataMiddlePlatform.dll"]

其实dockerfile基本可以不管的,因为 .net6.0 项目生成的时候,都会有个dockerfile,在本项目中我只修改了docker-compose.yml文件,因为要增加一个Redis容器~

以下是我的docker-compose.yml文件代码

version: '3.4'

services:
  redis:
    image: redis
    expose:
      - 6379

  web:
    image: ${DOCKER_REGISTRY-}web
    environment:
      - ASPNETCORE_ENVIRONMENT=Production
      - ASPNETCORE_URLS=https://+:443;http://+:80
    build:
      context: .
      dockerfile: DataMiddlePlatform/Dockerfile
    depends_on:
      - redis
    ports:
      - "15002:80"
      - "15003:443"

不多解释了,docker-compose的用法详见官方文档~

环境切换

之前我们在docker-compose.yml里添加了Redis容器,并在web镜像里添加了依赖,所以在Web容器里访问Redis是用redis:6379这样的地址,不像本地开发时一样使用localhost:6379,如果在Django里就要在settings.py里根据环境变量判断了(我的Django-Starter框架集成了自动识别)

而AspNetCore的基础设施做得很完善,默认就有developmentstagingproduction这三个环境,每个环境有对应的appsettings.json配置文件,所以只要在配置文件里区分不同的Redis地址就好了,如果是其他数据库的配置也同理,真是方便啊~!

到本项目中就是,在appsettings.Development.json文件里,Redis的连接地址是"Connection": "127.0.0.1:6379",本地开发时使用本地安装的Redis服务。

然后appsettings.json文件里,使用"Connection": "redis:6379",docker部署的时候,使用docker里的Redis服务~

完美

部署

既然写完了dockerfiledocker-compose.yml,那部署这块也没啥好说的,就把整个代码文件夹上传到服务器,之后一行命令搞定:docker-compose up~

因为这AspNetCore本身性能就很可以了,小项目都不用nginx来提供静态文件服务,方便得很~!

要更新服务的话,目前就是上传代码之后执行docker-compose up --build重新构建,因为只需要上传代码文件,这样下来每次更新的速度快多了,而且可以写脚本在git commit后一键执行更新,也…算是自动了吧…hhh

小结

微服务是发展趋势,应用从旧的部署方式到容器化是很重要的一步,虽然我们团队的Java还处在一个jar包丢上去supervisor运行的阶段,(吐槽:后面甚至有项目都没有挂supervisor,直接shell里执行起来,什么时候挂了都不知道)

经过这段时间的实践下来,AspNetCore还是很可靠的扛住了不低的并发,也有比较完善的生态(虽然第三方库比不上Java和Python,但完完全全够好用了),开发效率高(但学习门槛也不低,至少比Django难),综合优缺点下来,加上我自己对这框架的掌握也还很粗浅,所以只能小范围推广了~

我对于AspNetCore目前还处在摸索阶段,好用是好用,就是在工作中用得还不够多,不够熟悉,加上之前折腾Django的经历让我尝到了动态语言开发的甜头,所以不会短时间把团队的技术栈全部迁移到NetCore上去,毕竟会C#的人还是不够多,新招进来的应届生来现学也有不低的门槛,项目进度也禁不起这种折腾…

我还是很喜欢微软的这套技术栈,它真的很好用,目前以及后续的小项目毫无疑问都会选择这套东西,但对于提高多少生产力,我目前是没多少底气的,接下来要调研一番构建自动化、部署自动化方面的技术,哎,小团队的基础设施不足真是痛苦…… 难怪现在Serverless开始流行起来了,低代码平台也起来了,程序员终究要自己砸自己的饭碗…

参考资料

标签:Core,Asp,部署,Redis,DataMiddlePlatform,compose,build,碎碎念,docker
From: https://www.cnblogs.com/deali/p/15613071.html

相关文章

  • Asp .Net Core 系列:Asp .Net Core 集成 Panda.DynamicWebApi
    目录简介Asp.NetCore集成Panda.DynamicWebApi配置原理什么是POCOController?POCO控制器原理ControllerFeatureProvider实现自定义判断规则IApplicationModelConventionPanda.DynamicWebApi中的实现ConfigureApiExplorer()ConfigureSelector()ConfigureParameters()简介Panda......
  • DataSpell 2023:专注于数据,加速您的数据科学之旅 mac/win版
    JetBrainsDataSpell2023是一款专为数据科学家和数据分析师设计的集成开发环境(IDE)。这款IDE提供了强大的数据分析和可视化工具,旨在帮助用户更快速、更高效地进行数据科学工作。→→↓↓载DataSpell2023mac/win版 DataSpell2023在保持其一贯的数据处理、数据清洗、数据探......
  • Linux下gdb如何调试coredump文件
    目录简介示例简介在Linux下,你可以使用GNU调试器(GDB)来调试coredump文件。Coredump文件是在程序崩溃时由操作系统生成的,它包含了程序崩溃时的内存内容、寄存器状态和其他相关信息。下面是在Linux下使用GDB调试coredump文件的步骤:确保你的系统已经安装了GDB。如果没有安装,你......
  • Mybatis Plus java.lang.NoSuchMethodError: com.baomidou.mybatisplus.core.toolkit.
    问题描述在进行SpringBoot整合MybatisPlus时提示10:49:08.390[restartedMain]DEBUGorg.springframework.boot.context.logging.ClasspathLoggingApplicationListener-Applicationfailedtostartwithclasspath:[file:/D:/%e7%99%be%e5%ba%a6%e7%bd%91%e7%9b%98/Vue......
  • Asp .Net Core 系列:Asp .Net Core 集成 NLog
    简介NLog是一个基于.NET平台编写的日志记录类库,它可以在应用程序中添加跟踪调试代码,以便在开发、测试和生产环境中对程序进行监控和故障排除。NLog具有简单、灵活和易于配置的特点,支持在任何一种.NET语言中输出带有上下文的调试诊断信息,并能够将这些信息发送到一个或多个输出目标......
  • ASP 与iis基础漏洞
    1ASP安全在早期我们在windows上搭建服务器使用的是windows,iis,asp,access(sqlserver),他们几个分别是操作系统,中间件,编程语言,数据库,类比我们先前学习的NAMP,是同一类事物,本篇来学习ASP安全。1.1access脱库由于access数据库文件格式一般有.mdb.asp.asa该文件放在网站目......
  • ROS问题: libQt5Core. so.5:无法打开共享对象文件:没有那个文件或目录
    当运行下面命令报错时ros2runturtlesimturtlesim_node错误信息:/opt/ros/foxy/lib/turtlesim/turtlesim_node:errorwhileloadingsharedlibraries:libQt5Core.so.5:cannotopensharedobjectfile:Nosuchfileordirectory最佳答案 我用这个方法,来自h......
  • docker 部署 asp.net8 项目
    1、需要编写dockerfile文件#基础镜像FROMmcr.microsoft.com/dotnet/aspnet:8.0ASbase#工作目录WORKDIR/app#开放访问端口EXPOSE8080#复制内容到镜像COPY./app#指定默认入口ENTRYPOINT["dotnet","Web.Admin.dll"]2、编写docker-compose.yaml文件version:'3's......
  • FlubuCore 用C#写cmd/shell脚本
    1.在解决方案下新建项目BuildScript2.在BuildScript项目下新建BuildScript.cs文件 3.Nuget安装FlubuCore包 4.BuildScript.cs内容usingSystem;usingSystem.IO;usingSystem.Linq;usingSystem.Collections.Generic;usingFlubuCore.Context;usingFlubuCore.Conte......
  • ubuntu配置core文件输出
    ulimit-c判断是否开启转储为0则没有开启ulimit-cunlimited设置转储core大小没有限制在你的主目录下创建core文件夹,比如我在/home/joe下创建core文件夹vim/etc/sysctl.confkernel.core_pattern=/home/joe/core/core-%e-%p-%t-%skernel.core_uses_pid=0说......