⼜⼀篇Centos7下的aspcore部署教程
感谢⽼张的博客,我对asp core⼊门主要就是靠他的博客了,这⾥再说⼀次,微软的⽂档真的太难看了!
虽然⽹上已经有很多关于asp core在linux下的部署教程了,但我还是想写⼀篇,主要增强我⾃⼰的记忆,同时分享下我部署遇到的坑。搭建的环境为Centos7 + core  + nginx + mysql5.7,我的⽹站是asp core后端,vue前端,数据据mysql;
第⼀次搭建时遇到不少的坑,我会在下⾯也说到
前提,你有⼀台可以联⽹,有root账号密码,有开通ssh的服务器(⼀般centos7安装默认都有开通了)
安装donet运⾏环境
⽤root登录服务器后,第⼀步就是安装dotnet运⾏库了
打开,我写这篇博客时,还是net core2.2,3.0预览版也出了,不知到时会不会有什么变动。
只运⾏,不开发,只需安装runtime运⾏库。
选择Centos,然后运⾏以下红圈的命令,我没运⾏yum update,感觉没什么影响。
然后输⼊命令 dotnet --info,可看是否有运⾏库
恭喜你,已经安装成功了
然后把你的asp core发布后的⽂件上传到服务器上,我⽤的是WinSCP上传软件,⽤你的root账号密码登录,协议为SFTP
我上传到/var/www/dotnet,建议上传到/var⽬录,⼀开始我上传到root⽬录,后⾯会出现⼀些访问权限的问题
然后在linux中切换到⽬录上,cd /var/www/dotnet,然后运⾏dotnet xxxx.dll
请注意,要需分⼤⼩写!要需分⼤⼩写!要需分⼤⼩写!⼀开始我没注意⼤⼩写,结果⼀直提⽰要装sdk,害我以为不能只装runtimes,害我查了好多资料dotnet xxxx.dll //⼀定要注意⼤⼩写
出现以上画⾯,你就成功了,如果有误,你先在你本地window下dotnet  xxx.dll看看有没有错误,⼀般在你本地上没问题,在服务器也是没问题的。
对了,第⼀次运⾏时还出现什么XML的提⽰,不太懂,第⼆次运⾏就没有了。
请注意,现在外⽹还不能访问你的5000端⼝的,为什么?
第⼀,看我上⾯的listening on localhost:5000,我这个dotnet默认只监听本地的5000端⼝,所以外⽹⽆法访问,解决⽅法就是在命令后⾯加上参数urls dotnet xxxx.dll --urls *:5000
第⼆ Centos的防⽕墙默认是开启的,所以端⼝还得把防⽕墙关了,或在防⽕墙⾥添加个端⼝
//以下操作⼆选⼀
systemctl status firewalld // 查看防⽕墙状态
systemctl stop firewalld //关闭防⽕墙
firewall-cmd --zone=public --add-port=5000/tcp --permanent  // permanent参数是永远存在,不然的话,重启后就没有了
firewall-cmd --reload // 重启防⽕墙,添加端⼝后记得执⾏此命令
⼀般来说,现在就你可以通过外⽹地址加5000的端⼝访问你的⽹站了。
安装Nginx
我主要是参考这个博客,⽤的是yum安装,⾮常简单,⽹上有其它很多rpm的安装⽅法,⽐较⿇烦,对于这个yum跟rpm的关系,我理解yum是⽹上应⽤商城,rpm是本地的软件管理系统。⽽yum如果不到你需要的包的话,你可以通过给yum增加安装源(意思就是增加⼀个提供软件包的地址,让yum可以通过这个地址去获取软件包),下⾯第⼀条命令rpm xxxx的作⽤就是在/etc/yum/repo.d⾥⾯增加⼀个repo⽂件。
//以下第⼀句是给你的centos安装⼀个yum源,因为nginx没有yum的源,我的理解就是nginx没在yum的应⽤商城上发布
rpm -Uvh /packages/centos/7/noarch/RPMS/arch.rpm
yum install -y nginx  //这句才是真正的安装nginx
systemctl start nginx  //启动nginx,就是这么简单
systemctl enable nginx  //将nginx设为开机启动
有没感觉这个跟安装net core运⾏库差不多,先rpm再yum。
现在⽤下你外⽹的地址访问下,nginx默认有开启⼀个80端⼝的服务了,如下图,(记得把防⽕墙关了或添加⼀个开放80的端⼝)
接下来把我的vue⽹站上传服务器上,我放在/var/www/vue ⽬录下,建议不要放在root下⾯,会涉及⼀些权限问题,还有SElinux记得关了(到/etc/selinux/config把SELINUX=enforcing改成SELINUX=disable,然后重启),不然很容易导致403错误,还有⼀些莫名奇妙的问题。
(如果你确实不想关SElinux的话,可以看我另⼀篇博客)
然后在linux上切换到nginx的配置⽬录
cd /etc/nginx
如上图所⽰,f是主配置⽂件,打开这个⽂件,下⾯有⼀句include /etc/nginx/conf.d*.conf,说明还有⼀些配置在conf.d⽬录⾥⾯,⽽我们主要要设置的都在conf.d⾥⾯
进到conf.d⽬录⾥,看到⾥⾯就⼀个f⽂件
f  //⽤vi编辑f⽂件
如下图所⽰,主要把80端⼝改成1001端⼝,把 / 对应的⽹站⽬录改成vue的⽬录,匹配 /api 跟 /swagger 转发到 localhost:5000,就是我dotnet的⽹站
保存后,记得nginx -t,检查⼀下,⽐如我上图中proxy_pass中有⼀个字符打错了,它就会提⽰
然后重启下nginx
nginx -s reload  //重启nginx
然后⽤外⽹加端⼝1001访问⼀下,发现弹出错误了,这个错误窗⼝是我vue前端页⾯⾥⾯弹出了,也说明了进⾏我的vue⽹站了,这个错误是后端接⼝没有开启。
切换到dotnet ⽬录,dotnet xxx.dll 运⾏起来,再刷新⼀下,⼜弹出错误了,错误跟上次不同,说明成功访问我后端接⼝了,只是现在mysql还没装。
安装Mysql
安装的步骤跟安装nginx差不多,
到这⾥相关的rpm包,要⽤yum安装的话,名称后⾯带noarch的,⾥⾯有好多rpm包,同个版本还分什么el、fc,这个我不太懂,但⽹上我看别⼈都是装el,那我就选个el7-11的,如下图
先切换到家⽬录 cd ~,先下载上⾯的rpm包到本地
wget arch.rpm
你可以看到已经下载到你的家⽬录了
然后步骤就跟安装net core运⾏库、nginx差不多了,先rpm,再yum
rpm -arch.rpm
//我发现也可以⽤ yum install -arch.rpm,yum⼀样有安装功能
yum install -y mysql-server  //这句才是安装mysql,-y是全程yes,不⽤提⽰
systemctl start mysqld  //启动mysql服务,注意,是mysqld,有个d
systemctl enable mysql  //将mysql设为开机启动
这样Mysql数据库就已经安装好了,接下来还得进⾏Mysql的配置
grep password /var/log/mysqld.log //先查看数据库的初始密码,记得复制下来
mysql -u root -p //然后登录mysql,输⼊刚才查看到的初始密码
set password for 'root'@'localhost' = password('newPassword!');//登录后,先重置密码,mysql默认的密码策略有点复杂,要⼤⼩写数字,还要8位以上
//可以先操作以下命令关闭密码复杂策略,再修改密码,
show variables like 'validate_password%'; //查看mysql关于密码的配置
navicat for mysql连接不成功set global validate_password_policy=0; //将密码策略改成低级,就只检查长度,不强制要求⼤⼩写
set global validate_password_length=1; //将密码长度改成1位