记.netcore部署到银河麒麟linux服务器过程详解

一.服务器配置

操作系统:银河麒麟桌面操作系统V10

CPU:intel i5

内存:16G

内核:5.10.0.8-generic

未激活

二.运行环境安装

.netcore 6.0 runtime时安装下载离线包

Download .NET 6.0 (Linux, macOS, and Windows)

-下载完后进行解压

sudo su #提权
mkdir -p $HOME/dotnet && tar zxf aspnetcore-runtime-6.0.21-linux-x64.tar.gz -C $HOME/dotnet  #创建文件夹并解压到指定文件夹

.netcore 3.0 runtime时安装下载离线包
Download .NET Core 3.1 (Linux, macOS, and Windows)

-下载完后进行解压
mkdir -p $HOME/dotnet && tar zxf aspnetcore-runtime-3.1.32-linux-x64.tar.gz -C $HOME/dotnet  #创建文件夹并解压到指定文件夹

加入环境变量配置


source /etc/profile #退出文件后,重新执行此文件
dotnet --info #查看.NET 信息
dotnet --version #查看.NET 版本信息 
export DOTNET_ROOT=$HOME/dotnet
export PATH=$PATH:$DOTNET_ROOT

其他命令:

#文件解锁:
sudo chmod 777 /data/website/d/css/public.css

Linux守护进程工具Supervisor

Supervisor安装
1.安装命令
apt-get install supervisor
测试安装时候成功
ps ax | grep supervisor

2. 配置supervisor
每个进程的配置文件都可以单独分拆,放在/etc/supervisor/conf.d/目录下,以.conf作为扩展名,例如,app.conf定义了一个helloworld的进程
[program:helloword]
command=/data/app/helloworld
directory=/data/app

3. 启动Supervisor
/etc/init.d/supervisor restart
这样我们的web服务程序就可以作为一个稳定的接口提供服务了 

三.编译发布

四.运行


export DOTNET_ROOT=$HOME/dotnet
export PATH=$PATH:$DOTNET_ROOT
dotnet /data/website/E/E.WebHost.dll --urls "http://*:5006"

运行如图:

五.注意事项

1.windows的不支持在linux里使用的dll场景:

中断性变更:仅在 Windows 上支持 System.Drawing.Common - .NET | Microsoft Learn

2.linux的文件路径是区分大小写的:

如果文件夹是Assets的话  那如下地址是读取不到的 会报404

http://127.0.0.1:5006/assets/12.js

六.nginx配置

nginx在线配置

七.防火墙

 

格式如下

sudo firewall-cmd -add-port=3306/tcp

下方命令是开放所有端口的命令

出口和入口都要设置

sudo firewall-cmd --permanent --zone=public --add-port=0/tcp,0/udp sudo firewall-cmd --reload
 

八.常见问题以及解决办法

a.验证码功能

   在windows会用到System.Draw进行绘图,但该dll在linux是不支持的,会报错

    解决办法:去掉System.Draw.dll的引用,改安装:SixLabors.ImageSharp.Drawing

    具体nuget下搜索SixLabors.ImageSharp.Drawing

我用的是如下这个版本

<PackageReference Include="SixLabors.ImageSharp.Drawing" Version="2.1.3" />

然后将验证码生成Base64图片

using SixLabors.Fonts;
using SixLabors.ImageSharp;
using SixLabors.ImageSharp.Drawing;
using SixLabors.ImageSharp.Drawing.Processing;
using SixLabors.ImageSharp.PixelFormats;
using SixLabors.ImageSharp.Processing;

