前言
公司有个项目,因为之前一直用的都是windows+iis+.net core架构,现需要部署到linux服务器上,所以把这个任务交给了我,摸索了两天的我,成功部署到linux服务器,过程中踩了很多坑,所以把部署过程记录下来,方便日后查看,也希望能帮助到其他人
环境
ubuntu 20.04.5
.Net Core3.1(后端)
Redis 4.0.8
SqlServer 8.0.31
React(前端)
Nginx 1.22
宝塔面板 7.9.7
XShell6
安装.Net CoreSDK
这是我整理后的安装命令,从上往下一条条往下执行就好,过程中会让输入Y或Yes,注意观察
wget -q https://packages.microsoft.com/config/ubuntu/18.04/packages-microsoft-prod.deb -O packages-microsoft-prod.deb
sudo dpkg -i packages-microsoft-prod.deb
sudo add-apt-repository universe
sudo apt-get install apt-transport-https
sudo apt-get update
sudo apt-get install dotnet-sdk-3.1
安装完后查看版本,检查是否安装成功
dotnet --info
如出现下图,则安装成功
安装Redis:
1.下载、解压
wget http://download.redis.io/releases/redis-4.0.8.tar.gz
tar xzvf redis-4.0.8.tar.gz
3.安装Redis
cd redis-4.0.8
make
cd src
make install PREFIX=/usr/local/redis
4.移动配置文件到安装目录下
cd ../
mkdir /usr/local/redis/etc
mv redis.conf /usr/local/redis/etc
5.配置redis为后台启动
vi /usr/local/redis/etc/redis.conf //将daemonize no 改成daemonize yes
6.将redis加入到开机启动,在里面添加一行命令:
编辑完后,输入esc 输入: 输入wq 保存退出
vi /etc/rc.local
/usr/local/redis/bin/redis-server /usr/local/redis/etc/redis.conf (把这行加进去)
7.开启redis
/usr/local/redis/bin/redis-server /usr/local/redis/etc/redis.conf
8.将redis-cli,redis-server拷贝到bin下,让redis-cli指令可以在任意目录下直接使用
cp /usr/local/redis/bin/redis-server /usr/local/bin/
cp /usr/local/redis/bin/redis-cli /usr/local/bin/
9.检查redis是否在监听端口
netstat -lntp | grep 6379
10.如出现下图,则安装成功
我这里是没有设置密码的,也没开启外网的,如果需要则查阅其他关于redis的详细文章
安装SqlServer
我这里就直接贴整理后的命令行了,不做每行的解释了,按顺序执行就行,如果需要详细的命令行解释,网上可以搜到很多
sudo apt update && sudo apt upgrade
wget -qO- https://packages.microsoft.com/keys/microsoft.asc | sudo apt-key add -
sudo add-apt-repository "$(wget -qO- https://packages.microsoft.com/config/ubuntu/18.04/mssql-server-2019.list)"
sudo apt-get update
sudo apt-get install -y mssql-server
输入下面这行命令执行安装,选择版本 8 ,设置密钥(HMWJ3-KY3J2-NMVD7-KG4JR-X2G8G),设置SA密码。
sudo /opt/mssql/bin/mssql-conf setup
完成配置后,验证服务是否正在运行:
systemctl status mssql-server --no-pager
如出现下图,则安装成功
安装SQL Server命令行工具
sudo apt-get update
sudo apt install curl
curl https://packages.microsoft.com/keys/microsoft.asc | sudo apt-key add -
curl https://packages.microsoft.com/config/ubuntu/18.04/prod.list | sudo tee /etc/apt/sources.list.d/msprod.list
sudo apt-get update
sudo apt-get install mssql-tools unixodbc-dev
echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bash_profile
echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bash_profile
测试命令行方式连接,输入以下命令后会提示输入密码
sqlcmd -S localhost -U sa
SELECT Name from sys.databases;(连接成功后查询所有数据库)
如果出现如下图,显示出每个数据库的名字,则数据运行正常,查询正常,这时候就可以用远程工具连接了
安装宝塔面板
宝塔安装很方便,基本都是一键式的,而且安装后有可视化页面操作起来比命令行方式要方便,切记安装完成后会显示面板入口地址和账号密码,不要弄丢了
wget -O install.sh https://download.bt.cn/install/install-ubuntu_6.0.sh && sudo bash install.sh ed8484bec
三种防火墙配置,非常关键!
1.云服务商安全组端口放行:
2.宝塔面板端口放行
3.关闭系统防火墙,并查看防火墙是否关闭
systemctl disable firewalld
chkconfig iptables off
systemctl status firewalld
这三种防火墙一定要确保配置正确,否则就会这连不上,那打不开,这一步我弄了好久才找到原因,所以重点记录下!端口可以全部放行或者防火墙直接关闭,也可以自行配置策略
发布.Net Core程序
从程序的配置文件里修改好redis和sqlserver的连接字符串,跟发布到windows没什么大的区别
发布后,把文件打成压缩包,通过宝塔面板上传到文件夹内,再解压
通过命令行启动
cd /www/wwwroot/netcore
dotnet webapi.dll
启动成功,跟windows里启动输出的内容一样
到此后端就已经部署成功了!如果需要维护后台运行则需要设置守护进程
React前端文件部署
1.前端直接npm run build打包就好,不用修改配置文件,因为访问的接口地址和浏览器打开的是同ip同端口
2.在宝塔里创建一个网站,域名输入ip也行
3.把打包后的bulid文件夹上传到网站目录
4.前端部署成功
Nginx反向代理配置
1.配置原因:因为前端为了防止跨域,所以访问的接口端口和网站的端口是一样的,这样就不会跨域,但实际上前后端分离的项目,不可能都能绑定同一个端口的,所以之前是在iis上做了URL重写规则
2.如果访问的是接口,则url里都会带有/api/,所以只要带有api字符,则转发到真正的接口监听的端口,由于是反向代理,所以在外部是看不出来转发的
Nginx配置文件修改
本地运行:在地址栏输入路径,都会被跳转到登录页面
线上运行:在地址栏输入路径,则会访问到物理路径的文件去,但实际上是没有这个文件的,所以返回404,需要被React的路由配置捕获到进行跳转才行
其他文章的解释:
本地运行,URL为真实的URL,BrowserRouter 可以直接访问到真实 URL。
但是项目打包后,当页面刷新或跳转新页面时,客户端浏览器会向服务器请求URL。
服务器会去找build文件夹下的html文件,发现找不到URL指定的路径。
这是因为实际上并没有这样的物理路径,或者没有配置路由请求,所以内容无法显示,而显示404错误
在网站的配置文件里,加入以下代码:
解决验证码生成报错
生成验证码报错,原因是项目依赖了System.Drawing,这个是windows平台的类库(GDI功能),所以在linux平台会报错
解决方法,安装ibgdiplus:
libgdiplus:apt-get update -y
apt-get install -y libgdiplus
ln -s /usr/lib/libgdiplus.so /usr/lib/gdiplus.dll
重新生成验证码,生成成功:
到此全部部署完毕,让我学会了怎么在linux平台部署整个项目,过程对我来说收获非常多,继续努力,继续学习!
参考的文章:
https://juejin.cn/post/7012898467643621412 linux 安装redis 完整步骤
https://blog.csdn.net/weixin_45200739/article/details/124695059 Ubuntu安装SqlServer
https://www.cnblogs.com/werr370/p/16623798.html Linux安装SQLServer2019
https://blog.csdn.net/weixin_44192363/article/details/116810814 Linux关闭防火墙命令
https://blog.csdn.net/u011262253/article/details/128545555 React 项目部署后,页面404解决