特点

案例基于刚发布的.NET Core 2.1

只需一台Linux服务器搞定一切,

全程无需自己配置dotnet环境,

需要熟悉git

docker基础知识可有可无, 过了下面几个步骤,你就已经入门Docker了

涉及到的软件: git, docker, nginx (非必需)

新手耗时

.net core未入门: 不适合

git 未入门: + 30分钟

docker未入门: +2 小时

linux未入门: +2 小时

nginx未入门: +1小时

对于一个.net core已入门的新手, 最多6个小时可以完成这个实验, 对于上述知识都有储备的人,20分钟基本就可以完成(时间取决于你的网速).

前置准备

一台Linux服务器, 能连接外网(需要在线安装git, docker, 以及下载dotnet docker相关镜像), 下面的命令以debian 8为例, ubuntu与debian 命令相同, centos需要吧apt-get 替换为yum

1. 部署git

这样一台git服务器就好了, 如果有远程的github或者oscgit可以用,那可以省略这一步

apt-get install git

useradd git

passwd git 设置git账户的密码

2. 准备代码上传

su git

mkdir samplecode

cd samplecode

git init

创建git库

提交代码到 git@ip:samplecode.git

Dockerfile:

Dockerfile文件放到.csproj文件的目录, 用来生成Docker镜像

FROM microsoft/dotnet:2.1-aspnetcore-runtime

ARG source

WORKDIR /app

EXPOSE 80

COPY ${source:-Miao.WebApi/obj/Docker/publish} .

COPY ${source:-buildreport} .

ENTRYPOINT ["dotnet", "Miao.WebApi.dll"]

3. 部署docker

https://docs.docker.com/install/linux/docker-ce/debian/

apt-get install docker-ce
https://github.com/aspnet/aspnet-docker/tree/master/2.1
docker pull microsoft/dotnet:2.1-sdk 用来编译dotnetcore程序
docker pull microsoft/dotnet:2.1-aspnetcore-runtime 用来运行dotnetcore程序

4. 下载代码并编译打包

mkdir /src
cd /src
git clone git@ip:samplecode.git
cd samplecode

docker run -t -v ~/.dotnet:/root/.dotnet -v ~/.nuget:/root/.nuget  -v ./:/src --workdir /srcmicrosoft/dotnet:2.1-sdk bash -c "dotnet restore ./sameplecode.sln && dotnet publish ./SamepleCode.csproj -c Release -o ./obj/Docker/publish"
docker build –t sampleweb:1.0 –file .\Dockerfile .\

5. 运行.net core 程序

docker run –d –it sampleweb:1.0 –p:8080:80
curl –I http://ip:8080
确认可以打开, 证明部署成功

6. 通过Nginx做反向代理(非必需)

官方建议kestrel(.net core 内置web服务器外层再加一层反代), 加了反代之后IP也能正确获取到
apt-get install nginx
nginx 配置文件

upstream sampleweb {
     least_conn;
     server 127.0.0.1:8080max_fails=3 fail_timeout=30s;
     }
    

server {
     listen 80;
     server_name sampleweb.xxx.com;

location / {
         proxy_pass http://sampleweb /;
         proxy_read_timeout  90;

proxy_http_version 1.1;
         proxy_set_header Upgrade $http_upgrade;
         proxy_set_header Connection $http_connection;
         proxy_set_header Host $host;
         proxy_set_header X-Real-IP $remote_addr;
         proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
         proxy_set_header X-Forwarded-Proto $scheme;
         proxy_cache_bypass $http_upgrade;
      }

}





