iis服务器助手广告广告
返回顶部
首页 > 资讯 > 操作系统 >将 .net core 项目部署到 Linux服务器
  • 949
分享到

将 .net core 项目部署到 Linux服务器

服务器linux.netcore 2023-09-07 11:09:13 949人浏览 独家记忆
摘要

目录 1、前言 2、安装 .NET SDK 或 .NET 运行时 3、创建数据库 4、发布项目到Linux环境 5、配置Nigix 6、Nginx配置Https 7、安装Supervisor 1、前言 部署服务器:阿里云的Centos

目录

1、前言

2、安装 .NET SDK 或 .NET 运行时

3、创建数据库

4、发布项目到Linux环境

5、配置Nigix

6、Nginx配置Https

7、安装Supervisor


1、前言

部署服务器阿里云Centos 7.6 64位

发布项目.net core 5.0

数据库Mysql 5.8 

其他:Nginx,Supervisor

2、安装 .net SDK 或 .NET 运行时

参考官网网址: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

3、创建数据库

在服务器安装mysql数据库,在宝塔面板上创建数据库,设置账号密码

4、发布项目到Linux环境

如果不想用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端口,现在内网可以访问网站了

5、配置Nigix

将 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转发成功了

6、Nginx配置Https

配置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,需要启动保护进程。

7、安装Supervisor

 Supervisor 是用 python 开发的 Linux/Unix 系统下的一个进程管理工具。它可以使进程脱离终端,变为后台守护进程(daemon)。实时监控进程状态,异常退出时能自动重启。

Supervisor 不支持任何版本的 Window 系统;仅支持在 Python2.4 或更高版本,但不能在任何版本的 Python 3 下工作。

其主要组成部分:

supervisord:Supervisor 的守护进程服务,用于接收进程管理命令;

supervisorctl:Supervisor 命令行工具,用于和守护进程通信,发送管理进程的指令;

Web ServerWEB 端进程管理工具,提供与 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文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作