目录
1、前言
2、安装 .NET SDK 或 .NET 运行时
3、创建数据库
4、发布项目到Linux环境
5、配置Nigix
6、Nginx配置Https
7、安装Supervisor
部署服务器:阿里云的CentOS 7.6 64位
发布项目:.Net Core 5.0
数据库:MySql 5.8
其他: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
3、查看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#configure-ssl
nginx配置HTTPS前置条件
1、服务器上已经安装nginx,已经配置http访问
2、nginx服务器已经安装ssl模块
3、已经拥有ssl证书,这需要你有一个域名,并且申请了证书(免费的)
1、查看nginx是否安装http_ssl_module模块
#进入到nginx安装目录的sbin目录
cd /www/server/nginx/sbin
#查看是否安装http_ssl_module模块
./nginx -V
如果 configure arguments里面包含 --with-http_ssl_module, 则已安装。
2、ssl 证书部署
下载申请好的 ssl 证书文件压缩包到本地并解压(这里是用的 pem 与 key 文件,文件名可以更改)。在 nginx 目录新建 cert 文件夹存放证书文件。
cd /www/server/nginx
mkdir cert
3、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:
#安装 setuptools
yum install python-setuptools
#更换root用户,执行如下命令安装 Supervisor
easy_install supervisor
#验证是否安装成功方式
#(一)输出配置
echo_supervisord_conf
#(二)启动supervisorctl输入version返回版本号则成功
supervisorctl>version
#(三)查看程序运行进程号有返回则成功
pgrep supervisord
2、创建文件夹和配置文件
#创建文件夹
mkdir /etc/supervisor
#配置Supervisor
echo_supervisord_conf > /etc/supervisor/supervisord.conf
3、修改并保存/etc/supervisor/supervisord.conf文件内容
#拉到文章最后
;[include]
;files = relative/directory/*.ini
改为
[include]
files = conf.d/*.conf
4、进入创建的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
5、重新加载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.sock
supervisord -c /etc/supervisor/supervisord.conf 此时默认开启了所有服务
二、supervisor的客户端部分命令:
supervisorctl status 查看进程运行状态
supervisorctl start 进程名 启动进程
supervisorctl start laravel-worker:* 批量启动进程
supervisorctl stop 进程名 关闭进程
supervisorctl restart 进程名 重启进程
supervisorctl update 重新载入配置文件
supervisorctl shutdown 关闭supervisord
supervisorctl 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
6、配置supervisord开机启动
(1)在指定目录下创建文件supervisord.service
vim /usr/lib/systemd/system/supervisord.service
(2)输入以下内容并保存退出
[Unit]
Description=Supervisor daemon
[Service]
Type=forking
ExecStart=/usr/bin/supervisord -c /etc/supervisor/supervisord.conf
ExecStop=/usr/bin/supervisorctl shutdown
ExecReload=/usr/bin/supervisorctl reload
KillMode=process
Restart=on-failure
RestartSec=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守护进程完毕。