{
     public class CaptchaUtil
    {  

/// <summary>
/// 
/// </summary>
/// <param name="code"></param>
/// <returns></returns>
public static string CreateBase64Imgage(string code)
{
    var image = GenerateCaptchaImage(code);

    using (MemoryStream stream = new MemoryStream())
    {
        image.Save(stream, SixLabors.ImageSharp.Formats.Png.PngFormat.Instance);
        byte[] imageBytes = stream.ToArray();
        return Convert.ToBase64String(stream.ToArray());
    }
}
private static Image<Rgba32> GenerateCaptchaImage(string code)
{
    //验证码颜色集合
    Color[] c = { Color.Black, Color.Red, Color.DarkBlue, Color.Green, Color.Orange, Color.Brown, Color.DarkCyan, Color.Purple };

    var image = new Image<Rgba32>((int)code.Length * 18, 30);
    image.Mutate(x => x
        .BackgroundColor(Color.White)
        .Fill(Color.LightSteelBlue, new RectangularPolygon(1, 1, 119, 30)));
    Random random = new Random();
    var fontName = "Arial";
    if (!SystemFonts.Families.Any(x => x.Name == fontName))
        fontName = SystemFonts.Families.FirstOrDefault().CreateFont(18).Name;
    var font = SystemFonts.CreateFont(fontName, 18);

    //在随机位置画背景点
    for (int i = 0; i < 45; i++)
    {
        int x1 = random.Next(image.Width);
        int y1 = random.Next(image.Height);
        var font2 = SystemFonts.CreateFont(fontName, 6);
        image.Mutate(x => x.DrawText("▪", font2, c[random.Next(0, c.Length)], new PointF(x1, y1))); 
    }
    //验证码绘制在g中
    for (int i = 0; i < code.Length; i++)
    {
        int cindex = random.Next(7);//随机颜色索引值
        int findex = random.Next(5);//随机字体索引值
        Font f = SystemFonts.CreateFont(fontName, 15, FontStyle.Bold);//字体
        Brush b = new SolidBrush(c[cindex]);//颜色
        int ii = 12;
        if ((i + 1) % 2 == 0)//控制验证码不在同一高度
        {
            ii = 10;
        }
        image.Mutate(x => x.DrawText(code.Substring(i, 1), f, c[random.Next(0, c.Length)], new PointF(10 + (i * 12), ii)));
    }

    return image;
}




    }



}

生成的效果如图:

  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
要在麒麟V10上进行离线部署.NET Core,需要按照以下步骤进行: 1. 在联网的Windows机器上下载.NET Core运行时和SDK的离线安装程序。可以从以下链接下载: - .NET Core 运行时 https://dotnet.microsoft.com/download/dotnet/3.1/runtime - .NET Core SDK https://dotnet.microsoft.com/download/dotnet/3.1 注意:必须下载与麒麟V10相同版本的.NET Core运行时和SDK。 2. 将下载的离线安装程序复制到麒麟V10服务器上的任意位置。 3. 在麒麟V10服务器上运行以下命令以安装.NET Core运行时: ``` sudo mkdir /opt/dotnet sudo tar -xvzf /path/to/downloaded/dotnet-runtime-3.1.0-linux-x64.tar.gz -C /opt/dotnet/ ``` 注意:替换`/path/to/downloaded`为您下载的离线安装程序的路径。 4. 在麒麟V10服务器上运行以下命令以安装.NET Core SDK: ``` sudo mkdir /opt/dotnet-sdk sudo tar -xvzf /path/to/downloaded/dotnet-sdk-3.1.0-linux-x64.tar.gz -C /opt/dotnet-sdk/ ``` 注意:替换`/path/to/downloaded`为您下载的离线安装程序的路径。 5. 添加.NET Core到系统环境变量中。使用以下命令打开`/etc/profile`文件: ``` sudo nano /etc/profile ``` 在文件末尾添加以下行: ``` export PATH=$PATH:/opt/dotnet:/opt/dotnet-sdk ``` 按下`Ctrl + X`,然后输入`Y`保存并退出。 6. 重新加载配置文件: ``` source /etc/profile ``` 7. 检查.NET Core是否已正确安装: ``` dotnet --info ``` 如果一切正常,将显示.NET Core的版本信息。 现在,您已经在麒麟V10服务器上成功离线部署.NET Core

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值