1.vmware虚拟机安装
https://pan.baidu.com/s/1PfCYFqRAe0DnEOZio46fng
密码:4ng4
2.CentOS 7.3安装
http://mirrors.163.com/centos/7/isos/x86_64/CentOS-7-x86_64-DVD-1804.iso
下载完成后打开vmware准备安装......
3.Windows的客户端软件
Xshell下载安装:https://pan.baidu.com/s/1cPvjtTPCiYCKcxilnAOnCw 密码:voly
作用:远程控制linux终端
WinSCP下载安装:https://pan.baidu.com/s/1eFcJALAbGnTwRnZVSJFUWg 密码:2jt2
作用:上传发布网站文件至linux系统
进入CentOS,右键
开始第一个命令:查看IP
ifconfig -a
接下来我们试试用Xshell操控Linux终端,打开此软件...
然后输入用户名密码登录,使用root登录名登录(以为后面安装软件等操作需要root权限)
4.Net Core2.1安装
安装.net core2.1.1是因为VS2017里默认2.1.1版本,但是虚拟机里却是2.1.0,版本不同有bug。
Xshell和虚拟机终端均可输入下面命令符,但Xshell前提登录到虚拟机了
cd ~
wget https://download.microsoft.com/download/9/3/E/93ED35C8-57B9-4D50-AE32-0330111B38E8/aspnetcore-runtime-2.1.1-linux-x64.tar.gz
cd /opt/dotnet
sudo cp ~/asp*z .
sudo tar zxvf asp*z
(如果以上输入中提示有错,则用WinSCP去cd /opt/dotnet文件夹下删除2.1.0压缩包)
5.nginx 1.12.1安装
在我们用VS发布完网站并用WinSCP上传到虚拟机上,可以在虚拟机里自带的火狐浏览器中运行后,我们需要在自己电脑物理机浏览器访问,为了这个解决需求,我们需要Nginx这个反向代理服务器。好,接下来接着输入inux命令让虚拟机安装Nginx......
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 #安装
注意:#是Linux命令行的注释符
安装结束以后再输入两行
systemctl start nginx #启动nginx
systemctl enable nginx #设置nginx的开机启动
为了验证Linux虚拟机的nginx是否安装成功,可以在虚拟机上的火狐浏览器输入前面查到的ip地址,来看看结果......
6.配置防火墙
完成Nginx的安装后,如果在自己电脑的物理机的浏览器访问不了,是因为CentOS自带的防火墙拦截了80端口,一下命令行可以解决......
firewall-cmd --zone=public --add-port=80/tcp --permanent #(开放80端口)
systemctl restart firewalld #(重启防火墙以使配置即时生效)
7.部署Asp.Net Core应用程序
接下来我们就可以试着发布第一个.net core的hello word了!
ps:从vs2015才支持core,个人建议vs2017方便一些。
按照平常的发布后看一下发布后的文件里有没有Views的文件夹,如果没有则找到项目里的.csproj文件,在PropertyGroup下加入 <MvcRazorCompileOnPublish>false</MvcRazorCompileOnPublish>,再重新发布。不要问为什么,.net core还在更新......
接下来打开WinSCP,帐号登录连接到Linux虚拟机......
点击登录,然后就可以看到CentOs系统的文件目录了。然后随便建个文件夹,准备放我们发布发好的程序。
接下来执行命令:
cd /home/NetCoreDemo #这个目录 要输入你自己对应放的目录
dotnet netcoreDemo.dll # netcoreDemo.dll 这个对应你建的项目生成的dll
看到了5000 端口的一个网址,证明部署好了。注意,上面的终端不要关闭,否则下面操作将会失败,访问不会成功。
然后在虚拟机里面访问 http://localhost:5000 ,如下图......
8.nginx配置
前面已经在虚拟机里安装了Nginx,接下来就要在项目中使用了。为了让这个项目不光能在Linux中跑起来,还要在Windows中跑起来
在WinSCP中进行操作,打开路径 /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;
} }
补充:以后当我们发布第二第三个网站时,需要用到不同的listen端口号......
为了让强大的Nginx正常工作,不出现页面502错误,还有一步就是要将Nginx添加到SELinux的白名单,输入以下命令行......
nginx -s reload #使其即时生效,然后这里访问下 http://192.168.233.130/ (对应你自己的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)。
9.配置守护服务(Supervisor)
为了解决关掉那个5000界面也可以访问网站,我们还要进行配置守护服务。
输入命令行:
yum install python-setuptools
easy_install supervisor #安装Supervisor
mkdir /etc/supervisor
echo_supervisord_conf > /etc/supervisor/supervisord.conf #配置Supervisor
然后WInSCP中找到supervisord.conf文件,右键编辑
在此文件的最后有
;[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 #重新加载
10.配置Supervisor开机启动
这么好的东西当然要开机自启了(手动滑稽)
在WinSCP中打开目录 /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
结束以后执行Linux命令:
systemctl enable supervisord
systemctl is-enabled supervisord #来验证是否为开机启动