2023环境搭建 

1 环境总表 

毕昇jdk1.8.0_372-b11OK
jdkjava version "1.8.0_192"---
redis6.2.3
mysql8.0
nacos-serverv2.0.4
nginxlatest
npm6.14.4

2 linux、docker、java -jar

  1. linux
    1. 查看Linux内核版本命令(两种方法):
      1. cat /proc/version (Linux查看当前操作系统内核版本信息)
      2. uname -a (Linux查看版本当前操作系统内核信息)

    2. 获取linux操作系统详细信息:

      1. cat /etc/os-release

      2. cat /etc/redhat-release

    3. 修改端口

      1. systemctl status firewalld:查看防火墙状态

      2. systemctl start firewalld:打开防火墙

      3. systemctl reload sshd:重启ssh服务

    4. 查看CPU架构:arch

    5. 【gpt】apt、yum、dnf的关系

      1. aptyumdnf 是用于在 Linux 系统上管理软件包的包管理工具,它们有一定的关系和演变过程:

      2. apt(Advanced Package Tool)是最早出现的包管理工具之一,最初用于基于 Debian 的发行版,如 Debian 和 Ubuntu。它使用 .deb 扩展名的二进制软件包,通过软件源(repositories)来下载和安装软件包。

      3. yum(Yellowdog Updater Modified)是为了解决 Red Hat 系统中软件包管理问题而开发的工具。它主要用于基于 Red Hat 的发行版,如 CentOS 和 Fedora。与 apt 类似,yum 也使用软件源来管理和安装软件包,但它使用 .rpm 扩展名的二进制软件包。

      4. dnf(Dandified YUM)是 yum 的升级版本,引入了一些改进和新特性。它是为了解决 yum 的一些限制和性能问题而开发的。dnf 保留了与 yum 相似的命令和选项,可以无缝地替代 yum 使用。它在 Fedora 中首次引入,并成为默认的包管理工具。

      5. 因此,可以说 aptyumdnf 前身和衍生物。在不同的发行版中,你会发现它们的存在和使用方式略有不同,但它们都是为了方便地管理和安装软件包而设计的。

    6. 【gpt】wget

      1. wget 是一个常用的命令行工具,用于从网络上下载文件。你可以使用以下命令来使用 wget:

        wget [选项] [URL]

        下面是一些常用的 wget 选项:

      2. -P 或 --directory-prefix:指定保存下载文件的目录。
      3. -O 或 --output-document:指定保存文件的文件名。
      4. -q 或 --quiet:静默模式,不输出任何下载信息。
      5. -c 或 --continue:断点续传下载,如果中断过程中已经下载了部分文件,将从上次结束的地方继续下载。
      6. -r 或 --recursive:递归下载,下载指定 URL 中链接的所有文件。
      7. -np 或 --no-parent:不下载父级目录中的文件。
      8. -N 或 --timestamping:仅下载比本地文件更新的文件。
      9. -l 或 --level:指定递归下载的深度级别。
      10. --limit-rate:限制下载速度。
      11. --user-agent:设置用户代理标识,模拟不同的浏览器或设备。
      12. 以下是一些 wget 的示例用法:

      13. 下载文件并保存为指定文件名:
      14. wget -O myfile.txt https://example.com/file.txt
        这将从指定的 URL 下载文件,并将其保存为 myfile.txt
      15. 后台下载文件:
      16. wget -b https://example.com/file.txt

        这将在后台进程中下载文件,你可以继续执行其他命令。

      17. 递归下载整个网站:
      18. wget -r https://example.com/
      19. 这将递归下载指定 URL 中链接的所有文件,并保存在本地文件系统中。

        这只是 wget 的一些常见用法示例,还有更多选项和功能可以供你探索。你可以通过运行 man wget 命令来查看完整的 wget 手册,其中包含了更详细的使用说明和示例。

        注意,在使用 wget 下载文件时,请确保遵守法律法规,并尊重版权和知识产权。

  2. docker

    1. docker ps

      1. CONTAINER ID: 容器 ID

      2. IMAGE: 使用的镜像。

      3. COMMAND: 启动容器时运行的命令。

      4. CREATED: 容器的创建时间。

      5. STATUS: 容器状态。

      6. PORTS:容器的端口信息和使用的连接类型(tcp\udp)

        1. 0.0.0.0:80->8080/tcp

        2. 四部分:IP地址、主机端口、容器端口和传输协议。

          1. IP地址默认为0.0.0.0,表示容器对外开放端口的IP地址为所有可用的地址;

          2. 主机端口则表示主机上连接容器的端口;

          3. 容器端口表示容器内部的端口;

          4. 传输协议可以是TCP或者UDP。

      7. NAMES: 容器名

    2. docker run --help

      docker run --help

      -d, --detach=false         指定容器运行于前台还是后台,默认为false

      -i, --interactive=false    打开STDIN,用于控制台交互

      -t, --tty=false            分配tty设备,该可以支持终端登录,默认为false

      -u, --user=""              指定容器的用户

      -a, --attach=[]            登录容器(必须是以docker run -d启动的容器)

      -w, --workdir=""           指定容器的工作目录

      -c, --cpu-shares=0         设置容器CPU权重,在CPU共享场景使用

      -e, --env=[]               配置信息

      -m, --memory=""            指定容器的内存上限

      -P, --publish-all=false      随机暴露容器的端口

      -p, --publish=[]           指定容器暴露的端口

      -h, --hostname=""          指定容器的主机名

      -v, --volume=[]            给容器挂载存储卷,挂载到容器的某个目录

      --volumes-from=[]          给容器挂载其他容器上的卷,挂载到容器的某个目录

      --cap-add=[]               添加权限,权限清单详见:http://linux.die.net/man/7/capabilities

      --cap-drop=[]              删除权限,权限清单详见:http://linux.die.net/man/7/capabilities

      --cidfile=""               运行容器后,在指定文件中写入容器PID值,一种典型的监控系统用法

      --cpuset=""                设置容器可以使用哪些CPU,此参数可以用来容器独占CPU

      --device=[]                添加主机设备给容器,相当于设备直通

      --dns=[]                   指定容器的dns服务器

      --dns-search=[]            指定容器的dns搜索域名,写入到容器的/etc/resolv.conf文件

      --entrypoint=""            覆盖image的入口点

      --env-file=[]              指定环境变量文件,文件格式为每行一个环境变量

      --expose=[]                指定容器暴露的端口,即修改镜像的暴露端口

      --link=[]                  指定容器间的关联,使用其他容器的IP、env等信息

      --lxc-conf=[]              指定容器的配置文件,只有在指定--exec-driver=lxc时使用

      --name=""                指定容器名字,后续可以通过名字进行容器管理,links特性需要使用名字

      --network="bridge"            容器网络设置:

                                  bridge 使用docker daemon指定的网桥  默认

                                  host    //容器使用主机的网络,不需要使用-p发布端口绑定。容器没有其他的虚拟网络

                                  container:NAME_or_ID  >//使用其他容器的网路,共享IP和PORT等网络资源

                                  none 容器使用自己的网络(类似--net=bridge),但是不进行配置

      --privileged=false         指定容器是否为特权容器,特权容器拥有所有root权限

      --restart="no"             指定容器停止后的重启策略:

                                    no:容器退出时不重启

                                    on-failure:容器故障退出(返回值非零)时重启

                                    always:容器退出时总是重启

      --rm=false                 指定容器停止后自动删除容器(不支持以docker run -d启动的容器)

      --sig-proxy=true           设置由代理接受并处理信号,但是SIGCHLD、SIGSTOP和SIGKILL不能被代理

      --env MODE=standalone:通过env语法设置了一个名为MODE的环境变量,并将其值设置为standalone

      --log-opt max-size=<size>:设置单个日志文件的最大大小。可以使用单位:k(千字节)、m(兆字节)或g(千兆字节)。例如,--log-opt max-size=10m表示每个日志文件的最大大小为10兆字节。

      --log-opt max-file=<number>:设置保留的日志文件的最大数量。当达到最大数量后,旧的日志文件将被循环利用。例如,--log-opt max-file=3表示最多保留3个日志文件。

      --log-opt compress:启用日志压缩。当启用后,旧的日志文件将以压缩格式进行存储,以节省磁盘空间。

      --log-opt tag=<tag>:为容器的日志添加自定义标签。这对于在日志中区分来自不同容器的日志非常有用。

      --log-opt labels=<key>=<value>:为容器的日志添加自定义标签,类似于tag参数。可以指定多个键值对,用逗号分隔。

      --log-opt syslog-address=<address>:将容器的日志发送到指定的syslog服务器地址。地址可以是IP地址、主机名或Unix套接字。

      --log-opt syslog-facility=<facility>:指定syslog日志的设施(facility)。设施用于标识使用syslog进行日志记录的应用程序类型,如authdaemonkern等。

       

      -itd是将多个参数合并在一起使用的简写形式。这些参数用于在Docker容器中创建一个交互式的、后台运行的终端会话。下面是对每个参数的解释:

         -i:保持标准输入(stdin)打开,允许你向容器发送输入。

         -t:分配一个伪终端(pseudo-tty),使得在容器中可以进行交互式操作。

         -d:使容器以守护进程(daemon)方式运行,即在后台运行而不阻塞当前终端。

      结合使用这三个参数,docker run -itd命令可以创建一个运行在后台的容器,并提供一个可与之交互的终端。

  3. java -jar
    1. -jar:是Java命令的一个选项,用于指定要执行的Java应用程序是一个打包成可执行JAR文件的应用程序。通过使用-jar选项,你无需手动指定要执行的主类,而是让JVM自动从JAR文件的清单中读取。
    2. -server是Java命令的一个选项,用于指定以服务器模式运行Java虚拟机(JVM)。
    3. -classpath 或 -cp:指定要加载类文件的路径或JAR文件的路径。
    4. -Xmx:设置Java堆的最大内存大小,例如-Xmx1g表示将堆的最大内存设置为1GB。
    5. -Xms:设置Java堆的初始内存大小,例如-Xms512m表示将堆的初始内存设置为512MB。
    6. -Xss:设置每个线程的堆栈大小,例如-Xss256k表示将堆栈大小设置为256KB。
    7. -XX:ParallelGCThreads:设置并行垃圾收集器使用的线程数。
    8. -XX:+UseConcMarkSweepGC:启用并发标记-清除垃圾收集器。
    9. -XX:+PrintGCDetails:打印详细的垃圾收集器信息。
    10. -XX:MaxPermSize:设置永久代(Permanent Generation)的最大内存大小,该参数在Java 8及更高版本中已被废弃,取而代之的是-XX:MaxMetaspaceSize。
    11. -XX:MaxMetaspaceSize:设置元空间(Metaspace)的最大内存大小。
    12. -XX:NewRatio是Java虚拟机(JVM)的一个参数,用于设置新生代与老年代内存大小的比例。
    13. -D<property>=<value>:设置系统属性,可以通过System.getProperty()方法在Java代码中获取这些值。
    14. -verbose:class:打印加载的类信息。
    15. -Duser.timezone是Java命令的一个系统属性选项,用于设置Java应用程序的默认时区。
    16. ruoyi-gateway.jar > gateway.log 2>&1:将Java程序的标准输出和标准错误都写入到gateway.log文件中

