两篇文章带你走入.NET Core 世界:Kestrel+Nginx+Supervisor 部署上云服务器(二)

背景:

上一篇:两篇文章带你走入.NET Core 世界:CentOS+Kestrel+Ngnix 虚拟机先走一遍(一)

已经交待了背景,这篇就省下背景了,这是第二篇文章了,看完就木有下篇了。

直接进入主题:

1、购买云服务器

之前在虚拟机跑了一下,感觉还不够真实,于是,准备买台服务器,认真的跑一下。

有阿里云,腾讯云,华为云,还有好多云,去哪买一个?

之前做为华为云的云享专家去参加了一下活动,本来也准备写篇文章,不过相同游记文太多,

这里就转一篇了:让华为云MVP告诉你——在华为的一天可以做什么?,就当作我已经写了吧,哈。

有人问我参加完华为云的活动后有什么感想,我想了想,就回了一句:华为好穷,别问我为什么。

所以,考虑过华为云,不过在比较完三方的价格,以及域名备案的问题,

还是挑了目前优惠力度最大的腾讯云,2.5折买的,记得我以前买的最便宜的是1.89折。

2、登陆云服务器

买完服务器,安装选的是CentOS7.2版本,比起跑虚拟机,这里就省掉了安装过程了。

在控制台想登陆,发现:密码是啥?百了一下,密码要在控制台-更多-密码/密钥-重置密码。

设置好密码就可以直接在控制台上,点登陆,ssh登陆上去了:

3、安装.NET Core SDK

依旧跟着微软的教程走:https://www.microsoft.com/net/learn/get-started/linuxcentos

4、下载SecureCRT+SecureFX

这里木有可视化,想要复制上传文件,没本地虚拟那么方便了,所以需要一款能连接敲命令行和上传文件的工具了。

下载地址:https://www.portablesoft.org/securecrt-securefx-integrated/

这里记录一下我遇到的坑:

1、本地电脑,N年前就下载过SecureCRT,所以用上它了,但是木有SecureFX这个工具。

2、于是想着,在服务器装个FTP啊,来啊,那就装个标配:vsftp了。

对着教程:https://www.centos.bz/2017/12/centos7%E9%83%A8%E7%BD%B2vsftpd%E6%9C%8D%E5%8A%A1/

一顿操作猛如虎,感觉服务端配置的差不多,准备入坑了:

flashFtp的坑:

本里机找了一个老旧的版本,结果连上去看不到东西,

以为是服务器权限没配置好,折腾半天,最后在工具的选项勾了某个"列表 -l显示”的选项后,连上去能看到目录了。

创建目录也正常了,结果不能上传文件,见鬼了,闹腾很久后,只能换工具了。

FileZilla的坑:

电脑重新装了这个工具,连上去,发现文件也能上传了,以为一切OK了。

结果,发现存在文件小的都上传不了,文件大的都能正常上传,我去,这是什么鬼。

又是折腾服务端配置,又是折腾路由器MTU值,情况依旧是小文件连接超时,传输失败。

后来,想起了SecureCRT标配的工具SecureFX,下载,重新运行它连上去,我X,一切都是这么顺畅。

5、安装配置Ngnix

具体参考上一篇,不过有几个重点配置提一下:

proxy_cookie_domain ~.+$ aries.cyqdata.com;

将Set-Cookie中的Domain值,替换为指定的域名。

Aries设置的Domain是IP属性,Nginx请求转给客户端时,需要转成域名,不设的话,拿到的是原始的IP,设不到Cookie。

网上对这块的说明都是仅有:

proxy_cookie_domain a.com b.com;

固定的把a.com替换成b.com,

考虑到负载均衡一开,这个IP的值就不固定,所以Domain值必须是变量。

难道你们设Cookie都不设置的Domain的啊,设了Domain都不考虑负载的啊。

坑啊,最后还是官网的帮助文档能解决问题,自己写了个正则搞定。

文档地址:http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_cookie_domain

至于负载配置和动静态的配置比较简单:

负载均衡:在http配置下增加upstream配置即可:

upstream nodes {
server 192.168.10.1:8668;
server 192.168.10.2:8668;
}

