本文介绍了在linux服务器的环境下发布.NET Core网站项目,文章有点长,请客官耐心看完~
.NET Core端口监听是通过localhost,所以需要处理一下,须通过IP或者*来进行端口监听才可以
webBuilder.UseKestrel();
webBuilder.UseUrls("http://*:5000");
(注意:设置的端口,需要在系统中开放对应的端口,以上两行代码必须加在.UseStartup之前)
在项目上右键=》选择菜单“发布”=》选择“文件夹”=》设置发布之后文件存放文件位置=》设置完成之后,点击按钮“发布”,等待发布完成即可。
打开发布项目的文件夹,将发布的文件全选,复制粘贴到云服务器所新建的项目存放得文件中。(我使用的是XFtp和XShell)
相应安装建议以管理员方式登录系统,非管理员请以sudo命令安装。Linux sudo命令以系统管理者的身份执行指令,也就是说,经由 sudo 所执行的指令就好像是 root 亲自执行。
在XShell中输入命令启动发布的项目
cd /testproject
效果如下如图所示:
linux命令
sudo dotnet NET5.dll --urls "http://*:8081"
效果如下如图所示:
如果发现无法访问或者进不去,则可按住:Ctrl+C停止项目,然后再命令面板使用,防火墙命令将对应的端口开放:
linux命令
sudo firewall-cmd --zone=public --add-port=8081/tcp --permanent
sudo firewall-cmd --reload
设置完成之后,将防火墙重启;然后再浏览器中输入:http://你的服务器IP:8081或者刷新刚刚的网页,则访问成功。
linux命令
sudo systemctl start firewalld
效果如下如图所示:
在linux或者unix操作系统中,守护进程(Daemon)是一种运行在后台的特殊进程,它独立于控制终端并且周期性的执行某种任务或等待处理某些发生的事件。由于在linux中,每个系统与用户进行交流的界面称为终端,每一个从此终端开始运行的进程都会依附于这个终端,这个终端被称为这些进程的控制终端,当控制终端被关闭的时候,相应的进程都会自动关闭。但是守护进程却能突破这种限制,它脱离于终端并且在后台运行,并且它脱离终端的目的是为了避免进程在运行的过程中的信息在任何终端中显示并且进程也不会被任何终端所产生的终端信息所打断。它从被执行的时候开始运转,直到整个系统关闭才退出。
此处的创建守护进程,是指发布在Linux上 ASP.NET Core 程序的dotnet xxx.dll命令的宿主进程创建一个守护进程。在 Linux 上有很多可以管理进程的工具,我们使用 Supervisor 来做这个事情。
linux命令:
sudo yum -y install epel-release
linux命令:
sudo yum -y install supervisor
linux命令:
systemctl enable supervisord
linux命令:
systemctl start supervisord
linux命令:
systemctl status supervisord
效果如下图所示:
通过vi命令或者xftp修改配置文件开启web界面访问,如下图所示,参照inet_http_server等四个配置的注释添加数据,该用户名和密码是用于进入守护进程页面的。(注意:同时这里设置的端口也需要在系统防火墙中开放对应的端口才可正常访问守护进程页面)
linux命令:
vi /etc/supervisord.conf
linux命令:
supervisorctl reload
然后在浏览器打开http://你的ip:8895,输入上面我们设置的用户名和密码。
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------看到上图这个界面,则就表示supervisor安装完成了!
linux命令:
cd /etc/supervisord.d
linux命令
sudo touch NET5.ini
sudo vim NET5.ini
注意:stdout_logfile指向的文件夹一定要先创建,否则无法启动,上述配置文件中的内容需要根据用户实际情况修改
确认无误时候,按下“ESC”键,再次输入“:wq”回车即可退出并保存文件。
#表示程序名称,用于在supervisor中显示,无特殊意义。
[program:NET5]
# 输入执行命令,这里表示执行的是dotnet Core50Test.dll
command=/bin/bash -c "dotnet NET5.dll"
# 应用程序根目录
directory=/testproject
# 是否自动启动,当 supervisor 加载该配置文件的时候立即启动它
autostart=true
# 是否自动重启, 程序异常退出后自动重启
autorestart=true
# 该配置文件输出单个日志文件的大小,默认50M
logfile_maxbytes=50MB
# 日志备份个数
logfile_backups=10
# 记录日志级别
loglevel=info
# 指定标准输出日志文件
stdout_logfile=/root/app_data/data/logs/core50test/core50test.out.log
# 环境变量
environment=ASPNETCORE_ENVIRONMENT=Production
# 启动服务的用户
user=admin
# 把stderr重定向到stdout,默认 false
redirect_stderr=true
linux命令:
supervisorctl reload
上述命令执行完成之后,刷新浏览器
效果如下图所示:
#启动所有
supervisorctl start all
# 重启所有
supervisorctl restart all
# 停止所有
supervisorctl stop all
#PS:要操作某个服务,把all换成服务名即可
#查看服务状态
supervisorctl status
在之前我们的应用程序默认是绑定的5000端口,如果要指定80端口或者配置域名该怎么处理呢?下面就该nginx登场了。
Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。
#1、查看版本
nginx -v
#2、查看nginx安装目录
ps -ef | grep nginx
#3、检查配置文件
nginx -t
#4、启动
systemctl start nginx.service
#5、停止
systemctl stop nginx.service
#5、重启
systemctl restart nginx.service
#6、设置开机自启动
systemctl enable nginx.service
#7、停止开机自启动
systemctl disable nginx.service
#8、查看当前状态
systemctl status nginx.service
#9、查看所有已启动的服务
systemctl list-units --type=service
linux命令:
#安装Nginx的源
sudo rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
#安装Nginx
sudo yum install -y nginx
#安装完成后,使用以下命令启用并启动Nginx服务
#sudo systemctl enable nginx
sudo systemctl enable nginx.service
sudo systemctl start nginx.service
#sudo systemctl start nginx
#要验证服务是否正在运行,请检查其状态:
sudo systemctl status nginx
上述安装完成之后,在浏览器输入:http://你的IP,效果如下如所示即安装成功!
linux命令
#查看所有开启的端口
sudo firewall-cmd --list-ports
如果结果没有显示包含的端口,则代表没开放
#开放指定的端口
sudo firewall-cmd --zone=public --add-port=80/tcp --permanent
#重启防火墙 开启后需要重启防火墙才生效
firewall-cmd --reload
Nginx安装完成后,切换到/etc/nginx/conf.d目录;实际是做了一个内网端口映射,将内网的8081映射到了Nginx的80端口
cd /etc/nginx/conf.d
1、存在default.conf文件
linux命令:
sudo vim default.conf
修改,确认无误时候,按下“ESC”键,再次输入“:wq”回车即可退出并保存文件:
linux命令:
server {
listen 80;
server_name serverIP; #自己服务器公网IP或者备案的域名
location / {
proxy_pass http://127.0.0.1:8081; #.NET Core项目启动所对应的端口
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
2、不存在default.conf文件
linux命令:
sudo touch default.conf
sudo vim default.conf
编辑文件,确认无误时候,按下“ESC”键,再次输入“:wq”回车即可退出并保存文件:
linux命令:
server {
listen 80;
server_name serverIP; #自己服务器公网IP或者备案的域名
location / {
proxy_pass http://127.0.0.1:8081; #.NET Core项目启动所对应的端口
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
保存后,执行如下命令,重新加载配置;然后再次访问http://你的ip,一切正常的话应该可以看到如下的界面,表示我们的.NET Core程序已经完美运行在linux系统了。
linux命令:
nginx -s reload
至此,.NET Core Web网站项目已完成全部Linux或CentOS系统的部署!