3 环境搭建 

华为鲲鹏创新中心旗舰店:适配鲲鹏的软件镜像地址

(1)安装docker

# 创建docker配置目录
mkdir /etc/docker
 
# 创建配置文件
tee /etc/docker/daemon.json <<-'EOF'
{
  "debug": true,
  "storage-driver": "overlay2",
  "storage-opts":["overlay2.override_kernel_check=true"],
  "graph":"/opt/docker",
  "registry-mirrors": [
  "https://hub-mirror.c.163.com",
  "https://docker.mirrors.ustc.edu.cn",
  "https://registry.docker-cn.com"
  ]
}
EOF
 
# 使用镜像源安装docker
dnf install docker
 
# 启动docker
systemctl start docker
 
# 开机自动启动
systemctl enable docker
 
# 查看docker版本信息
docker info

报错:Failed to download metadata for repo ‘docker-ce-stable‘: Cannot download repomd.xml

参考:【bobo测有效】【openEuler】安装Docker-云社区-华为云 (huaweicloud.com)

                安装配置-3 (openeuler.org) 

(2)安装docker-compose

dnf install docker-compose

参考:

        openEuler安装docker | 远方的灯塔 - 专注于服务端技术分享 (terwergreen.com) 

(3)毕昇JDK安装(非docker)

