北京网站建设最便宜的公司哪家好,兰州建设网站的网站,无锡网站建设方案优化,凯里网站设计前言AspNetCore技术栈在我们团队里的使用也有一段时间了#xff0c;之前的部署方式一直是本地编译之后上传可执行文件到服务器#xff0c;使用supervisor来管理进程这种很原始的方式。参考之前的文章#xff1a;Asp.Net Core学习笔记#xff1a;#xff08;五#xff09;… 前言AspNetCore技术栈在我们团队里的使用也有一段时间了之前的部署方式一直是本地编译之后上传可执行文件到服务器使用supervisor来管理进程这种很原始的方式。参考之前的文章Asp.Net Core学习笔记五构建和部署对于小项目来说尚可够用但是存在几个问题每次更新花费的时间太长了无论是Framework-Dependent还是Self-Contained都要上传很大的文件~更新的时候需要在supervisor里把进程停掉不然无法覆盖每次更新都是手动操作一点也不geek鉴于之前使用Django的项目里docker用得非常愉快而且到处在宣传.netcore新技术对docker的官方支持有多好多好于是我这也不能落后必须上docker部署啊更关键的一点理由是最近搞了个新的小项目用到了Redis但服务器上没装Redis作为一个被docker惯坏的人我也不可能去安装配置这些东西~那就开始吧直接从微软官方文档开始MSDN真是好东西啊开始事实上我现在已经开始尝鲜使用 .net6.0 来新建项目了默认的项目模板中就带有docker配置完全是傻瓜式的不用自己写什么配置文件上传到服务器里就是docker build一把梭或者是docker-compose up更好没有的也没事把VS升级到最新的2022版本~~其他版本应该也有请自测~~项目右键添加就能选择Docker支持了其实Rider也可以并且我在此前也是一直使用Rider开发的但截至本文编写时Rider的2021.3版本还没推出尚未支持 .net6.0 因此我没有使用Rider测试自动添加docker支持不想使用傻瓜式生成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 443FROM 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/buildFROM build AS publish
RUN dotnet publish DataMiddlePlatform.csproj -c Release -o /app/publishFROM base AS final
WORKDIR /app
COPY --frompublish /app/publish .
ENTRYPOINT [dotnet, DataMiddlePlatform.dll]其实dockerfile基本可以不管的因为 .net6.0 项目生成的时候都会有个dockerfile在本项目中我只修改了docker-compose.yml文件因为要增加一个Redis容器~以下是我的docker-compose.yml文件代码version: 3.4services:redis:image: redisexpose:- 6379web:image: ${DOCKER_REGISTRY-}webenvironment:- ASPNETCORE_ENVIRONMENTProduction- ASPNETCORE_URLShttps://:443;http://:80build:context: .dockerfile: DataMiddlePlatform/Dockerfiledepends_on:- redisports:- 15002:80- 15003:443不多解释了docker-compose的用法详见官方文档环境切换之前我们在docker-compose.yml里添加了Redis容器并在web镜像里添加了依赖所以在Web容器里访问Redis是用redis:6379这样的地址不像本地开发时一样使用localhost:6379如果在Django里就要在settings.py里根据环境变量判断了我的Django-Starter框架集成了自动识别而AspNetCore的基础设施做得很完善默认就有development、staging、production这三个环境每个环境有对应的appsettings.json配置文件所以只要在配置文件里区分不同的Redis地址就好了如果是其他数据库的配置也同理真是方便啊~到本项目中就是在appsettings.Development.json文件里Redis的连接地址是Connection: 127.0.0.1:6379本地开发时使用本地安装的Redis服务。然后appsettings.json文件里使用Connection: redis:6379docker部署的时候使用docker里的Redis服务~完美部署既然写完了dockerfile和docker-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开始流行起来了低代码平台也起来了程序员终究要自己砸自己的饭碗…参考资料托管和部署 ASP.NET Core | Microsoft Docs在 Docker 容器中托管 ASP.NET Core | Microsoft Docs.NET 微服务。适用于容器化 .NET 应用程序的体系结构 | Microsoft Docs