麒麟系统arm架构上部署开发环境。

今天早早来到公司,这也是再公司搬址前在老地址待得最后一天,昨天把前面重要的一个任务也完成的差不多了,遂现在记录一下。

收到任务,要将公司的开发环境和生产环境配置在银河麒麟v10服务器上。这个服务器是向华为申请得到的,是arm架构,与项目中使用的x86架构不同,所以安装的时候也算是遇到了很多的坑。

首先如果我想要连接到那个服务器进行一系列的操作,我就必须得先提前连接一下VPN,这让我又学习了一下VPN的知识。

VPN

VPN是虚拟专用网,当我们的主机IP连接上VPN之后(VPN为了确保安全性,往往需要提供身份验证才能进行连接。),我们在公网上的IP地址也就变成了VPN转换后的IP地址,这样就可以访问到目标只能由特定IP地址访问到的资源了。连接成功后,你的真实IP地址会被VPN服务器的IP地址所替换。当你访问互联网时,外部服务器只会看到VPN服务器的IP地址,而看不到你的真实IP地址。这种IP地址替换可以让你访问只有特定IP地址才能访问的资源。例如,公司内部的某些系统可能只允许来自特定IP地址的访问,通过VPN,你可以获得该特定IP地址的权限,从而访问这些资源。

学习了VPN之后,我又感觉它和我之前学习408的时候学到的NAT网络地址转换很像,于是我又去学习了一下NAT以区分他们两个。

NAT

NAT是网络地址转换。在实际应用中,NAT主要用于私有网络访问外部网络或外部网络访问私有网络的情况。当所有的内网ip要访问外网时,通过NAT转换后,所有的内网ip地址都会变成一个公共的外网ip地址。当外网地址要访问内部网络的时候,外网ip在经过NAT转换之后,会变成NAT转换器的IP地址以访问内部网络。

具体来说,NAT有以下两个好处:

  1. 通过使用少量的公有IP地址代表多数的私有IP地址,缓解了可用IP地址空间枯竭的速度。
  2. NAT可以隐藏私有网络,达到保护私有网络的目的。

关于二者的区别:

举个形象生动的例子:

  • VPN:像是一条安全的地下通道,你通过这条通道从你的家(电脑)到达公司的大楼(公司网络),通道中的所有信息都是加密的,确保没有人能在中途窥视你的数据。

  • NAT:像是一个中转站,所有的包裹(数据包)都会在这里被重新贴上标签(更换IP地址),然后再发送到目的地。中转站的作用是让多个包裹可以通过同一个地址(公共IP)被送出,同时也可以隐藏包裹的真实来源(内部网络结构)。

连接目标服务器

使用WindTerm软件新建会话,使用IP地址和用户名密码连接到的目标服务器,这样就可以在目标服务器上进行一系列操作了。

在使用了UniVPN这个软件并使用管理员给我提供的方式连接好了VPN之后,我就可以连接到目标鲲鹏服务器了。在进入服务器后,我输入命令uname -a查看到了关于本操作系统的一些基础信息。

之后我总共需要在改服务器上搭建以下组件,并设置好开发环境的配置文件。

Docker

首先我在该arm架构的服务器上要先安装Docker,虽然并不知道Docker是干嘛用的,并且也只是模模糊糊地知道一些镜像和容器地作用。但是我还是先安装了。

使用了下面这篇博客将Docker成功安装好。

https://www.cnblogs.com/haolb123/p/16506695.html

之后就要在Docker部署开发环境了。

但是紧接着在使用Docker pull的过程中,发现所有的国内所有的镜像都已经被封禁掉了,根本拉去不到镜像到本地,并且之前在x86架构下跑的开发环境所用的镜像也都是x86架构,无法在arm架构上运行(在经历了一番docker export 打成jar包,在上传到目标服务器上进行docker load之后,发现确实无法使用。)

于是Docker算是白安装了,接下来要在物理机上直接配置环境,不使用Docker这个工具了。

MySQL

项目需要使用到数据库也就是MySQL数据库,我根据下面这篇博客在服务器上安装好了arm架构的MySQL5.7版本。
https://blog.csdn.net/wochunyang/article/details/132883654

文章中有个疏漏,就是在执行

mysql -u root -h 127.0.0.1  -p

命令之后,需要输入密码,而这是第一次登录mysql,初始密码在初始化的时候产生的日志里面。