第一步:获取软件包

https://support.huaweicloud.com/ug-hgcc-kunpengdevps/kunpenghgcc_06_0004.html

https://www.hikunpeng.com/developer/devkit/compiler/jdk

第二步:上传到软件包到home目录下

毕昇JDK安装:

将 bisheng ----.tar.gz 压缩包解压缩:tar -zxvf bisheng-jdk

第三步:配置环境变量

vi /etc/profile

export JAVA_HOME=/home/bisheng-jdk-17.0.2
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

第四步:使环境变量生效

source /etc/profile

第五步:查看安装结果

Java -version

安装参考:UOS系统安装 毕昇JDK和GCC for OpenEuler_鲲鹏_华为云论坛 (huaweicloud.com) 

(4)mysql 8(docker)

  1. docker pull mysql:8.0:拉取mysql 8.0
  2. docker images:查看本地所有的镜像
  3. 启动mysql服务运行容器:
    docker run 
    -itd #创建一个运行在后台的容器,并提供一个可与之交互的终端。
    --name mysql #容器名称
    --restart always #总是重启
    --privileged=true #指定容器是否为特权容器,特权容器拥有所有root权限
    -p 3306:3306 #端口映射
    -e MYSQL_ROOT_PASSWORD=MySQL#567890 #配置信息
    -v /data/ruoyi/mysql:/var/lib/mysql #目录挂载【注】目录不用事先创建好,自动的
    mysql:8.0???
    docker run -itd --name mysql --restart always --privileged=true -p 3306:3306 -e MYSQL_ROOT_PASSWORD=MySQL#567890 -v /data/ruoyi/mysql:/var/lib/mysql mysql:8.0
  4. docker ps:列出启动容器
  5. docker ps -a: 列出所有的运行过的容器
  6. 工具连接,测试(crud)成功,刷入自己的sql文件

