【Ubuntu】Ubuntu arm64 部署 Blazor Server 应用

news2024/11/16 13:39:40

部署步骤

  1. 发布
  2. 安装运行环境:dotnet-sdk(必装)、aspnetcore-runtimedotnet-runtime
  3. 安装证书
  4. 设置环境变量:临时变量当前用户永久变量所有用户的永久变量
  5. 运行:终端运行后台运行
    在这里插入图片描述

基本情况

开发系统环境

  • 系统:Windows 10 专业版 22H2 19045.3693
  • 开发软件IDE:Microsoft Visual Studio Community 2022 (64 位) - Current 版本 17.6.5
  • 项目框架:Blazor Server 应用
  • 目标框架:.NET 6.0
  • 系统架构:x64
    在这里插入图片描述

发布系统环境

  • 系统:Ubuntu 20.04.6 LTS focal
  • 架构:arm64

系统信息

lsb_release -a

No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 20.04.6 LTS
Release: 20.04
Codename: focal

查看架构

sudo dpkg  --print-architecture

arm64

二、部署

2.1 准备部署文件

2.1.1 发布

  • 配置: Release
  • 目标框架(F): net6.0
  • 部署模式(M): 框架依赖
  • 目标运行时(U): 可移植
    在这里插入图片描述

2.1.2 打包文件 - 压缩zip

如:RSS_NCD_MINI_BlazorServer.zip

2.1.3 将打包文件从Windows拷贝到Ubuntu系统

推荐将文件放在/home/<用户>/<新建公司名/产品名>/<项目名>目录下
如:/home/signway/rsszy/webapp3/

2.1.4 释放文件 - 解压zip

  1. 打开Ubuntu终端
  2. 跳转到RSS_NCD_MINI_BlazorServer.zip所在目录
cd /home/signway/rsszy/webapp3/
  1. 使用unzip指令解压RSS_NCD_MINI_BlazorServer.zip文件
unzip RSS_NCD_MINI_BlazorServer.zip

Archive:  RSS_NCD_MINI_BlazorServer.zip
  inflating: Microsoft.IdentityModel.Protocols.OpenIdConnect.dll  
  inflating: Microsoft.IdentityModel.Tokens.dll  
  inflating: RSS_NCD(MINI)_BlazorServer.deps.json  
  inflating: RSS_NCD(MINI)_BlazorServer.dll  
  inflating: RSS_NCD(MINI)_BlazorServer.exe  
  inflating: RSS_NCD(MINI)_BlazorServer.pdb  
  inflating: RSS_NCD(MINI)_BlazorServer.runtimeconfig.json  
  inflating: System.IdentityModel.Tokens.Jwt.dll  
  inflating: web.config              
   creating: wwwroot/
   creating: wwwroot/css/
   creating: wwwroot/css/bootstrap/
  inflating: wwwroot/css/bootstrap/bootstrap.min.css  
  inflating: wwwroot/css/bootstrap/bootstrap.min.css.map  
   creating: wwwroot/css/open-iconic/
   creating: wwwroot/css/open-iconic/font/
   creating: wwwroot/css/open-iconic/font/css/
  inflating: wwwroot/css/open-iconic/font/css/open-iconic-bootstrap.min.css  
   creating: wwwroot/css/open-iconic/font/fonts/
  inflating: wwwroot/css/open-iconic/font/fonts/open-iconic.eot  
  inflating: wwwroot/css/open-iconic/font/fonts/open-iconic.otf  
  inflating: wwwroot/css/open-iconic/font/fonts/open-iconic.svg  
  inflating: wwwroot/css/open-iconic/font/fonts/open-iconic.ttf  
  inflating: wwwroot/css/open-iconic/font/fonts/open-iconic.woff  
  inflating: wwwroot/css/open-iconic/FONT-LICENSE  
  inflating: wwwroot/css/open-iconic/ICON-LICENSE  
  inflating: wwwroot/css/open-iconic/README.md  
  inflating: wwwroot/css/site.css    
  inflating: wwwroot/favicon.ico     
  inflating: wwwroot/RSS_NCD(MINI)_BlazorServer.styles.css  
  inflating: appsettings.Development.json  
  inflating: appsettings.json        
  inflating: Microsoft.AspNetCore.Authentication.JwtBearer.dll  
  inflating: Microsoft.IdentityModel.JsonWebTokens.dll  
  inflating: Microsoft.IdentityModel.Logging.dll  
  inflating: Microsoft.IdentityModel.Protocols.dll 