动静分离:#静态文件交给nginx处理
location ~ .*\.(htm|html|gif|jpg|jpeg|png|bmp|swf|ioc|rar|zip|txt|flv|mid|doc|ppt|pdf|xls|mp3|wma)$
{
root /var/www;
expires 30d;
}
#静态文件交给nginx处理
location ~ .*\.(js|css)?$
{
root /var/www;
expires 1h;
}

https 访问,参考:https://www.cnblogs.com/tianhei/p/7726505.html

6、安装配置:Supervisor守护进程

当Kestrel跑起来后,第二天,发现它挂了,然后,就知道要装个守护进程,等它挂掉的时候,能自动启动。

为了安装这个,一开始我也是入坑,网上的教程,又坑人不浅,最后找到最简单的yum安装,就两行命令:

yum install epel-release
yum install -y supervisor

默认配置文件:/etc/supervisord.conf 暂时可以不用管,如果要开启网页管理,则修改以下两行:

[inet_http_server]         ; inet (TCP) server disabled by default
port=*:5005        ; (ip_address:port specifier, *:port for all iface)
...

[supervisorctl]
;serverurl=unix:///var/run/supervisor/supervisor.sock ; use a unix:// URL  for a unix socket
serverurl=http://*:5005 ; use an http:// url to specify an inet socket

....

