.netcore项目初体验(新手必看,第一次用必看)
为什么叫新手必看?第一次必看?
因为我就是新手,我第一次用它。就在2周前。目前项目运行平稳。
此文有你第一次使用时,必须要使用的一切配置。
题外话:
虽然netcore现在已经是2.2版本了,江湖流传是能比肩Java的微软神作,但却是我第一次用.netcore来做生产项目。选它的原因也有些令人尴尬。
公司因为变革,改走java路线了。服务器也不在我手上进行管理。于是问了管服务器的同事,说是windows服务器已经没有了。
没办法。之前用java写过一个项目,进度太慢。这次的项目时间短任务重,又只有自己一个干。
于是乎,那就.netcore走下去吧。至少是C#,再慢也比写java快。
话不多说。接下来的内容就是本次项目使用netcore的各种经验和总结,当然,也有坑坑坑的事儿发生。
开发环境:win7/win10 vs2017 .netcore2.1
生产环境:centos7.4,ubuntu 16
本次项目使用的技术点有:
netcore项目发布介绍(及添加linux下的驻守进程)[已完结]
netcore读取配置文件及mysql连接
log4net 配置(全局异常捕获)
swagger 配置
Autofac 的配置
https 的配置及使用
cors 跨域的配置
图片合成,生成二维码,
netcore项目发布介绍(及添加linux下的驻守进程)
1、本地发布:和原先.netframework项目一样,项目右键,点发布即可。
注意下图,发布的配置文件中需要选择linux-64;
发布后,只有原先.netframework项目的bin目录,没有任何静态资源文件夹。
若有使用到的话,记得将静态资源文件,项目的xml文件(swagger会使用到)等也记得打包好。
2、安装生产服务器的运行环境:
netcore在centos7.4安装下的安装步骤( ubuntu与之类似)
(官方教程:https://dotnet.microsoft.com/learn/dotnet/hello-world-tutorial/install)
sudo rpm -Uvh https://packages.microsoft.com/config/rhel/7/packages-microsoft-prod.rpm
sudo yum update
sudo yum install dotnet-sdk-2.1
安装步骤太简单了,简直不需要多余的描述了。
然后输入 dotnet 回车,若出现如下图所示,则表示安装成功了。
否则,请详细查看安装时的内容,里面会有提示你为什么没有安装成功的原因。
注:之前用腾讯云安装了centos7.6(系统安装好后服务器上本地查询,却是显示的7.5版本,后来死活连接不上mysql。因为时间关系,具体原因没有分析过。后来)
3、上传打包好的文件夹到linux服务器
本文上传路径为: /usr/wwwroot/mynetcoreproject (路径自己定,没有的话就新建吧)
上传好后进入此目录,
输入命令 dotnet mynetcoreproject .dll,
看到如下界面,则表示启动成功
此时,表示服务器已经在8088端口启用,
输入命令: curl http://localhost:8088/api/values 应该就能看到此接口的返回数据了。
4、安装守护进程supervisor
如第3步的操作,若退出xshell或退出控制台,那么这个站点也同时被关闭了(不能像服务一样在后台运行,生产环境中这是不敢想象的)
面临的问题以如下三个(出处:https://www.cnblogs.com/Hai--D/p/5820718.html)
问题1:ASP.NET Core应用程序运行在shell之中,如果关闭shell则会发现ASP.NET Core应用被关闭,从而导致应用无法访问,这种情况当然是我们不想遇到的,而且生产环境对这种情况是零容忍的。
问题2:如果ASP.NET Core进程意外终止那么需要人为连进shell进行再次启动,往往这种操作都不够及时。
问题3:如果服务器宕机或需要重启我们则还是需要连入shell进行启动。
此时,就要安装守护进程supervisor了。.至于它是什么?安装好后就知道了。
安装过程如下:(详见https://www.cnblogs.com/Dicky-Zhang/p/6171954.html,众多网友有反馈提到我下面的安装方式是有坑的,在前面给到的链接文章中也是排在最后一位的安装方式。具体有什么坑不得而知,我偷懒用了第四次,运气好,一次成功,就不再研究了)
$ sudo su - #切换为root用户
# yum install epel-release
# yum install -y supervisor
# systemctl enable supervisord # 开机自启动
# systemctl start supervisord # 启动supervisord服务
# systemctl status supervisord # 查看supervisord服务状态
# ps -ef|grep supervisord # 查看是否存在supervisord进程
安装完成后,先别急着启动它,还需要做如下配置
在supervisord.conf中,添加控制台访问
[inet_http_server] ; inet (TCP) server disabled by default
port=*:7002 ; (ip_address:port specifier, *:port for all iface)
username=yourusername ; (default is no username (open server))
password=yourpassword ; (default is no password (open server))
注意,在supervisord.conf的
[include]
files = /etc/supervisor/conf.d/*.ini
有如上信息,
所以,启动进程的配置文件将写在 /etc/supervisor/conf.d/目录下
[program:yourprogram]
command=dotnet /usr/wwwroot/yourprogram/yourprogram.dll ;这一行其实就是手动启动项目的命令
directory=/usr/wwwroot/yourprogram
environment=ASPNETCORE__ENVIRONMENT=Production
user=root
stopsignal=INT
autostart=true
autorestart=true
startsecs=3
stderr_logfile=/var/log/ossoffical.err.log
stdout_logfile=/var/log/ossoffical.out.log
保存并退出后,
再执行systemctl start supervisord启动守护进程,此时,站点项目也就一起启动起来了。
通过访问 http://IP:7002,再输入账号密码(supervisord.conf中inet_http_server节的配置)
就能看到如下界面了。
因为Supervisor已经设定为自动启动了,所以每次它自身的启动也会将所以配置文件下项目都启动起来。
通过上文的界面管理,在版更项目后,也可方便的点一下“Restart“即可。