(5)redis 6.2.3(docker)

  1. docker ps -a
  2. docker kill redis
  3. docker rm redis
  4. docker pull redis:6.2.3:拉取redis 6.2.3
  5. docker images:查看本地所有的镜像
  6. 创建宿主机的" mkdir /etc/redis "目录,把对应版本的redis.config文件放到其中:
    1. 把最后一行注释去掉(针对ARM64系统)  
    2. 把绑定的ip地址改成:bind 0.0.0.0
  7. 启动redis服务运行容器:
    docker run
    --restart=always  #指定容器停止后的重启策略
    --log-opt max-size=100m #设置单个日志文件的最大大小。
    --log-opt max-file=2 #设置保留的日志文件的最大数量。
    -p 6379:6379 #指定容器暴露的端口
    --name redis #指定容器名字,后续可以通过名字进行容器管理
    -v /etc/redis/redis.conf :/etc/redis/redis.conf #给容器挂载存储卷【注】前面是宿主机目录
    -v /data:/data #给容器挂载存储卷,挂载到容器的某个目录
    -d redis:6.2.3 redis-server /etc/redis/redis.conf #加载外部自定义配置启动redis容器
    --appendonly yes # 在容器执行redis-server启动命令,并打开redis持久化配置
    连接容器

    --requirepass Redis#567890 ???
    亲测有效:
    docker run --restart=always --log-opt max-size=100m --log-opt max-file=2 -p 6379:6379 --name redis -v /etc/redis/redis.conf:/etc/redis/redis.conf -v /data:/data -d redis:6.2.3 /usr/local/bin/redis-server /etc/redis/redis.conf --appendonly yes --requirepass Redis#567890
    

    磨嘉国-备份:
    docker run --restart=always --log-opt max-size=100m --log-opt max-file=2 -p 6379:6379 --name redis -v /data/app/prj/redis/conf/redis.conf:/etc/redis/redis.conf -v /data/app/prj/redis/data:/data -d redis:6.2.3 redis-server /etc/redis/redis.conf --appendonly yes --requirepass Redis#567890
  8. docker ps:列出启动容器
  9. docker ps -a: 列出所有的运行过的容器
  10. 工具连接,测试(crud)成功
  11. 错误1:docker中启动redis,报错:Fatal error, cant open config file_fatal error, can't open config file
  12. 错误2:Warning: Could not create server TCP listening socket ::1:6379: bind: Cannot assign requested address:bind 0.0.0.0


bind 0.0.0.0
ignore-warnings ARM64-COW-BUG

(6)nacos-server 2.0.4(docker)

亲测有效:2.0.3,如下图

亲测有效:2.0.4,如下图

参考一:docker拉取arm版本nacos并运行  如何拉取特定架构amd64、arm64、aarch64的容器镜像

//第一种 找不到自动拉取
docker run --name hello-nacos -e MODE=standalone -p 8848:8848 -d zill057/nacos-server-apple-silicon:2.0.3

//第二种先拉取再运行
docker pull zhusaidong/nacos-server-m1:2.0.3
docker run --name nacos -e MODE=standalone -e JVM_XMS=512m -e JVM_XMX=512m -e JVM_XMN=256m -p 8848:8848 -p 9848:9848 -d zhusaidong/nacos-server-m1:2.0.3

参考二:ARM下不行 

docker pull nacos/nacos-server:先拉取最新的nacos

docker run

-it

-d #指定容器运行于前台还是后台,默认为false

-p 8848:8848 #指定容器暴露的端口

-p 9848:9848 #指定容器暴露的端口

--env MODE=standalone #通过env语法设置了一个名为MODE的环境变量,并将其值设置为standalone

-e TZ=Asia/Shanghai #配置信息

--name nacos #容器名称 

nacos/nacos-server:latest:启动最新版本

无效:参考:华为云服务器下 Docker 安装 Nacos最新版并配置数据库

# 先拉取最新的nacos
docker pull nacos/nacos-server

# 运行容器
docker run -it -d -p 8848:8848 -p 9848:9848 --env MODE=standalone --restart=always --privileged=true -e TZ=Asia/Shanghai --name nacos nacos/nacos-server:latest

备份-磨嘉国

docker run -it -d -p 8848:8848 -p 9848:9848 --env MODE=standalone -e TZ=Asia/Shanghai --name nacos nacos/nacos-server:latest

(7)nginx laster(docker)

docker run

--name nginx #容器名称

-v /etc/nginx/nginx.conf:/etc/nginx/nginx.conf #给容器挂载存储卷录

-v /etc/nginx/default.conf:/etc/nginx/conf.d/default.con f#给容器挂载存储卷

-v /etc/nginx/picture:/usr/share/nginx/html/picture #给容器挂载存储卷,挂载到容器的某个目录

-p 9899:9899 #指定容器暴露的端口

-d nginx:latest #安装最新的nginx

报" 500循环 ":再加一个 -v 前端存放的路径:/usr/share/nginx/html/dist

报" 403权限不足 ":给dist目录(及子目录和文件 )777权限,chmod -R 777 dist

亲测有效:

docker run --name nginx -v /etc/nginx/nginx.conf:/etc/nginx/nginx.conf -v /etc/nginx/default.conf:/etc/nginx/conf.d/default.conf -v /etc/nginx/picture:/usr/share/nginx/html/picture -v /etc/nginx/dist:/usr/share/nginx/html/dist -p 9899:9899 -d nginx:latest

磨嘉国-备份: 

docker run --name prjnginx -v /data/app/prj/nginx/nginx.conf:/etc/nginx/nginx.conf -v /data/app/prj/nginx/default.conf:/etc/nginx/conf.d/default.conf -v /data/app/prj/picture:/usr/share/nginx/html/picture -p 9899:9899 -d nginx:latest

nginx.conf

worker_processes  1;