这样MySQL也是安装好了。

Nacos

下一步是安装Nacos。由于Nacos执行脚本里面依赖JAVA环境。所以要先配置好JAVA环境。我使用的JAVA是,bisheng-jdk1.8.0_412。

我在/etc/profile文件中,添加如下脚本。这样就可以修改全局的java环境。

之后在nacos的执行脚本中看好对应有关java的配置是否正确,如果正确即不需要修改,如果不正确就修改为所需要的java路径。

nacos的执行脚本如下所示:

其中有关java环境的配置。

之后即可使用命令sh startup.sh -m standalone启动nacos。后面加个 -m standalone是设置为单机模式启动,而非集群模式。

我根据以下博客将nacos设置成了开机自启。

nacos配置开机自启_nacos设置开机自启-CSDN博客

Seata

在这之后就是Seata的安装和配置。

seata安装在下面这个目录下。

进入bin目录下,可以看到关于seata的一些脚本。

其中start_seata-demo.sh脚本中的内容是下图所示,它用来执行同级的seata-server.sh脚本并指定了端口号和主机地址。

而seata-server.sh脚本才是执行seata的脚本。其中内容是

#!/bin/sh
# ----------------------------------------------------------------------------
#  Copyright 2001-2006 The Apache Software Foundation.
#
#  Licensed under the Apache License, Version 2.0 (the "License");
#  you may not use this file except in compliance with the License.
#  You may obtain a copy of the License at
#
#       http://www.apache.org/licenses/LICENSE-2.0
#
#  Unless required by applicable law or agreed to in writing, software
#  distributed under the License is distributed on an "AS IS" BASIS,
#  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
#  See the License for the specific language governing permissions and
#  limitations under the License.
# ----------------------------------------------------------------------------
#
#   Copyright (c) 2001-2006 The Apache Software Foundation.  All rights
#   reserved.# resolve links - $0 may be a softlink
PRG="$0"while [ -h "$PRG" ]; dols=`ls -ld "$PRG"`link=`expr "$ls" : '.*-> \(.*\)$'`if expr "$link" : '/.*' > /dev/null; thenPRG="$link"elsePRG=`dirname "$PRG"`/"$link"fi
donePRGDIR=`dirname "$PRG"`
BASEDIR=`cd "$PRGDIR/.." >/dev/null; pwd`# Reset the REPO variable. If you need to influence this use the environment setup file.
REPO=# OS specific support.  $var _must_ be set to either true or false.
cygwin=false;
darwin=false;
case "`uname`" inCYGWIN*) cygwin=true ;;Darwin*) darwin=trueif [ -z "$JAVA_VERSION" ] ; thenJAVA_VERSION="CurrentJDK"elseecho "Using Java version: $JAVA_VERSION"fiif [ -z "$JAVA_HOME" ]; thenif [ -x "/usr/libexec/java_home" ]; thenJAVA_HOME=`/usr/libexec/java_home`elseJAVA_HOME=/System/Library/Frameworks/JavaVM.framework/Versions/${JAVA_VERSION}/Homefifi       ;;
esacif [ -z "$JAVA_HOME" ] ; thenif [ -r /etc/gentoo-release ] ; thenJAVA_HOME=`java-config --jre-home`fi
fi# For Cygwin, ensure paths are in UNIX format before anything is touched
if $cygwin ; then[ -n "$JAVA_HOME" ] && JAVA_HOME=`cygpath --unix "$JAVA_HOME"`[ -n "$CLASSPATH" ] && CLASSPATH=`cygpath --path --unix "$CLASSPATH"`
fi# If a specific java binary isn't specified search for the standard 'java' binary
if [ -z "$JAVACMD" ] ; thenif [ -n "$JAVA_HOME"  ] ; thenif [ -x "$JAVA_HOME/jre/sh/java" ] ; then# IBM's JDK on AIX uses strange locations for the executablesJAVACMD="$JAVA_HOME/jre/sh/java"elseJAVACMD="$JAVA_HOME/bin/java"fielseJAVACMD=`which java`fi
fiif [ ! -x "$JAVACMD" ] ; thenecho "Error: JAVA_HOME is not defined correctly." 1>&2echo "  We cannot execute $JAVACMD" 1>&2exit 1
fiif [ -z "$REPO" ]
thenREPO="$BASEDIR"/lib
fiCLASSPATH="$BASEDIR"/conf:"$REPO"/*ENDORSED_DIR=
if [ -n "$ENDORSED_DIR" ] ; thenCLASSPATH=$BASEDIR/$ENDORSED_DIR/*:$CLASSPATH
fiif [ -n "$CLASSPATH_PREFIX" ] ; thenCLASSPATH=$CLASSPATH_PREFIX:$CLASSPATH
fi# For Cygwin, switch paths to Windows format before running java
if $cygwin; then[ -n "$CLASSPATH" ] && CLASSPATH=`cygpath --path --windows "$CLASSPATH"`[ -n "$JAVA_HOME" ] && JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"`[ -n "$HOME" ] && HOME=`cygpath --path --windows "$HOME"`[ -n "$BASEDIR" ] && BASEDIR=`cygpath --path --windows "$BASEDIR"`[ -n "$REPO" ] && REPO=`cygpath --path --windows "$REPO"`
fiexec "$JAVACMD" $JAVA_OPTS -server -Xmx2048m -Xms2048m -Xmn1024m -Xss512k -XX:SurvivorRatio=10 -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=256m -XX:MaxDirectMemorySize=1024m -XX:-OmitStackTraceInFastThrow -XX:-UseAdaptiveSizePolicy -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath="$BASEDIR"/logs/java_heapdump.hprof -XX:+DisableExplicitGC -XX:+CMSParallelRemarkEnabled -XX:+UseCMSInitiatingOccupancyOnly -XX:CMSInitiatingOccupancyFraction=75 -Xloggc:"$BASEDIR"/logs/seata_gc.log -verbose:gc -Dio.netty.leakDetectionLevel=advanced -Dlogback.color.disable-for-bat=true \-classpath "$CLASSPATH" \-Dapp.name="seata-server" \-Dapp.pid="$$" \-Dapp.repo="$REPO" \-Dapp.home="$BASEDIR" \-Dbasedir="$BASEDIR" \io.seata.server.Server \"$@"

虽然我也看不懂。但内容就是这些。seata启动依赖数据库和nacos的启动,所以如果要将seata设置为开机自启的服务,得再seata.service中添加好让它的启动再nacos和数据库的启动之后。

Minio

我也不知道minio是干嘛用的,所以按照下面博客安装好了并且设置了开机自启后也没出现什么问题,比较简单。

单机部署MinIo并设置开机自启_minio开机自启动-CSDN博客

开机自启

在整个配置的过程中,我学会了如何将一个服务设置为开机自启服务。

网上一共有三种设置linux服务为开机自启的方式,在这里我采用其中一种。

使用Systemd添加开机自启动服务

systemd 是系统启动和服务器守护进程管理器,负责在系统启动或运行时,激活系统资源,服务器进程和其它进程。

对于Systemd详细信息,可以查看下面内容:

Fedora wiki: Systemd/zh-cn:https://fedoraproject.org/wiki/Systemd/zh-cn

systemd.service 官方手册:https://fedoraproject.org/wiki/Systemd/zh-cn

systemd.service 中文翻译:http://www.jinbuguo.com/systemd/systemd.service.html#

使用写出所需要的服务app的配置文件,注意要根据具体服务启动的要求写出来。

# 启动顺序与依赖关系
[Unit]
Description=My app Startup Test Service
After=network.target
# 启动行为
[Service]
Type=simple
WorkingDirectory=/home/ubuntu/app/
ExecStart=/home/ubuntu/app/app.bin
Restart=always
RestartSec=0s
KillMode=mixed
# 定义如何安装配置文件
[Install]
WantedBy=multi-user.target
  1. 首先将 app.service 文件复制到 /etc/systemd/system/ 或者 /usr/lib/systemd/system/(如果在 /usr/lib/systemd/ 下没有system目录,则手动创建一个即可)。
  2. 添加或修改配置文件后,需要重新加载,使用指令:sudo systemctl daemon-reload,sudo 可省,会自动弹出输出密码的对话框。
  3. 设置允许自启动,使用指令:sudo systemctl enable app.service(后缀.service可以省略)

至此,自定义的应用程序可以在下次开机的时候自动启动了,

常用的一些指令如下所示。

  • 启动:sudo systemctl start app.service
  • 激活开机启动:sudo systemctl enable app.service
  • 取消开机启动:sudo systemctl disable app.service
  • 启动服务:sudo systemctl start app.service
  • 停止服务:sudo systemctl stop app.service
  • 重启服务:sudo systemctl restart app.service
  • 重载服务:sudo systemctl daemon-reload
  • 察看运行情况:sudo systemctl status app.service
  • 查看所有已启动的服务:sudo systemctl list-units --type=service

注意点

后来在的过程中遇到了很多问题,例如就遇到了内存不足的问题。使用free -m可以以mb的形式查看当前的内存使用情况。后来发现是启动的java程序太多了。每个都占了1个多g的内存,可能是因为在搭建java环境的时候下载了很多的java也开启了很多的java,后来在重启服务器之后,内存就够了。

ps命令可以查看当前的进程。kill命令可以根据pid杀掉进程。

which java可以看见java的路径。

系统配置在/etc/profile

whoami可以看当前的用户是哪个。

cat 文件路径 用于显示文件内容

chmod赋予文件权限。

ps -a | grep minio 查看所有正在运行的进程,并过滤出包含“minio”字符串的进程。

reboot用于重启。

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

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

相关文章

实战:Eureka的概念作用以及用法详解

概叙 什么是Eureka? Netflix Eureka 是一款由 Netflix 开源的基于 REST 服务的注册中心,用于提供服务发现功能。Spring Cloud Eureka 是 Spring Cloud Netflix 微服务套件的一部分,基于 Netflix Eureka 进行了二次封装,主要负责…

高性能分布式IO系统BL205 OPC UA耦合器

边缘计算是指在网络的边缘位置进行数据处理和分析,而不是将所有数据都传送到云端或中心服务器,这样可以减少延迟、降低带宽需求、提高响应速度并增强数据安全性。 钡铼BL205耦合器就内置边缘计算功能,它不依赖上位机和云平台,就能…

数据仓库实践:使用 SQL 计算材料BOM成本单价

背景 在制造业财务数据分析建设过程中,有时需要通过BOM汇总计算材料的单价,一般会有采购核价,库存成本,还有下阶材料单价按用量汇总得到的单价参与。 这些单价来源一般会根据优先级获取并在计算后作为最终的BOM 单价结果。参与财…

iOS ------ 编译链接

编译流程分析 编译可以分为四步: 预处理(Prepressing)编译(Compilation)汇编 (Assembly)链接(Linking) 预编译(Prepressing) 过程是源文件main.c和相关头文件被&#…

window11 部署llama.cpp并运行Qwen2-0.5B-Instruct-GGUF

吾名爱妃,性好静亦好动。好编程,常沉浸于代码之世界,思维纵横,力求逻辑之严密,算法之精妙。亦爱篮球,驰骋球场,尽享挥洒汗水之乐。且喜跑步,尤钟马拉松,长途奔袭&#xf…

FastAPI 学习之路(五十九)封装统一的json返回处理工具

在本篇文章之前的接口,我们每个接口异常返回的数据格式都不一样,处理起来也没有那么方便,因此我们可以封装一个统一的json。 from fastapi import status from fastapi.responses import JSONResponse, Response from typing import Unionde…

= null 和 is null;SQL中关于NULL处理的4个陷阱;三值逻辑

一、概述 1、NULL参与的所有的比较和算术运算符(>,,<,<>,<,>,,-,*,/) 结果为unknown&#xff1b; 2、unknown的逻辑运算(AND、OR、NOT&#xff09;遵循三值运算的真值表&#xff1b; 3、如果运算结果直接返回用户&#xff0c;使用NULL来标识unknown 4、如…

Go语言并发编程-Channel通信_2

Channel通信 Channel概述 不要通过共享内存的方式进行通信&#xff0c;而是应该通过通信的方式共享内存 这是Go语言最核心的设计模式之一。 在很多主流的编程语言中&#xff0c;多个线程传递数据的方式一般都是共享内存&#xff0c;而Go语言中多Goroutine通信的主要方案是Cha…

JavaEE:Lombok工具包的使用以及EditStarter插件的安装

Lombok是一个Java工具库&#xff0c;通过添加注解的方式&#xff0c;简化Java的开发。 目录 1、引入依赖 2、使用 3、原理解释 4、更多使用 5、更快捷的引入依赖 1、引入依赖 <dependency><groupId>org.projectlombok</groupId><artifactId>lomb…

pdf提取其中一页怎么操作?提取PDF其中一页的方法

pdf提取其中一页怎么操作&#xff1f;需要从一个PDF文件中提取特定页码的操作通常是在处理文档时常见的需求。这种操作允许用户选择性地获取所需的信息&#xff0c;而不必操作整个文档。通过选择性提取页面&#xff0c;你可以更高效地管理和利用PDF文件的内容&#xff0c;无论是…

Linux编辑器——vim的使用

目录 vim的基本概念 命令模式 底行模式 插入模式 注释和取消注释 普通用户进行sudo提权 vim配置问题 vim的基本概念 一般使用的vim有三种模式&#xff1a; 命令模式 底行模式和插入模式&#xff0c;可以进行转换&#xff1b; vim filename 打开vim&#xff0c;进入的…

ffmpeg ffplay.c 源码分析

1 ffplay.c的意义 ffplay.c是FFmpeg源码⾃带的播放器&#xff0c;调⽤FFmpeg和SDL API实现⼀个⾮常有⽤的播放器。 例如哔哩哔哩著名开源项⽬ijkplayer也是基于ffplay.c进⾏⼆次开发。 ffplay实现了播放器的主体功能&#xff0c;掌握其原理对于我们独⽴开发播放器⾮常有帮助…

npm install时报错 reason: certificate has expired

在VS code中导入新项目&#xff0c;执行npm install时报错&#xff1a; npm warn old lockfile Could not fetch metadata for antv/g3.4.10 FetchError: request to https://registry.npm.taobao.org/antv%2fg failed, reason: certificate has expirednpm warn old lockfile …

UI设计中的响应式布局策略:让您的界面在各种设备上都表现出色

UI界面设计它是人与机器之间交互的媒介&#xff0c;也是客户体验的媒介&#xff08;UX&#xff09;一个组成部分。操作界面由两个主要部分组成&#xff1a;视觉设计&#xff08;即传达产品的外观和感觉&#xff09;和交互设计&#xff08;即元素功能和逻辑组织&#xff09;。用…

kubernetes Dashboard搭建 (六)

DashBoard 之前在kubernetes中完成的所有操作都是通过命令行工具kubectl完成的。其实&#xff0c;为了提供更丰富的用户体验&#xff0c;kubernetes还开发了一个基于web的用户界面&#xff08;Dashboard&#xff09; 用户可以使用Dashboard部署容器化的应用&#xff0c;还可以监…

<数据集>木材缺陷检测数据集<目标检测>

数据集格式&#xff1a;VOCYOLO格式 图片数量&#xff1a;4000张 标注数量(xml文件个数)&#xff1a;4000 标注数量(txt文件个数)&#xff1a;4000 标注类别数&#xff1a;8 标注类别名称&#xff1a;[Quartzity,Live_Knot,Marrow,resin,Dead_Knot,knot_with_crack,Knot_m…

Prometheus 监控 Java 应用 JMX Exporter

操作场景 Prometheus 社区开发了 JMX Exporter 用于导出 JVM 的监控指标&#xff0c;以便使用 Prometheus 来采集监控数据。当您的 Java 业务容器化至 Kubernetes 后&#xff0c;可通过本文了解如何使用 Prometheus 与 JMX Exporter 来监控 Java 应用。 JMX Exporter 简介 Ja…

如何在 Puppeteer 中运行无头浏览器?

什么是无头浏览器&#xff1f; 我们都知道&#xff0c;用户界面&#xff08;UI&#xff09;是任何软件中最重要的部分。因此&#xff0c;“无头浏览器”的“无头”部分意味着它们确实缺少一个关键元素&#xff0c;即图形用户界面&#xff08;GUI&#xff09;。 这意味着浏览器…

webrtc QOS方法十三(视频渲染平滑)

一、背景介绍 视频渲染时间的确定需要考虑三方面的因素&#xff1a;网络抖动、网络延时、音视频同步 网络抖动&#xff1a;视频帧在网络上传输&#xff0c;会受到网络抖动的影响&#xff0c;不能收到立刻播放&#xff0c;需要进行适当的平滑 网络延时&#xff1a;一些报文在…

docker 安装并测试(Ubuntu下)

1. 确认安装环境&#xff08;操作系统版本和 CPU 架构&#xff09; 2. 如果有旧版本的 docker 需要进行卸载 使用 docker 命令检查是否已经安装了 docker 如果 docker 已经安装&#xff0c;使用以下命令卸载&#xff1a; apt-get purge docker-ce docker-ce-cli containerd…