.Net core3.1、React部署到ubuntu(包含安装Redis、SqlServer),以及各种踩坑记录

本文详述了在Ubuntu20.04服务器上部署.NETCore3.1应用,包括安装.NETCoreSDK,部署Redis4.0.8,安装SQLServer2019,设置Nginx反向代理,以及React前端的部署。过程中提到了遇到的防火墙配置问题和解决验证码生成错误的方法,提供了完整的命令行步骤和注意事项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 前言

公司有个项目,因为之前一直用的都是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.youkuaiyun.com/weixin_45200739/article/details/124695059  Ubuntu安装SqlServer

https://www.cnblogs.com/werr370/p/16623798.html  Linux安装SQLServer2019

https://blog.youkuaiyun.com/weixin_44192363/article/details/116810814  Linux关闭防火墙命令

https://blog.youkuaiyun.com/u011262253/article/details/128545555  React 项目部署后,页面404解决

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值