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

前言

公司有个项目,因为之前一直用的都是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解决

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
React是一个用于构建用户界面的JavaScript库,它本身并不直接与.NET进行沟通。但是,在.NET应用程序中使用React通常涉及到以下几个步骤: 1. 安装React依赖项:在.NET应用程序中使用React需要安装React依赖项。这可以通过npm(Node.js包管理器)来完成。npm是一个用于管理JavaScript包的工具,它允许您安装和管理React依赖项。您可以使用以下命令来安装React依赖项: ``` npm install react react-dom ``` 2. 配置Webpack:Webpack是一个用于构建JavaScript应用程序的工具。它可以将您的React代码打包成一个JavaScript文件,以便将其嵌入到.NET应用程序中。您需要在.NET应用程序中配置Webpack,以便它可以正确地处理React代码。 3. 创建React组件:在.NET应用程序中使用React通常涉及到创建React组件。React组件是一种用于封装和重用UI元素的方式。您可以创建一个React组件来表示任何类型的UI元素,例如按钮、表单、列表等。 以下是一个简单的React组件示例: ``` import React from 'react'; class MyComponent extends React.Component { render() { return ( <div> <h1>Hello, world!</h1> </div> ); } } export default MyComponent; ``` 4. 将React组件嵌入到.NET应用程序中:一旦您创建了一个React组件,您可以将其嵌入到.NET应用程序中。这可以通过使用ASP.NET Core MVC(Model-View-Controller)框架来完成。您可以在控制器中创建一个操作方法,该方法将返回一个包含React组件的视图。例如: ``` public IActionResult Index() { return View(); } ``` 在视图中,您可以使用React组件,例如: ``` @{ ViewData["Title"] = "Home Page"; } <div id="my-react-component"></div> @section Scripts { <script src="~/dist/bundle.js"></script> } ``` 在上面的代码中,我们将React组件嵌入到一个DIV元素中,并在页面底部包含一个JavaScript文件,该文件包含我们的React代码。 这就是React如何与.NET进行沟通的基本过程。在实际应用中,您可能需要使用其他工具和框架来帮助您构建.NET应用程序中的React组件。例如,您可能需要使用Redux来管理应用程序状态,或者使用React Router来处理应用程序路由。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值