dotnet core+nginx+supervisor
1.前提准备
安装虚拟机,安装CentOS,有云服务器的直接用云服务器就行
本地安装 xshell、xftp
2.nginx配置静态页面
我们先学习一下使用nginx配置一个静态页面,一步一步来深入
使用xshell连接linux
使用 yum 来安装 Nginx
yum install nginx -y
使用 nginx 命令启动 Nginx
nginx
附:关闭、重启命令
nginx -s stop
nginx -s reload
在本地访问http://<ip>,出现nginx页面为成功
然后在本地新建一个index.html静态文件,xftp连接linux,上传到linux:/home/wwwrooot/test(这个自己定义)
找到:
/etc/nginx/nginx.conf
在这个配置文件添加一个server,如下:
server {
listen 1101 default_server;
listen [::]:1101 default_server;
server_name _;
root /home/wwwrooot/test;
include /etc/nginx/default.d/*.conf; location / {
}
}
这里可以自己vi去编辑,也可以用xftp把这个配置传输到本地,本地编辑好再传输回服务器,这里我比较喜欢后者,方便
添加完配置后,我们重启一下nginx
本地访问链接http://<ip>:1101 出现自己配置的页面为成功
不成功的话,欢迎留言讨论(反正我是成功了)
3.配置dotnet core 项目
1)linux安装dotnet core sdk 2.2
添加yum源
rpm -Uvh https://packages.microsoft.com/config/rhel/7/packages-microsoft-prod.rpm
升级所有包同时也升级软件和系统内核
yum update
安装.net core
yum install dotnet-sdk-2.2
查看是否安装成功
dotnet --version
官方文档:https://dotnet.microsoft.com/download/linux-package-manager/centos/sdk-2.2.401 没事多看看官网,虽然我也没这习惯,不过我想慢慢让自己喜欢上
2)新建一个core web项目,这里叫 CoreDemo,并发布,将发布出来的文件上传到 /home/wwwrooot/dotnetCore/CoreDemo
然后加配置,这里我们采用别的方法加,不和上面一样直接修改 nginx.conf
打开nignx.conf 的时候,你是否注意到一行
include /usr/share/nginx/modules/*.conf;
很明显,这是导入这个路径下的所有 conf 后缀的配置文件
那就很容易了,我们新建一个配置文件,就叫 CoreDemo.conf 好了,内容如下
server {
listen 1102 default_server;
server_name localhost;
location / {
proxy_pass http://localhost:5000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection keep-alive;
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
重启nginx,然后cd 到上面上传的发布文件的目录,执行启动命令
dotnet CoreDemo.dll
完毕!在本地访问http://<ip>:1102试试看!!!
PS:附加一个bug 访问 http://localhost:5000 的时候 dotnet core 会重定向成安全链接 https://localhost:5001 如果服务器没有ssl认证,还不支持https 就会有访问不到的情况发生
解决方法:
1)ssl认证,无话可说
2)修改代码,让程序不重定向
这里,我们把5000换成 2202(最好每次都换吧,免得端口冲突)
launchSettings.json 删掉 https配置
"CoreDemo": {
"commandName": "Project",
"launchBrowser": true,
"applicationUrl": "http://localhost:2202",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
}
Program
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseUrls("http://localhost:2202")
.UseStartup<Startup>();
重新发布上传,并修改 CoreDemo.conf 5000->2202
跑一下试试!!!
4.守护项目进程
在之前的操作中,dotnet CoreDemo.dll 启动项目为前台启动,这样方便调试,但是对于生成环境确实极不友好的,所有,要创建守护进程,把这个变为后台执行
这里,我们使用 Supervisor
首先,安装
yum install supervisor
打开 /etc/supervisord.conf 打开后拉到最末,有这么一行(这里就看一下,可无需操作)
[include]
files = supervisord.d/*.ini
因为supervisord.conf 支持 .ini 和 .conf 的配置文件,所以,我们可以在这里修改指定路径和指定读取文件类型(这里不修改)
新建CoreDemo.ini 到 /etc/supervisord.d/ 文件夹下面,内容如下
[program:CoreDemo]
command=dotnet CoreDemo.dll #运行命令
directory=/home/wwwrooot/dotnetCore/CoreDemo #程序路径
environment=ASPNETCORE__ENVIRONMENT=Production
user=root
stopsignal=INT
autostart=true #自动启动
autorestart=true #3秒自动重启
startsecs=3
stderr_logfile=/log/CoreDemo/CoreDemo.err.log #标准错误日志
stdout_logfile=/log/CoreDemo/CoreDemo.out.log #标准输出日志
启动
supervisord -c /etc/supervisord.conf #启动服务 其他相关操作:
supervisorctl reload #重新加载配置
supervisorctl shutdown #关闭
systemctl enable supervisord #开机启动
systemctl is-enabled supervisord #验证是否开机启动
systemctl status supervisord #查看状态
启动服务的时候,我们可能会发现一些错误
(1)配置文件错误
配置文件中的注释导致的错误,把注释删掉(这里有点莫名其妙,有的时候带注释也没发生错误)
(2)日志文件不存在
配置的日志文件的文件夹要手动新建
(3)端口占用(这个一般发生在关闭服务后重启的时候)
把进程干掉
# ps -ef | grep supervisord
root 18680 1 0 14:23 ? 00:00:00 /usr/bin/python /usr/bin/supervisord
root 19076 30273 0 14:25 pts/0 00:00:00 grep --color=auto supervisord
# kill -9 18680
5.守护nginx进程
用上面的命令设置supervisord开机启动后,重启一下服务器,发现,塔喵的nginx不会开机自启,好,继续下一步
这里最简单的方法就是和项目一样,也给nginx配置进程守护,创建nginx.ini如下
[program:nginx]
command=nginx -g 'daemon off;'
directory=/usr/sbin
environment=ASPNETCORE__ENVIRONMENT=Production
user=root
stopsignal=INT
autostart=true
autorestart=true
startsecs=3
stderr_logfile=/log/nginx/nginx.err.log
stdout_logfile=/log/nginx/nginx.out.log
这里注意一下,nginx默认为后台启动,所以command执行命令得设置为前台,或者将 daemon off; 放到nginx.conf中,这样直接执行nginx就可以了
好了,就是这么简单,重启服务器试试!!!
6.显示supervisor 的控制台
把控制台显示出来,方便我们管理
vi supervisord.conf
修改下面这段配置
[inet_http_server] ; inet (TCP) server disabled by default
port=*:9001 ; (ip_address:port specifier, *:port for all iface)
username=user ; (default is no username (open server))
password=123 ; (default is no password (open server))
我这里只是取消了注释,然后修改了 port,想要的自己改别的也行,到这里算是弄好了,记得在腾讯云安全组中开放端口
本地访问效果如下:
最新文章
- 【CF】438E. The Child and Binary Tree
- ubuntu下使用nginx部署Laravel
- 【转】VIM 快速注释
- ColumnEdit 数据源修改
- Java并发之线程中断
- HTTP的长连接,你不知道的连接。。。
- Dynamics AX 2012 性能优化之 SQL Server 复制
- centos7安装python3.6后导致防火墙功能无法正常工作的解决办法
- JS进阶之---函数,立即执行函数
- HQL count(*)
- tomcat-在cmd窗口启动Tomcat
- Dynamics CRM 2015/2016 Web API:聚合查询
- mybatis模糊查询防止SQL注入
- Appium+python自动化5-Appium Inspector
- 执行Android项目时指定特定的AVD进行測试
- LeetCode赛题390----Elimination Game
- C++——内存对象 禁止产生堆对象 禁止产生栈对象
- new Date()时间
- MS Project 如何删除前置任务
- Android自定义之ScrollView下拉刷新
热门文章
- TypeScript 之 控制流分析(Control Flow Analysis)
- MySQL单表查询(分组-筛选-过滤-去重-排序-分页-判断-正则)
- SQL审核平台Yearning
- Vue DevUI v1.4 版本发布:从体验、效率、质量三个方面做了全方位的优化&#127881;
- adb devices出现offline解决方法
- Spring IOC官方文档学习笔记(一)之IOC容器概述
- 联邦学习(Federated Learning)
- 创建型模式 - 单例模式Singleton
- Python 内置界面开发框架 Tkinter入门篇 丙(文末有福利彩蛋,今天可是元宵节)
- Django中需要修改配置