麒麟系统部署.net6项目

 

1.  部署步骤

1.1. 连接服务器,文件传输

麒麟服务器不能直接从Windows系统复制文件上传,可以WInSCP程序实现传输。

1.2. 安装.net运行时

以.net 6为例,将dotnet-sdk-6.0.428-linux-x64.tar.gz(.NET官网下载,选择Linux 我这个是x64位的) 文件复制到服务器中的指定目录中,并在该目录右键->在终端中打开->将下方脚本复制粘贴回车运行即可。注意:执行命令需要root账号权限,如果不是root账号,可以通过 su root 命令再输入密码切换到root账号,后续操作都需要root账号权限。

# 功能:安装 .NET 6 SDK 并配置 dotnet6 命令

# 注意:需要root账号才能执行,如果非root账号,可以输入 su - root 命令切换用户后再执行

 

# 1. 定义安装包文件名和安装目录

TAR_FILE="dotnet-sdk-6.0.428-linux-x64.tar.gz"

INSTALL_DIR="/opt/dotnet6-sdk"

 

# 2. 校验安装包是否存在,若存在旧目录则删除

[ ! -f "$TAR_FILE" ] && echo "未找到 $TAR_FILE" && exit 1

[ -d "$INSTALL_DIR" ] && sudo rm -rf "$INSTALL_DIR"

 

# 3. 解压安装包到指定目录并设置权限

sudo mkdir -p "$INSTALL_DIR"

sudo tar -xzf "$TAR_FILE" -C "$INSTALL_DIR"

sudo chmod -R 755 "$INSTALL_DIR"

 

# 4. 创建 dotnet6 命令软链接,使其全局可用

sudo ln -sf "$INSTALL_DIR/dotnet" /usr/local/bin/dotnet6

 

# 5. 清理 .bashrc 中残留的旧 .NET 环境变量配置

sed -i '/DOTNET6_ROOT/d' ~/.bashrc

sed -i '/dotnet6-sdk/d' ~/.bashrc

sed -i '/PATH.*dotnet/d' ~/.bashrc

 

# 6. 添加新的 .NET 6 环境变量配置到 .bashrc

echo "export DOTNET6_ROOT=$INSTALL_DIR" >> ~/.bashrc

echo 'export PATH=$DOTNET6_ROOT:$PATH' >> ~/.bashrc

 

# 7. 重新加载 .bashrc 使环境变量立即生效

source ~/.bashrc

 

# 8. 验证 .NET 6 SDK 是否安装成功

dotnet6 --version

dotnet6 --list-sdks

1.3. 安装redis并修改密码(如果需要redis)

麒麟系统都预备redis安装文件,但是需要手动安装,用下方脚本安装即可。

# 1. 安装 Redis 服务

sudo yum install -y redis

 

# 2. 启动 Redis 并设置开机自启

sudo systemctl start redis

sudo systemctl enable redis

 

# 3. 验证状态(看到 active (running) 即成功)

sudo systemctl status redis

 

# 4. 简单功能测试(进入命令行,输入 ping,应返回 PONG)

redis-cli ping

 

# 设置密码:

redis-cli

127.0.0.1:6379> CONFIG SET requirepass "Aa123456"

1.4. 发布程序

1)  用WInSCP将项目发布程序包上传到服务器后,在服务器端打开该目录,右键->在终端中打开->将下方脚本复制粘贴回车运行即可。

# WebMvc.dll名称根据实际命名修改

dotnet WebMvc.dll

2)  目前LMES在程序中指定了3001端口,所以在命令中无需指定端口,如果程序中未指定端口,可以在命令中指定端口,如下所示:

dotnet WebMvc.dll --urls "http://*:80"

3)  如果发布成功没有报错,成功的话命令窗口输出的内容跟在Windows上发布的服务窗口内容是一致的,在麒麟服务器上的浏览器输入自身的IP+端口号即可打开部署的网站了。

4)  要停止的话 按Ctrl+C 停止服务。

1.5. 常见问题及解决办法

1.5.1.提示数据库连接错误,连接不上

可以先在本地windows测试这个连接是否正常,如果正常说明数据库正常,再到麒麟服务器测试数据库所在的服务器和端口是否都能连通注意:公司的88服务器有问题,脚本能通程序连接不了,用下方脚本测试:

# ping 数据库所在的服务器是否连通(这里跟Windows有点不一样,会一直发送,用Ctrl+C结束)

ping 192.168.1.100

# 测试端口是否连通 1433是Sqlserver的默认端口

nc -zv 192.168.1.100 1433

1.5.2.提示端口被占用

这个一般是之前发布的服务未关闭导致,可以通过下方脚本查询端口占用的线程,并停止它。

# 查询3001端口的线程,如果被占用的话会输出一个PID

ss -tulnp | grep 3001

# 将 12345 替换为实际 PID

kill -9 12345

1.5.3. 外部访问不到部署的网站。

如果外部的电脑可以Ping通麒麟服务器但是访问不到部署的程序,那就是端口被防火墙阻止开放了,可以通过下方脚本开放防火墙端口。

# 1. 查看防火墙状态(确认它是开着的)

sudo systemctl status firewalld

 

# 2. 查询 3001 端口是否已放行(如果显示 no 就是没开)

sudo firewall-cmd --query-port=3001/tcp

 

# 3. 永久添加 3001 端口规则(--permanent 参数表示永久生效)

sudo firewall-cmd --permanent --add-port=3001/tcp

 

# 4. 重载防火墙配置(让规则立即生效)

sudo firewall-cmd --reload

 

# 5. 再次查询确认(此时应显示 yes)

sudo firewall-cmd --query-port=3001/tcp

1.5.4. 提示XX 文件路径不存在,例如下图

这种在Windows上没有抛出,但是在麒麟系统上抛出的错误一般都是路径没有严格区分大小写,麒麟系统的路径一定要严格按照路径的实际大小写填入,不然就会读取不到。

 

1.5.5. 浏览器打开的页面是空白

一般都是该页面的JS文件路径大小写没有写对,检查好实际路径,修改好即可。

2.5.6 发布时加载输出界面卡住不动,按一下回车又继续加载

Console.ReadLine(); 导致的问题,在Linux系统中这行代码会阻塞线程的进行,需要回车确认才继续跑下一步,解决办法是将项目中这行代码都删掉。

posted @ 2026-05-15 17:20  AdonisSail  阅读(51)  评论(0)    收藏  举报