2.2 安装框架

2.2.1 下载框架

.NET 6.0下载地址

  • dotnet-runtime-6.0.25-linux-arm64.tar.gz
    在这里插入图片描述

  • dotnet-sdk-6.0.417-linux-arm64.tar.gz

在这里插入图片描述

  • aspnetcore-runtime-6.0.25-linux-arm64.tar.gz
    在这里插入图片描述

注意: 必须安装SDK,才能使用dotnet指令运行程序。

2.2.2 安装dotnet-sdk

  1. 将下载的文件拷贝到Ubuntu系统目录
    推荐将文件放在/home/<用户>/<功能>/<框架名>目录下
    如:/home/signway/install/dotnet/
  2. 打开终端跳转到文件目录
cd /home/signway/install/dotnet/
  1. 安装dotnet-sdkdotnet-runtimeaspnetcore-runtime
mkdir -p $HOME/dotnet && tar zxf dotnet-sdk-6.0.417-linux-arm64.tar.gz -C $HOME/dotnet
mkdir -p $HOME/dotnet && tar zxf dotnet-runtime-6.0.25-linux-arm64.tar.gz -C $HOME/dotnet
mkdir -p $HOME/dotnet && tar zxf aspnetcore-runtime-6.0.25-linux-arm64.tar.gz -C $HOME/dotnet
export DOTNET_ROOT=$HOME/dotnet
export PATH=$PATH:$HOME/dotnet

上述指令只会在运行它的终端生效。
你可以编辑shell配置文件以永久添加命令。Linux有几个不同的shell,每个shell都有不同的配置文件。例如:

  • Bash Shell: ~/.bash_profile~/.bashrc
  • Korn Shell: ~/.kshrc.profile
  • Z Shell: ~/.zshrc.zprofile

编辑shell的相应源文件,并在现有PATH语句的末尾添加:$HOME/dotnet。如果没有包含PATH语句,则添加一个新行,export DOTNET_ROOT=$HOME/dotnet。同时将export PATH=$PATH:$HOME/dotnet添加到文件末尾。

# ...
export DOTNET_ROOT=$HOME/dotnet
export PATH=$PATH:$HOME/dotnet

2.3 安装证书

2.3.1 安装证书

dotnet dev-certs https --trust
dotnet dev-certs https -t

signway@RK3588:~/rsszy/webapp2$ dotnet dev-certs https --trust


 
 
Trusting the HTTPS development certificate was requested. Trusting the certificate
on Linux distributions automatically is not supported. For instructions on how to
manually trust the certificate on your Linux distribution, go to
https://aka.ms/dev-certs-trust
A valid HTTPS certificate is already present.

2.3.2 未安装会出现什么情况?

The command could not be loaded, possibly because:
  * You intended to execute a .NET application:
      The application 'dev-certs' does not exist.
  * You intended to execute a .NET SDK command:
      No .NET SDKs were found.

Download a .NET SDK:
https://aka.ms/dotnet-download

Learn about SDK resolution:
https://aka.ms/dotnet/sdk-not-found
Unable to configure HTTPS endpoint. No server certificate was specified, and the default developer certificate could not be found or is out of date.

