最新资讯

  • Jenkins教程(自动化部署)

Jenkins教程(自动化部署)

2025-05-01 10:37:37 0 阅读

Jenkins教程(自动化部署)

1. Jenkins是什么?

Jenkins是一个开源的、提供友好操作界面的持续集成(CI)工具,广泛用于项目开发,具有自动化构建、测试和部署等功能。Jenkins用Java语言编写,可在Tomcat等流行的servlet容器中运行,也可独立运行。通常与版本管理工具(SCM)、构建工具结合使用。

2. 什么是持续集成(CICD)

因为开发部门同时维护多个版本,多个版本的发布,测试需要大量人力,所以要有一个专业的持续集成工具来管理持续重复的工作。

个人理解,说白了就是把代码测试、打包、发布等工作交给一些工具来自动完成。这样可以提高效率,减少失误,开发人员只需要关心开发和提交代码到Git就可以了。

3. Jenkins的安装

(1)准备条件

安装JDK

下载JDK压缩包,并上传至Linux某个目录下解压。

. 配置jdk的环境变量

#进入/etc/profile配置文件
vim /etc/profile

. 将以下代码填入到profile文件内底

export JAVA_HOME=/usr/wubin/jdk11
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$JAVA_HOME/bin:$PATH

. 使配置生效

source /etc/profile

. 检测java环境信息

javac

输入javac后出现以下信息则安装jdk成功!

(2)安装Jenkins

1. 下载jenkins

wget http://mirrors.jenkins.io/war-stable/latest/jenkins.war 

2. 启动jenkins

# 使用nohup命令启动 nohup 当虚拟机黑屏时 也会运行 日志—>输出到jenkins.log & 后台运行

nohup java -jar /usr/wubin/jenkins.war  --httpPort=8777 --httpsPort=8778 > /usr/wubin/jenkins.log 2>&1 &

3. 使用tail命令查看启动日志,日志中会输出jenkins密码

4. 通过浏览器访问jenkins(端口号必须为8777)

http://你的ip:8777

点击安装推荐的插件

(3)Jenkins中配置JDK路径

jenkins-》全局工具配置-》JDK-》新增JDK

(4)Jenkins忘记密码的解决方案

4. 集成Git

为了Jenkins能够拉取代码,需要安装Git环境和jenkins对应的Git插件

(1) CentOS 7 上安装Git环境

# 安装
$ yum install git -y
# 查看版本
$ git --version

复制

(2) Jenkins安装Git插件

(3) Jenkins配置Git环境

此处无需在jenkins中配置Git环境,采用默认生成的即可

(4) Gitee上任意建一个仓库

(5) 测试凭据是否能够使用

jenkins-》新建任务-》自由风格项目

进入jenkins的工作空间查看文件是否拉取下来,所有拉取的文件都会存放在jenkins工作空间中

到这一步用户名和密码方式的凭证已经打通Git

5. 凭证配置

凭据就是用来存储需要密文保护的数据库密码、Gitee密码信息、Docker私有仓库密码等,以便 Jenkins可以和这些第三方的应用进行交互。

1. 凭证插件安装Credentials Binding

该插件默认在一开始就会被安装,安装后在jenkins-》系统管理-》安全栏目会出现Manage Credentials选项,若没有需要安装插件并重启。

6. Maven集成

jenkins上发布Java项目时需要使用Maven来进行构建打包(Gradle项目则需要安装配置Gradle)

回到顶部

(1) 下载安装

# 找一个目录存放maven
cd /usr/wubin/

# 从阿里云上下载maven安装包
wget https://mirrors.aliyun.com/apache/maven/maven-3/3.6.3/binaries/apache-maven-3.6.3-bin.tar.gz

# 解压
tar -zxvf apache-maven-3.6.3-bin.tar.gz

# 当前maven的安装目录为:
/usr/wubin/
apache-maven-3.6.3

回到顶部

(2) 环境配置

vi /etc/profile

在最后面JDK配置上作出一些更改
export MAVEN_HOME=
/usr/wubin/
apache-maven-3.6.3
 export PATH=$JAVA_HOME/bin:$MAVEN_HOME/bin:$PATH

复制

回到顶部

(3) 使配置生效并查看安装情况

source /etc/profile
mvn -version

回到顶部

(4) Jenkins配置Maven

(5) 安装Maven插件

(6) 在/data/software目录下新建一个repository文件夹,用来作为maven的仓库

$ cd /usr/wubin
$ mkdir repository

复制

(7) 使用root账户修改Maven的settings.xml文件(指定仓库目录和阿里云镜像)


  
            
  /data/software/repository
  
  
    
    
      aliyun-maven
      central
      aliyun maven mirror
      http://maven.aliyun.com/nexus/content/groups/public/
    
  
    ...
    ...

(8) Maven测试项目构建

接下来的步骤是将java项目传到Gitee上供jenkins拉取打包,如果运维同学不懂Java代码,可以直接将我的Git项目fork或采用gitlab 等其他方式进行拉取。

新建Maven项目

在码云上建一个同名的git项目

使用Git上传到码云

使用git bash命令将项目初始化,无论是传到Gitee、GitHub、GitLab、Codeup步骤一样,如果对Git的安装部署不熟悉

# 进入到本地的项目文件夹
$ cd existing_folder
# 初始化仓库
$ git init

# 添加文件至工作区并提交
$ git add .
$ git commit -m "first commit"

# 关联Gitee远程仓库
$ git remote add origin https://gitee.com/nobug8/it235-jenkins-jar.git

# 将本地仓库推送到远程仓库的master分支,此处会弹出用户名密码交互
$ git push -u origin master

## 如果push报错可以先拉取一下,会有新的gitee生成的文件拉下来,然后重新添加提交并push
$ git pull origin master --allow-unrelated-histories
$ git add .
$ git commit -m "拉取下来合并后再次提交"
$ git push -u origin master

复制

(9) Jenkins添加Maven项目任务

①. 新建任务

②. 编写Maven编译命令

③. 构建并查看控制台日志

保存后,点击立即构建,然后进入日志控制台查看日志

