前言 在上篇文章中介绍了如何在 Docker 容器中部署我们的 asp.net core 应用程序,本篇主要是怎么样为我们在 Linux 或者 macOs 中部署的 dotnet 程序创建一个守护进程,来保证我们的程序在异常或者是电脑重启的时候仍然能够正常访问。 如果你以后用准备使用 asp.net core来开发项目的话,程序并且部署到 Linux 上的话,那么此篇文章你值得收藏。 如果你觉得对你有帮助的话,不妨点个【推荐】。 目录 什么是守护进程 Supervisor 介绍 Supervisor 安装 Supervisor 配置,常用命令 Supervisor UI管理台 什么是守护进程 在linux或者unix操作系统中,守护进程(Daemon)是一种运行在后台的特殊进程,它独立于控制终端并且周期性的执行某种任务或等待处理某些发生的事件。由于在linux中,每个系统与用户进行交流的界面称为终端,每一个从此终端开始运行的进程都会依附于这个终端,这个终端被称为这些进程的控制终端,当控制终端被关闭的时候,相应的进程都会自动关闭。但是守护进程却能突破这种限制,它脱离于终端并且在后台运行,并且它脱离终端的目的是为了避免进程在运行的过程中的信息在任何终端中显示并且进程也不会被任何终端所产生的终端信息所打断。它从被执行的时候开始运转,直到整个系统关闭才退出。 此处的创建守护进程,是指发布在Linux上 asp.net core 程序的dotnet xxx.dll命令的宿主进程创建一个守护进程。 在 Linux 上有很多可以管理进程的工具,我们使用 Supervisor 来做这个事情。 原因有两点: 1、它是微软官方文档推荐的,降低学习成本。 2、它并不一定是最好的,但一定是文档最全的。 Supervisor 介绍 Supervisor是采用 Python(2.4+) 开发的,它是一个允许用户管理 基于 Unix 系统进程的 Client/Server 系统,提供了大量功能来实现对进程的管理。 官方文档:http://supervisord.org/ Supervisor 安装 在 masOS 中直接使用brew工具进行安装即可: brew install supervisor 在 linux 中使用以下命令进行安装: ubuntu sudo apt-get install supervisor centos yum install supervisor python pip install supervosor easy_install supervisor 安装完成之后:
1 2 |
mac:~ yangxiaodong$ brew install supervisor Warning: supervisor-3.2.1 already installed |
Supervisor 配置,常用命令 安装完成之后,在 /ect/supervisor/conf.d/ 目录下新建一个配置文件(touch HelloWebApp.conf),取名为 HelloWebApp.conf […]
View Details一.Windows7下的Python环境搭建 1.Google下载python-2.6.msi安装包,以管理员身份运行,安装时候注意不要在有中文目录的程序下安装。安装完成之后可以在开始菜单中看到。 2.配置环境变量。不用配置也可以,不过配置之后后面会方便很多。 配置方法:右键“我的电脑”选择“属性”,切换到“高级”选项卡,选择环境变量,在“系统变量”下选择“Path”变量,然后点击“编辑”按钮,添加Python安装目录。配置完成之后可以打开cmd输入”python”进行测试。如果出现下图所示,则表示配置成功。此步骤熟悉Java的同学应该比较熟悉。 二.Python基础语法 关于Python 的基础教程网上有很多,我的看的电子书。 推荐《Python核心编程(第二版)》,大家可以去电驴下载电子版。Python是弱类型语言,对Javascript比较熟悉同学学起来应该会快一点。有人说Python不需要学习,不过我认为一些基本的API的使用还是要记得的。 这里给出一个地址:http://www.verycd.com/topics/2765155/ 三.Python 开发环境 如果觉得Python自带的IDE用着很不爽的下,有下面3个自认为比较好的第三方开发环境。 如果你是.NET开发人员用的是Visual Studio 2010或者更高版本的话,那么你可以http://pytools.codeplex.com/ 下载Python Tools for Visual Studio,然后进行安装即 可。 如果你是Java开发人员用的是Eclipse的话,那么你可以参考http://www.rose-hulman.edu/class/csse/resources/Eclipse/eclipse-python-configuration.htm这里进行Eclipse环境的搭建。 如果你想开发GUI程序的话,那么你可以Google下载boa-constructor-0.6.1.src.win32.exe 和 wxPython2.8-win32-unicode-2.8.12.1-py26.exe 这两个拓展包,前者为GUI拓展包,后者对前者提供了界面操作的支持。 如果你想开发能在没有Python环境上运行Windows GUI程序,那么你需要以下工具。 Python打包工具。Python打包工具有很多种,常用的有Pyinstaller,py2exe等,具体可以Google。后面具体介绍Py2exe的使用。 Python扩展包。Python有非常多的开源扩展包以及强大的扩展能力,一般网络编程,WEB编程,客户端编程 等 你都可以在网上找到非常丰富的资源。下面给出了一些: http://www.itlong.com/thread-1685-1-1.html from:http://www.cnblogs.com/savorboard/archive/2012/12/30/2839981.html
View Details本文用图文的方式记录了我自己搭建centos+asp.net core + docker + jexus + nginx的整个过程,希望对有同样需求的朋友有一定的参考作用。 本文主要内容如下: centos7安装 yum镜像 docker镜像 docker安装 dotnetcore安装 Docker安装dotnetcore镜像 asp.net core 创建与发布 docker中部署asp.net core jexus转发 nginx转发 1.centos7安装 a.下载centos的iso文件,比如:CentOS-7-x86_64-Everything-1611.iso b.虚拟机安装,比如:hyper-v c.手动分区: /boot 至少1G,建议2G(很多东西会装在里面,别信网上说的100M足够的话了,设置大点) /swap 2倍内存大小 / 10G吧 /home 10G以上吧 /var 至少1G,建议5G(docker很容易装满) d.软件预装,选择:带UI的Server 2.yum镜像 a.访问阿里云http://mirrors.aliyun.com b.找到你要装的OS,点右边“help”进入安装指南 c.根据指南,安装镜像(执行命令的时候请加上sudo,如果你不是root) 1 2 3 sudo mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup sudo wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo 3.docker镜像 a. 打开开发者中心https://dev.aliyun.com/search.html b.右上角“注册/登陆” c.登陆后,右上角有一个“管理中心” d.进入管理中心,点击“加速器” 开始前先参照这个帖子《CentOS禁止packagekit离线更新服务的办法》http://www.cnblogs.com/zjoch/p/6500480.html处理,否则出现如下错误 按提示完成镜像设置 1 2 3 4 5 6 7 8 9 10 11 12 sudo curl -sSL http://acs-public-mirror.oss-cn-hangzhou.aliyuncs.com/docker-engine/internet | sh – 以下命令一行一行输入 sudo mkdir […]
View Details前言 在上篇文章中,主要介绍了 Dotnet Core Run 命令,这篇文章主要是讲解如何在 asp.net core 中对我们的已经完成的程序进行发布和部署。 有关如何使用 Nginx 进行部署,请参见本人的另一篇文章: http://www.cnblogs.com/savorboard/p/dotnet-core-publish-nginx.html 目录 安装 Liunx DotNet 环境 新建一个 Web 项目,并发布 使用 Jexus 进行反向代理 安装 Linux DotNet 环境 安装 dotnet 环境参见官方网站 https://www.microsoft.com/net/core#ubuntu。 新建一个 WebApp 项目,并发布 在 Asp.Net Core 项目中,我们使用 dotnet new -t WebApp 命令和创建一个新的空的 Web 应用程序,然后使用dotnet resotre还原 Nuget。 主要是用以下几个命令: mkdir HelloWebApp 这个命令是创建一个名为 HelloWebApp 的文件夹。 dotnet new -t Web 这个命令是使用 Web 模板来新建一个 WebApp 的 Mvc 应用程序。 新建了应用程序之后,使用dotnet restore 和 dotnet run 命令来测试一下我们的应用程序。 我们打开浏览器输入 http://localhost:5000,来看一下效果。 可以看到已经成功运行了。 如果发布应用程序,我们需要使用 dotnet publish命令,通过使用 --help 参数可以看到一些可以使用的命令参数。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
-f|--framework <FRAMEWORK> Target framework to compile for -r|--runtime <RUNTIME_IDENTIFIER> Target runtime to publish for -b|--build-base-path <OUTPUT_DIR> Directory in which to place temporary outputs -o|--output <OUTPUT_PATH> Path in which to publish the app --version-suffix <VERSION_SUFFIX> Defines what `*` should be replaced with in version field in project.json -c|--configuration <CONFIGURATION> Configuration under which to build --native-subdirectory Temporary mechanism to include subdirectories from native assets of dependency packages in output --no-build Do not build projects before publishing |
我们运行dotnet publish -o ~/WorkSpace/publish 发布到 publish 文件夹,当看到Published 1/1 projects successfully的时候,说明已经发布成功了。 PS: 如果提示没有安装 NPM 工具,运行sudo install apt-get npm -g,先安装 NPM。 如果提示没有 […]
View Details前言 在上篇文章中,主要介绍了 Dotnet Core Run 命令,这篇文章主要是讲解如何在Linux中,对 Asp.Net Core 的程序进行发布和部署。 有关如何在 Jexus 中进行部署,请参见本人的另一篇文章: http://www.cnblogs.com/savorboard/p/dot-net-linux-jexus.html 目录 新建一个 WebApp 项目 发布到 Linux,Mac OS 使用 Nginx 进行反向代理 新建一个 WebApp 项目 在 Asp.Net Core 项目中,我们使用 dotnet new -t WebApp 命令和创建一个新的空的 Web 应用程序。 以下是我在 Mac 中的截图: 主要是用以下几个命令: mkdir HelloWebApp 这个命令是创建一个名为 HelloWebApp 的文件夹。 dotnet new -t Web 这个命令是使用 Web 模板来新建一个 WebApp 的 Mvc 应用程序。 新建了应用程序之后,使用dotnet restore 和 dotnet run 命令来测试一下我们的应用程序。 可以看到已经成功运行了。 我们打开浏览器输入 http://localhost:5000,来看一下效果。 ps: Safari 下面,浏览器地址栏看不到端口号,实际上是5000端口。 发布到 Linux,Mac OS 如果发布应用程序,我们需要使用 dotnet publish命令,通过使用 --help 参数可以看到一些可以使用的命令参数。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
-f|--framework <FRAMEWORK> Target framework to compile for -r|--runtime <RUNTIME_IDENTIFIER> Target runtime to publish for -b|--build-base-path <OUTPUT_DIR> Directory in which to place temporary outputs -o|--output <OUTPUT_PATH> Path in which to publish the app --version-suffix <VERSION_SUFFIX> Defines what `*` should be replaced with in version field in project.json -c|--configuration <CONFIGURATION> Configuration under which to build --native-subdirectory Temporary mechanism to include subdirectories from native assets of dependency packages in output --no-build Do not build projects before publishing |
我们直接运行dotnet publish 使用默认的发布路径,当看到Published 1/1 projects successfully的时候,说明已经发布成功了。 接着进入到 bin 文件夹下的Debug 文件夹下的netcoreapp1.0 文件夹,然后会看到有一个 publish 的文件夹。这就是默认发布生成的文件夹,在这个文件夹中可以看到我们程序所有依赖的程序集文件。 发布之后 publish 文件夹里面的子文件夹有必要说明一下。
1 2 3 4 5 |
appsettiong.json 应用程序的配置文件 refs 应用程序引用的.net fx系统程序集 runtimes 运行时环境,可以看到里面的文件夹包含 win7、linxu,mac os 等,说明我们这个应用程序是跨平台的。 views 这个文件夹存放的就是我们的 mvc 的视图文件。 wwwroot 文件夹,存放的是前端使用的 js 库,css 样式表,和图片等。 |
然后我们把工作目录切换到发布的 publish 文件夹。使用dotnet […]
View Details前言 上篇博文介绍了怎么样在 asp.net core 使用 Redis 和 Protobuf 进行 Session缓存。本篇的是开发过程中使用的一个小功能,怎么做单文件和多文件上传。 如果你觉得对你有帮助的话,不妨点个【推荐】。 目录 单文件上传 多文件上传 示例源码 单文件上传 上传文件在Web应用程序中是一个常见的功能。在asp.net core中上传文件并保存在服务器上,是很容易的。下面就来演示一下怎么样在 ASP.NET Core项目中进行文件上传。 首先,创建一个 asp.net core 项目,然后在Controller文件件添加一个HomeController,然后在 Views 文件夹的 Home 文件夹里添加一个 New.cshtml 视图文件。如下图: 添加一个 UserViewModel.cs在 Model 文件夹中 , 代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
public class UserViewModel { [Required] [Display(Name = "姓名")] public string Name { get; set; } [Required] [Display(Name = "身份证")] [RegularExpression(@"^(\d{15}$|^\d{18}$|^\d{17}(\d|X|x))$", ErrorMessage = "身份证号不合法")] public string IdNum { get; set; } public string IdCardImgName { get; set; } [Required] [Display(Name = "身份证附件")] [FileExtensions(Extensions = ".jpg,.png", ErrorMessage = "图片格式错误")] public IFormFile IdCardImg { get; set; } } |
然后添加一个 New.cshtml 视图文件在 Views 文件夹中:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
@model UserViewModel <form asp-controller="Home" role="form" asp-action="New" enctype="multipart/form-data" method="post"> <div class="form-group"> <label asp-for="Name"></label> <input type="text" class="form-control" asp-for="Name" /> </div> <div class="form-group"> <label asp-for="IdNum"></label> <input type="text" class="form-control" asp-for="IdNum" /> </div> <div class="form-group"> <label asp-for="IdCardImg"></label> <input type="file" asp-for="IdCardImg" /> <p class="help-block">上传。</p> </div> <button type="submit" class="btn btn-default">提交</button> </form> |
在 HomeController 中,添加页面对应的 Action 方法:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
[HttpPost] public IActionResult New([FromServices]IHostingEnvironment env, [FromServices]AppDbContext dbContext, UserViewModel user) { var fileName = Path.Combine("upload", DateTime.Now.ToString("MMddHHmmss") + ".jpg"); using (var stream = new FileStream(Path.Combine(env.WebRootPath, fileName), FileMode.CreateNew)) { user.IdCardImg.CopyTo(stream); } var users = dbContext.Set<User>(); var dbUser = new User() { Name = user.Name, IdCardNum = user.IdNum, IdCardImgName = fileName }; users.Add(dbUser); dbContext.SaveChanges(); return RedirectToAction(nameof(Index)); } |
运行程序,查看表单: 多文件上传 多文件上传和单文件上传类似,表单的 ViewModel 使用 ICollection<IFromFile> ,然后表单的<input type="file" asp-for="IdCardImg" mulpitle /> 添加上mulpitle就可以了(只支持 H5)。 示例源码 注:示例数据存储使用的 Sqlite ,Code First方式生成数据库。 示例代码已经上传至 github: https://github.com/yuleyule66/AspNetCoreFileUpload 本文地址:http://www.cnblogs.com/savorboard/p/5599563.html 作者博客:Savorboard 欢迎转载,请保留出处
View Details前言 asp.net core rtm 6月底即将发布,自己也想着为社区做点共享,刚好最近不太忙,看到社区的小伙伴们都在为dotnet core的推广而贡献力量,项目中刚好在用rc2版本,就多写些文章来帮助那些还在学习的朋友们吧。 目录 dotnet core 和 .net的区别 github中dotnet core各个项目的状况 一、 dotnet core 和 .net的区别 目前在使用C#开发应用程序的时候,有两种框架可供选择: .Net Framework 和 .Net Core,那他们有什么不同的地方呢?或者说是微软为什么要做两个框架,在同一个平台上运行不好吗?就先让我们一起看看他们之间的不同。 大家都知道 .Net Core是跨平台的,除了运行在windows上之外,还可以运行在Linux和Mac OS上。而 .Net Framework只能运行在windows上或者借助于Mono运行于其他平台上。 .Net Core和 .Net Framework可以理解为一个子集和父集的关系,之所以 .Net Core带了个Core是因为它包含了 .Net Framework的一些核心的功能和特性,比如它们共享GC (Garbage Collection,垃圾收集,垃圾回收),jit(Just-In-Time )编译器,还有类型系统和语言特性等。 那么 asp.net 和 asp.net core 的区别呢? asp.net 目前的版本是asp.net 4.6,它已经被使用了很多年了,它比较稳定,如果你的系统不需要跨平台,只是在windows上运行的话,可以使用asp.net 4.6, 它很稳定并且很多第三方库都对其进行了支持。 asp.net core 是采用了 .net core的新一代asp.net架构程序。目前的版本是RC2。后面会对其进行大量介绍。 下面这张图就是他们之间的关系: 二、 github中dotnet core各个项目的状况 有一点值得我们开发者高兴的是,现在微软 .net 相关的大多数项目都是开源的,托管在github上,我建议大家有不懂的地方多去查看源代码,来了解其中的运行原理,以便于对知识的更好的理解和吸收。 .NET Compiler Platform ("Roslyn") .NET编译器。提供的开源Csharp和Visual Basic编译器及代码解析API .NET Core Framework 也被叫做CoreFx,提供Core的基础程序集类库,它包括collections, file systems, console, XML, async等. .NET Core Runtime 也被叫做CoreCLR,它包括了 .net core的runtime(运行时),和mscorlib(基础库),它包含的有GC(垃圾回收),JIT(just-in-time)编译器, 类型系统(.NET data types),和其他一些底层的类库。 […]
View Detailsdotnet的镜像:https://hub.docker.com/r/microsoft/dotnet/,如下图: 下面就演示一下怎么跑一下示例程序,用意是抛砖引玉。 1.首先拉一下镜像:docker pull microsoft/dotnet;命令在仓库首页的右上角。下载慢的同学可以使用阿里的加速器。 2.用官方的例子创建镜像:
1 2 3 4 5 6 7 |
docker run -p 8000:80 -e "ASPNETCORE_URLS=http://+:80" -it --rm microsoft/dotnet [now in the container] mkdir app cd app dotnet new mvc dotnet restore dotnet run |
退出容器用exit命令。以上命令创建的是一个临时镜像,当然你想创建持久化的镜像可以把“--rm”删除。 3.运行过以上命令,这时访问宿主的8000端口就可以访问Asp.Net Core的示例网站了;结果如图:
View DetailsPDO一是PHP数据对象(PHP Data Object)的缩写。 并不能使用PDO扩展本身执行任何数据库操作,必须使用一个database-specific PDO driver(针对特定数据库的PDO驱动)访问数据库服务器。 PDO并不提供数据库抽象,它并不会重写SQL或提供数据库本身缺失的功能,如果你需要这种功能,你需要使用一个更加成熟的抽象层。 PDO需要PHP5核心OO特性的支持,所以它无法运行于之前的PHP版本。
View DetailsPython 由于本身的易用优势和强大的工具库储备,成为了在人工智能及其它相关科学领域中最常用的语言之一。尤其是在机器学习,已然是各大项目最偏爱的语言。 其实除了 Python ,也不乏有开发者用其他语言写出优秀的机器学习项目。在上期的文章中(除了 Python ,这些语言写的机器学习项目也很牛(一)),我们已经列了一些其他语言(C、C++、Go、Java、Javascript)值得关注的开源机器学习项目,本期将针对 PHP、Ruby、Objective C、Swift、Scala 进行补全,同时应上期留言要求,在文末列了一些 .NET 平台上的机器学习项目。 1、PHP PHP-ML —— 机器学习库 PHP-ML 是 PHP 的机器学习库,同时包含算法、交叉验证、神经网络、预处理、特征提取等多种特性。要求 PHP 版本 > = 7.0 。 PHP-ML 提供的机器学习算法包括:关联规则学习(Apriori 算法)、分类器(SVC、KNN、贝叶斯)、回归(最小二乘线性回归、支持向量回归)、聚类(KMeans、基于密度的聚类算法)、矩阵运算相关(准确率、混肴矩阵、与分类相关的结论如精确度、召回率、F1 值、支持率)、模型运算管道(Pipeline)、神经网络(多层感知机)等。 2、Ruby Treat ——自然语言处理框架 Treat 是一个自然语言处理和计算语言学的工具包。Treat 项目旨在为 Ruby 构建一个语言和算法均不可知的 NLP 框架,支持文档检索、文本分块、分段和标记化等任务,自然语言解析,词性标注,关键字提取和命名实体识别。 Classifier —— 通用分类器模块 Classifier 是可用贝叶斯算法及其他分类法的通用分类器模块。贝叶斯分类器的分类原理是通过某对象的先验概率,利用贝叶斯公式计算出其后验概率,即该对象属于某一类的概率,选择具有最大后验概率的类作为该对象所属的类,具有准确、快速、内存要求适当等特点。 3、Objective C MLPNeuralNet —— 多层感知器 MLPNeuralNet 是适用于 iOS 和 Mac OS X 的快速多层感知器神经网络库。它使用矢量操作和硬件加速(如果可用)构建在苹果加速框架之上,通过训练有素的神经网络预测新的示例。 4、Swift Bender —— 机器学习框架 Bender 是 MetalPerformanceShaders 之上的一个抽象层(abstraction layer),可用于操作神经网络,旨在更轻松地在 iOS 上运行预训练的网络。它可以让你轻松使用卷积、池化、全连接和一些规范化等最常见的层,从而轻松地定义和运行神经网络。 目前 Bender 有一个用于 TensorFlow 的适配器(adapter),其可以加载带有变量的图(graph),并将其「翻译」成 Bender 的层(layer)。 Swift AI —— 深度学习库 Swift AI 是一个完全由 Swift 编写的高性能 AI 和机器学习库,包含用于人工智能和科学应用的常用工具集,支持卷积神经网络、循环神经网络、遗传算法库、快速线性代数库、信号处理库等。这些工具采用先进的并行处理技术,专门针对 iOS 和 OS X 硬件进行了优化,目前支持所有的 Apple 平台,并计划推出 Linux 版本支持。 5、Scala Breeze —— 数值处理库 Breeze 是一个数值处理库,是 […]
View Details