Unhandled exception. System.InvalidOperationException: Unable to configure HTTPS endpoint. No server certificate was specified, and the default developer certificate could not be found or is out of date.
To generate a developer certificate run 'dotnet dev-certs https'. To trust the certificate (Windows and macOS only) run 'dotnet dev-certs https --trust'.
For more information on configuring HTTPS see https://go.microsoft.com/fwlink/?linkid=848054.
   at Microsoft.AspNetCore.Server.Kestrel.KestrelConfigurationLoader.Reload()
   at Microsoft.AspNetCore.Server.Kestrel.KestrelConfigurationLoader.Load()
   at Microsoft.AspNetCore.Server.Kestrel.Core.KestrelServerImpl.BindAsync(CancellationToken cancellationToken)
   at Microsoft.AspNetCore.Server.Kestrel.Core.KestrelServerImpl.StartAsync[TContext](IHttpApplication`1 application, CancellationToken cancellationToken)
   at Microsoft.AspNetCore.Hosting.GenericWebHostService.StartAsync(CancellationToken cancellationToken)
   at Microsoft.Extensions.Hosting.Internal.Host.StartAsync(CancellationToken cancellationToken)
   at Microsoft.Extensions.Hosting.HostingAbstractionsHostExtensions.RunAsync(IHost host, CancellationToken token)
   at Microsoft.Extensions.Hosting.HostingAbstractionsHostExtensions.RunAsync(IHost host, CancellationToken token)
   at Microsoft.Extensions.Hosting.HostingAbstractionsHostExtensions.Run(IHost host)
   at Microsoft.AspNetCore.Builder.WebApplication.Run(String url)
   at Program.<Main>$(String[] args) in E:\SVN\RCSoft1\RSS_NCD(MINI)\RSS_NCD(MINI)_BlazorServer\RSS_NCD(MINI)_BlazorServerAPI\Program.cs:line 85
已放弃 (核心已转储)

2.4 添加环境变量

2.4.1 临时运行

每次打开终端运行以下命令来设置临时变量

export DOTNET_ROOT=$HOME/dotnet
export PATH=$PATH:$HOME/dotnet

2.4.2 永久添加 - 当前登录用户

1. 打开 ~/.bashrc文件
vi  ~/.bashrc

# ~/.bashrc: executed by bash(1) for non-login shells.
# see /usr/share/doc/bash/examples/startup-files (in the package bash-doc)
# for examples

# If not running interactively, don't do anything
case $- in
    *i*) ;;
      *) return;;
esac

# don't put duplicate lines or lines starting with space in the history.
# See bash(1) for more options
HISTCONTROL=ignoreboth

# append to the history file, don't overwrite it
shopt -s histappend

# for setting history length see HISTSIZE and HISTFILESIZE in bash(1)
HISTSIZE=1000
HISTFILESIZE=2000

# check the window size after each command and, if necessary,
# update the values of LINES and COLUMNS.
shopt -s checkwinsize

# If set, the pattern "**" used in a pathname expansion context will
# match all files and zero or more directories and subdirectories.
#shopt -s globstar

# make less more friendly for non-text input files, see lesspipe(1)
[ -x /usr/bin/lesspipe ] && eval "$(SHELL=/bin/sh lesspipe)"

# set variable identifying the chroot you work in (used in the prompt below)
if [ -z "${debian_chroot:-}" ] && [ -r /etc/debian_chroot ]; then
    debian_chroot=$(cat /etc/debian_chroot)
fi

# set a fancy prompt (non-color, unless we know we "want" color)
case "$TERM" in
    xterm-color|*-256color) color_prompt=yes;;
esac

# uncomment for a colored prompt, if the terminal has the capability; turned
# off by default to not distract the user: the focus in a terminal window
# should be on the output of commands, not on the prompt
#force_color_prompt=yes

if [ -n "$force_color_prompt" ]; then
    if [ -x /usr/bin/tput ] && tput setaf 1 >&/dev/null; then
        # We have color support; assume it's compliant with Ecma-48
        # (ISO/IEC-6429). (Lack of such support is extremely rare, and such
        # a case would tend to support setf rather than setaf.)
        color_prompt=yes
    else
        color_prompt=
    fi
fi

if [ "$color_prompt" = yes ]; then
    PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '
else
    PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
fi
unset color_prompt force_color_prompt

# If this is an xterm set the title to user@host:dir
case "$TERM" in
xterm*|rxvt*)
    PS1="\[\e]0;${debian_chroot:+($debian_chroot)}\u@\h: \w\a\]$PS1"
    ;;
*)
    ;;

esac

# enable color support of ls and also add handy aliases
if [ -x /usr/bin/dircolors ]; then
    test -r ~/.dircolors && eval "$(dircolors -b ~/.dircolors)" || eval "$(dircolors -b)"
    alias ls='ls --color=auto'
    #alias dir='dir --color=auto'
    #alias vdir='vdir --color=auto'

    alias grep='grep --color=auto'
    alias fgrep='fgrep --color=auto'
    alias egrep='egrep --color=auto'
fi

# colored GCC warnings and errors
#export GCC_COLORS='error=01;31:warning=01;35:note=01;36:caret=01;32:locus=01:quote=01'

# some more ls aliases
alias ll='ls -alF'
alias la='ls -A'
alias l='ls -CF'

# Add an "alert" alias for long running commands.  Use like so:
#   sleep 10; alert
alias alert='notify-send --urgency=low -i "$([ $? = 0 ] && echo terminal || echo error)" "$(history|tail -n1|sed -e '\''s/^\s*[0-9]\+\s*//;s/[;&|]\s*alert$//'\'')"'

# Alias definitions.
# You may want to put all your additions into a separate file like
# ~/.bash_aliases, instead of adding them here directly.
# See /usr/share/doc/bash-doc/examples in the bash-doc package.

if [ -f ~/.bash_aliases ]; then
    . ~/.bash_aliases
fi

# enable programmable completion features (you don't need to enable
# this, if it's already enabled in /etc/bash.bashrc and /etc/profile
# sources /etc/bash.bashrc).
if ! shopt -oq posix; then
  if [ -f /usr/share/bash-completion/bash_completion ]; then
    . /usr/share/bash-completion/bash_completion
  elif [ -f /etc/bash_completion ]; then
    . /etc/bash_completion
  fi
fi


export PATH=$PATH:$HOME/dotnet
export DOTNET_ROOT=$HOME/dotnet

2. 设置环境变量

I键,退出命令模式进入编辑模式, ~/.bashrc文件末尾添加以下内容设置环境变量。

export PATH=$PATH:$HOME/dotnet
export DOTNET_ROOT=$HOME/dotnet
3. 保存退出

Esc键,退出编辑模式进入命令模式,输入以下指令保存。

:wq!

2.4.3 永久添加 - 所有用户

1. 打开 /etc/profile文件
sudo vim /etc/profile

# /etc/profile: system-wide .profile file for the Bourne shell (sh(1))
# and Bourne compatible shells (bash(1), ksh(1), ash(1), ...).

if [ "${PS1-}" ]; then
  if [ "${BASH-}" ] && [ "$BASH" != "/bin/sh" ]; then
    # The file bash.bashrc already sets the default PS1.
    # PS1='\h:\w\$ '
    if [ -f /etc/bash.bashrc ]; then
      . /etc/bash.bashrc
    fi
  else
    if [ "`id -u`" -eq 0 ]; then
      PS1='# '
    else
      PS1='$ '
    fi
  fi
fi

if [ -d /etc/profile.d ]; then
  for i in /etc/profile.d/*.sh; do
    if [ -r $i ]; then
      . $i
    fi
  done
  unset i
fi

2. 设置环境变量

I键,退出命令模式进入编辑模式, ~/.bashrc文件末尾添加以下内容设置环境变量。

export PATH=$PATH:$HOME/dotnet
export DOTNET_ROOT=$HOME/dotnet
3. 保存退出

Esc键,退出编辑模式进入命令模式,输入以下指令保存。

:wq!
4. 重新加载

执行以下指令生效

source /etc/profile

2.4.4 查看设置的环境变量

1 只看PATH变量
echo $PATH

/sbin:/bin:/usr/bin:/usr/local/bin:/snap/bin:/home/signway/dotnet

2 查看所有环境变量
env

SHELL=/bin/bash
SESSION_MANAGER=local/RK3588:@/tmp/.ICE-unix/20779,unix/RK3588:/tmp/.ICE-unix/20779
QT_ACCESSIBILITY=1
COLORTERM=truecolor
XDG_MENU_PREFIX=gnome-
GNOME_DESKTOP_SESSION_ID=this-is-deprecated
GNOME_KEYRING_CONTROL=/home/signway/.cache/keyring-ZRVEE2
DOTNET_ROOT=/home/signway/dotnet
SSH_AUTH_SOCK=/home/signway/.cache/keyring-ZRVEE2/ssh
XMODIFIERS=@im=ibus
SSH_AGENT_PID=20915
GTK_MODULES=gail:atk-bridge
PWD=/home/signway
LOGNAME=signway
XDG_SESSION_TYPE=x11
GPG_AGENT_INFO=/run/user/1000/gnupg/S.gpg-agent:0:1
PULSE_SCRIPT=/etc/xrdp/pulse/default.pa
HOME=/home/signway
LANG=zh_CN.UTF-8
LS_COLORS=rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=00:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arc=01;31:*.arj=01;31:*.taz=01;31:*.lha=01;31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.tzo=01;31:*.t7z=01;31:*.zip=01;31:*.z=01;31:*.dz=01;31:*.gz=01;31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=01;31:*.zst=01;31:*.tzst=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.alz=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.cab=01;31:*.wim=01;31:*.swm=01;31:*.dwm=01;31:*.esd=01;31:*.jpg=01;35:*.jpeg=01;35:*.mjpg=01;35:*.mjpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=00;36:*.au=00;36:*.flac=00;36:*.m4a=00;36:*.mid=00;36:*.midi=00;36:*.mka=00;36:*.mp3=00;36:*.mpc=00;36:*.ogg=00;36:*.ra=00;36:*.wav=00;36:*.oga=00;36:*.opus=00;36:*.spx=00;36:*.xspf=00;36:
XDG_CURRENT_DESKTOP=GNOME
VTE_VERSION=6003
XRDP_SOCKET_PATH=/run/xrdp/sockdir
XRDP_PULSE_SOURCE_SOCKET=xrdp_chansrv_audio_in_socket_10
GNOME_TERMINAL_SCREEN=/org/gnome/Terminal/screen/af8cf72d_9406_4502_87df_7737e813f8a2
LESSCLOSE=/bin/lesspipe %s %s
XDG_SESSION_CLASS=user
TERM=xterm-256color
LESSOPEN=| /bin/lesspipe %s
USER=signway
GNOME_TERMINAL_SERVICE=:1.393
XRDP_SESSION=1
DISPLAY=:10.0
XRDP_PULSE_SINK_SOCKET=xrdp_chansrv_audio_out_socket_10
SHLVL=1
QT_IM_MODULE=ibus
XDG_DATA_DIRS=/usr/share/gnome:/usr/local/share:/usr/share:/var/lib/snapd/desktop
PATH=/sbin:/bin:/usr/bin:/usr/local/bin:/snap/bin:/home/signway/dotnet
DBUS_SESSION_BUS_ADDRESS=unix:abstract=/tmp/dbus-LY2CUzKESO,guid=88d0510cbc94cdf2015ed92765542918
UID=1000
_=/bin/env


2.5 运行

**注意:一定要到根目录下运行,不要使用全路径,不然一些资源加载不了导致页面显示不正常**

2.5.1 临时变量运行程序

export DOTNET_ROOT=$HOME/dotnet
export PATH=$PATH:$HOME/dotnet
cd /home/signway/rsszy/webapp2/
dotnet 'RSS_NCD(MINI)_BlazorServer.dll'

2.5.2 永久变量运行程序

cd /home/signway/rsszy/webapp2/
dotnet 'RSS_NCD(MINI)_BlazorServer.dll'

signway@RK3588:~$ cd /home/signway/rsszy/webapp2/
signway@RK3588:~/rsszy/webapp2$ 
signway@RK3588:~/rsszy/webapp2$ dotnet 'RSS_NCD(MINI)_BlazorServer.dll'
info: Microsoft.Hosting.Lifetime[14]
      Now listening on: http://[::]:9002
info: Microsoft.Hosting.Lifetime[14]
      Now listening on: https://[::]:9003
info: Microsoft.Hosting.Lifetime[0]
      Application started. Press Ctrl+C to shut down.
info: Microsoft.Hosting.Lifetime[0]
      Hosting environment: Production
info: Microsoft.Hosting.Lifetime[0]
      Content root path: /home/signway/rsszy/webapp2/

2.5.3 永久变量静默运行(后台运行)

cd /home/signway/rsszy/webapp2/
nohup dotnet 'RSS_NCD(MINI)_BlazorServer.dll' > /dev/null 2>&1 &

signway@RK3588:~/rsszy/webapp2$ cd /home/signway/rsszy/webapp2/
signway@RK3588:~/rsszy/webapp2$ 
signway@RK3588:~/rsszy/webapp2$ nohup dotnet 'RSS_NCD(MINI)_BlazorServer.dll' > /dev/null 2>&1 &
[1] 70286
signway@RK3588:~/rsszy/webapp2$ 

2.5.4 查看后台运行

ps aux | grep <运行程序名称>

ps aux | grep BlazorServer

signway@RK3588:~/rsszy/webapp2$ ps aux | grep BlazorServer
signway    70286  0.6  2.2 24527624 90396 pts/2  Sl   17:59   0:01 dotnet RSS_NCD(MINI)_BlazorServer.dll
signway    70327  0.0  0.0  11664   664 pts/2    S+   18:03   0:00 grep --color=auto BlazorServer

2.5.5 终止运行程序

kill <PID>

kill 70286

signway@RK3588:~/rsszy/webapp2$ kill 70286
signway@RK3588:~/rsszy/webapp2$ 

2.5.6 强制终止运行程序

kill -9 <PID>

kill -9 70286

signway@RK3588:~/rsszy/webapp2$ kill -9 70336
signway@RK3588:~/rsszy/webapp2$ 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1234376.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

oepnpnp - 自己出图做开口扳手

文章目录 oepnpnp - 自己出图做开口扳手概述笔记做好的一套扳手实拍美图工程图END oepnpnp - 自己出图做开口扳手 概述 我的openpnp设备顶部相机安装支架, 由于结构限制, 螺柱的安装位置和机械挂壁的距离太近了. 导致拧紧(手工或者工具)很困难. 也不能重新做相机支架, 因为将…

Ubuntu22.04 交叉编译GCC13.2.0 for Rv1126

一、安装Ubuntu22.04 sudo apt install vim net-tools openssh-server 二、安装必要项 sudo apt update sudo apt upgrade sudo apt install build-essential gawk git texinfo bison flex 三、下载必备软件包 1.glibc https://ftp.gnu.org/gnu/glibc/glibc-2.38.tar.gz…

通明智云宣布完成数千万元A+轮融资, 引领云原生与信创两翼齐飞的应用交付解决方案

近日&#xff0c;通明智云&#xff08;北京&#xff09;科技有限公司&#xff08;简称&#xff1a;通明智云&#xff09;宣布完成数千万元A轮融资&#xff0c;由全聚合与信公投资联合投资&#xff0c;明论资本担任本轮融资独家财务顾问。本轮融资资金将主要用于NJet云原生应用引…

ky10 server x86 安装、更新openssl3.1.4(在线编译安装、离线安装)

查看openssl版本 openssl version 离线编译安装升级 #!/bin/shOPENSSLVER3.1.4OPENSSL_Vopenssl versionecho "当前OpenSSL 版本 ${OPENSSL_V}" #------------------------------------------------ #wget https://www.openssl.org/source/openssl-3.1.4.tar.gzech…

第四代可燃气体监测仪:可燃气体监测仪效果有哪些?

在城市之中一旦发生燃气事故&#xff0c;往往会为社会公共安全和公众利益带来极大的危害&#xff0c;扰乱社会运行的稳定秩序&#xff0c;威胁着城市生命线的运行。因此对于城市燃气事故的预防和应对工作&#xff0c;必须得到充分的重视和关注。城市燃气事故的预防工作&#xf…

redis高可用---持久化

redis高可用 在集群当中有一个非常重要的指标&#xff0c;提供正常服务的时间的百分比(365天) 99.9%&#xff0c;redis高可用含义更广泛&#xff0c;支持服务是指标之一&#xff0c;数据容量扩展&#xff0c;数局的安全性。&#xff08;容量、安全性&#xff09; redis中实现高…

竞赛 题目:基于深度学习的手势识别实现

文章目录 1 前言2 项目背景3 任务描述4 环境搭配5 项目实现5.1 准备数据5.2 构建网络5.3 开始训练5.4 模型评估 6 识别效果7 最后 1 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 基于深度学习的手势识别实现 该项目较为新颖&#xff0c;适合作为竞赛课题…

【设计模式】行为型设计模式

行为型设计模式 文章目录 行为型设计模式一、概述二、责任链模式&#xff08;Chain of Responsibility Pattern&#xff09;三、命令模式&#xff08;Command Pattern&#xff09;四、解释器模式&#xff08;Interpreter Pattern&#xff09;五、迭代器模式&#xff08;Iterato…

YOLOV5 C++部署的人员检测项目【学习笔记(十一)】

本文为修改后的转载&#xff0c;没有转载链接&#xff0c;所以文章类型暂为原创 文章目录 一、安装Pytorch 及 YOLO v51.1 安装GPU版 pytorch1.2 安装YOLO v5所需依赖 二、YOLO v5训练自定义数据2.1 标注数据2.1.1 安装labelImg2.1.2 标注 2.2 准备数据集2.2.1 组织目录结构2.…

亚马逊运营一定要用动/静态住宅IP代理吗?

作为全球最大的电商平台之一&#xff0c;亚马逊已经成为许多商家的首选销售平台。而代理IP作为近几天互联网的热门工具&#xff0c;在跨境电商界也起着非常强大的作用。那么在亚马逊运营中&#xff0c;适合动态住宅代理还是静态住宅代理呢&#xff1f;下面我们一起来探索&#…

问题解决:ModuleNotFoundError: No module named ‘skimage‘

今天的代码中需要用到这个库 from skimage.morphology import disk import skimage.filters.rank as sfr 在运行程序时&#xff0c;出现报错&#xff1a; ModuleNotFoundError: No module named skimage 刚开始傻乎乎的使用 pip install skimage 指令&#xff0c;结果确实不…

深入了解Java 8 新特性:Stream流的实践应用(二)

阅读建议 嗨&#xff0c;伙计&#xff01;刷到这篇文章咱们就是有缘人&#xff0c;在阅读这篇文章前我有一些建议&#xff1a; 本篇文章大概8000多字&#xff0c;预计阅读时间长需要10分钟&#xff08;不要害怕字数过多&#xff0c;其中有一大部分是示例代码&#xff0c;读起…

HTML5+CSS3+JS小实例:Canvas图片滑块拖动验证码

实例:Canvas图片滑块拖动验证码 技术栈:HTML+CSS+JS 效果: 源码: 【HTML】 <!DOCTYPE html> <html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"><meta name="viewport" cont…

二十一、数组(3)

本章概要 Arrays的setAll方法增量生成 Arrays的setAll方法 在Java 8中&#xff0c; 在RaggedArray.java 中引入并在 ArrayOfGenerics.java.Array.setAll() 中重用。它使用一个生成器并生成不同的值&#xff0c;可以选择基于数组的索引元素&#xff08;通过访问当前索引&…

Android Serializable / Parcelable

Serializable 序列化,将对象转为二进制序列 Parcelable 不是序列化,属于进程间通信,不需要IO/操作,没有拷贝内存的操作, Object -> ShareMemory -> Object 不需要IO,使用内存共享等方式 Kotlin inline fun 内联函数 TCP协议将数据包拆分,进行发送,保证网络数据的可…

echarts折线图修改特定点的颜色

$.ajax({url:"/plc1672Ctrl/selectPage2.ctrl",dataType:"json",type:"POST",cache:false,data:{"serNo":$("#search").val().trim()},success:function(data){var list data.list;// x坐标var x new Array();// y坐标var…

ssm租房小程序-计算机毕设 附源码42196

SSM租房小程序 摘 要 本论文主要论述了如何使用SSM框架开发一个租房小程序&#xff0c;本系统将严格按照软件开发流程进行各个阶段的工作&#xff0c;采用B/S架构JAVA技术&#xff0c;面向对象编程思想进行项目开发。在引言中&#xff0c;作者将论述租房小程序的当前背景以及系…

面试题:你怎么理解System.out.println() ?

文章目录 首先分析System源码out源码分析println分析拓展知识点 你如何理解System.out.println() ? 学了这么久的面向对象编程&#xff0c;那如何用一行代码体现呢&#xff1f; 如果你能自己读懂System.out.println()&#xff0c;就真正了解了Java面向对象编程的含义 面向对…

低代码服务商,中小型数字化软件服务商的新出路

数字化时代大背景下&#xff0c;企业信息化向数字化转型成为所有企业发展的必由之路&#xff0c;企业在对业务模式、流程、组织形式、信息技术等方面进行重新定义时&#xff0c;软件必然参与价值创造的全过程&#xff0c;这势必驱使软件成为推动数字化转型的“引擎”&#xff0…

debian 12 配置

1. 修改apt源 修改apt源为http版本 # 默认注释了源码镜像以提高 apt update 速度&#xff0c;如有需要可自行取消注释 deb http://mirrors.tuna.tsinghua.edu.cn/debian/ bookworm main contrib non-free non-free-firmware # deb-src http://mirrors.tuna.tsinghua.edu.cn/d…