从日志可以看到代码已经在拉取了,而且走的事阿里云仓库,第一次拉取过程会比较长。

通过查看/data/software/repository可以看到有存放拉取的jar包,通过这2个证据可以证明settings.xml文件配置成功且有效

ps:如果使用git账号密码拉取代码即使权限都已经给够了还是出现403等等一些问题,可以考虑使用ApiToken方式拉去代码,在git/gitlab创建apiToken,在凭证管理地方加上凭证

构建成功后查看jenkinsworkspace目录下的jar包

到此Maven集成完毕

配置Post Steps,选中执行shell

7. 配置SSH免密登录

由于jenkins构建消耗内存极大,一般jenkins是一台单独的工具机器,Java项目一般在其他的机器上,这里我重新安装一台虚拟机

应用服务器信息

  • IP:192.168.223.129
  • JDK:1.8
  • user:root
  • 部署路径:/data/app/my-boot
  • 端口:9010

免密登录主要是方便jenkins服务器192.168.223.128的root用户—》应用服务器192.168.223.129的root用户上的jar包拷贝,部署本就是jar包拷贝的过程

在192.168.223.128机器上使用root用户生成秘钥注意此处是root用户

$ ssh-keygen -t rsa
# 3次回车

复制

运行后会在当前用户的根目录生成一个.ssh文件夹

ssh文件夹中的文件描述

  • id_rsa : 生成的私钥文件
  • id_rsa.pub : 生成的公钥文件

接下来需要将公钥导入到认证文件中

$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

复制

如果希望ssh公钥生效需满足至少下面两个条件:

  • .ssh目录的权限必须是700
  • .ssh/authorized_keys文件权限必须是600

给对应文件授权

$ chmod 700 ~/.ssh
$ chmod 600 ~/.ssh/authorized_keys

复制

authorized_keys文件拷贝到另一台应用服务器的root用户.ssh目录下

# 在应用服务器(192.168.223.129)上用root用户创建/root/.ssh文件夹  mkdir -p /root/.ssh

# 在jenkins服务器(192.168.223.128)上将pub公钥文件拷贝到应用服务器的.ssh目录下

scp -p ~/.ssh/id_rsa.pub root@192.168.223.129:/root/.ssh/authorized_keys

复制

在jenkins192.168.223.128服务器上进行免密连接测试

# 在jenkins服务器的/root/目录下创建filetest文件,并拷贝到应用服务器
$ cd ~/
$ touch filetest
$ scp -p filetest root@192.168.223.129:/root/filetest
# 进入到应用服务器(192.168.223.129),检查/root目录下是否出现filetest

# 在jenkins服务器上使用ssh进行免密连接测试,成功后会出现Last Login的提示
$ ssh root@192.168.223.129
Last login: Sun Sep 20 21:53:03 2020
$ exit

复制

到此免密登录和拷贝实现成功,为接下来jar包部署提供了快捷的帮助

8. 编写Jenkins发布脚本

注意下面代码第6行代码server_ips=”需要部署到的机器ip”

#!/bin/bash

echo "部署的目录和项目名称"
DIR="/data/app"
projectName="my-boot"

echo "待部署的应用服务器,可多台"
server_ips="192.168.223.139"
for server_ip in ${server_ips[@]}
do

echo "ssh连接进行备份操作"
ssh -Tq -oStrictHostKeyChecking=no root@${server_ip} <

最新脚本,以端口kill进程

#!/bin/bash

# 配置变量
LOG_FILE="/home/xxx/.jenkins/workspace/whale-mgnt-service/startup.log"
JAR_PATH="/home/xxx/.jenkins/workspace/whale-mgnt-service/whale-mgnt-service/target/whale-mgnt-service.jar"
APP_PORT=8081
MAX_ATTEMPTS=60
INTERVAL=5

# 清空之前的日志
echo "" > $LOG_FILE

# 使用多种方式查找和终止进程
kill_process_by_port() {
    local port=$1
    echo "Checking for processes using port $port..."
    
    # 方法1: 使用netstat查找
    local pid=$(sudo netstat -tlnp | grep ":${port}" | awk '{print $7}' | cut -d'/' -f1)
    
    # 方法2: 如果方法1失败,使用另一种方式
    if [ -z "$pid" ]; then
        pid=$(sudo ss -tlnp | grep ":${port}" | awk '{print $6}' | cut -d',' -f2 | cut -d'=' -f2)
    fi
    
    # 方法3: 如果还是失败,尝试使用 ps 和 grep
    if [ -z "$pid" ]; then
        pid=$(ps aux | grep "whale-mgnt-service" | grep -v grep | awk '{print $2}')
    fi

    if [ ! -z "$pid" ]; then
        echo "Found process(es) with PID: $pid"
        for single_pid in $pid; do
            echo "Stopping process $single_pid"
            sudo kill -15 $single_pid 2>/dev/null || true
            sleep 3
            
            if ps -p $single_pid > /dev/null 2>&1; then
                echo "Force killing process $single_pid"
                sudo kill -9 $single_pid 2>/dev/null || true
                sleep 2
            fi
        done
    else
        echo "No process ID found, trying alternative methods..."
        # 尝试直接通过应用名称终止
        sudo pkill -f "whale-service" || true
    fi
    
    # 等待端口释放
    sleep 5
    
    # 检查端口是否已释放
    if sudo netstat -tlnp | grep ":${port}" > /dev/null; then
        echo "Warning: Port $port is still in use"
        return 1
    fi
    
    echo "Port $port is now available"
    return 0
}

# 确保端口可用
echo "Ensuring port $APP_PORT is available..."
for i in {1..3}; do
    echo "Attempt $i to free port $APP_PORT"
    kill_process_by_port $APP_PORT
    
    if ! sudo netstat -tlnp | grep ":${APP_PORT}" > /dev/null; then
        echo "Port successfully freed"
        break
    fi
    
    echo "Current processes using port $APP_PORT:"
    sudo netstat -tlnp | grep ":${APP_PORT}"
    sleep 5
done

