两篇文章带你走入.NET Core 世界:CentOS+Kestrel+Ngnix 虚拟机先走一遍(一)
背景:
上一篇:ASP.Net Core on Linux (CentOS7)共享第三方依赖库部署
已经交待了背景,这篇就省下背景了。
折腾的过程分两步:
第一步是:本机跑虚拟机部署试一下;
第二步是:买了个云服务器部署了上去。
折腾完,感觉DotNetCore,虽然普及率不高,但整体还算是比较成熟了。
下面,就和大伙分享一下这两步的过程及遇到的坑吧,让大伙也方便进入NetCore的世界。
测试环境跑:ASPNETCore on Linux(CentOS7)步骤:
1:下载:虚拟机VMware、CentOS7系统
VMware 下载地址:https://www.cr173.com/soft/81088.html
CentOS7 下载地址:https://www.centos.org/download/
为什么选CentOS7?
主要是上各大云平台,看他们提供最多的Linux版本就是这个了,比较大众化。
地址里有两个版本:DVD ISO (全家桶版本)和 Min ISO(最小版本)
为了避免麻烦,下载了DVD版本。
2:安装:VMware Workstation
如果是第一次安装:应该没啥情况好说。
如果是二次安装,如我的情况比较坑:
以前装了好多年的,重新运行时,发现要重新输入注册码。 于是网上找了几个注册码重新输入,结果不管用哪个码,都无效,甚至下载了注册机,都过不去了。 最后,想到重新安装,却连重新安装都提示无法安装。 解决方法:把注册表里和WMware相关的项都删除了,再重新安装,安装过程输入注册码就可以了。 在“运行”输入:regedit 打开 HKEY_LOCAL_MACHINE 选择 SOFTWARE找到VMware的键。删除即可。 之后就可以重新安装了,再输入注册码就正常了。
3:安装:CentOS7系统
按着别人的教程,以为安装的没界面的版本,没想到装完也是带KDE界面的。
找了两篇:
https://www.cnblogs.com/wcwen1990/p/7630545.html
http://baijiahao.baidu.com/s?id=1599601257937774752&wfr=spider&for=pc
我遇到的坑是:安装完后,界面就黑屏了,一直进不去。
解决方法:是BIOS的设置虚拟化没开(笔记本开机时的BIOS曾经重置到默认过) https://blog.csdn.net/weixin_41196185/article/details/79574494
接下来,你需要熟悉一下Linux系统,先了解一下 Linux目录结构:
为了少点折腾,直接先用root账号玩吧,新创建的普通账号根本玩不来。
4:安装:NET Core SDK
跟着微软的教程走:https://www.microsoft.com/net/learn/get-started/linuxcentos
其中一条:sudo yum update 这条更新系统组件(可选,200M左右,看网络是否方便)
哥当时网络差,结果这一步卡了1个多小时,结果还失败了,后来直接跳过它了。
5:发布部署并运行:Taurus.MVC 项目和 Aries 项目。
你可以在GitHub上下载 Taurus.MVC 的源码项目,运行:Taurus.MVC_NetCore.sln 然后右键发布。
由于当年VS2017装的比较早,发布的选项里是木有:部署模式 的。
现在在VS 2017 的 视图-通知 菜单里,升级了一下,才有这东西。
如果是运行自己的项目,注意发布前,需要提前设置好要监听的端口:
public class Program
{
public static void Main(string[] args)
{
BuildWebHost(args).Run();
} public static IWebHost BuildWebHost(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>()
.UseUrls(GetUrl())
.Build();
public static string GetUrl()
{
string url = AppConfig.GetApp("Host", "[http|https]://*:8888");//这里弄成了可以配置的形式,不配置默认就是8888端口
return url;
}
}
我在/home/目录下创建了web目录,如:
/home/web/taurus/
/home/web/aries/
将发布后的目录下的所有东西,包括100多个Microsoft.XXXX.dll,都复制粘贴到taurus目录或aries目录下。
当然,你也可以参考上一篇文章,将第三方的dll移到单独的目录去。
在虚拟机中有界面可以直接复制粘贴,所以暂时也不用搞ssh的工具和ftp了。
这里你得会基本的linux命令,cd 切换目录总得会:
切到项目目录,如 cd /home/web/taurus/
然后运行:
dotnet Taurus.View.dll (program.cs所在的dll名称) PS:按Ctrl+C 可退出程序
现在可以用:http://ip:8888 访问了。
我这里遇到的坑:
提示找不到:libuv库 百度半年无所得,后来看到runtime目录,里面发现linux-64目录下有libuv.so,把它给copy到根目录,才运行起来。 PS:VS 2017 升级后,再发布时会自动把libuv.so给弄到根目录。
6:安装: Ngnix
默认 dotnet xxx.dll 运行的是 kestrel 服务器,不支持域名绑定,所以得弄一个支持域名绑定的来配合一下。
而这个支持负载均衡的反向代理服务器,简单又实用,大伙都爱用它。
网上有些很复杂的教程坑死人:
就是下载源码,然后运行编绎的那些教程,结果我照着运行编绎,结果报错了,然后一脸朦B。
在坑里转了半天,最后找到一个最简单的,就两行命令:
1、添加Nginx到YUM源,添加CentOS 7 Nginx yum资源库,打开终端,使用以下命令:
sudo rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
2、安装Nginx,在你的CentOS 7 服务器中使用yum命令从Nginx源服务器中获取来安装Nginx:
sudo yum install -y nginx
Nginx将完成安装在你的CentOS 7 服务器中。
3、启动Nginx,刚安装的Nginx不会自行启动。运行Nginx:
sudo systemctl start nginx.service
直接输入本机IP,默认80端口,即可访问,看到Welcome...。
参考:https://blog.csdn.net/u012486840/article/details/52610320
7、关闭Selinux
关闭本地IP自循环的这个限制,Ngnix才能指向Kestrel服务器,不然会报以下错:
Bad gateway错误
打开文件:/etc/selinux/config,把SELINUX=enforcing 改成如下的disabled
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
# enforcing - SELinux security policy is enforced.
# permissive - SELinux prints warnings instead of enforcing.
# disabled - No SELinux policy is loaded.
SELINUX=disabled
# SELINUXTYPE= can take one of three two values:
# targeted - Targeted processes are protected,
# minimum - Modification of targeted policy. Only selected processes are protected.
# mls - Multi Level Security protection.
SELINUXTYPE=targeted
改完保存,要重启才能生效,可是哥不想重启,找了半年也没找到可以有即时生效的命令,坑啊。
后来找到另一个方法,把Ngnix加入Selinux的白名单,就不用关它了。
运行以下三条命令就好了:
yum install policycoreutils-python
cat /var/log/audit/audit.log | grep nginx | grep denied | audit2allow -M mynginx
semodule -i mynginx.pp
8:Nginx配置网站:
nginx的配置文件在:/etc/nginx/nginx.conf,打开的话内容如下:
user nginx;
worker_processes ; error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid; events {
worker_connections ;
} http {
include /etc/nginx/mime.types;
default_type application/octet-stream; log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"'; access_log /var/log/nginx/access.log main; sendfile on;
#tcp_nopush on; keepalive_timeout ; #gzip on; include /etc/nginx/conf.d/*.conf;
}
不过这个文件可以不用动,因为它的服务配置include 指向了/etc/nginx/conf.d/*.conf。
所以,只要在conf.d目录下创建自己的网站配置文件即可,可以把default.conf 移除或改个后缀先:
然后新建:taurus.conf 的配置(这里少了三个基本的配置:Domain替换、负载均衡、动静分离,在下一篇介绍):
server {
listen ;
server_name mvc.taurus.cyqdata.com;//绑定域名
location / {
proxy_pass http://localhost:8888/;//跳转地址
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 Cookie $http_cookie;
} #error_page /.html; # redirect server error pages to the static page /50x.html
#
error_page /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
接着,刷新配置即可:
nginx -s reload
访问效果:
总结:
进入NetCore的世界:
1、NetCore的技术学习成本还算是比较低的:
因为Taurus和Aries在window和linux的开发方式和代码都是同一套,
根本不需要学习NetCore下的MVC、EF以及一大堆有的没的消费时间。
2、整体的学习成本,更多的还是熟悉Linux系统及命令行花的时间多。
Aries on CentOS7:mvc.aries.cyqdata.com
Taurus on CentOS7:mvc.taurus.cyqdata.com
下一篇,介绍正式往服务器上部署的过程。
两篇文章带你走入.NET Core 世界:CentOS+Kestrel+Ngnix 虚拟机先走一遍(一)的更多相关文章
- 两篇文章带你走入.NET Core 世界:Kestrel+Nginx+Supervisor 部署上云服务器(二)
背景: 上一篇:两篇文章带你走入.NET Core 世界:CentOS+Kestrel+Ngnix 虚拟机先走一遍(一) 已经交待了背景,这篇就省下背景了,这是第二篇文章了,看完就木有下篇了. 直接进 ...
- 三篇文章带你极速入门php(三)之php原生实现登陆注册
看下成果 ps:纯天然h5,绝不添加任何添加剂(css)以及化学成分(js)(<( ̄ ﹌  ̄)我就是喜欢纯天然,不接受任何反驳) 关于本文 用原生的php和html做了一个登陆注册,大概是可以窥 ...
- vnext 技术两篇文章和评论
研究vnext的两篇 好文章,重点看评论! http://www.cnblogs.com/shanyou/p/4589930.html http://www.cnblogs.com/shanyou/p ...
- 有关C#写一个WindowsService的两篇文章
1.http://blog.csdn.net/yysyangyangyangshan/article/details/10515035 上面的这篇文章一共两段,第二段讲的是使用代码来安装发布这个Win ...
- 难道你还不知道Spring之事务的回滚和提交的原理吗,这篇文章带你走进源码级别的解读。
上一篇文章讲解了获取事务,并通过获取的connection设置只读,隔离级别等:这篇文章讲事务剩下的回滚和提交. 事务的回滚处理 之前已经完成了目标方法运行前的事务准备工作.而这些准备工作的最大目的无 ...
- BigDecimal带精度的运算的两篇文章
转自:http://guoliangqi.iteye.com/blog/670908 之前提到过在商业运算中要使用BigDecimal来进行相关的钱的运算(java中关于浮点运算需要注意的 ),可是实 ...
- 【Kubernetes】两篇文章 搞懂 K8s 的 fannel 网络原理
近期公司的flannel网络很不稳定,花时间研究了下并且保证云端自动部署的网络能够正常work. 1.网络拓扑 拓扑如下:(点开看大图) 容器网卡通过docker0桥接到flannel0网卡,而每个 ...
- 三篇文章带你极速入门php(一)之语法
本文适合阅读用户 有其他语言基础的童鞋 看完w3cschool语法教程来回顾一下的童鞋(传送门,想全面看一下php语法推荐这里) 毫无基础然而天资聪慧颇有慧根(不要左顾右看说的就是你,老夫这里有一本& ...
- Android Bootloader LittleKernel的两篇文章 【转】
转自:http://blog.csdn.net/loongembedded/article/details/41747523 2014-12-05 14:37 3599人阅读 评论(2) 收藏 举报 ...
随机推荐
- Linux kernel的中断子系统之(一):综述
返回目录:<ARM-Linux中断系统>. 总结: 一从作为一名驱动工程师角度看,用好中断需要正确认识request_threaded_irq/request_irq关系.中断临界区保护. ...
- 沉默的螺旋--digest
孤立的恐惧对名望的追求高度的和谐和共识是大部分人的幸福感.安全感的源头公开性能让某种行为具有社会可接受性 P5谈论和沉默决定了意见气候那些被新的东方政策说服的人,感觉自己所想的都是合理的.因此他们就会 ...
- Spring提取@Transactional事务注解的源码解析
声明:本文是自己在学习spring注解事务处理源代码时所留下的笔记: 难免有错误,敬请读者谅解!!! 1.事务注解标签 <tx:annotation-driven /> 2.tx 命名空间 ...
- SQL—对数据表内容的基本操作
数据表 students id name sex age address 101 张汉 男 14 杭州 102 欧阳钦 男 13 杭州 103 吴昊 男 14 北京 104 钱进进 男 1 ...
- ftp研究
工作中经常用到ftp,最近闲下心来,仔细研究下ftp这个协议. FTP(文件传输协议)工作原理 目前在网络上,如果你想把文件和其他人共享.最方便的办法莫过于将文件放FTP服务器上,然后其他人通过FTP ...
- 我的Python之旅第三天
一 编码操作 1 编码 enconde() 英文字符编码为"utf-8"时,一个字符占一个字节. s1='abcdef' b1=s1.encode('utf-8') print(b ...
- 理解Python中的yield
1.通常的for...in...循环中,in后面是一个数组,这个数组就是一个可迭代对象,类似的还有链表,字符串,文件.它可以是mylist = [1, 2, 3],也可以是mylist = [x*x ...
- 从零开始学Web之HTML(二)标签、超链接、特殊符号、列表、音乐、滚动、head等
大家好,这里是 Daotin 从零开始学 Web 系列教程.此文首发于「 Daotin的梦呓 」,欢迎大家订阅关注.在这里我会从 Web 前端零基础开始,一步步学习 Web 相关的知识点,期间也会分享 ...
- django(权限、认证)系统——自定义UserProfile储存User额外信息
上篇文章我们引出了Django内置的权限控制系统,讲了安装,和最核心和基本的User模型的API和其Manager的API. 接下来我们继续深入下去,使用User对象做一些事情,首先当然就是创建一个U ...
- 如何在当前目录下快速打开cmd(或者以管理员的身份打开)
1.在当前目录下,按住shift键+点击右键,选择在此处打开命令窗口 很多时候我们需要打开命令行然后进入到相应目录进行一些操作. 常规的做法是: D:\foo\bar", 然后输入cd 再把 ...