events {
    #user 1024;
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;

    server {
        listen       9899;
        server_name  173.51.12.37;
	charset utf-8;
	client_max_body_size 15m;

	location / {
            root   /usr/share/nginx/html/dist;
            try_files $uri $uri/ /index.html;
            index  index.html index.htm;
            error_page 405 =200 http://$host$request_uri;
        }
        
        location /con/ {
                       proxy_set_header Host $http_host;
                        proxy_set_header X-Real-IP $remote_addr;
                        proxy_set_header REMOTE-HOST $remote_addr;
                        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                        proxy_pass http://173.51.12.37:9900/;
        }
	
        location /dev-api/{
  	proxy_set_header Host $http_host;
	proxy_set_header X-Real-IP $remote_addr;
	proxy_set_header REMOTE-HOST $remote_addr;
	proxy_set_header X-Forwarded-For &proxy_add_x_forwarded_for;
	proxy_pass http://173.51.12.37:9900/;
        }
	
	location /statics{
		alias /usr/share/nginx/html/picture;
		autoindex on;
	}
	


        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}

default.conf

server {
    listen       9899;
    listen  [::]:9899;
    server_name  localhost;

    #access_log  /var/log/nginx/host.access.log  main;

    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
    }

    #error_page  404              /404.html;

    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }

    # proxy the PHP scripts to Apache listening on 127.0.0.1:80
    #
    #location ~ \.php$ {
    #    proxy_pass   http://127.0.0.1;
    #}

    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
    #
    #location ~ \.php$ {
    #    root           html;
    #    fastcgi_pass   127.0.0.1:9000;
    #    fastcgi_index  index.php;
    #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
    #    include        fastcgi_params;
    #}

    # deny access to .htaccess files, if Apache's document root
    # concurs with nginx's one
    #
    #location ~ /\.ht {
    #    deny  all;
    #}
}

(8).jar文件启动命令

nohup java 

-jar #是Java命令的一个选项,用于指定要执行的Java应用程序是一个打包成可执行JAR文件的应用程序。通过使用-jar选项,你无需手动指定要执行的主类,而是让JVM自动从JAR文件的清单中读取。

-server #Java命令的一个选项,用于指定以服务器模式运行Java虚拟机(JVM)。

-Xms1024m  #设置Java堆的最大内存大小

-Xmx1024m #设置Java堆的初始内存大小

-XX:NewRatio=15 #Java虚拟机(JVM)的一个参数,用于设置新生代与老年代内存大小的比例。

-XX:SurvivorRatio=8 #Java虚拟机的一个参数,用于设置 Eden区与 Survivor区内存大小的比例。

-Duser.timezone=GMT+8 #Java命令的一个系统属性选项,用于设置Java应用程序的默认时区。

ruoyi-gateway.jar > gateway.log 2>&1 #将Java程序的标准输出和标准错误都写入到gateway.log文件中

&   #后台运行

nohup java -jar -server -Xms1024m  -Xmx1024m -XX:NewRatio=15 -XX:SurvivorRatio=8 -Duser.timezone=GMT+8 ruoyi-gateway.jar > gateway.log 2>&1 &  

(9)前端部署

  1. vue.config.js:修改访问IP
  2. 前端运行:若依官网
    # 进入项目目录
    cd ruoyi-ui
    
    # 安装依赖
    npm install
    
    # 强烈建议不要用直接使用 cnpm 安装,会有各种诡异的 bug,可以通过重新指定 registry 来解决 npm 安装速度慢的问题。
    npm install --registry=https://registry.npmmirror.com
    
    # 本地开发 启动项目
    npm run dev
  3. 前端打包:npm run build:prod

(9)后端部署

  1. nohup java -jar -server -Xms1024m  -Xmx1024m -XX:NewRatio=15 -XX:SurvivorRatio=8 -Duser.timezone=GMT+8 ruoyi-gateway.jar > gateway.log 2>&1 &  

3 环境搭建 —— 视频平台

(1)安装依赖环境

  1. redis   docker安装同上   RedisDesktopManager   6.2.3

  2. mysql 安装:arm docker mysql5.7 亲测有效 ARM64 docker mysql 2

  3. yum install jdk1.8       java -version   1.8.0_352

  4. yum install maven      mvn -v             3.5.4(可省略上一步,因安装maven时会帮安装jdk)

  5. yum install git            git --version     2.27.0

  6. yum install nodejs      node -v           v12.22.11

  7. yum install npm          npm -v            6.14.16

(2)编译运行 wvp-GB-pro

  1. mkdir wvp:创建放源码的目录
  2. git clone https://gitee.com/pan648540858/wvp-GB28181-pro.git:下载源码
  3. 编译静态页面
    1. cd wvp-GB28181-pro/web_src/
    2. npm --registry=https://registry.npm.taobao.org install
    3. npm run build
    4. 编译如果报错, 一般都是网络问题, 导致的依赖包下载失败
      编译完成后在src/main/resources下出现static目录
  4. 打包项目, 生成可执行jar
    1. cd wvp-GB28181-pro​
    2. mvn package
    3. 编译如果报错, 一般都是网络问题, 导致的依赖包下载失败
      编译完成后在target目录下出现wvp-pro-x.x-xxxxxxxx.jar

4 修改源

(1)基础知识

  • 在Linux中,“源”指的是软件包的来源或存储库。
  • 软件包管理器(如apt、yum、dnf等)从“ 源 ”那里获取软件包。

(2)案例分析1:wsl ubuntu上部署视频平台所必需的wvp-pro-assist(云端录像)使用科大源

(3)案例分析2:华为老马(鲲鹏比赛)

华为老马:

     @小波Transformers 你先按照这个操作,不行我再接手,我可能要到明天 了    

      https://bbs.huaweicloud.com/forum/thread-98091-1-1.html