撸.NET Core的正确姿势的更多相关文章

  1. Asp.Net Core 单元测试正确姿势

    背景 ASP.NET Core 支持依赖关系注入 (DI) 软件设计模式,并且默认注入了很多服务,具体可以参考 官方文档, 相信只要使用过依赖注入框架的同学,都会对此有不同深入的理解,在此无需赘言. ...

  2. ASP.NET Core 2.0 中读取 Request.Body 的正确姿势

    原文:ASP.NET Core 中读取 Request.Body 的正确姿势 ASP.NET Core 中的 Request.Body 虽然是一个 Stream ,但它是一个与众不同的 Stream ...

  3. .NET Core技术研究-HttpContext访问的正确姿势

    将ASP.NET升级到ASP.NET Core之后,相信大家都会遇到HttpContext.Current无法使用的问题.这也是我们迁移ASP.NET Core必须解决的问题. 本文我们详细讨论一下, ...

  4. .NET Core 使用 K8S ConfigMap的正确姿势

    背景 ASP.NET Core默认的配置文件定义在appsetings.json和appsettings.{Environment}.json文件中. 这里面有一个问题就是,在使用容器部署时,每次修改 ...

  5. 程序员节应该写博客之.NET下使用HTTP请求的正确姿势

    程序员节应该写博客之.NET下使用HTTP请求的正确姿势 一.前言 去年9月份的时候我看到过外国朋友关于.NET Framework下HttpClient缺陷的分析后对HttpClient有了一定的了 ...

  6. SpringBoot 开发案例之参数传递的正确姿势

    前言 开发这么多年,肯定还有不少小伙伴搞不清各种类型的参数是如何传递的,很多同学都是拿来即用,复制粘贴一把撸,遇到问题还是一脸懵逼. 姿势 学习参数传递的正确姿势,先说怎么做,再说为什么,本质上还是复 ...

  7. .NET下使用HTTP请求的正确姿势

    来源:Lewis.Zou cnblogs.com/modestmt/p/7724821.html 一.前言 去年9月份的时候我看到过外国朋友关于.NET Framework下HttpClient缺陷的 ...

  8. Git 提交的正确姿势

    Git 提交的正确姿势:Commit message 编写指南 SCOP范围 middleware core config plugin test type范围 Git 每次提交代码,都要写 Comm ...

  9. IphoneX适配正确姿势

    IphoneX适配正确姿势 写在前面 距离18年9月iphonex发布以来已经快两年了(所以对于iphonex机型的头部刘海(sensor housing)和底部小黑条(Home Indicator) ...

随机推荐

  1. SQL语句的三大类

    数据定义语言(DDL Data Defination Language):用于创建和定义数据库对象,并且将对这些对象的定义保存到数据库字典中,通过DDL语句可以创建数据库对象.修改数据库对象.删除数据 ...

  2. JSP指令(page include taglib)

    JSP指令指示JSP转换器如何翻译JSP页面到Servlet:JSP指令用来设置整个JSP页面相关的属性,如网页编码方式.脚本语言等 JSP指令的格式: <%@ directive attrib ...

  3. mcu 通信数据解析

    串口发送一帧数据时,两个字节的间隔时间是多少? 波特率:发送二进制数据位的速率,习惯上用 baud 表示,即我们发送一位二进制数据的持续时间=1/baud. 如果波特率为9600,发送一个位需要的时间 ...

  4. spring.boot mybaits集成

    https://www.cnblogs.com/pejsidney/p/9272562.html (insertBatch批量插入) 第一篇博客循环部分有错误,参照下面的例子去更改 List<S ...

  5. fetch获取json的正确姿势

    fetch要求参数传递,遇到请求无法正常获取数据,网上其他很多版本类似这样: fetch(url ,{ method: 'POST', headers:{ 'Accept': 'application ...

  6. 阿里云安骑士-Centos7系统基线合规检测-修复记录

    执行命令 sysctl -w net.ipv4.conf.all.send_redirects=0sysctl -w net.ipv4.conf.default.send_redirects=0sys ...

  7. Scrum 敏捷开发

    使用敏捷开发一个月的事件,基本的开发模式跟我遇到的这个文章介绍的基本类似,暂时简单Copy到了这里...... http://www.scrumcn.com/agile/scrum-knowledge ...

  8. 47.iOS跳转AppStore评分和发送邮件

    1.跳转到AppStore评分 应用地址是关键:IOS 设备,手机搜索应用,拷贝链接 NSString *appStr =@"https://itunes.apple.com/cn/app/ ...

  9. 28、shareSDK分享以及 QQ应用平台申请遇到的问题

    第一点:菜单列表没出来 未添加白名单 第二点: QQ平台申请,和安卓共用一个APP名字,出现的 问题 第三点

  10. 2019.01.08 codeforces 1009F. Dominant Indices(长链剖分)

    传送门 长链剖分模板题. 题意:给出一棵树,设fi,jf_{i,j}fi,j​表示iii的子树中距离点iii距离为jjj的点的个数,现在对于每个点iii要求出使得fif_ifi​取得最大值的那个jjj ...