# 最终检查端口
if sudo netstat -tlnp | grep ":${APP_PORT}" > /dev/null; then
    echo "Failed to free port $APP_PORT after multiple attempts"
    echo "Current processes using port $APP_PORT:"
    sudo netstat -tlnp | grep ":${APP_PORT}"
    
    # 最后的紧急措施
    echo "Attempting emergency measures..."
    sudo fuser -k ${APP_PORT}/tcp 2>/dev/null || true
    sudo pkill -9 -f "whale-mgnt-service" 2>/dev/null || true
    sleep 5
    
    if sudo netstat -tlnp | grep ":${APP_PORT}" > /dev/null; then
        echo "All attempts to free port failed. Please check manually."
        exit 1
    fi
fi

# 启动服务
echo "Starting service..."
sudo nohup java -jar 
    -Xms256m 
    -Xmx512m 
    -XX:MaxMetaspaceSize=256m 
    -XX:+HeapDumpOnOutOfMemoryError 
    -XX:HeapDumpPath=/tmp/ 
    -XX:+UseG1GC 
    -XX:MaxGCPauseMillis=200 
    $JAR_PATH 
    --spring.profiles.active=test 
    --server.port=$APP_PORT 
    --spring.jpa.open-in-view=false 
    --server.tomcat.max-threads=50 
    --server.tomcat.min-spare-threads=20 
    --spring.task.execution.pool.core-size=5 
    --spring.task.execution.pool.max-size=10 
    --spring.task.execution.pool.queue-capacity=100 
    > $LOG_FILE 2>&1 &

PID=$!

echo "Starting service with PID: $PID"
echo "Waiting for service to start..."

# 给予初始化时间
sleep 15

attempt=1
while [ $attempt -le $MAX_ATTEMPTS ]; do
    # 检查进程是否存在
    if ! ps -p $PID > /dev/null; then
        echo "Process died unexpectedly. Check logs:"
        tail -n 50 $LOG_FILE
        exit 1
    fi
    
    # 检查端口和应用状态
    if netstat -tunlp 2>/dev/null | grep ":$APP_PORT" > /dev/null; then
        if grep -q "Started WhaleManagementApplication" $LOG_FILE; then
            echo "Application started successfully"
            sleep 5
            if ps -p $PID > /dev/null; then
                echo "Service is running stably"
                echo "Final memory usage:"
                free -m
                echo "Process memory usage:"
                ps -o pid,ppid,%mem,rss,command -p $PID
                exit 0
            else
                echo "Process died after startup"
                tail -n 50 $LOG_FILE
                exit 1
            fi
        fi
    fi
    
    echo "Attempt $attempt of $MAX_ATTEMPTS - Service still starting..."
    
    # 检查启动日志中的错误
    if grep -q "Port $APP_PORT was already in use" $LOG_FILE; then
        echo "Port conflict detected!"
        echo "Current port status:"
        sudo netstat -tunlp | grep ":$APP_PORT"
        [ -n "$PID" ] && kill -9 $PID 2>/dev/null || true
        exit 1
    fi
    
    echo "Recent log entries:"
    tail -n 10 $LOG_FILE
    
    sleep $INTERVAL
    attempt=$((attempt+1))
done

echo "Service failed to start within timeout. Last 50 lines of log:"
tail -n 50 $LOG_FILE
[ -n "$PID" ] && kill -9 $PID 2>/dev/null || true
exit 1

9. 编写应用启动脚本

/data/app/my-boot目录下创建启动脚本start.sh

$ touch start.sh
$ vi start.sh
# 将下面代码粘贴到start.sh中
#!/bin/bash
set -e #任何命令出错就退出
set -o pipefail

APP_ID=my-boot
APP_DIR="/data/app"

nohup java -jar ${APP_DIR}/${APP_ID}/${APP_ID}.jar > release_out.log &
start_ok=false
if [[ $? = 0 ]];then
        sleep 3
        tail -n 10 release_out.log
        sleep 5
        tail -n 50 release_out.log
fi
aaa=`grep "Started" release_out.log | awk '{print $1}'`
if [[ -n "${aaa}" ]];then
    echo "Application started ok"
    exit 0
else
    echo "Application started error"
    exit 1
fi

/data/app/my-boot目录下创建停止脚本stop.sh

$ touch stop.sh
$ vi stop.sh
# 将下面代码粘贴到stop.sh中
#!/bin/bash

APP_ID=my-boot
ps aux | grep ${APP_ID} | grep -v "grep" | awk '{print "kill -9 "$2}' | sh

并进行启动和停止测试,查看日志输出是否正常

将下述启动代码配置jenkins

sh $DIR/${projectName}/stop.sh
sh $DIR/${projectName}/start.sh

访问并测试代码是否生效

如果是虚拟机则需要给防火墙添加9010端口

$ su root
# 开启防火墙9010端口
$ firewall-cmd --zone=public --add-port=9010/tcp --permanent
# 使配置生效
$ firewall-cmd --reload

复制

修改代码返回值,提交至Gitee,并再次进行构建发布,访问http://192.168.223.129:9010查看结果是否更新

本文地址:https://www.vps345.com/6706.html

搜索文章

Tags