华为老马最终:yum 源得了,我跑一下脚本看看

华为老马参考:

openEuler 20.03 LTS
# 执行以下命令
# 不想下载的话,用这个命令直接写repo吧
cd /etc/yum.repos.d/
sudo curl -L -O https://mirror.iscas.ac.cn/mirror/openEuler-20.03-LTS-os.repo
sudo dnf makecache


#添加 OS 软件源
openEuler 20.03 LTS SP1
#执行以下命令
cd /etc/yum.repos.d/
sudo curl -L -O https://mirror.iscas.ac.cn/mirror/openEuler-20.03-LTS-SP1-os.repo
sudo dnf makecache
openEuler 20.03 LTS
#执行以下命令
cd /etc/yum.repos.d/
sudo curl -L -O https://mirror.iscas.ac.cn/mirror/openEuler-20.03-LTS-os.repo
sudo dnf makecache

参考:

在华为云openEuler安装docker ce出错_迁移调优实践_鲲鹏_华为云论坛 (huaweicloud.com)

[技术干货] 配置OpenEuler的网络yum源_华为云论坛

(4)案例分析3:华为老马

老马:
我通过了你的朋友验证请求,现在我们可以开始聊天了

斯蒂芬的本质欲望:

斯蒂芬的本质欲望:
哥,这个怎么解决?

斯蒂芬的本质欲望:

斯蒂芬的本质欲望:

老马:
换个yum源看看

斯蒂芬的本质欲望:

斯蒂芬的本质欲望:
按照这个文档跑了,不行:https://bbs.huaweicloud.com/forum/thread-98091-1-1.html

斯蒂芬的本质欲望:

老马:
手动配置一下,应该是下载有问题

老马:
cat openEuler.repo看看

斯蒂芬的本质欲望:

老马:
对呀,这个文件没得

斯蒂芬的本质欲望:
去哪里下?

老马:
https://forum.openeuler.org/t/topic/768/8

斯蒂芬的本质欲望:
放到刚刚那个位置哦

老马:

老马:
建一个openEuler.repo  复制这个内容进来

斯蒂芬的本质欲望:
是在这个目录吗:/etc/yum.repos.d

老马:
对,在这个目录下

斯蒂芬的本质欲望:

斯蒂芬的本质欲望:

斯蒂芬的本质欲望:
安装不了docker
成功,OK【自己,最后改成】【牙:或换成清华大学的源,像中科大、清华的源都是比较稳定的】

5 OpenEuler开放端口

最近使用 OpenEuler 部署项目,发现防火墙放通端口的方法找不到,因此在这里记录:

[root@localhost Porting-advisor_2.5.RC1_linux-x86-64]# firewall-cmd --query-port=8084/tcp --permanent
no
[root@localhost Porting-advisor_2.5.RC1_linux-x86-64]# firewall-cmd --add-port=8084/tcp --permanent
success
[root@localhost Porting-advisor_2.5.RC1_linux-x86-64]# firewall-cmd --reload
success
[root@localhost Porting-advisor_2.5.RC1_linux-x86-64]# firewall-cmd --query-port=8084/tcp --permanent
yes

OpenEuler 防火墙放通端口 (以 8084 为例)-阿里云开发者社区 (aliyun.com)

一 devkit

1 业务:不同环境下的开始、测试、部署、迁移、监控项目

2 需求:x86服务器、x86处理器、复杂指令集迁移到鲲鹏服务器、鲲鹏处理器、简洁指令集。调试调优。

3 解决方案:

(1)功能“集”:

  1. 开发
    1. 代码迁移工具
    2. 鲲鹏开发框架
    3. 高效迁移,极简开发
  2. 编译调试

    1. 编译调试插件

    2. 鲲鹏亲和性能更高

  3. 编译调试

    1. 编译调试插件

    2. 鲲鹏亲和性能更高

  4. 调优&诊断

    1. 性能分析工具

    2. 全面分析,精准诊断

(2)“神”冰箱:鲲鹏一站式全流程开发套件devkit 

4 完成学习

(1)思想、思路、体系组织,原理,流程:一站式开发套件

(2)重:迁移:扫描快、检出全、指导精、构建易

  1. 分析扫描
    1. 知道迁移工作的工作量(时间)
    2. 多少文件需要修改
    3. 需要哪些依赖库
  2. 源代码迁移
    1. 可以对常用的语言进行快速扫描
    2. 针对某一语言,在两个不同的指令集架构上的差异点给扫描出来
    3. 对比:
      1. devkit:提供修改和优化建议,甚至一键替换
      2. 从工:差异找不全,找出来 也不知道怎么改
    4. 剩下的就是把代码进行编译,就可以把项目变成适配鲲鹏服务器的软件了。
  3. 软件包重构:针对于软件包模式的
    1. 扫描x86下的依赖包(如rpm包、jar包)
    2. 点击一键重构,可以把x86下的包,修改成适配鲲鹏的包
    3. 拿到修改后的包,就可以拿到鲲鹏服务器上安装并把项目跑来了呀。
  4. 专项软件迁移:针对一些专项项目(大数据、web、跨性能计算软件等类型项目)
    1. 社区下载包
    2. 基于鲲鹏模式进行一键盘编译、迁移,得到一个适配鲲鹏服务器的包

