准备.NET Core环境
1.注册 Microsoft 密钥和源
sudo rpm -Uvh https://packages.microsoft.com/config/centos/7/packages-microsoft-prod.rpm
2.安装 .NET Core SDK
sudo yum install dotnet-sdk-3.1
3.安装 ASP.NET Core 运行时
sudo yum install aspnetcore-runtime-3.1
站点部署
1.创建目录
mkdir /usr/dotnet
2.将发布文件上传到服务器目录,我使用的是WinSCP工具上传的文件,这里不做介绍
3.启动服务
进入站点目录 cd /usr/dotnet
启动服务 dotnet *****.dll
启动成功后我们可以看到服务端口号
4.访问站点
5.如果访问失败,需要检查防火墙是否有开放端口及阿里云是否有配置端口
开放端口:sudo firewall-cmd --zone=public --add-port=5000/tcp --permanent 如果是FirewallD is not running状态,则执行:systemctl start firewalld,执行成功后,再重新配置端口
查服务进程:ps -aux | grep "TuoKeWeb.dll" 强制杀掉进程:kill -9 进程ID
重启防火墙 sudo firewall-cmd --reload 查看防火墙开放的端口 sudo firewall-cmd --list-ports
安装配置Nginx
1.安装Nginx
sudo yum -y install nginx
2.启动Nginx并查看Nginx状态
systemctl enable nginx --设置开机启动 service nginx start --启动nginx ps -ef | grep nginx --查看端口号
3.为.NET Core服务站点配置反向代理
找到nginx配置文件,我的路径是:/etc/nginx/nginx.conf,将以下配置复制到配置文件
worker_processes 1; #设置值和CPU核心数一致 error_log /usr/local/webserver/nginx/logs/nginx_error.log crit; #日志位置和日志级别 pid /usr/local/webserver/nginx/nginx.pid; #Specifies the value for maximum file descriptors that can be opened by this process. worker_rlimit_nofile 65535; events { use epoll; worker_connections 65535; } http { include 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'; #charset gb2312; server_names_hash_bucket_size 128; client_header_buffer_size 32k; large_client_header_buffers 4 32k; client_max_body_size 8m; sendfile on; tcp_nopush on; keepalive_timeout 60; tcp_nodelay on; fastcgi_connect_timeout 300; fastcgi_send_timeout 300; fastcgi_read_timeout 300; fastcgi_buffer_size 64k; fastcgi_buffers 4 64k; fastcgi_busy_buffers_size 128k; fastcgi_temp_file_write_size 128k; gzip on; gzip_min_length 1k; gzip_buffers 4 16k; gzip_http_version 1.0; gzip_comp_level 2; gzip_types text/plain application/x-javascript text/css application/xml; gzip_vary on; #limit_zone crawler $binary_remote_addr 10m; #下面是server虚拟主机的配置 server { listen 80; server_name core.yz0735.cn; 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; } location ~ .*.(js|css)?$ { expires 15d; # access_log off; } access_log off; } }
4.重新加载配置,访问站点
service nginx reload
配置好后,我们就可以通过域名+端口号访问服务了
5.通过域名不带端口访问需要进行如下配置,端口为站点端口
iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 5000 另外如果防火墙重新启动,该命令就会失效,可以使用下面的命令把该规则保存到iptables里面。 service iptables save
配置好后,我们可以直接通过域名不带端口号访问站点
创建Supervisor进程守护监控
1.先安装epel,软件包更丰富点
yum install epel-release
2.安装Supervisor
yum install -y supervisor systemctl enable supervisord # 开机自启动 systemctl start supervisord # 启动supervisord服务
3.创建.Net Core项目的Supervisor配置文件
#进入supervisord.d目录 cd /etc/supervisord.d #新建NetCore进程配置文件 sudo touch DemoNetCore.ini #查看和编辑DemoNetCore.ini配置文件 sudo vim DemoNetCore.ini #进入文件后,按“i”或者“a”进入插入模式,插入下面的配置信息
将以下配置复制到刚创建的DemoNetCore.ini配置文件
#配置程序名称, [program:DemoNetCore] #运行程序的命令 command=dotnet TuoKeWeb.dll --urls="http://*:5000;" #命令执行的目录 directory=/usr/dotnet #进程环境变量 environment=ASPNETCORE_ENVIRONMENT=Production #进程执行的用户身份 user=root #进程停止信号,可以为TERM, HUP, INT, QUIT, KILL, USR1, or USR2等信号默认为TERM 。当用设定的信号去干掉进程,退出码会被认为是expected,非必须设置 stopsignal=INT #如果是true的话,子进程将在supervisord启动后被自动启动,默认就是true,非必须设置 autostart=true #这个是设置子进程挂掉后自动重启的情况,有三个选项,false,unexpected和true。如果为false的时候,无论什么情况下,都不会被重新启动,如果为unexpected,只有当进程的退出码不在下面的exitcodes里面定义的退出码的时候,才会被自动重启。当为true的时候,只要子进程挂掉,将会被无条件的重启 autorestart=true #这个选项是子进程启动多少秒之后,此时状态如果是running,则我们认为启动成功了,默认值为1 。非必须设置 startsecs=1 #错误日志文件 stderr_logfile=/var/log/DemoNetCore.err.log #输出日志文件 stdout_logfile=/var/log/DemoNetCore.out.log
#按ESC,输入命令保存配置文件 :wq (保存编辑操作退出) :wq! (保存编辑强制退出) :w ! sudo tee %
#通过配置文件来启动supervisor sudo supervisord -c /etc/supervisord.conf #启动supervisorctl sudo supervisorctl -c /etc/supervisord.conf #重新加载配置文件 reload #查看运行的状态 status
#查看相关进行 ps -aux | grep "TuoKeWeb.dll" #访问启动的站点 curl http://localhost:5000/Home/Test
如下图所示,Supervisor已经开启了dotnet进程,访问接口地址,返回数据成功
5.配置Supervisor开机自启动
#进入system目录 cd /usr/lib/systemd/system #编辑supervisord.service文件 sudo vim supervisord.service
supervisord.service文件内容如下
[Unit] Description=Process Monitoring and Control Daemon After=rc-local.service nss-user-lookup.target [Service] Type=forking ExecStart=/usr/bin/supervisord -c /etc/supervisord.conf ExecStop=/usr/bin/supervisorctl shutdown ExecReload=/usr/bin/supervisorctl reload KillMode=process Restart=on-failure RestartSec=42 [Install] WantedBy=multi-user.target
编辑好后保存退出,然后执行命令,查看是否启动成功
#启动服务 systemctl enable supervisord #验证一下是否为开机启动 systemctl is-enabled supervisord
6.验证进程守护监控效果
#查看dotnet进程 ps -aux|grep dotnet #强制杀死dotnet进程 kill -9 %PID #再次查看dotnet进程 ps -aux|grep dotnet
Supervisor常用命令
# 启动所有
supervisorctl start all
# 重启所有
supervisorctl restart all
# 停止所有
supervisorctl stop all
#PS:要操作某个服务,把all换成服务名即可
#查看服务状态
supervisorctl status