[include]
files = supervisord.d/*.ini

设置开机启动:

systemctl enable supervisor.service
systemctl daemon-reload

浏览的效果如下:

进程管理配置文件放到:/etc/supervisord.d/目录下即可:

如上图,我创建了两个进程配置文件:

配置文件内容如下:

taurus_mvc.ini

[program:Taurus_MVC]
command=/bin/bash -c "dotnet Taurus.View.dll"
directory=/home/web/taurus/mvc/
environment=ASPNETCORE__ENVIRONMENT=Production
user=root
stopsignal=INT
autostart=true
autorestart=true
startsecs=3
redirect_stderr=true
stderr_logfile=/var/log/taurus_mvc.err.log
stdout_logfile=/var/log/taurus_mvc.out.log  

aries_mvc.ini

[program:Aries_MVC]
command=/bin/bash -c "dotnet Web.UI.dll"
directory=/home/web/aries/mvc/
environment=ASPNETCORE__ENVIRONMENT=Production
user=root
stopsignal=INT
autostart=true
autorestart=true
startsecs=3
redirect_stderr=true
stderr_logfile=/var/log/aries_mvc.err.log
stdout_logfile=/var/log/aries_mvc.out.log

默认日志文件:/tmp/supervisord.log,可以查看进程的启动信息

命令行输入:supervisorctl,可以查看状态:

更多的说明:https://www.linuxidc.com/Linux/2017-02/140417.htm

总结:

把这两篇文章的内容,走完一次,基本就进入NetCore的世界了。

不过,与其说是NetCore,不如说是走进Linux的世界。

写代码的关键注意点:路径区分大小写及路径用“/”,而不是常用的"\\"。

毕竟更多的时间与坑,都是花在Linux系统及软件安装使用上的。

  Aries on CentOS7:mvc.aries.cyqdata.com

  Taurus on CentOS7:mvc.taurus.cyqdata.com

原文地址:https://www.cnblogs.com/cyq1162/p/10544615.html

时间: 2024-08-04 22:41:31

两篇文章带你走入.NET Core 世界:Kestrel+Nginx+Supervisor 部署上云服务器(二)的相关文章

使用余弦定理计算两篇文章的相似性

使用余弦定理计算两篇文章的相似性:(方法论,细致易懂版) http://blog.csdn.net/dearwind153/article/details/52316151 python 实现(代码): http://outofmemory.cn/code-snippet/35172/match-text-release (结巴分词下载及安装:http://www.cnblogs.com/kaituorensheng/p/3595879.html) java 实现(代码+方法描述): https

对张子阳先生对委托和事件的两篇文章的读后思考(说得很透,内附故事一篇)

第一篇 C#中的委托和事件 第二篇 C#中的委托和事件(续) 首先,张子阳先生的这是两篇关于委托和事件间关系的文章,是目前为止我读过的介绍委托和事件以及异步调用最简明清晰文章,作者通过非常有节奏的"标题"->"问题"->"思路"->"实现"->"讲解"的结构,分步骤一步一步地将委托和事件的实现.应用与原理阐述得非常清楚,并且在行文期间将自己有趣的思考过程通过生动的语言表达了出来,使人

三篇文章带你极速入门php(三)之php原生实现登陆注册

看下成果 ps:纯天然h5,绝不添加任何添加剂(css)以及化学成分(js)(<( ̄ ﹌  ̄)我就是喜欢纯天然,不接受任何反驳) 关于本文 用原生的php和html做了一个登陆注册,大概是可以窥见一般php开发的样子了.不过,low的地方区别提前说一下: 这个是多入口,一般程序都是单入口,单入口就是统一通过index.php进入,然后再引入其他文件,调用其代码,多入口就是每次通过不同文件进入(比如一会展示的login.php和register.php) 保留登陆信息用的是session,现在普遍

看到关于JS线程的两篇文章

JavaScript的setTimeout与setInterval是两个很容易欺骗别人感情的方法,因为我们开始常常以为调用了就会按既定的方式执行, 我想不少人都深有同感, 例如 [javascript] view plaincopyprint? setTimeout( function(){ alert(’你好!’); } , 0); setInterval( callbackFunction , 100); 认为setTimeout中的问候方法会立即被执行,因为这并不是凭空而说,而是JavaS

两篇文章的相似度(文章相似度)

package com.etoak.simHash; import com.hankcs.hanlp.seg.common.Term; import com.hankcs.hanlp.tokenizer.StandardTokenizer; import org.apache.commons.lang3.StringUtils; import org.jsoup.Jsoup; import org.jsoup.safety.Whitelist; import java.math.BigInteg

三篇文章带你极速入门php(一)之语法

本文适合阅读用户 有其他语言基础的童鞋 看完w3cschool语法教程来回顾一下的童鞋(传送门,想全面看一下php语法推荐这里) 毫无基础然而天资聪慧颇有慧根(不要左顾右看说的就是你,老夫这里有一本<php从入门到放弃>,观你根骨清奇10两银子卖给你如何) 看完本文后你会收获到什么 php的变量的定义,使用 函数的定义,使用,传递参数 数组的定义,调用,常用方法,使用场景 php中循环,判断,选择结构的语法 类的定义,成员变量和成员函数的定义和使用 相信我,认真看完本文,你就已经掌握了php常

还不知道事务消息吗?这篇文章带你全面扫盲!

在分布式系统中,为了保证数据一致性是必须使用分布式事务.分布式事务实现方式就很多种,今天主要介绍一下使用 RocketMQ 事务消息,实现分布事务. 文末有彩蛋,看完再走 为什么需要事务消息? 很多同学可能不知道事务消息是什么,没关系,举一个真实业务场景,先来带你了解一下普通的消息存在问题. 上面业务场景中,当用户支付成功,将会更新支付订单,然后发送 MQ 消息.手续费系统将会通过拉取消息,计算手续费然后保存到另外一个手续费数据库中. 由于计算手续费这个步骤可以离线计算,所以这里采用 MQ 解耦

一篇文章,带你明白什么是过拟合,欠拟合以及交叉验证

误差模型:过拟合,交叉验证,偏差-方差权衡 作者Natasha Latysheva;Charles Ravarani 发表于cambridgecoding 介绍 ??在本文中也许你会掌握机器学习中最核心的概念:偏差-方差权衡.其主要想法是,你想创建尽可能预测准确并且仍能适用于新数据的模型(这是泛化).危险的是,你可以轻松的在你制定的数据中创建过度拟合本地噪音的模型,这样的模型是无用的,并且导致弱泛化能力,因为噪声是随机的,故而在每个数据集中是不同的.从本质上讲,你希望创建仅捕获数据集中有用成份的

这篇文章带你彻底理解synchronized

本人免费整理了Java高级资料,涵盖了Java.Redis.MongoDB.MySQL.Zookeeper.Spring Cloud.Dubbo高并发分布式等教程,一共30G,需要自己领取.传送门:https://mp.weixin.qq.com/s/JzddfH-7yNudmkjT0IRL8Q 1. synchronized简介在学习知识前,我们先来看一个现象: public class SynchronizedDemo implements Runnable { private static