(3)重:加速库:"零"开发、高性能,平均提供10%+

  1. 切换到鲲鹏服务器(ARM、简单指令集)后,有一引起手段可以立即快速提高软件的性能。
  2. 鲲鹏加速库,针对了一些常用的包、库、软件进行无偿加速。
  3. 使用方法:使用鲲鹏加速库等以后,可以立即快速提高软件的性能。

(4)重:编译:在鲲鹏平台上翻译出性能更佳的机器指令

  1. 3种编译器,确保在鲲鹏上有很好的性能效果
  2. 毕生编译器:LLVM
  3. 毕异JDK:基于open jdk
  4. 鲲鹏GCC:GCC开发

(5)重:调优(性能分析):精准分析、全面调优,软硬件融合释放最佳性能

  1. 像上面的“加速库、编译器”,就是加入相应的工具(库)就马上有效果了。
  2. 而“调优”则是动态来分析和提升软硬件性能的工具。
  3. 系统性能优化:收集处理器、硬件的性能指标。图形化。优化建议。3大模块8个功能。
  4. JAVA性能优化:java虚拟机调优(GC、堆、线程锁)。

(6)纲:ExaGear:低成本完成x86无源码应用的快速迁移。

  1. 无源码
  2. 老版本的软件,找不到源码。 

5 Devkit亮点:助力开发者高效完成应用迁移与调优

(1)入门简单:不改变开发者习惯,快速上手。两种模式。

  1. 两种模式:
    1. IDE模式。装插件即可使用所有功能。
    2. web浏览器模式。套件部署在自己服务端,用户可以通过浏览器来访问服务器地址。通过界面操作,使用所有功能。

(2)自动化:迁移内容自动识别,汇编代码自动翻译

  

(3)高效:代码修改建议自动生成,开发效率倍增

(4)便捷:(IDE)远程调测,提供更便捷的调测能力

  1.  IDE+插件使用所有功能、完成所有工作
    1. 编码、上传、编译、调测

(5)可视:全场景性能分析可视,性能瓶颈一目了然、调优尽在掌握

6 DevKit案例

(1)基于DevKit打造性能最优的MSP平台

(2)基于鲲鹏DevKit提升气象预测性能150%

7 Devkit使用手册

(1)获取鲲鹏Devkit开发套件、帮助资料获取方式

  1. 社区:https://www.hikunpeng.com/developer/devkit
  2. 论坛:https://bbs.huaweicloud.com/forum/forum-928-1.html
    1. 自由发贴
    2. 提问,会有华为开发人员跟踪,并保证在两小时内有回复
    3. 以前人,经验总结、优秀事件
  3. 步骤
    1. 鲲鹏社区-官网丨凝心聚力 共创行业新价值
      1. 开发者
        1. 第1步:鲲鹏开发套件DevKit
          1. 每个工具都有下载链接
          2. 每个工具都有详细的安装教程
          3. 最佳实践,可用来学习
      2. 学习
        1. 在线课程,快速学习如何使用
      3. 文档
        1. 各个工具的文档都有,能够提供更详细的工具使用说明
    2. 鲲鹏DevKit_鲲鹏_开发者论坛-华为云论坛
      1. 上面已经发布有上千个贴子了
      2. 有很多优化的案例、实践
      3. 提问。会快速回复解答。

(2)迁移工具:VS Code版本

0、第零步:有Demo代码

1、第一步: 扫描。右击(code菜单)对代码进行代码扫描,看看代码有没有问题。如果有问题,根据建议把代码修改好,然后经过编译、调试就可以放到鲲鹏服务器上跑起来了。

(1)点击“新建源码分析任务”:

 (2)登录代码迁移工具 :

(3)点击“开始分析” :