PV计算 带宽计算 流量带宽 服务器带宽 上行带宽 上行速率 什么是上行带宽? CC攻击 攻击怎么办 流量攻击 DDOS攻击 服务器被攻击怎么办 源IP 服务器 linux 运维 游戏 云计算 javascript 前端 chrome edge llama 算法 opencv 自然语言处理 神经网络 语言模型 ubuntu ssh deepseek Ollama 模型联网 API CherryStudio RTSP xop RTP RTSPServer 推流 视频 科技 ai java 人工智能 个人开发 进程 操作系统 进程控制 Ubuntu python MCP 阿里云 网络 网络安全 网络协议 tcp/ip 数据库 centos oracle 关系型 安全 分布式 运维开发 云原生 Flask FastAPI Waitress Gunicorn uWSGI Uvicorn YOLO efficientVIT YOLOv8替换主干网络 TOLOv8 物联网 mcu iot 信息与通信 android harmonyos typescript 鸿蒙 宝塔面板访问不了 宝塔面板网站访问不了 宝塔面板怎么配置网站能访问 宝塔面板配置ip访问 宝塔面板配置域名访问教程 宝塔面板配置教程 vue.js audio vue音乐播放器 vue播放音频文件 Audio音频播放器自定义样式 播放暂停进度条音量调节快进快退 自定义audio覆盖默认样式 rust http 开发语言 面试 性能优化 jdk intellij-idea 架构 ssl fastapi mcp mcp-proxy mcp-inspector fastapi-mcp agent sse filezilla 无法连接服务器 连接被服务器拒绝 vsftpd 331/530 华为 计算机网络 numpy sqlserver live555 rtsp rtp mysql 自动化 Hyper-V WinRM TrustedHosts websocket vim windows 微服务 springcloud 后端 电脑 vue3 HTML audio 控件组件 vue3 audio音乐播放器 Audio标签自定义样式默认 vue3播放音频文件音效音乐 自定义audio播放器样式 播放暂停调整声音大小下载文件 嵌入式 linux驱动开发 arm开发 嵌入式硬件 HarmonyOS Next kubernetes 容器 命名管道 客户端与服务端通信 asm vscode c# github 创意 社区 源码剖析 rtsp实现步骤 流媒体开发 macos adb cpu 内存 实时 使用 Windsurf conda ipython flutter word图片自动上传 word一键转存 复制word图片 复制word图文 复制word公式 粘贴word图文 粘贴word公式 AI 爬虫 数据集 YOLOv8 NPU Atlas800 A300I pro asi_bench 向日葵 机器学习 笔记 C 环境变量 进程地址空间 react.js 前端面试题 node.js 持续部署 ESP32 camera Arduino 电子信息 mount挂载磁盘 wrong fs type LVM挂载磁盘 Centos7.9 统信UOS 麒麟 bonding 链路聚合 EtherCAT转Modbus ECT转Modbus协议 EtherCAT转485网关 ECT转Modbus串口网关 EtherCAT转485协议 ECT转Modbus网关 ddos c语言 qt stm32项目 单片机 stm32 僵尸进程 debian PVE 目标检测 zotero WebDAV 同步失败 代理模式 华为云 udp unity 智能路由器 dell服务器 go golang ESXi 学习 深度学习 安装教程 GPU环境配置 Ubuntu22 CUDA PyTorch Anaconda安装 ollama 大模型 mac pycharm ide oceanbase rc.local 开机自启 systemd Dify chatgpt llama3 Chatglm 开源大模型 php spring boot tomcat pip docker 智能手机 NAS Termux Samba Linux WSL2 postman mock mock server 模拟服务器 mock服务器 Postman内置变量 Postman随机数据 ffmpeg 音视频 c++ 开源 Dell R750XS 编辑器 大数据 政务 分布式系统 监控运维 Prometheus Grafana pytorch ai小智 语音助手 ai小智配网 ai小智教程 智能硬件 esp32语音助手 diy语音助手 温湿度数据上传到服务器 Arduino HTTP sql KingBase 数据挖掘 网络用户购物行为分析可视化平台 大数据毕业设计 1024程序员节 客户端 java-ee .net MacOS录屏软件 uni-app 银河麒麟 kylin v10 麒麟 v10 计算机视觉 豆瓣 追剧助手 迅雷 nas 微信 YOLOv12 flask AI编程 AIGC LDAP aws googlecloud HCIE 数通 maven intellij idea rpc nginx dubbo .netcore GaN HEMT 氮化镓 单粒子烧毁 辐射损伤 辐照效应 gateway Clion Nova ResharperC++引擎 Centos7 远程开发 外网访问 内网穿透 端口映射 pillow json html5 firefox Agent protobuf 序列化和反序列化 安装 WSL win11 无法解析服务器的名称或地址 鸿蒙系统 前端框架 rust腐蚀 cuda cudnn anaconda 计算机外设 软件需求 学习方法 经验分享 程序人生 vSphere vCenter 软件定义数据中心 sddc jmeter 软件测试 gpu算力 微信分享 Image wxopensdk DeepSeek-R1 API接口 VMware安装mocOS VMware macOS系统安装 list 数据结构 服务器数据恢复 数据恢复 存储数据恢复 raid5数据恢复 磁盘阵列数据恢复 shell linux 命令 sed 命令 Cookie visualstudio prometheus kylin 银河麒麟操作系统 国产化 微信小程序 小程序 rsyslog https 小艺 Pura X 硬件工程 excel 产品经理 agi microsoft Portainer搭建 Portainer使用 Portainer使用详解 Portainer详解 Portainer portainer virtualenv openvpn server openvpn配置教程 centos安装openvpn ue4 着色器 ue5 虚幻 dify ragflow mongodb Trae IDE AI 原生集成开发环境 Trae AI 权限 驱动开发 嵌入式实习 开机自启动 ecmascript nextjs react reactjs yum源切换 更换国内yum源 QQ 机器人 bot Docker web安全 黑客技术 流式接口 llm 本地部署 api pyqt DigitalOcean GPU服务器购买 GPU服务器哪里有 GPU服务器 蓝耘科技 元生代平台工作流 ComfyUI apache 微信小程序域名配置 微信小程序服务器域名 微信小程序合法域名 小程序配置业务域名 微信小程序需要域名吗 微信小程序添加域名 Kylin-Server 国产操作系统 服务器安装 EasyConnect Cline Kali Linux 黑客 渗透测试 信息收集 zabbix 监控 系统架构 android studio 交互 hadoop 压测 ECS bash ssrf 失效的访问控制 openwrt Google pay Apple pay 并查集 leetcode 服务器主板 AI芯片 网络结构图 图像处理 tcpdump 代码调试 ipdb express xrdp 远程桌面 远程连接 string模拟实现 深拷贝 浅拷贝 经典的string类问题 三个swap 游戏服务器 TrinityCore 魔兽世界 开发环境 SSL证书 消息队列 跨域 远程 命令 执行 sshpass 操作 群晖 文件分享 VMware创建虚拟机 蓝桥杯 NPS 雨云服务器 雨云 vue 能力提升 面试宝典 技术 IT信息化 环境迁移 大语言模型 华为od ollama下载加速 k8s DeepSeek 服务器繁忙 NFS redhat 视觉检测 arkUI 毕设 腾讯云 jar Docker Hub docker pull 镜像源 daemon.json 远程控制 远程看看 远程协助 直播推流 devops springboot unix 低代码 ArcTS 登录 ArcUI GridItem 职场和发展 svn 串口服务器 三级等保 服务器审计日志备份 redis Redis Desktop yum django 其他 git gitea 媒体 微信公众平台 npm DevEco Studio C语言 pyautogui C# MQTTS 双向认证 emqx jupyter AI写作 prompt spring html css Invalid Host allowedHosts gradle matlab log4j bootstrap pygame 小游戏 五子棋 压力测试 jenkins KylinV10 麒麟操作系统 虚拟机 Vmware matplotlib vr nvidia VMware安装Ubuntu Ubuntu安装k8s 远程工作 课程设计 transformer 软件工程 safari Mac 系统 iBMC UltraISO webrtc 混合开发 环境安装 JDK kafka 自动化编程 Open WebUI thingsboard postgresql mysql离线安装 ubuntu22.04 mysql8.0 spring cloud 源码 毕业设计 宝塔面板 部署 k8s集群资源管理 云原生开发 磁盘监控 服务器配置 elasticsearch centos-root /dev/mapper yum clean all df -h / du -sh rabbitmq 京东云 硬件架构 eureka 命令行 基础入门 编程 IIS .net core Hosting Bundle .NET Framework vs2022 hive Hive环境搭建 hive3环境 Hive远程模式 RoboVLM 通用机器人策略 VLA设计哲学 vlm fot robot 视觉语言动作模型 具身智能 测试工具 测试用例 功能测试 LLM 大模型面经 Deepseek 大模型学习 缓存 okhttp wireshark 显示过滤器 ICMP Wireshark安装 生物信息学 openEuler 模拟实现 selenium 状态管理的 UDP 服务器 Arduino RTOS chrome 浏览器下载 chrome 下载安装 谷歌浏览器下载 DNS threejs 3D mariadb SenseVoice ci/cd rdp 实验 AP配网 AK配网 小程序AP配网和AK配网教程 WIFI设备配网小程序UDP开 fpga开发 Qwen2.5-coder 离线部署 王者荣耀 Wi-Fi 交换机 硬件 设备 GPU PCI-Express mybatis 飞牛NAS 飞牛OS MacBook Pro Linux无人智慧超市 LInux多线程服务器 QT项目 LInux项目 单片机项目 UOS 统信操作系统 Ubuntu Server Ubuntu 22.04.5 云电竞 云电脑 todesk 负载均衡 Reactor 设计模式 C++ r语言 数据可视化 TRAE 无人机 ping++ 深度优先 图论 并集查找 换根法 树上倍增 gpt SSH 企业微信 Linux24.04 deepin 系统安全 SWAT 配置文件 服务管理 网络共享 gaussdb ruoyi DeepSeek行业应用 Heroku 网站部署 IIS服务器 IIS性能 日志监控 next.js 部署next.js ros2 moveit 机器人运动 ocr asp.net大文件上传 asp.net大文件上传源码 ASP.NET断点续传 asp.net上传文件夹 asp.net上传大文件 .net core断点续传 .net mvc断点续传 nuxt3 iftop 网络流量监控 安卓 矩阵 服务器管理 配置教程 网站管理 银河麒麟服务器操作系统 系统激活 telnet 远程登录 ansible playbook 剧本 数据分析 算力 gpt-3 文心一言 博客 高效远程协作 TrustViewer体验 跨设备操作便利 智能远程控制 工业4.0 k8s资源监控 annotations自动化 自动化监控 监控service 监控jvm windwos防火墙 defender防火墙 win防火墙白名单 防火墙白名单效果 防火墙只允许指定应用上网 防火墙允许指定上网其它禁止 实战案例 微信开放平台 微信公众号配置 同步 备份 建站 安全威胁分析 grafana IPMI 华为认证 网络工程师 拓扑图 mamba Vmamba Java 漏洞 AI大模型 kind docker搭建nacos详解 docker部署nacos docker安装nacos 腾讯云搭建nacos centos7搭建nacos unity3d springboot远程调试 java项目远程debug docker远程debug java项目远程调试 springboot远程 网络穿透 云服务器 Xterminal bug 弹性计算 裸金属服务器 弹性裸金属服务器 虚拟化 p2p ssh漏洞 ssh9.9p2 CVE-2025-23419 致远OA OA服务器 服务器磁盘扩容 CPU 主板 电源 网卡 医疗APP开发 app开发 CORS 游戏机 vmware 卡死 dns RAID RAID技术 磁盘 存储 程序员 大模型入门 micropython esp32 mqtt gitee arm 大模型微调 实时音视频 实时互动 半虚拟化 硬件虚拟化 Hypervisor 多进程 AI代码编辑器 linux安装配置 sqlite MS Materials openssl 密码学 自动化运维 kali 共享文件夹 visual studio code KVM code-server MQTT mosquitto etcd 数据安全 RBAC 金融 AISphereButler hibernate 腾讯云大模型知识引擎 outlook kamailio sip VoIP 大数据平台 echarts 信息可视化 网页设计 rag ragflow 源码启动 灵办AI W5500 OLED u8g2 TCP服务器 kvm Java Applet URL操作 服务器建立 Socket编程 网络文件读取 wsl 大模型教程 remote-ssh 报错 ukui 麒麟kylinos openeuler 统信 虚拟机安装 框架搭建 RustDesk自建服务器 rustdesk服务器 docker rustdesk 自动驾驶 web3.py VPS 强制清理 强制删除 mac废纸篓 JAVA RTMP 应用层 gitlab 飞书 孤岛惊魂4 WebRTC wsl2 Ark-TS语言 OD机试真题 华为OD机试真题 服务器能耗统计 恒源云 Python 网络编程 聊天服务器 套接字 TCP Socket 多层架构 解耦 cmos IPMITOOL BMC 硬件管理 opcua opcda KEPServer安装 oneapi 进程信号 adobe 传统数据库升级 银行 LLMs pdf firewalld 中间件 iis 多线程服务器 Linux网络编程 云服务 可信计算技术 springsecurity6 oauth2 授权服务器 token sas FTP 服务器 安全架构 网络攻击模型 n8n 工作流 workflow dba 分析解读 Anolis nginx安装 linux插件下载 RAGFlow SSH 密钥生成 SSH 公钥 私钥 生成 自定义客户端 SAS gcc skynet IM即时通讯 剪切板对通 HTML FORMAT zookeeper nfs 服务器部署ai模型 arcgis embedding SSL 域名 GCC crosstool-ng 系统开发 binder 车载系统 framework 源码环境 大大通 第三代半导体 碳化硅 Windows ai工具 v10 软件 ldap 3d MacMini 迷你主机 mini Apple GIS 遥感 WebGIS ShenTong 阿里云ECS 宠物 免费学习 宠物领养 宠物平台 LORA NLP 自动化任务管理 Linux PID 线程 URL LInux 代理 图形化界面 多个客户端访问 IO多路复用 回显服务器 TCP相关API h.264 VR手套 数据手套 动捕手套 动捕数据手套 LLM Web APP Streamlit 网卡的名称修改 eth0 ens33 大文件分片上传断点续传及进度条 如何批量上传超大文件并显示进度 axios大文件切片上传详细教 node服务器合并切片 vue3大文件上传报错提示错误 大文件秒传跨域报错cors 网工 搜索引擎 MI300x 程序员创富 ux 多线程 SSE 计算机 open Euler dde AI-native Docker Desktop elk 数学建模 游戏引擎 指令 mq rocketmq SRS 流媒体 直播 x64 SIGSEGV xmm0 输入法 ip命令 新增网卡 新增IP 启动网卡 miniapp 真机调试 调试 debug 断点 网络API请求调试方法 av1 电视盒子 机顶盒ROM 魔百盒刷机 Deepseek-R1 私有化部署 推理模型 sonoma 自动更新 xshell termius iterm2 自动化测试 性能测试 odoo 服务器动作 Server action neo4j 数据仓库 数据库开发 数据库架构 database 边缘计算 tidb GLIBC Linux的权限 游戏程序 办公自动化 自动化生成 pdf教程 崖山数据库 YashanDB python3.11 视频编解码 Ubuntu 24.04.1 轻量级服务器 dash 正则表达式 keepalived 高效日志打印 串口通信日志 服务器日志 系统状态监控日志 异常记录日志 信创 信创终端 中科方德 设置代理 实用教程 Ubuntu DeepSeek DeepSeek Ubuntu DeepSeek 本地部署 DeepSeek 知识库 DeepSeek 私有化知识库 本地部署 DeepSeek DeepSeek 私有化部署 相差8小时 UTC 时间 sqlite3 netty 集成学习 集成测试 chrome devtools chromedriver 远程过程调用 Windows环境 HarmonyOS swoole WebUI DeepSeek V3 FTP服务器 运维监控 SSH 服务 SSH Server OpenSSH Server 无桌面 相机 risc-v Cursor wordpress 无法访问wordpess后台 打开网站页面错乱 linux宝塔面板 wordpress更换服务器 qemu libvirt 软考 链表 联想开天P90Z装win10 minicom 串口调试工具 fd 文件描述符 rclone AList webdav fnOS cnn DenseNet web 黑苹果 执法记录仪 智能安全帽 smarteye sdkman sequoiaDB ecm bpm Xinference 宕机切换 服务器宕机 GoogLeNet 图形渲染 ruby minio docker命令大全 MCP server C/S aarch64 编译安装 HPC windows日志 数据管理 数据治理 数据编织 数据虚拟化 DocFlow idm Minecraft 信号处理 DOIT 四博智联 alias unalias 别名 网络药理学 生信 gromacs 分子动力学模拟 MD 动力学模拟 vue-i18n 国际化多语言 vue2中英文切换详细教程 如何动态加载i18n语言包 把语言json放到服务器调用 前端调用api获取语言配置文件 H3C iDRAC R720xd 树莓派 VNC RAGFLOW freebsd centos 7 怎么卸载MySQL MySQL怎么卸载干净 MySQL卸载重新安装教程 MySQL5.7卸载 Linux卸载MySQL8.0 如何卸载MySQL教程 MySQL卸载与安装 常用命令 文本命令 目录命令 技能大赛 前后端分离 langchain deep learning Ubuntu 24 常用命令 Ubuntu 24 Ubuntu vi 异常处理 服务器无法访问 ip地址无法访问 无法访问宝塔面板 宝塔面板打不开 监控k8s 监控kubernetes 健康医疗 XFS xfs文件系统损坏 I_O error es jvm file server http server web server 云桌面 微软 AD域控 证书服务器 个人博客 X11 Xming linux环境变量 英语 uni-file-picker 拍摄从相册选择 uni.uploadFile H5上传图片 微信小程序上传图片 flash-attention 文件系统 用户缓冲区 xcode Jellyfin FunASR ASR c 私有化 rime 我的世界 我的世界联机 数码 技术共享 反向代理 MySql CrewAI 单元测试 阻塞队列 生产者消费者模型 服务器崩坏原因 jetty undertow grub 版本升级 扩容 邮件APP 免费软件 金仓数据库 2025 征文 数据库平替用金仓 Docker Compose docker compose docker-compose 版本 ISO镜像作为本地源 ui SysBench 基准测试 MNN Qwen 监控k8s集群 集群内prometheus ip 备份SQL Server数据库 数据库备份 傲梅企业备份网络版 音乐服务器 Navidrome 音流 5G 3GPP 卫星通信 磁盘镜像 服务器镜像 服务器实时复制 实时文件备份 Erlang OTP gen_server 热代码交换 事务语义 高级IO epoll ROS docker run 数据卷挂载 交互模式 pppoe radius hugo Netty 即时通信 NIO Dell HPE 联想 浪潮 deepseek r1 dns是什么 如何设置电脑dns dns应该如何设置 银河麒麟桌面操作系统 Kylin OS MQTT协议 消息服务器 代码 在线预览 xlsx xls文件 在浏览器直接打开解析xls表格 前端实现vue3打开excel 文件地址url或接口文档流二进 迁移指南 make命令 makefile文件 AI作画 聊天室 AI agent ios iphone 思科模拟器 思科 Cisco ceph 虚拟局域网 selete Claude dity make eNSP 网络规划 VLAN 企业网络 qt项目 qt项目实战 qt教程 muduo 显卡驱动 AnythingLLM AnythingLLM安装 Kali 国标28181 视频监控 监控接入 语音广播 流程 SIP SDP Radius 社交电子 人工智能生成内容 EMQX 通信协议 计算虚拟化 弹性裸金属 路径解析 edge浏览器 序列化反序列化 匿名管道 Docker引擎已经停止 Docker无法使用 WSL进度一直是0 镜像加速地址 openstack Xen vscode 1.86 小智AI服务端 xiaozhi TTS 直流充电桩 充电桩 Linux awk awk函数 awk结构 awk内置变量 awk参数 awk脚本 awk详解 sublime text AD 域管理 SEO 网站搭建 serv00 chfs ubuntu 16.04 小番茄C盘清理 便捷易用C盘清理工具 小番茄C盘清理的优势尽显何处? 教你深度体验小番茄C盘清理 C盘变红?!不知所措? C盘瘦身后电脑会发生什么变化? 显示管理器 lightdm gdm USB网络共享 远程服务 Playwright CH340 串口驱动 CH341 uart 485 Nuxt.js P2P HDLC 鲲鹏 昇腾 npu nac 802.1 portal linux上传下载 RAG 检索增强生成 文档解析 大模型垂直应用 QT 5.12.12 QT开发环境 Ubuntu18.04 程序 性能分析 bcompare Beyond Compare 上传视频至服务器代码 vue3批量上传多个视频并预览 如何实现将本地视频上传到网页 element plu视频上传 ant design vue vue3本地上传视频及预览移除 HTTP 服务器控制 ESP32 DeepSeek uv 备选 网站 调用 示例 AD域 wps AutoDL cursor vasp安装 rnn 业界资讯 模拟退火算法 大模型应用 交叉编译 深度求索 私域 知识库 pgpool EMUI 回退 降级 升级 端口测试 田俊楠 数据库系统 frp seatunnel DBeaver kerberos 银河麒麟高级服务器 外接硬盘 Kylin jina apt 华为机试 产测工具框架 IMX6ULL 管理框架 UDP的API使用 做raid 装系统 webstorm armbian u-boot seleium 目标跟踪 OpenVINO 推理应用 ftp 火绒安全 CVE-2024-7347 rustdesk 内网服务器 内网代理 内网通信 换源 国内源 Debian VM搭建win2012 win2012应急响应靶机搭建 攻击者获取服务器权限 上传wakaung病毒 应急响应并溯源 挖矿病毒处置 应急响应综合性靶场 OpenManus big data opensearch helm 宝塔 xml uniapp web3 lio-sam SLAM tcp tensorflow glibc vscode1.86 1.86版本 ssh远程连接 trae 单一职责原则 虚拟显示器 open webui IMM 智能音箱 智能家居 北亚数据恢复 oracle数据恢复 软负载 HiCar CarLife+ CarPlay QT RK3588 yolov8 CLion Node-Red 编程工具 流编程 asp.net大文件上传下载 VSCode 移动云 ros XCC Lenovo curl wget 重启 排查 系统重启 日志 原因 spark HistoryServer Spark YARN jobhistory 繁忙 解决办法 替代网站 汇总推荐 AI推理 docker部署翻译组件 docker部署deepl docker搭建deepl java对接deepl 翻译组件使用 僵尸世界大战 游戏服务器搭建 信号 Ubuntu共享文件夹 共享目录 Linux共享文件夹 HarmonyOS NEXT 原生鸿蒙 easyui java-rocketmq 知识图谱 perf linux内核 本地部署AI大模型 项目部署到linux服务器 项目部署过程 架构与原理 banner 飞牛nas fnos 内网环境 less cpp-httplib react native 安卓模拟器 DeepSeek r1 免费域名 域名解析 eclipse 策略模式 单例模式 7z CentOS Stream CentOS Unity Dedicated Server Host Client 无头主机 本地环回 bind 李心怡 db Doris搭建 docker搭建Doris Doris搭建过程 linux搭建Doris Doris搭建详细步骤 Doris部署 bat 服务网格 istio midjourney 大模型部署 UOS1070e 代码托管服务 影刀 #影刀RPA# css3 sentinel g++ g++13 docker部署Python 区块链 佛山戴尔服务器维修 佛山三水服务器维修 软链接 硬链接 镜像 idea 企业网络规划 华为eNSP figma 推荐算法 语法 加解密 Yakit yaklang 干货分享 黑客工具 密码爆破 onlyoffice OpenHarmony cd 目录切换 tailscale derp derper 中转 triton 模型分析 线性代数 电商平台 服务器时间 IDEA 互信 C++软件实战问题排查经验分享 0xfeeefeee 0xcdcdcdcd 动态库加载失败 程序启动失败 程序运行权限 标准用户权限与管理员权限 捆绑 链接 谷歌浏览器 youtube google gmail Linux的基础指令 像素流送api 像素流送UE4 像素流送卡顿 像素流送并发支持 etl prometheus数据采集 prometheus数据模型 prometheus特点 virtualbox 软件构建 ubuntu24 vivado24 防火墙 NAT转发 NAT Server 历史版本 下载 lua regedit 开机启动 Ubuntu22.04 开发人员主页 域名服务 DHCP 符号链接 配置 音乐库 飞牛 perl xpath定位元素 安防软件 webgl 计算生物学 生物信息 基因组 本地化部署 WLAN 考研 rancher c/c++ 串口 iventoy VmWare OpenEuler 强化学习 lsb_release /etc/issue /proc/version uname -r 查看ubuntu版本 PX4 玩机技巧 软件分享 软件图标 实习 支付 微信支付 开放平台 cocoapods Spring Security WebVM rtsp服务器 rtsp server android rtsp服务 安卓rtsp服务器 移动端rtsp服务 大牛直播SDK 流水线 脚本式流水线 我的世界服务器搭建 PPI String Cytoscape CytoHubba 移动魔百盒 USB转串口 firewall harmonyOS面试题 nftables 游戏开发 增强现实 沉浸式体验 应用场景 技术实现 案例分析 AR 带外管理 渗透 大模型推理 虚幻引擎 Typore DIFY 聚类 llama.cpp trea 浏览器开发 AI浏览器 xss 分布式训练 Python基础 Python教程 Python技巧 nlp 本地知识库部署 DeepSeek R1 模型 saltstack powerpoint 环境配置 键盘 VS Code 嵌入式系统开发 HAProxy 代理服务器 基础环境 物联网开发 根服务器 clickhouse ubuntu20.04 开机黑屏 searxng 主从复制 Attention laravel cfssl 沙盒 抗锯齿 junit 上传视频文件到服务器 uniApp本地上传视频并预览 uniapp移动端h5网页 uniapp微信小程序上传视频 uniapp app端视频上传 uniapp uview组件库 can 线程池 虚拟现实 ssh远程登录 需求分析 规格说明书 互联网医院 双系统 GRUB引导 Linux技巧 毕昇JDK 模拟器 教程 minecraft 稳定性 看门狗 WSL2 上安装 Ubuntu 查询数据库服务IP地址 SQL Server 语音识别 dock 加速 vpn yaml Ultralytics 可视化 IO模型 Linux环境 wpf EtherNet/IP串口网关 EIP转RS485 EIP转Modbus EtherNet/IP网关协议 EIP转RS485网关 EIP串口服务器 嵌入式Linux IPC OpenSSH SVN Server tortoise svn ArkTs ArkUI gnu 中兴光猫 换光猫 网络桥接 自己换光猫 多端开发 智慧分发 应用生态 鸿蒙OS Mac内存不够用怎么办 flink IPv4 子网掩码 公网IP 私有IP 进程优先级 调度队列 进程切换 TrueLicense k8s二次开发 集群管理 IMX317 MIPI H265 VCU TCP协议 composer 存储维护 NetApp存储 EMC存储 元服务 应用上架 Logstash 日志采集 超融合 开发 su sudo autodl hosts ubuntu24.04.1 网络建设与运维 NLP模型 自学笔记 小米 澎湃OS Android deekseek sysctl.conf vm.nr_hugepages 读写锁 AI Agent 字节智能运维 fast 端口 查看 ss CDN Headless Linux 风扇控制软件 wsgiref Web 服务器网关接口 Qwen2.5-VL vllm word 内核 ardunio BLE rpa 极限编程 安装MySQL fstab 通信工程 毕业 nosql Linux find grep 钉钉 Reactor反应堆 iperf3 带宽测试 抓包工具 Web服务器 多线程下载工具 PYTHON windows 服务器安装 热榜 nvm whistle MDK 嵌入式开发工具 论文笔记 vnc 离线部署dify 搭建个人相关服务器 ebpf uprobe 合成模型 扩散模型 图像生成 zip unzip 鸿蒙开发 移动开发 网络爬虫 visual studio 电视剧收视率分析与可视化平台 流量运营 ranger MySQL8.0 宝塔面板无法访问 软件卸载 系统清理 java-rabbitmq kotlin 欧标 OCPP mcp服务器 client close Sealos 论文阅读 在线office Unity插件 网络搭建 神州数码 神州数码云平台 云平台 copilot 浏览器自动化 ros1 Noetic 20.04 apt 安装 UDP ip协议 top Linux top top命令详解 top命令重点 top常用参数 Linux 维护模式 kernel vu大文件秒传跨域报错cors 问题解决 ubuntu 18.04 win服务器架设 windows server MVS 海康威视相机 IO 粘包问题 notepad proxy模式 机柜 1U 2U yolov5 烟花代码 烟花 元旦 性能调优 安全代理 状态模式 隐藏文件 隐藏目录 管理器 通配符 磁盘清理 tar React Next.js 开源框架 export import save load 迁移镜像 云耀服务器 navicat hexo 多路转接 docker搭建pg docker搭建pgsql pg授权 postgresql使用 postgresql搭建 Linux权限 权限命令 特殊权限 conda配置 conda镜像源 大模型技术 本地部署大模型 CPU 使用率 系统监控工具 linux 命令 项目部署 MAC SecureCRT powerbi lb 协议 UEFI Legacy MBR GPT U盘安装操作系统 开源软件 话题通信 服务通信 查看显卡进程 fuser ArtTS MacOS 智能电视 ELF加载 容器技术 ABAP WebServer 国产数据库 瀚高数据库 数据迁移 下载安装 mm-wiki搭建 linux搭建mm-wiki mm-wiki搭建与使用 mm-wiki使用 mm-wiki详解 milvus 达梦 DM8 对比 工具 meld DiffMerge 服务器安全 网络安全策略 防御服务器攻击 安全威胁和解决方案 程序员博客保护 数据保护 安全最佳实践 端口聚合 windows11 MAVROS 四旋翼无人机 AI员工 System V共享内存 进程通信 fork wait waitpid exit docker desktop image 服务器扩容没有扩容成功 视频平台 录像 视频转发 视频流 deployment daemonset statefulset cronjob jellyfin 服务器部署 本地拉取打包 MobaXterm 网络文件系统 解决方案 Web应用服务器 js WINCC macOS Carla 智能驾驶 samba yum换源 搜狗输入法 中文输入法 mysql安装报错 windows拒绝安装 智慧农业 开源鸿蒙 团队开发 数字证书 签署证书 硅基流动 ChatBox fonts-noto-cjk K8S k8s管理系统 CosyVoice 华为证书 HarmonyOS认证 华为证书考试 服务器正确解析请求体 西门子PLC 通讯 接口优化 图片增强 增强数据