之前写了一个如何在window和windows server上启用IIS发布网站和ASP.NET CORE网站的方法,这篇文章来说一说如何在Centos 7上发布运行ASP.NET Core网站。
需要用到Linux系统,我选择的时Centos 7 ,它相当于Redhat的免费版,但是功能却一点都不少,入门可以选择Ubuntu,图形化界面、软件商店操作方便。
安装Linux的方法以及步骤可以看之前的一篇文章,也可以网上找一找,非常多,在此不再赘述。
今天,实验操作,我们可以选择三种方式
第一种:虚拟机安装
简单、快速、方便,可以使用VMware也可以使用Heper-V,这两款虚拟机软件都可以,但是对系统硬件要求高,很吃CPU和内存,CPU性能差,内存小的机器,请不要尝试。
第二种:阿里云服务器
更简单,安装更快捷,直接拿来用就可以,但是需要花点小钱,根据需要包月最低配置现在大概是70~80块大洋,但是只有部分地区可选,可以多选择几个地去看看,如果只是用几个小时,那么按量使用最好,低配一个小时不到一块钱,配置高点,也就几块钱一小时。
第三种:双系统
比较麻烦,但是如果计算机配置低,又不想花钱,自己还想长时间耍耍Linux的可以选择该方案
第二种方式安装不用我们操心,第一种和第三种安装方式几乎一样,第一种相比第三种也就是需要安装虚拟机,不用制作启动盘。
准备工作:
如果时第三种方式,可以选择使用FAT32格式的U盘,传输网站文件;也可以在Linux中安装ntfs-3g,直接挂载window下存放网站文件的盘读取文件。
第一种和第二中需要两个工具辅助,第一个:Xshell,使用Xshell远程连接centos进行操作,没有图形界面,只是命令行,第二种方式必须使用,第一种你也可以直接在虚拟机中操作;第二个WinSCP:FTP工具用来传输文件,当你配置好centos后,使用WinSCP将网站文件传输到Centos中,如果使用的VMware虚拟机,也可以安装插件,直接复制粘贴。
回归主题:
一、安装.NET Core
根据微软资料 https://www.microsoft.com/net/core#linuxcentos
在终端执行:
sudo yum install libunwind libicu #(安装libicu依赖)
curl -sSL -o dotnet.tar.gz https://go.microsoft.com/fwlink/?linkid=848821 #(下载sdk压缩包) 根据网速,可能快可能慢
sudo mkdir -p /opt/dotnet && sudo tar zxf dotnet.tar.gz -C /opt/dotnet #(解压缩)
sudo ln -s /opt/dotnet/dotnet /usr/local/bin #(创建链接)
dotnet new console -o hwapp # 我们初始化一个示例Hello World应用程序 (这里稍微耗时点)
cd hwapp
dotnet restore
dotnet run #运行应用程序
二、安装NGinx
NGinx在Linux上有类似IIS的功能,用作WEB服务器使用,运行如下代码进行安装
curl -o nginx.rpm http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm #下载安装包
rpm -ivh nginx.rpm #安装套件
yum install nginx #安装
systemctl start nginx #启动nginx
systemctl enable nginx #设置nginx的开机启动
如果安装了图形化界面,打开自带的网页浏览器,输入http://ip 或者输入http://localhost 就会看到Welcome to nginx!页面,就说明安装成功了 ,命令行下也可以浏览网页,但是支持英文字符,汉语字符和图片等都不支持,需要的可以自己查找一下。
三、防火墙设置(可选)
如果你想让网站,在其他机器上也可以访问,你需要开放端口,否则会被防火墙屏蔽掉,执行下列命令,可开放80端口
firewall-cmd --zone=public --add-port=80/tcp --permanent #(开放80端口)
systemctl restart firewalld #(重启防火墙以使配置即时生效)
四、发布ASP.NET CORE网站
先将网站文件使用文章前面所说的方式或工具传输到centos中,执行下列命令
cd /home/NetCoreDemo #这个目录 要输入你自己对应放的目录
dotnet netcoreDemo.dll # netcoreDemo.dll 这个对应你建的项目生成的dll
看到有Now listening on :...... //现在监听:.........
说明这个地址被监听了
然后在浏览器里面访问 http://localhost:5000
看到网页正常显示,说明ASP.NET CORE已经成功运行了
五、配置NGinx
现在http://localhost:5000 可以访问。但是通过ip却不能访问。那么我们现在就可以通过80访问nginx,然后nginx再帮我们访问5000。
打开路径 /etc/nginx/conf.d
编辑default.conf 文件内容替换为
server {
listen 80;
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;
}
}
将nginx添加至SELinux的白名单,否则会报502错误。
nginx -s reload #使其即时生效
【注意】然后这里访问下 http://192.168.0.13/ (对应你自己的centos ip,这一步好重要。应该是要先主动触发这个502错误吧。)
yum install policycoreutils-python #(选y)
cat /var/log/audit/audit.log | grep nginx | grep denied | audit2allow -M mynginx
semodule -i mynginx.pp
然后我们就可以在物理机上通过ip访问了(不用带端口了,直接80 然后 nginx 转到了5000)。
配置守护服务(Supervisor)
yum install python-setuptools
easy_install supervisor #安装Supervisor
mkdir /etc/supervisor
echo_supervisord_conf > /etc/supervisor/supervisord.conf #配置Supervisor
文件的最后
;[include]
;files = relative/directory/*.ini
改成(【注意】去掉;且不能有空格)
[include]
files = conf.d/*.conf
进入目录 /etc/supervisor/ 新建 conf.d文件夹,conf.d文件夹下新建 netcoreDemo.conf文件
内容(【注意】看 第二行 第三行的 注释,根据实际名字填入)
[program:netcoreDemo]
command=dotnet netcoreDemo.dll ; (注意)运行程序的命令
directory= /home/NetCoreDemo/ ; (注意)命令执行的目录
autorestart=true ; 程序意外退出是否自动重启
stderr_logfile=/var/log/WebApplication1.err.log ; 错误日志文件
stdout_logfile=/var/log/WebApplication1.out.log ; 输出日志文件
environment=ASPNETCORE_ENVIRONMENT=Production ; 进程环境变量
user=root ; 进程执行的用户身份
stopsignal=INT
supervisord -c /etc/supervisor/supervisord.conf
ps -ef | grep netcoreDemo #【注意】netcoreDemo是上面 program:netcoreDemo 的命名
supervisorctl reload #重新加载
然后就好了,现在关掉那个5000界面也可以访问。
配置Supervisor开机启动
打开目录 /usr/lib/systemd/system/ 新建文件 supervisord.service
内容:
# dservice for systemd (CentOS 7.0+)
# by ET-CS (https://github.com/ET-CS)
[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
执行命令:
systemctl enable supervisord
systemctl is-enabled supervisord #来验证是否为开机启动
到此,完工。现在重新电脑什么都不用管,直接可以访问部署好的网站。