(4)扫描结果展示(如下,代码有一些问题,修改过后才能在鲲鹏上跑起来)

  1.  “与架构相关的依赖文件”:
    1. x86架构下的依赖库,修改成arm架构下的依赖库。下载链接。下载、安装即可。
  2. “需要迁移的源码文件”:
    1. 代码中不适配鲲鹏环境的一些代码语句(点)
    2. 点击那些“点”,跳到具体的代码行
    3. 根据建议进行修改,如依赖华为自己的高性能库(GitHub - kunpengcompute/AvxToNeon: Encapsulate the frequently used AVX instructions as independent modules to reduce repeated development workload.
    4. Quick fix:快速修复
      1. 替换成建议代码
      2. 在本文件中应用该类修改

(3)加速工具:VS Code版本

  

  1. 推荐加速库
    1. 函数名:可以使用鲲鹏加速库中的函数进行代替
      1. 鲲鹏加速库。下载链接。下载。

(3)性能工具:VS code模式

(4)性能工具:web模式

 

  1. 把性能工具安装在鲲鹏服务器端
  2. ip port登录 
  3. 点击“系统性能分析”
    1. 有案例参考链接
    2. 指导文档链接
    3. 向专家求助
    4. 步骤:
      1. 创建一个工程
      2. 对工程创建一系列的任务
  4. 点击“java性能分析”
    1. cpu
    2. GC
    3. 进程
    4. 线程
    5. 内存

8 经分二期案例

(1)第一步:环境部署

Mysql :root / MY_sql#567.890
Redis:Re_Dis#567.890
Minio:jfadmin / Jf_Admin#567.890
nginx:/usr/local/nginx/
openJdk/jdk8jdk8

(2)(不)第二步:idea + 鲲鹏插件

        idea怎么安装插件

       安装idea插件: 

(3)第三步:迁移(https://173.28.11.4:8085/porting/#/login
 ,portadmin,123456@a)

  1. 安装web模式下的kunpeng devkit迁移工具:安装-安装鲲鹏代码迁移工具-用户指南-鲲鹏代码迁移工具-鲲鹏开发套件-文档首页-鲲鹏社区 (hikunpeng.com)
  2. 扒下23服务器上经分二期的jar包:bas-admin.jar
  3. 本地PC访问web模式下的kunpeng devkit迁移工具
    1. 软件迁移评估。点击“开始分析”。生成报告。对JAR包做扫描分析-扫描分析jansi-native-1.0版本JAR包-实践1:扫描分析jansi-native-1.0-最佳实践-鲲鹏代码迁移工具-鲲鹏开发套件-文档首页-鲲鹏社区 (hikunpeng.com)
    2. 源码迁移。

 (4)第四步:性能分析

  1. 安装web模式下的kunpeng devkit性能分析工具:安装-安装-用户指南-鲲鹏性能分析工具-鲲鹏开发套件-文档首页-鲲鹏社区 (hikunpeng.com)

(5)第五步:兼容性测试工具

  1. 先把在线报告那个测试插件安装上去先:工具安装步骤_鲲鹏通用_兼容性测试工具用户指南(基于TaiShan服务器)_环境配置和工具安装_华为云 (huaweicloud.com)

# 待测试应用软件进程名称,多个应用名称以逗号隔开。
# 可通过ps或者docker top 命令CMD所在列查找后台进程名称, Kubernetes集群环境下填写Pod名称。
application_names=bas-admin.jar
# 待测试应用软件启动命令,多个应用的启动命令以逗号隔开。
start_app_commands=nohup java -jar /home/bas/bas-admin.jar &
# 待测试应用软件停止命令,多个应用的停止命令以逗号隔开。
stop_app_commands=/home/bas/jf.sh stop
# 被测应用软件的压力测试工具启动命令。
start_performance_scripts=
# Kubernetes集群填写"Y"。其他环境可置空。
kubernetes_env=
 

(6)第六步:毕晟jdk

openjdk8:vi /etc/profile

export PATH=/opt/aarch64/compiler/gcc-10.3.1-2022.06-aarch64-linux/bin:$PATH
export INCLUDE=/opt/aarch64/compiler/gcc-10.3.1-2022.06-aarch64-linux/include:$INCLUDE
export LD_LIBRARY_PATH=/opt/aarch64/compiler/gcc-10.3.1-2022.06-aarch64-linux/lib64:$LD_LIBRARY_PATH

毕晟jdk:vi /etc/profile

 $ cd /path/to/jdk
 $ export JAVA_HOME=`pwd`
 $ export PATH=$JAVA_HOME/bin:$PATH
 $ export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

使配置文件立即生效

source /etc/profile

(7)测试报告在线生成平台

注册华为ID:

华为鲲鹏创新中心旗舰店 (huawei.com)

二 boostkit

三 参考

        鲲鹏开发套件插件工具(IntelliJ)(旧文档)

        鲲鹏DevKit:鲲鹏平台代码迁移利器|QCon_文化 & 方法_(访问)

        鲲鹏开发套件_搜索_哔哩哔哩-bilibili(B站视频)

        沙箱实验:通过鲲鹏开发套件实现Java代码迁移_哔哩哔哩_bilibili(B站视频)

        鲲鹏DevKit:从“应用迁移”走向“原生开发”,开发效率提升50% (各个阶段)

        代码迁移工具关键特性与实战演示   ()案例演示、提供下载链接代码迁移工具关键特性与实战演示   ()

        鲲鹏代码迁移工具基础知识 (迁移:输入、分析处理、输出)

        体验代码迁移工具的极致效率(语言支持跨平台,运行环境OK即可)

四 其它

  1. 获取linux操作系统详细信息:
    1. cat /etc/os-release

    2. cat /etc/redhat-release

  2. 查看CPU架构:arch

  3. 项目经理

    1. 看视频教学,快速看一遍

    2. 下工具

    3. 对照文档操作

    4. 自己项目的代码  或 官网提供的demo代码,进行操作

    5. 有问题,在论坛发贴,必定快速响应

  4. 华为云账号:p18878791425 123456@a

  5. web模式迁移工具:https://173.28.11.4:8084/porting/#/login  portadmin 123456@a

  6. web模式性能分析工具:https://173.28.11.4:8086/user-management/#/login tunadmin 123456@a


集群与架构:(1)逻辑 (2)物理(3)11
自己理解:
关:【关联、对比】
疑:【疑问,如预习、工作疑问】
重:【实现技术,工具】
难:【感想、体会、领悟】   【总结、归纳、规律】
大道至简:提纲(系统化、宽度、至少是视频标题)图表短
 

更多推荐