目录 1、前言 2、安装 .NET SDK 或 .NET 运行时 3、创建数据库 4、发布项目到Linux环境 5、配置Nigix 6、Nginx配置Https 7、安装Supervisor 1、前言 部署服务器:阿里云的Centos
目录
其他:Nginx,Supervisor
参考官网网址:https://learn.microsoft.com/zh-cn/dotnet/core/install/linux-centos
1、CentOS 7 ✔️
安装 .NET 之前,请运行以下命令,将 Microsoft 包签名密钥添加到受信任密钥列表,并添加 Microsoft 包存储库。 打开终端并运行以下命令:
sudo rpm -Uvh https://packages.microsoft.com/config/centos/7/packages-microsoft-prod.rpm
2、安装 SDK或是运行时
.NET SDK 使你可以通过 .NET 开发应用。 如果安装 .NET SDK,则无需安装相应的运行时。 若要安装 .NET SDK,请运行以下命令:
sudo yum install dotnet-sdk-5.0
如果只是在linux上运行.Net Core项目则可以只安装运行时,请运行以下命令:
sudo yum install aspnetcore-runtime-5.0
查看Dotnet版本信息 ,请运行一下命令:
dotnet --info
在服务器安装mysql数据库,在宝塔面板上创建数据库,设置账号密码
如果不想用XFTP也可以用命令
rz命令(上传文件到Linux)rz 直接输入 rz 之后回车就会打开你本地文件夹,选择文件就可以上传文件到Linux
通过XFTP - NetSarang Website (xshell.com)按需选择下载XFTP,
新建会话,输入主机名称和用户名、密码连接服务器
选择目录创建文件夹,把发布文件上传到文件夹中。
执行以下命令启动项目
#启动 .net core api 进入上传发布的文件夹cd ..cd /wwwceshi dotnet ceshi.dll
如果出现端口被占用:
可以使用以下命令自己指定端口:
dotnet ceshi.dll --urls Http://*:5005
看到Now listening on: http://[::]:5005,说明我们已经成功绑定了5005端口,现在内网可以访问网站了
将 Nginx 配置为反向代理以将 HTTP 请求转发到 ASP.net core 应用程序。修改
/etc/nginx/sites-available/default。 使用vim打开修改(若未获取vim工具使用apt获取),并将内容替换为以下代码片段:
server { listen 80; server_name ceshi.cn *.ceshi.cn; location / { proxy_pass http://127.0.0.1:5005; 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; }}
这个server节配置是将本机的5005端口的应用交于80端口代理,用户访问的是localhost:80,但此请求转发到localhost:5005 到 asp.net Core 程序处理并返回响应。代理完成后我们获取该虚拟机的ip地址访问即可(可使用ifconfig或直接设置里查看)
这个时候我们在访问该虚拟机的 80 端口出现:
原因是因为我们的应用程序还没有运行呢,我把打包后的文件传到了Public文件中。使用dotnet命令运行
dotnet ceshi.dll --urls http://*:5005
在外网打开ceshi.cn,访问该虚拟机ip,nginx转发成功了
配置HTTPS和证书相关的内容直接去看官方文档:https://docs.microsoft.com/en-us/aspnet/core/host-and-deploy/linux-nginx?view=aspnetcore-2.1&tabs=aspnetcore2x
nginx配置HTTPS前置条件
1、服务器上已经安装nginx,已经配置http访问2、nginx服务器已经安装ssl模块3、已经拥有ssl证书,这需要你有一个域名,并且申请了证书(免费的)
查看nginx是否安装http_ssl_module模块
#进入到nginx安装目录的sbin目录cd /www/server/nginx/sbin#查看是否安装http_ssl_module模块./nginx -V
如果 configure arguments里面包含 --with-http_ssl_module, 则已安装。
ssl 证书部署
下载申请好的 ssl 证书文件压缩包到本地并解压(这里是用的 pem 与 key 文件,文件名可以更改)。在 nginx 目录新建 cert 文件夹存放证书文件。
cd /www/server/nginx mkdir cert
nginx.conf 配置
编辑 /www/server/nginx/conf/nginx.conf 配置文件,注意:这里需要在安全组中开放443端口。
server { listen 443 ssl http2; listen [::]:443 ssl http2; server_name ceshi.cn *.ceshi.cn; ssl_certificate /www/server/NginxwwwKey/BloGCert/ceshi.cn.pem; ssl_certificate_key /www/server/NginxwwwKey/BlogCert/ceshi.cn.key; ssl_session_timeout 1d; ssl_protocols TLSv1.2 TLSv1.3; ssl_prefer_server_ciphers off; ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384; ssl_session_cache shared:SSL:10m; ssl_session_tickets off; ssl_stapling off; add_header X-Frame-Options DENY; add_header X-Content-Type-Options nosniff; #Redirects all traffic location / { proxy_pass https://127.0.0.1:5005; } }
编辑完成保存配置,重载配置,重启Nginx即可,https生效。
但是如果现在关闭shell 打开页面会出现502,需要启动保护进程。
Supervisor 是用 python 开发的 Linux/Unix 系统下的一个进程管理工具。它可以使进程脱离终端,变为后台守护进程(daemon)。实时监控进程状态,异常退出时能自动重启。
Supervisor 不支持任何版本的 Window 系统;仅支持在 Python2.4 或更高版本,但不能在任何版本的 Python 3 下工作。
其主要组成部分:
supervisord:Supervisor 的守护进程服务,用于接收进程管理命令;
supervisorctl:Supervisor 命令行工具,用于和守护进程通信,发送管理进程的指令;
Web Server:WEB 端进程管理工具,提供与 supervisorctl 类似功能,管理进程;
XML-RPC Interface:提供 XML-rpc 接口,请参阅 XML-RPC API文档。
1、安装Supervisor
联网状态下,官方推荐首选安装方法是使用easy_install,它是setuptools(Python 包管理工具)的一个功能。所以先执行如下命令安装 setuptools:
#安装 setuptoolsyum install python-setuptools#更换root用户,执行如下命令安装 Supervisoreasy_install supervisor#验证是否安装成功方式#(一)输出配置echo_supervisord_conf#(二)启动supervisorctl输入version返回版本号则成功supervisorctl>version#(三)查看程序运行进程号有返回则成功pgrep supervisord
创建文件夹和配置文件
#创建文件夹mkdir /etc/supervisor#配置Supervisorecho_supervisord_conf > /etc/supervisor/supervisord.conf
3、修改并保存/etc/supervisor/supervisord.conf文件内容
#拉到文章最后;[include];files = relative/directory/*.ini改为[include]files = conf.d/*.conf
进入创建的conf.d 文件夹创建文件 ceshi.conf,并写入配置
#配置程序名称[program:ceshi]#运行程序的命令command=dotnet ceshi.dll --urls="http://*:5005"#命令执行的目录directory=/www/wwwceshi#进程执行的用户身份user=root#进程挂掉后自动重启的三个选项,false,unexpected和true。如果为false的时候,无论什么情况下,都不会被重新启动,如果为unexpected,只有当进程的退出码不在下面的exitcodes里面定义的退出码的时候,才会被自动重启。当为true的时候,只要子进程挂掉,将会被无条件的重启autorestart=true#进程环境变量environment=ASPNETCORE_ENVIRONMENT=Production#错误日志文件stderr_logfile=/var/log/ceshi.err.log#输出日志文件stdout_logfile=/var/log/ceshi.out.log #进程停止信号,可以为TERM, HUP, INT, QUIT, KILL, USR1, or USR2等信号默认为TERM 。当用设定的信号去干掉进程,退出码会被认为是expected,非必须设置stopsignal=INT#如果是true的话,子进程将在supervisord启动后被自动启动,默认就是true,非必须设置autostart=true#这个选项是子进程启动多少秒之后,此时状态如果是running,则我们认为启动成功了,默认值为1 。非必须设置startsecs=3
重新加载Supervisor配置,查看Supervisor运行的进程
#执行进程supervisord -c /etc/supervisor/supervisord.conf#查看进程ps aux | grep ProjectName#进入进程控制supervisorctl
如果出现以下显示则表示运行成功!
注意:在执行第一条命令出现以下提示信息时:
Error: Another program is already listening on a port that one of our HTTP servers is configured to use. Shut this program down first before starting supervisord.
For help, use /usr/bin/supervisord –h
是因为有一个使用supervisor配置的应用程序正在运行,需要执行supervisorctl shutdown命令终止它,或重新创建一个ProjectName.conf文件再执行第一条命令。
其他常用命令
一、开启命令supervisor的服务器端部分启动命令:sudo unlink /var/run/supervisor.socksupervisord -c /etc/supervisor/supervisord.conf 此时默认开启了所有服务二、supervisor的客户端部分命令:supervisorctl status 查看进程运行状态supervisorctl start 进程名 启动进程supervisorctl start laravel-worker:* 批量启动进程supervisorctl stop 进程名 关闭进程supervisorctl restart 进程名 重启进程supervisorctl update 重新载入配置文件supervisorctl shutdown 关闭supervisordsupervisorctl clear 进程名 清空进程日志supervisorctl 进入到交互模式下。使用help查看所有命令supervisorctl reread supervisorctl update 上面两个命令是修改supervisor配置文件后,需要运行才能生效的命令start stop restart + all 表示启动,关闭,重启所有进程三、关闭命令supervisorctl stop all先关闭supervisor服务之后再关闭supervisord服务kill -9 pid四、查看错误信息#查看启动时具体报错信息supervisorctl tail program_name stdout #查看启动报错日志sudo supervisorctl tail program_name stderr
配置supervisord开机启动
(1)在指定目录下创建文件supervisord.service
vim /usr/lib/systemd/system/supervisord.service
(2)输入以下内容并保存退出
[Unit]Description=Supervisor daemon [Service]Type=forkingExecStart=/usr/bin/supervisord -c /etc/supervisor/supervisord.confExecStop=/usr/bin/supervisorctl shutdownExecReload=/usr/bin/supervisorctl reloadKillMode=processRestart=on-failureRestartSec=42s [Install]WantedBy=multi-user.target
(3)执行以下命令
systemctl enable supervisord#提示:Created symlink from /etc/systemd/system/multi-user.target.wants/supervisord.service to /usr/lib/systemd/system/supervisord.service.
(4)验证是否为开机启动:
systemctl is-enabled supervisord
提示:enabled 表示设置成功!
至此,创建supervisor守护进程完毕。
来源地址:https://blog.csdn.net/daiyue945/article/details/128251212
--结束END--
本文标题: 将 .net core 项目部署到 Linux服务器
本文链接: https://www.lsjlt.com/news/398034.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
下载Word文档到电脑,方便收藏和打印~
2024-03-01
2024-03-01
2024-03-01
2024-03-01
2024-03-01
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0