运维云计算SRE-第12周
1.在虚拟机安装tomcat并且部署一个服务,并且实现会话共享。

使用 Nginx 作为反向代理,结合Redisson模块来构建一个基于 Redis 会话复制的 Tomcat 集群,可以确保用户的会话信息在所有 Tomcat 实例之间共享,从而提高高可用性和负载均衡。以下是详细的步骤:
1、在ubuntu(10.0.0.10)安装nginx,设置nginx反向代理
# 使用apt包管理器安装nginx
apt -y install nginx
# 编辑nginx的主配置文件
vim /etc/nginx/nginx.conf
# 在http块中,包含/etc/nginx/conf.d/目录下的所有.conf文件,以便管理多个站点配置
http{
...
include /etc/nginx/conf.d/*.conf;
}
# 创建并编辑特定站点的配置文件
vim /apps/nginx/conf/conf.d/www.magedu.com.conf
# 定义后端服务器组magedu,包含两个服务器实例
upstream magedu {
server 10.0.0.100:8080;
server 10.0.0.101:8080;
}
# 配置一个server块,用于处理对www.magedu.org的请求
server {
listen 80; # 监听80端口(HTTP)
server_name www.magedu.org; # 指定服务器名称
listen 443 ssl; # 同时监听443端口(HTTPS)
# 指定SSL证书和密钥文件路径
ssl_certificate /apps/nginx/conf/ssl/www.magedu.com.pem;
ssl_certificate_key /apps/nginx/conf/ssl/www.magedu.com.key;
# 如果请求是通过HTTP发送的,则重定向到HTTPS
if ( $scheme = http ){
return 301 https://$server_name$request_uri;
}
# 配置location块,用于处理所有请求
location / {
proxy_pass http://magedu; # 将请求转发到后端服务器组magedu
proxy_set_header Host $http_host; # 设置请求头,将原始请求的Host字段传递给后端服务器
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # 设置请求头,将客户端IP地址传递给后端服务器
}
}
# 重新加载nginx配置,使更改生效
nginx -s reload
2、在cc-ubuntu2(10.0.0.102)安装redis,用于redisson会话共享
# 使用apt包管理器安装redis
apt -y install redis # 安装redis文件
# 编辑redis配置文件
vim /etc/redis/redis.conf # 修改redis配置文件
# 将bind配置项修改为0.0.0.0,允许所有IP地址连接redis
bind 0.0.0.0
3、cc-ubuntu0(10.0.0.100)和cc-ubuntu2(10.0.0.101)依次安装jdk和tomcat
# 编写tomcat安装脚本
vim tomcat_install.sh
#!/bin/bash
# 定义Tomcat和JDK的版本号
TOMCAT_VERSION=9.0.97
JDK_VERSION=8u391
# 定义Tomcat和JDK的安装包名称
TOMCAT_FILE="apache-tomcat-${TOMCAT_VERSION}.tar.gz"
JDK_FILE="jdk-${JDK_VERSION}-linux-x64.tar.gz"
# 定义JDK和Tomcat的安装目录
JDK_DIR="/usr/local/src"
TOMCAT_DIR="/usr/local/src"
# 获取当前目录路径
DIR=`pwd`
# 定义一个颜色输出函数,用于显示安装状态
color () {
RES_COL=60
MOVE_TO_COL="echo -en \\033[${RES_COL}G"
SETCOLOR_SUCCESS="echo -en \\033[1;32m"
SETCOLOR_FAILURE="echo -en \\033[1;31m"
SETCOLOR_WARNING="echo -en \\033[1;33m"
SETCOLOR_NORMAL="echo -en \E[0m"
echo -n "$2" && $MOVE_TO_COL
echo -n "["
if [ $1 = "success" -o $1 = "0" ] ;then
${SETCOLOR_SUCCESS}
echo -n $" OK "
elif [ $1 = "failure" -o $1 = "1" ] ;then
${SETCOLOR_FAILURE}
echo -n $"FAILED"
else
${SETCOLOR_WARNING}
echo -n $"WARNING"
fi
${SETCOLOR_NORMAL}
echo -n "]"
echo
}
# 定义安装JDK的函数
install_jdk(){
if [ ! -f "$DIR/$JDK_FILE" ];then
color 1 "$JDK_FILE 文件不存在"
exit;
elif [ -d $JDK_DIR/jdk ];then
color 1 "JDK 已经安装"
exit
else
[ -d "$JDK_DIR" ] || mkdir -pv $JDK_DIR
fi
tar xvf $DIR/$JDK_FILE -C $JDK_DIR
cd $JDK_DIR
pwd
ln -s jdk1* jdk
cat > /etc/profile.d/jdk.sh <<EOF
export JAVA_HOME=$JDK_DIR/jdk
export PATH=\$PATH:\$JAVA_HOME/bin
#export JRE_HOME=\$JAVA_HOME/jre
#export CLASSPATH=.:\$JAVA_HOME/lib/:\$JRE_HOME/lib/
EOF
. /etc/profile.d/jdk.sh
java -version && color 0 "JDK 安装完成" || { color 1 "JDK 安装失败" ; exit; }
}
# 定义安装Tomcat的函数
install_tomcat(){
if [ ! -f "$DIR/$TOMCAT_FILE" ];then
color 1 "$TOMCAT_FILE 文件不存在"
exit;
elif [ -d $TOMCAT_DIR/tomcat ];then
color 1 "TOMCAT 已经安装"
exit
else
[ -d "$TOMCAT_DIR" ] || mkdir -pv $TOMCAT_DIR
fi
tar xf $DIR/$TOMCAT_FILE -C $TOMCAT_DIR
cd $TOMCAT_DIR && ln -s apache-tomcat-*97/ tomcat
echo "PATH=$TOMCAT_DIR/tomcat/bin:"'$PATH' > /etc/profile.d/tomcat.sh
id tomcat &> /dev/null || useradd -r -s /sbin/nologin tomcat
cat > $TOMCAT_DIR/tomcat/conf/tomcat.conf <<EOF
JAVA_HOME=$JDK_DIR/jdk
EOF
chown -R tomcat.tomcat $TOMCAT_DIR/tomcat/
cat > /lib/systemd/system/tomcat.service <<EOF
[Unit]
Description=Tomcat
#After=syslog.target network.target remote-fs.target nss-lookup.target
After=syslog.target network.target
[Service]
Type=forking
EnvironmentFile=$TOMCAT_DIR/tomcat/conf/tomcat.conf
ExecStart=$TOMCAT_DIR/tomcat/bin/startup.sh
ExecStop=$TOMCAT_DIR/tomcat/bin/shutdown.sh
RestartSec=3
PrivateTmp=true
User=tomcat
Group=tomcat
[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload
systemctl enable --now tomcat.service &> /dev/null
systemctl is-active tomcat.service &> /dev/null && color 0 "TOMCAT 安装完成" || { color 1 "TOMCAT 安装失败" ; exit; }
}
# 调用安装JDK和Tomcat的函数
install_jdk
install_tomcat
# 运行安装脚本,安装tomcat
bash tomcat_install.sh
4、编辑虚拟机、redisson模块配置文件和网站资源文件,重新启动tomcat。
# 编辑Tomcat的server.xml配置文件,配置新的虚拟主机
vim /usr/local/src/tomcat/conf/server.xml
# 在<Host>标签内配置应用基础目录、自动部署等参数
<Server>
<Service>
<Engine>
...
<Host name="www.magedu.org" appBase="/data/test/webapps"
unpackWARs="true" autoDeploy="true">
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log" suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />
</Host>
</Engine>
</Service>
</Server>
# 编辑Tomcat的context.xml配置文件,配置Redis会话管理器
vim /usr/local/src/tomcat/conf/context.xml
# 在<Context>标签内添加RedissonSessionManager配置,用于管理Redis会话
<Context>
...
<Manager className="org.redisson.tomcat.RedissonSessionManager"
configPath="${catalina.base}/conf/redisson.conf"
readMode="REDIS" updateMode="DEFAULT" broadcastSessionEvents="false"
keyPrefix=""/>
</Context>
# 编辑Redisson的配置文件,配置Redis连接信息
vim /usr/local/src/tomcat/conf/redisson.conf
# 配置Redis服务器的地址、连接池大小等参数
---
singleServerConfig:
idleConnectionTimeout: 10000
connectTimeout: 10000
timeout: 3000
retryAttempts: 3
retryInterval: 1500
password: null
subscriptionsPerConnection: 5
clientName: null
address: "redis://10.0.0.102:6379"
subscriptionConnectionMinimumIdleSize: 1
subscriptionConnectionPoolSize: 50
connectionMinimumIdleSize: 24
connectionPoolSize: 64
database: 0
dnsMonitoringInterval: 5000
threads: 16
nettyThreads: 32
codec: !<org.redisson.codec.Kryo5Codec> {}
transportMode: "NIO"
# 更改Tomcat目录的拥有者为tomcat用户
chown -R tomcat.tomcat /usr/local/src/tomcat
# 创建Tomcat的应用基础目录,并编写一个简单的JSP页面用于测试
mkdir -p /data/test/webapps/ROOT
vim /data/test/webapps/ROOT/index.jsp
# JSP页面内容,显示服务器名称、本地地址和端口、会话ID以及当前时间
<%@ page import="java.util.*" %>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>tomcat test</title>
</head>
<body>
<h1> Tomcat Website </h1>
<div>On <%=request.getServerName() %></div>
<div><%=request.getLocalAddr() + ":" + request.getLocalPort() %></div>
<div>SessionID = <span style="color:blue"><%=session.getId() %></span></div>
<%=new Date()%>
</body>
</html>
#重新启动tomcat
systemctl restart tomcat
5、测试结果:
在windows系统中修改 C:\Windows\System32\drivers\etc\hosts文件,添加一行
10.0.0.10 www.magedu.com
在windows系统上访问www.magedu.com,刷新浏览器页面,查看会话和访问主机IP
会话保持测试结果:


2.总结JVM内存结构和垃圾回收算法。

JVM 内存结构
1. 程序计数器(Program Counter Register)
定义与作用:程序计数器是一块较小的内存空间,它可以被看作是当前线程所执行字节码的行号指示器。在 Java 的多线程环境下,每个线程都有独立的程序计数器。这是因为 CPU 需要通过这个计数器来确定下一条要执行的字节码指令的位置。例如,当线程由于时间片用完等原因被中断,当再次获得执行权时,程序计数器能够帮助线程恢复到之前执行的位置,确保程序的正确执行。
存储内容:如果线程正在执行的是 Java 方法,那么程序计数器记录的是正在执行的虚拟机字节码指令的地址;如果正在执行的是本地方法(例如通过 JNI 调用的 C 或 C++ 方法),那么计数器的值为空(Undefined)。
2. Java 虚拟机栈(Java Virtual Machine Stacks)
线程私有性:Java 虚拟机栈是线程私有的,它的生命周期与线程相同。这意味着当线程被创建时,虚拟机栈也随之创建;当线程结束时,虚拟机栈也会被销毁。
栈帧结构:每一个 Java 方法在执行的时候都会创建一个栈帧(Stack Frame),用于存储局部变量表、操作数栈、动态链接、方法出口等信息。
局部变量表:存放了编译期可知的各种基本数据类型(如 int、long、float、double、byte、char、boolean)、对象引用(reference 类型,它不等同于对象本身,可能是一个指向对象起始地址的引用指针,也可能是指向一个代表对象的句柄或其他与此对象相关的位置)。局部变量表的大小在编译期就已经确定。
操作数栈:主要用于存储方法执行过程中的操作数。在字节码指令执行时,操作数栈用于入栈和出栈操作,例如在进行算术运算(如加法、乘法)或者方法调用时,操作数栈起到临时存储数据的作用。
动态链接:在 Java 语言中,方法的调用是基于符号引用的动态链接。在运行期间,将符号引用转换为直接引用,这个过程是通过动态链接来实现的。它使得 Java 可以支持运行时绑定(late - binding),例如接口的实现类可以在运行时确定。
方法出口:当一个方法执行完毕后,需要通过方法出口信息返回到调用该方法的位置继续执行。方法出口存储了方法正常退出或者异常退出的相关信息。
3. 本地方法栈(Native Method Stacks)
与 Java 虚拟机栈的相似性:本地方法栈和 Java 虚拟机栈非常相似,它们都是线程私有的,并且在作用上有一定的关联。
服务对象:本地方法栈主要是为虚拟机使用到的本地方法(Native Method)服务。这些本地方法通常是用非 Java 语言(如 C、C++)编写的,用于与底层操作系统或者其他外部系统进行交互。本地方法栈用于存储本地方法调用的相关状态信息,包括本地方法的参数、返回值以及本地方法执行过程中的局部变量等。
4. Java 堆(Java Heap)
共享性与重要性:Java 堆是被所有线程共享的一块内存区域,它在虚拟机启动时就被创建。Java 堆是 Java 虚拟机所管理的内存中最大的一块,几乎所有的对象实例以及数组都在堆上分配内存。这是因为堆提供了足够大的空间来满足程序运行过程中动态创建对象的需求。
内存分区(新生代和老年代):从内存回收的角度来看,Java 堆可以细分为新生代(Young Generation)和老年代(Old Generation)。
新生代:又进一步分为 Eden 区以及两个 Survivor 区(通常命名为 Survivor From 和 Survivor To)。大部分新创建的对象首先会在 Eden 区分配内存。当 Eden 区的空间满了之后,会触发一次 Minor GC(新生代垃圾回收),将存活的对象复制到 Survivor 区。在经过多次 Minor GC 后,如果对象仍然存活,会将其移动到老年代。
老年代:主要存放经过多次 Minor GC 后仍然存活的对象。老年代的空间一般比新生代大,并且由于对象的存活率较高,垃圾回收的频率相对较低。当老年代的空间不足时,会触发 Major GC(老年代垃圾回收)或者 Full GC(整堆垃圾回收,包括新生代和老年代)。
5. 方法区(Method Area)
共享性与存储内容:方法区是各个线程共享的区域,用于存储已被虚拟机加载的类信息(包括类的版本、字段、方法、接口等信息)、常量、静态变量、即时编译器编译后的代码等数据。这些信息在类的生命周期内是持续存在的,并且被多个线程访问和共享。
从永久代到元空间的转变(Java 8 之后):在 Java 8 之前,方法区的实现是永久代(PermGen),它是堆的一部分,并且有固定的大小限制。这导致在一些复杂的应用场景下,容易出现永久代内存溢出(OutOfMemoryError: PermGen space)的问题。在 Java 8 之后,方法区的实现由永久代改为元空间(Metaspace)。元空间使用的是本地内存,而不再受限于 JVM 内存大小,它的大小只受限于本地内存的大小,这样就避免了永久代内存溢出的问题。同时,元空间将类的元数据信息从堆内存中分离出来,使得类的加载和卸载更加灵活和高效。
6. 运行时常量池(Runtime Constant Pool)
定义与所属关系:运行时常量池是方法区的一部分,它用于存放编译期生成的各种字面量和符号引用。字面量包括文本字符串、被声明为 final 的常量值等;符号引用包括类和接口的全限定名、字段的名称和描述符、方法的名称和描述符等。
动态性:运行时常量池在类加载后进入方法区的运行时常量池中存放。它不仅仅在编译期产生内容,在运行期间也可以将新的常量放入池中。例如,String 类的 intern () 方法就可以把字符串常量放入运行时常量池。当一个字符串调用 intern () 方法时,如果池中已经存在一个等于此字符串的字符串(使用 equals () 方法比较),则返回池中这个字符串的引用;如果池中不存在,则将此字符串添加到池中,并返回此字符串的引用。
垃圾回收算法
1. 标记 - 清除算法(Mark - Sweep)
标记阶段详细过程:垃圾回收器从根对象(Roots)开始遍历对象图。根对象包括虚拟机栈中引用的对象、方法区中类静态属性引用的对象、本地方法栈中 JNI 引用的对象等。通过这些根对象,垃圾回收器使用深度优先搜索(DFS)或者广度优先搜索(BFS)等遍历算法,对所有可达对象进行标记。例如,假设一个对象 A 被一个局部变量引用,而这个局部变量存储在 Java 虚拟机栈的栈帧中,那么对象 A 就会被标记为可达对象。
清除阶段详细过程:在标记阶段完成后,垃圾回收器会遍历堆内存中的所有对象。对于那些没有被标记的对象,即被认定为垃圾对象,回收器会将它们占用的内存空间回收清理,使得这些内存空间可以被后续的对象分配使用。
优缺点深入分析
优点:标记 - 清除算法的实现相对简单,理解起来也比较容易。它不需要额外的空间来进行对象的复制等操作,对于内存空间的利用比较直接。
缺点:首先,标记和清除这两个过程的效率都比较低。标记过程需要遍历整个对象图,而清除过程也需要遍历整个堆内存来找到未标记的对象。其次,这种算法会产生内存碎片。随着不断的垃圾回收,堆内存中的可用空间可能会变得碎片化。例如,经过多次回收后,内存中可能存在许多小的空闲内存块,当需要分配一个较大的对象时,可能找不到连续的内存空间来满足分配要求,从而导致分配失败。
2. 复制算法(Copying)
内存划分与工作原理:复制算法将可用内存按容量划分为大小相等的两块(假设为 A 区和 B 区),每次只使用其中的一块。例如,一开始对象在 A 区分配内存,当 A 区的内存用完后,就会触发垃圾回收。垃圾回收器会将 A 区中还存活的对象复制到 B 区,然后把 A 区的内存空间一次性清理掉。之后,新创建的对象就会在 B 区分配内存,直到 B 区满了,再重复上述过程,将存活对象复制回 A 区并清理 B 区。
在新生代中的应用(Eden 区和 Survivor 区):在新生代中,这种算法有更具体的应用。一般是 Eden 区和其中一个 Survivor 区(比如 Survivor From)用来存放新创建的对象。当 Eden 区满了之后,会触发 Minor GC。在 Minor GC 过程中,存活的对象会被复制到另一个 Survivor 区(Survivor To)。同时,对象在 Survivor 区之间会经过多次复制,并且每经过一次复制,对象的年龄就会加 1。当对象的年龄达到一定阈值(可以通过 JVM 参数设置)时,对象会被移动到老年代。
优缺点深入分析
优点:复制算法的实现相对简单,运行效率较高。因为它只需要复制存活的对象,并且复制后的对象在内存中是连续存放的,所以在分配内存时速度很快,也解决了标记 - 清除算法产生内存碎片的问题。
缺点:这种算法的主要缺点是可用内存缩小为原来的一半,这在一定程度上浪费了内存空间。不过在新生代中,由于大部分对象都是朝生夕死的(即对象在创建后很快就会变成垃圾对象),所以这种空间浪费的影响相对较小。
3. 标记 - 整理算法(Mark - Compact)
标记阶段与标记 - 清除算法相同点:标记 - 整理算法的标记阶段和标记 - 清除算法的标记阶段是一样的。垃圾回收器同样从根对象开始,通过遍历对象图,对所有存活的对象进行标记。
整理阶段详细过程:在标记阶段完成后,标记 - 整理算法会将所有存活的对象向一端移动。例如,假设堆内存从低地址到高地址分布,那么存活的对象会被移动到低地址一端,使得所有存活的对象在内存中是连续存放的。然后,垃圾回收器直接清理掉边界以外(高地址一端)的内存空间,这样就避免了内存碎片产生,使得内存空间连续。
优缺点深入分析
优点:标记 - 整理算法解决了标记 - 清除算法内存碎片的问题,同时又不需要像复制算法那样浪费一半的内存空间。这种算法适合在老年代这种对象存活率较高的场景使用,因为在老年代中,对象的存活时间较长,复制大量存活对象的成本较高,而标记 - 整理算法可以在原地整理内存,更有效地利用内存空间。
缺点:标记 - 整理算法的主要缺点是移动存活对象的成本较高。因为需要将存活对象在内存中进行移动,这涉及到对象引用的更新等操作,所以效率上比复制算法要低一些。
4. 分代收集算法(Generational Collection)
分代依据与策略:分代收集算法根据对象存活周期的不同将堆内存划分为不同的区域,主要是新生代和老年代。这种划分是基于一个观察到的现象:在 Java 程序中,大部分对象的存活时间都很短,只有少数对象会存活很长时间。
不同代的垃圾回收算法选择:在新生代中,由于对象存活率低,采用复制算法进行垃圾回收。这样可以快速地回收大量短寿命的对象,并且利用复制算法不会产生内存碎片的特点,高效地利用内存空间。在老年代中,因为对象存活率高、没有额外的空间进行复制等情况,常采用标记 - 清除或者标记 - 整理算法来进行垃圾回收。当老年代空间不足时,会触发 Major GC 或者 Full GC,这些回收操作相对比较复杂,因为老年代的对象可能有复杂的引用关系,并且回收过程需要考虑对整个堆内存稳定性的影响。
性能优势:分代收集算法通过根据对象的特点选择不同的垃圾回收算法,能够更高效地利用系统资源进行垃圾回收。它可以减少垃圾回收的总时间,提高应用程序的整体性能,并且可以更好地适应不同类型的 Java 应用程序的内存使用模式。
3.总结安装Nexus步骤实现私有仓
# Nexus实现私有仓库
# 1、配置maven仓库(ubuntu:10.0.0.102)
# 更新系统包列表并安装Maven
apt update && apt -y install maven
# 编辑Maven的配置文件,添加Nexus作为镜像源
vim /etc/maven/settings.xml
# 在<mirrors>标签内添加以下内容:
<mirror>
<id>my-nexus</id>
<mirrorOf>*</mirrorOf>
<name>My-Nexus</name>
<url>http://10.0.0.102:8081/repository/maven-public/</url>
</mirror>
# 保存并关闭文件
# 克隆示例项目代码
cd /usr/local/src/
git clone https://gitee.com/lbtooth/spring-boothelloworld.git
git clone https://gitee.com/lbtooth/RuoYi.git
# 2、下载和安装nexus(ubuntu:10.0.0.102)
# 安装Java环境
apt -y install openjdk-8-jdk
# 下载Nexus安装包
wget https://download.sonatype.com/nexus/3/nexus-3.29.2-02-unix.tar.gz
# 解压Nexus安装包
tar xf nexus-3.29.2-02-unix.tar.gz
# 创建软链接到常用目录
ln -s /usr/local/src/nexus-3.29.2-02 /usr/local/src/nexus
ln -s /usr/local/src/nexus/bin/nexus /usr/bin/
# 创建并编辑systemd服务文件,以便管理Nexus服务
vim /lib/systemd/system/nexus.service
# 添加以下内容:
[Unit]
Description=nexus service
After=network.target
[Service]
Type=forking
LimitNOFILE=65536
ExecStart=/usr/local/src/nexus/bin/nexus start
ExecStop=/usr/local/src/nexus/bin/nexus stop
User=root
# 如果创建了nexus用户,可以取消注释下一行并注释掉User=root
#User=nexus
Restart=on-abort
[Install]
WantedBy=multi-user.target
# 重新加载systemd配置,并启用并启动Nexus服务
systemctl daemon-reload
systemctl enable --now nexus.service
systemctl start nexus
# 3、配置nexus仓库
# 查看admin用户初始密码
cat /usr/local/src/sonatype-work/nexus3/admin.password
#创建yum和apt软件仓库位置
mkdir -p /data/blobs/
# 在Windows系统中,使用浏览器访问10.0.0.102:8081,使用admin账号和密码登录,然后修改密码
# 在Nexus管理界面中,配置maven-central(proxy),apt-ubuntu(proxy),maven-public(group),yum-zabbix(proxy),和yum-zabbix(group)
# 这些配置包括设置仓库地址、类型、代理设置等,具体步骤根据Nexus的GUI指导进行
# 4、测试和更新maven仓库(ubuntu:10.0.0.102)
# 在克隆的项目目录中执行Maven构建命令
cd /usr/local/src/spring-boothelloworld
mvn clean package -Dmaven.test.skip=true
cd /usr/local/src/RuoYi
mvn clean package -Dmaven.test.skip=true
# 在Nexus的Browse - Repositories - maven-public(group)中查看构建的包是否已经上传
# 5、测试和更新yum仓库(rocky:10.0.0.8)
# 编辑yum仓库配置文件
vim /etc/yum.repos.d/zabbix.repo
# 添加或修改仓库配置,指向Nexus的yum-zabbix(proxy)
# 安装zabbix-agent并检查仓库列表
yum -y install zabbix-agent
yum repolist
# 在Nexus的Browse - Repositories - yum-zabbix(proxy)中查看yum包
# 6、测试和更新apt库(ubuntu:10.0.0.8)
# 备份原有的apt源配置文件
cp /etc/apt/sources.list /etc/apt/sources.list.bak
# 编辑apt源配置文件,添加Nexus的apt-ubuntu仓库
vim /etc/apt/sources.list
# 添加以下内容:
deb http://10.0.0.102:8081/repository/apt-ubuntu/ noble main restricted universe multiverse
deb-src http://10.0.0.102:8081/repository/apt-ubuntu/ noble main restricted universe multiverse
deb http://10.0.0.102:8081/repository/apt-ubuntu/ noble-security main restricted universe multiverse
deb-src http://10.0.0.102:8081/repository/apt-ubuntu/ noble-security main restricted universe multiverse
deb http://10.0.0.102:8081/repository/apt-ubuntu/ noble-updates main restricted universe multiverse
deb-src http://10.0.0.102:8081/repository/apt-ubuntu/ noble-updates main restricted universe multiverse
deb http://10.0.0.102:8081/repository/apt-ubuntu/ noble-backports main restricted universe multiverse
deb-src http://10.0.0.102:8081/repository/apt-ubuntu/ noble-backports main restricted universe multiverse
# 更新apt源并安装示例包
apt -y install bind9
# 在Nexus的Browse - Repositories - apt-ubuntu(proxy)中查看apt包
测试结果:maven软件源配置和测试结果
1、选择maven-central,添加国内软件源https://maven.aliyun.com/repository/central,并保存。


2、在ubuntu系统(10.0.0.102)利用maven构建软件,nexus仓库测试结果

yum软件源配置和测试结果
1、创建yum-zabbix(blob),配置yum-zabbix(proxy),用于nexus构建yum软件仓库。(代理软件源:https://mirrors.tuna.tsinghua.edu.cn/zabbix/zabbix/6.0/rhel/8/x86_64/)




2、在rocky系统(10.0.0.8)安装zabbix软件,nexus仓库测试结果。

apt软件源配置和测试结果
1、创建apt-ubuntu(blob),配置apt-ubuntu(proxy),用于nexus构建apt软件仓库
(代理软件源: https://mirrors.tuna.tsinghua.edu.cn/ubuntu/(代理软件源: )
2、在ubuntu系统(10.0.0.10)安装bing9软件,nexus仓库测试结果。
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐



所有评论(0)