当前位置: 首页 > news >正文

环境搭建——Mysql、Redis、Rocket MQ部署

前言

        在搭建分布式系统时,MySQL、Redis 和 RocketMQ 是常用的基础服务。每个服务各自的功能不同,但它们在数据存储、缓存、消息队列等方面不可或缺。如果你是初学者,别担心,本文会一步步详细教你如何在服务器上通过 Docker 部署这些服务。

为什么使用 Docker?

  1. 统一部署环境
    Docker 可以在不同的操作系统上提供一致的运行环境,避免因为环境差异导致的问题。

  2. 快速部署和管理
    使用 Docker,只需配置简单的 docker-compose.yml 文件,就能快速启动或停止服务。

  3. 轻松实现数据持久化
    借助挂载功能,你可以把重要的数据保存到服务器磁盘,即使容器被销毁,数据依然安全。

开始之前的准备

在开始部署之前,我们需要完成以下准备工作:

  1. 购买服务器
    如果还没有服务器,可以选择腾讯云、阿里云等平台购买一个服务器。服务器的推荐配置:

    • 操作系统:CentOS 7(或更高版本)
    • CPU和内存:根据项目需求选择,一般 2 核 4GB 足够。
  2. 设置登录方式:密钥登录
    密钥登录比密码登录更加安全且便捷,以下是具体操作:

    • 在本地生成公钥和私钥,私钥会保存在你的电脑上。
    • 在云服务商的管理页面,上传公钥到服务器。
    • 使用工具(如 Xshell)通过私钥登录服务器。
  3. 安装 Docker 和 Docker Compose
    确保服务器上已经安装了 Docker 和 Docker Compose。它们是部署服务容器的核心工具。如果还没安装,可以参考之前的教程。

第一部分:部署前的准备工作

        在正式部署 MySQL、Redis 和 RocketMQ 之前,我们需要完成一些准备工作,以确保后续操作顺利进行。以下是详细步骤和原因说明。

1. 购买服务器

操作步骤:

  1. 打开云服务提供商(例如腾讯云、阿里云)官网。
  2. 注册或登录你的账号。
  3. 按需选择服务器配置,例如:
    • 操作系统:推荐 CentOS 7 或更高版本。
    • 配置:2 核 4GB 内存即可满足初学者的需求,存储大小视项目需求选择。
  4. 支付完成后,记录服务器的 公网 IP 地址,稍后需要用到。

为什么需要服务器?
本地电脑虽然也能运行 Docker,但外部设备无法直接访问。而服务器提供公网 IP,能让其他设备通过网络访问我们的服务。

2. 配置密钥登录(推荐)

为了安全起见,我们使用 密钥对 登录服务器,而不是传统的用户名和密码方式。

操作步骤:

  1. 在本地生成密钥对:

    • 打开命令行工具(Windows 用户可使用 Git Bash 或 PowerShell)。
    • 输入以下命令生成密钥对:
      ssh-keygen -t rsa -b 2048 -C "your_email@example.com"
      
    • 按提示选择保存路径,默认会保存在 ~/.ssh/id_rsa
    • 密钥对生成后,会得到两个文件:
      • id_rsa:这是私钥,请保存在本地,不能泄露。
      • id_rsa.pub:这是公钥,用于上传到服务器。
  2. 将公钥上传到云服务商:

    • 在云服务商管理控制台找到密钥管理安全组设置
    • id_rsa.pub 文件内容复制并上传。
    • 保存设置。
  3. 使用密钥登录服务器:

    • 打开 Xshell 或类似的远程连接工具。
    • 新建会话,输入服务器的公网 IP。
    • 登录方式选择“密钥”,导入生成的私钥 id_rsa
    • 点击连接,成功后即可进入服务器。

为什么使用密钥登录?
密钥登录比用户名密码更安全,因为即使别人知道你的用户名,也无法登录服务器,没有私钥就没法通过验证。

3. 安装 Docker 和 Docker Compose

我们使用 Docker 来运行服务容器,Docker Compose 用于批量管理多个容器。

操作步骤:

  1. 安装 Docker:

    • 运行以下命令安装 Docker:
      yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
      yum install -y docker-ce
      
    • 启动 Docker 服务并设置开机自启:
      service docker start
      chkconfig docker on
      
  2. 测试 Docker 是否安装成功:

    • 执行以下命令,查看 Docker 版本信息:
      docker version
      
    • 如果显示 Docker 的客户端和服务端信息,则说明安装成功。
  3. 安装 Docker Compose:

    • 下载 Docker Compose 二进制文件:
      curl -L "https://github.com/docker/compose/releases/download/2.12.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
      
    • 为文件赋予可执行权限:
      chmod +x /usr/local/bin/docker-compose
      
    • 测试安装是否成功:
      docker-compose --version
      
    • 如果显示版本信息,说明安装完成。

为什么需要安装 Docker 和 Docker Compose?
Docker 提供了轻量级虚拟化,用来运行独立的服务容器,而 Docker Compose 则能更方便地管理和编排多个容器。

4. 配置国内镜像加速

由于网络原因,直接使用官方镜像下载可能会很慢。我们通过配置国内镜像加速来提升速度。

操作步骤:

  1. 编辑 Docker 配置文件:
    vi /etc/docker/daemon.json
    
  2. 添加以下内容:
    {"registry-mirrors": ["https://mirror.ccs.tencentyun.com"],"live-restore": true
    }
    
  3. 重启 Docker 服务使配置生效:
    systemctl daemon-reload
    service docker restart
    
  4. 验证镜像加速是否生效:
    docker info
    
    检查输出中是否有 "Registry Mirrors" 一项,包含腾讯云的加速地址。

为什么要配置镜像加速?
国内网络环境可能导致从国外服务器下载镜像非常慢,配置国内镜像后速度会更快。

第二部分:MySQL 部署

        MySQL 是一个常用的关系型数据库管理系统,用于存储和管理项目中的核心数据。接下来,我们一步步在服务器上部署 MySQL,并确保可以通过客户端工具进行连接测试。

1. 创建挂载目录

在 Docker 中运行 MySQL 时,数据存储默认在容器内部。为了避免容器删除后数据丢失,我们需要将数据文件挂载到服务器的本地目录。

操作步骤:

  1. 登录到服务器。
  2. 创建一个用于存储 MySQL 数据的目录:
    mkdir -p /data/mysql/data
    mkdir -p /data/mysql/conf
    mkdir -p /data/mysql/logs
    
    • /data/mysql/data:存储数据库的数据文件。
    • /data/mysql/conf:存放 MySQL 的配置文件。
    • /data/mysql/logs:存储 MySQL 的日志文件。

为什么要创建这些目录?
挂载本地目录可以保证 MySQL 数据持久化,即使容器被删除,数据也不会丢失。

2. 创建 Docker Compose 配置文件

我们通过 Docker Compose 来管理 MySQL 容器。首先,我们需要编写 docker-compose.yml 文件。

操作步骤:

  1. /data/mysql 目录下创建 docker-compose.yml 文件:
    vi /data/mysql/docker-compose.yml
    
  2. 在文件中填写以下内容:
    version: '3.8'
    services:mysql:image: mysql:8.0container_name: mysqlports:- "3306:3306"  # 将服务器的3306端口映射到容器的3306端口environment:MYSQL_ROOT_PASSWORD: root  # 设置MySQL的root用户密码volumes:- /data/mysql/data:/var/lib/mysql  # 挂载数据目录- /data/mysql/conf:/etc/mysql/conf.d  # 挂载配置目录- /data/mysql/logs:/var/log/mysql  # 挂载日志目录restart: always
    
    • image:指定使用的 MySQL 镜像版本。
    • ports:将容器的端口映射到服务器。
    • environment:设置环境变量,例如数据库的 root 用户密码。
    • volumes:挂载本地目录到容器内部的路径。

为什么需要 docker-compose.yml 文件?
这个文件定义了 MySQL 容器的运行配置,便于后续通过 Docker Compose 管理和维护。

3. 启动 MySQL 容器

完成配置文件后,我们可以启动 MySQL 服务。

操作步骤:

  1. 进入 /data/mysql 目录:

    cd /data/mysql
    
  2. 使用 Docker Compose 启动 MySQL 容器:

    docker-compose up -d
    
    • -d 参数表示以后台模式运行容器。
  3. 查看运行状态:

    docker ps
    

    如果看到 mysql 容器正在运行,说明 MySQL 启动成功。

为什么需要使用 docker-compose up 命令?
这个命令根据 docker-compose.yml 文件的配置,启动 MySQL 容器并保持后台运行。

4. 配置防火墙规则

为了使本地客户端可以连接到 MySQL,需要在云服务器控制台中配置防火墙规则,允许 3306 端口访问。

操作步骤:

  1. 登录云服务商控制台,找到 安全组 设置。
  2. 添加一条规则,允许 3306 端口的 TCP 流量访问。
  3. 保存设置。

为什么要配置防火墙规则?
防火墙默认禁止外部访问服务器的端口。通过添加规则,我们允许本地电脑通过网络连接到 MySQL。

5. 测试 MySQL 连接

我们使用数据库管理工具(如 Navicat Premium)来测试连接。

操作步骤:

  1. 打开 Navicat,新建一个连接:
    • 类型:MySQL
    • 主机:服务器公网 IP
    • 端口:3306
    • 用户名:root
    • 密码:root(与 docker-compose.yml 中的配置一致)
  2. 点击“测试连接”,如果显示连接成功,说明配置无误。
  3. 连接成功后,右键连接,新建一个数据库(例如 test_db),以确保 MySQL 可以正常使用。

为什么要测试连接?
通过客户端工具测试连接,可以确认 MySQL 是否正常运行,并验证网络连接是否配置正确。

第三部分:Redis 部署

        Redis 是一个高性能的键值对存储数据库,常用作缓存、消息队列或者会话存储。我们将逐步部署 Redis 并进行连接测试。

1. 创建挂载目录

和 MySQL 一样,Redis 运行时的数据默认存储在容器内部。为了保证数据持久化,我们需要创建挂载目录。

操作步骤:

  1. 登录到服务器。
  2. 创建用于 Redis 的数据和配置目录:
    mkdir -p /data/redis/data
    mkdir -p /data/redis/conf
    
    • /data/redis/data:存储 Redis 的数据文件。
    • /data/redis/conf:存放 Redis 的配置文件。

为什么要创建挂载目录?
挂载本地目录可以避免容器删除后丢失数据,方便迁移或备份。

2. 创建 Redis 配置文件

Redis 启动时需要一个配置文件,我们手动创建并配置。

操作步骤:

  1. /data/redis/conf 目录下创建配置文件:
    vi /data/redis/conf/redis.conf
    
  2. 添加以下配置内容:
    bind 0.0.0.0       # 允许所有 IP 访问 Redis
    protected-mode no  # 关闭保护模式,允许外部访问
    port 6379          # Redis 默认端口
    dir /data/redis/data # 数据存储目录
    appendonly yes     # 启用 AOF 持久化机制
    
    • bind:设置允许访问 Redis 的 IP 地址。
    • protected-mode:关闭保护模式以便外部设备访问。
    • appendonly:开启持久化,保证数据在服务重启后不会丢失。

为什么需要 Redis 配置文件?
Redis 配置文件定义了服务的运行参数,如端口、存储路径等,确保服务运行符合需求。

3. 创建 Docker Compose 配置文件

接下来,我们编写 docker-compose.yml 文件,定义 Redis 容器的运行环境。

操作步骤:

  1. /data/redis 目录下创建 docker-compose.yml 文件:
    vi /data/redis/docker-compose.yml
    
  2. 添加以下内容:
    version: '3.8'
    services:redis:image: redis:6.2container_name: redisports:- "6379:6379"  # 将 Redis 容器的6379端口映射到服务器volumes:- /data/redis/data:/data  # 挂载数据目录- /data/redis/conf/redis.conf:/usr/local/etc/redis/redis.conf  # 挂载配置文件command: ["redis-server", "/usr/local/etc/redis/redis.conf"]restart: always
    
    • image:指定 Redis 的镜像版本。
    • volumes:挂载本地目录到容器内部路径。
    • command:指定 Redis 启动时加载配置文件。

为什么需要 docker-compose.yml 文件?
它定义了 Redis 容器的运行环境和挂载目录,方便管理和维护。

4. 启动 Redis 容器

完成配置后,我们启动 Redis 服务。

操作步骤:

  1. 进入 /data/redis 目录:

    cd /data/redis
    
  2. 启动 Redis 容器:

    docker-compose up -d
    
    • -d 参数让容器在后台运行。
  3. 查看 Redis 容器状态:

    docker ps
    

    如果看到 redis 容器正在运行,说明启动成功。

为什么需要 docker-compose up 命令?
它根据 docker-compose.yml 文件配置启动 Redis 容器,并使其运行在后台。

5. 配置防火墙规则

为了让外部客户端能够连接 Redis,需要开放服务器的 6379 端口。

操作步骤:

  1. 登录云服务商控制台,找到 安全组
  2. 添加一条规则,允许 6379 端口的 TCP 流量访问。
  3. 保存设置。

为什么需要配置防火墙?
默认情况下,云服务器的端口是关闭的。通过配置防火墙规则,我们允许外部设备访问 Redis。

6. 测试 Redis 连接

我们使用客户端工具(如 Another Redis Desktop Manager)测试 Redis 的连接。

操作步骤:

  1. 打开客户端工具,新建一个 Redis 连接:
    • 地址:服务器公网 IP
    • 端口:6379
    • 密码:无(默认不设置密码)
  2. 点击“测试连接”,如果显示成功,说明 Redis 已正确运行。
  3. 在客户端中,尝试执行以下命令测试读写功能:
    set test_key "Hello Redis"
    get test_key
    
    如果返回值为 "Hello Redis",说明 Redis 功能正常。

为什么要测试 Redis 连接?
通过测试连接和执行命令,可以验证 Redis 是否部署成功,并确保网络配置无误。

第四部分:RocketMQ 部署

        RocketMQ 是一款高性能的分布式消息队列系统,常用于异步通信、流处理和事件驱动架构中。接下来我们将分步部署 RocketMQ 服务。

1. 创建挂载目录

为了确保数据和配置的持久化,第一步是创建 RocketMQ 所需的挂载目录。

操作步骤:

  1. 登录服务器。
  2. 执行以下命令创建挂载目录:
    mkdir -p /data/rocketmq/{logs,store,conf}
    
    • /data/rocketmq/logs:存储 RocketMQ 的日志文件。
    • /data/rocketmq/store:存储消息数据。
    • /data/rocketmq/conf:存储 RocketMQ 的配置文件。

为什么要创建挂载目录?
挂载目录可以防止容器停止或删除后丢失重要数据,方便后续迁移或恢复。

2. 创建 RocketMQ 配置文件

RocketMQ 服务由两个主要组件组成:

  • NameServer:管理和路由消息队列。
  • Broker:负责消息的存储和传递。

我们需要分别为 NameServer 和 Broker 创建配置文件。

操作步骤:

  1. /data/rocketmq/conf 目录下创建 broker.conf 文件:
    vi /data/rocketmq/conf/broker.conf
    
  2. 添加以下内容:
    brokerClusterName = DefaultCluster
    brokerName = broker-a
    brokerId = 0
    deleteWhen = 04
    fileReservedTime = 48
    flushDiskType = ASYNC_FLUSH
    storePathRootDir = /data/rocketmq/store
    storePathCommitLog = /data/rocketmq/store/commitlog
    namesrvAddr = localhost:9876
    
    • brokerClusterName:指定集群名称。
    • brokerId:0 表示主节点,非 0 表示从节点。
    • deleteWhen:指定日志删除时间,默认每天凌晨 4 点。
    • flushDiskType:异步刷盘,提升性能。
    • namesrvAddr:NameServer 地址。

为什么需要配置文件?
RocketMQ 的配置文件定义了服务的关键参数,包括集群信息、存储路径和刷盘策略,确保服务正常运行。

3. 创建 Docker Compose 配置文件

使用 Docker Compose 管理 RocketMQ 的服务部署,包括 NameServer 和 Broker。

操作步骤:

  1. /data/rocketmq 目录下创建 docker-compose.yml 文件:
    vi /data/rocketmq/docker-compose.yml
    
  2. 添加以下内容:
    version: '3.8'
    services:namesrv:image: apache/rocketmq:4.9.4container_name: rmq-namesrvports:- "9876:9876"volumes:- /data/rocketmq/logs:/home/rocketmq/logs- /data/rocketmq/store:/home/rocketmq/storecommand: ["sh", "-c", "cd /home/rocketmq && bin/mqnamesrv"]restart: alwaysbroker:image: apache/rocketmq:4.9.4container_name: rmq-brokerports:- "10911:10911"- "10909:10909"volumes:- /data/rocketmq/logs:/home/rocketmq/logs- /data/rocketmq/store:/home/rocketmq/store- /data/rocketmq/conf/broker.conf:/home/rocketmq/conf/broker.confcommand: ["sh", "-c", "cd /home/rocketmq && bin/mqbroker -c /home/rocketmq/conf/broker.conf"]depends_on:- namesrvrestart: always
    
    • NameServer 映射端口 9876,负责路由和管理。
    • Broker 映射端口 10911(数据传输)和 10909(管理)。

为什么使用 Docker Compose?
通过 Docker Compose,可以一键启动 NameServer 和 Broker,并且管理起来更加方便。

4. 授权挂载目录权限

RocketMQ 容器需要访问挂载目录,因此必须确保正确的权限。

操作步骤:

  1. 为挂载目录授权:
    chmod -R 777 /data/rocketmq
    
  2. 确保 RocketMQ 容器能正常读取和写入这些目录。

为什么要设置权限?
挂载目录权限不足会导致容器无法读写数据,从而导致服务无法正常运行。

5. 启动 RocketMQ 服务

完成所有配置后,我们可以启动 RocketMQ 的 NameServer 和 Broker 服务。

操作步骤:

  1. 进入 RocketMQ 的目录:
    cd /data/rocketmq
    
  2. 启动容器:
    docker-compose up -d
    
  3. 查看容器运行状态:
    docker ps
    
    • 确认 rmq-namesrvrmq-broker 容器都在运行。

为什么需要检查容器状态?
确认服务启动正常,避免配置错误导致服务异常。

6. 配置防火墙规则

为了让外部客户端能够访问 RocketMQ 服务,需要开放以下端口:

  • NameServer:9876
  • Broker:1091110909

操作步骤:

  1. 登录云服务商控制台,找到 安全组
  2. 添加以下规则:
    • TCP 端口98761091110909
    • 源 IP:允许所有或指定 IP。

为什么需要配置防火墙?
防火墙规则允许外部客户端访问服务,确保消息队列正常通信。

7. 测试 RocketMQ 服务

我们通过 RocketMQ Console 或客户端工具测试服务是否部署成功。

操作步骤:

  1. 启动 RocketMQ Console:
    • 配置 Console 的用户名密码和 NameServer 地址。
    • 浏览器访问 http://<服务器IP>:8080
  2. 使用客户端测试消息发布与消费:
    • 发布消息到某个主题。
    • 消费者订阅该主题并接收消息。

为什么要测试服务?
通过测试验证 RocketMQ 是否正常运行,并确保服务能满足实际业务需求。

第五部分:总结

1. 部署完成的验证

        在完成 MySQL、Redis 和 RocketMQ 的部署后,确保每个服务都能正常运行是至关重要的。以下是验证步骤:

  • MySQL:通过 Navicat Premium 或其他数据库客户端连接到 MySQL 服务,测试能否正常建立连接并进行操作,如创建数据库、插入数据等。
  • Redis:使用 Another Redis 或直接通过命令行工具进行连接测试,确保能执行 SETGET 操作。也可以通过浏览器访问指定端口来验证服务是否正常。
  • RocketMQ:通过 RocketMQ Console 或客户端工具连接到 RocketMQ 服务,测试消息发布和消费功能是否正常,确保消息队列能够正常工作。

同时,防火墙配置要确保外部访问能够顺利连接服务:

  • 在腾讯云等云平台上,需要为 MySQL、Redis 和 RocketMQ 所需的端口设置正确的安全组规则,允许外部 IP 进行访问。

挂载目录配置的合理性也是一个关键:

  • 确保容器挂载目录的配置正确,并且具有足够的权限来确保数据的持久化。这不仅有助于保证服务的稳定性,也能在需要迁移时简化操作。

2. 经验分享与问题处理

在部署过程中,可能会遇到一些常见问题,以下是一些问题及其解决方法:

  • 端口冲突:如果在启动容器时遇到端口冲突,确保没有其他服务占用了相同端口。可以通过更改 Docker Compose 配置文件中的端口映射来解决。

    解决方法:修改 docker-compose.yml 文件中的端口映射(例如,修改 MySQL 的端口为其他未占用的端口)。

  • 权限不足:如果出现容器无法访问挂载目录的情况,可能是由于权限不足导致的。确保目录的读写权限已正确设置。

    解决方法:执行 chmod -R 777 /data/rocketmq 等命令来赋予相应的权限,确保容器能够访问目录。

  • 容器无法启动:容器启动失败通常是由于配置错误或资源不足引起的。可以通过查看容器日志来排查问题。

    解决方法:使用 docker logs <container_name> 查看容器日志,分析错误信息,并根据错误提示调整配置文件或资源设置。

通过日志分析和容器状态检查,可以快速定位问题的根本原因并进行修复。

3. 总结

通过本次教程,我们完成了 MySQL、Redis 和 RocketMQ 的部署,并确保它们能在 Docker 环境中稳定运行。部署完成后,确保:

  • 服务能够正常连接和操作。
  • 防火墙和挂载目录设置合理,确保数据的持久化和服务的外部可访问性。

        在实际部署过程中,可能会遇到一些常见问题,如端口冲突、权限不足等,通过日志分析和容器状态检查,我们能够有效定位并解决这些问题,确保服务能够平稳运行。

相关文章:

环境搭建——Mysql、Redis、Rocket MQ部署

前言 在搭建分布式系统时&#xff0c;MySQL、Redis 和 RocketMQ 是常用的基础服务。每个服务各自的功能不同&#xff0c;但它们在数据存储、缓存、消息队列等方面不可或缺。如果你是初学者&#xff0c;别担心&#xff0c;本文会一步步详细教你如何在服务器上通过 Docker 部署这…...

Pycharm连接远程解释器

这里写目录标题 0 前言1 给项目添加解释器2 通过SSH连接3 找到远程服务器的torch环境所对应的python路径&#xff0c;并设置同步映射&#xff08;1&#xff09;配置服务器的系统环境&#xff08;2&#xff09;配置服务器的conda环境 4 进入到程序入口&#xff08;main.py&#…...

git的基本操作

创建分支&#xff1a; 1&#xff0c;拉去develop代码&#xff1b; 2&#xff0c;git checkout develop切换到develop&#xff1b; 3&#xff0c;git branch lyb/lyb_develop &#xff1b; 4&#xff0c;git push --set-upstream origin lyb/lyb_develop 切换分支&#xff0c;上…...

Linux软件包管理工具概览

目录 RPM&#xff08;RedHat Package Manager&#xff09; DPKG&#xff08;Debian Packager&#xff09; APT&#xff08;Advanced Package Tool&#xff09; YUM&#xff08;Yellowdog Updater, Modified&#xff09; DNF&#xff08;Dandified YUM&#xff09; 总结 在…...

unity学习16:unity里向量的计算,一些方法等

目录 1 unity里的向量&#xff1a; 2 向量加法 2.1 向量加法的几何意义 2.2向量加法的标量算法 3 向量减法 3.1 向量减法的几何意义 3.2 向量减法的标量算法 4 向量的标量乘法 5 向量之间的乘法要注意是左乘 还是右乘 5.1 注意区别 5.2 向量&#xff0c;矩阵&#x…...

HTML拖拽功能(纯html5+JS实现)

1、HTML拖拽--单元行拖动 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title><…...

w158医院资源管理系统的设计与实现

&#x1f64a;作者简介&#xff1a;多年一线开发工作经验&#xff0c;原创团队&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的网站项目。 代码可以查看文章末尾⬇️联系方式获取&#xff0c;记得注明来意哦~&#x1f339;赠送计算机毕业设计600个选题excel文…...

【计算机网络】lab3 802.11 (无线网络帧)

&#x1f308; 个人主页&#xff1a;十二月的猫-CSDN博客 &#x1f525; 系列专栏&#xff1a; &#x1f3c0;计算机网络_十二月的猫的博客-CSDN博客 &#x1f4aa;&#x1f3fb; 十二月的寒冬阻挡不了春天的脚步&#xff0c;十二点的黑夜遮蔽不住黎明的曙光 目录 1. 前言 2.…...

linux进程

课本概念&#xff1a;程序的⼀个执行实例&#xff0c;正在执行的程序等内核观点&#xff1a;担当分配系统资源&#xff08;CPU时间&#xff0c;内存&#xff09;的实体。 进程信息被放在一个叫做进程控制块的数据结构中&#xff0c;可以理解为进程属性的集合.课本上称之为PCB&…...

pytest-allure框架简单封装----测试报告

安装allure-commandline---可以支持allure命令 把对应的压缩包解压后,把xxx/bin配置到环境变量的path去 可以输入allure -version检查版本 pip install allure-pytest2.11.1 生成测试报告 import pytest pytest_args ["-s","-v","--capturesys…...

【2025最新计算机毕业设计】基于SpringBoot+Vue奶茶点单系统(高质量源码,提供文档,免费部署到本地)

作者简介&#xff1a;✌CSDN新星计划导师、Java领域优质创作者、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行前辈交流。✌ 主要内容&#xff1a;&#x1f31f;Java项目、Python项目、前端项目、PHP、ASP.NET、人工智能…...

HTML中最基本的东西

本文内容的标签&#xff0c;将是看懂HTML的最基本之基本 &#xff0c;是跟您在写文章时候一样内容。一般想掌握极其容易&#xff0c;但是也要懂得如何使用&#xff0c;过目不忘&#xff0c;为手熟尔。才是我们学习的最终目的。其实边看边敲都行&#xff0c;或者是边看边复制粘贴…...

Open FPV VTX开源之ardupilot配置

Open FPV VTX开源之ardupilot配置 1. 源由2. 配置3. 总结4. 参考资料5. 补充5.1 飞控固件版本5.2 配置Ardupilot的BF OSD5.3 OSD偏左问题 1. 源由 飞控嵌入式OSD - ardupilot配置使用ardupliot配套OSD图片。 Choose correct font depending on Flight Controller SW. ──>…...

基于OQuPy的量子编程实例探究:理论、实践与展望

基于OQuPy的量子编程探究:理论、分析与实践 一、引言 1.1 研究背景与意义 近年来,量子计算作为一种革命性的计算范式,在科学界与产业界引发了广泛关注。它依托量子力学原理,运用量子比特(qubit)进行信息处理,与传统计算相比,具备并行处理、指数级加速等显著优势,为解…...

深入理解 ECMAScript 2024 新特性:正则表达式 /v 标志

ECMAScript 2024 &#xff08;ES15&#xff09;标准引入了新的正则表达式标志 /v&#xff0c;这一新增功能不仅优化了多行匹配的处理&#xff0c;还增加了对特殊字符匹配的支持。这一变革对于需要处理复杂文本数据的应用场景尤为重要&#xff0c;比如日志分析、代码审核等。接下…...

iOS 逆向学习 - Inter-Process Communication:进程间通信

iOS 逆向学习 - Inter-Process Communication&#xff1a;进程间通信 一、进程间通信概要二、iOS 进程间通信机制详解1. URL Schemes2. Pasteboard3. App Groups 和 Shared Containers4. XPC Services 三、不同进程间通信机制的差异四、总结 一、进程间通信概要 进程间通信&am…...

Prompt工程框架介绍与场景选择

文章目录 Prompt工程框架介绍1. CREATE框架2. RACE框架3. RISE框架4. ROSES框架5. E.R.A框架6. SAGE框架7. CARE框架8. PEAR框架9. TIER框架10. LEAP框架11. DEEP框架12. WISE框架13. FOCUS框架14. CLEAR框架15. SMART框架16. CLEAR框架17. LEAN框架18. BRIEF框架19. FAST框架2…...

信号量机制之苹果-橘子问题

桌上有一空盘&#xff0c;允许存放一种水果。爸爸可向盘中放苹果&#xff0c;也可向盘中放橘子&#xff0c;儿子专等吃盘中的橘子&#xff0c;女儿专等吃盘中的苹果。规定当盘空时一次只能放一个水果供吃者取用。 要求&#xff1a;请用信号量机制实现爸爸、儿子、女儿三个并发…...

工业路由器和工业交换机,如何打造高效稳定的工业网络?

工业路由器和工业交换机各有千秋&#xff0c;但如何将它们完美结合&#xff0c;构建稳定高效的工业网络&#xff1f;答案就在这里&#xff01; 工业物联网&#xff08;IIoT&#xff09;是高效、稳定的工业网络成为智慧工厂、工业自动化和远程监控等场景的基础支撑。工业路由器…...

【IDEA 2024】学习笔记--文件选项卡

在我们项目的开发过程中&#xff0c;由于项目涉及的类过多&#xff0c;以至于我们会打开很多的窗口。使用IDEA默认的配置&#xff0c;个人觉得十分不便。 目录 一、设置多个文件选项卡按照文件字母顺序排列 二、设置多个文件选项卡分行显示 一、设置多个文件选项卡按照文件字…...

LabVIEW光流算法的应用

该VI展示了如何使用NI Vision Development Module中的光流算法来计算图像序列中像素的运动矢量。通过该方法&#xff0c;可以实现目标跟踪、运动检测等功能&#xff0c;适用于视频处理、机器人视觉和监控领域。程序采用模块化设计&#xff0c;包含图像输入、算法处理、结果展示…...

WPF 如何添加系统托盘

1.使用Nuget 添加 handycontrol cs xmlns:hc"https://handyorg.github.io/handycontrol" 2.窗体添加控件cs <hc:NotifyIcon x:Name"NotifyIconContextContent" Text"软件名称" ContextMenu"{StaticResource ContextMenu}" Click&…...

小游戏前端地区获取

目前前端获取除了太平洋&#xff0c;没有其它的了。 //在JS中都是使用的UTF-8&#xff0c;然而requst请求后显示GBK却是乱码&#xff0c;对传入的GBK字符串&#xff0c;要用数据流接收&#xff0c;responseType: "arraybuffer" tt.request({url: "https://whoi…...

美摄科技为企业打造专属PC端视频编辑私有化部署方案

美摄科技&#xff0c;作为视频编辑技术的先行者&#xff0c;凭借其在多媒体处理领域的深厚积累&#xff0c;为企业量身打造了PC端视频编辑私有化部署解决方案&#xff0c;旨在帮助企业构建高效、安全、定制化的视频创作平台&#xff0c;赋能企业内容创新&#xff0c;提升品牌影…...

【0x005B】HCI_Write_Default_Erroneous_Data_Reporting命令详解

目录 一、命令概述 二、命令格式及参数 2.1. HCI_Write_Default_Erroneous_Data_Reporting命令格式 2.2. Erroneous_Data_Reporting 三、生成事件及参数 3.1. HCI_Command_Complete事件 3.2. 状态码(Status) 四、命令执行流程 4.1. 命令发起阶段(主机端) 4.2. 命…...

1月13日学习

[HITCON 2017]SSRFme 直接给了源代码&#xff0c;题目名称还是ssrf&#xff0c;那么该题大概率就是SSRF的漏洞&#xff0c;进行代码审计。 <?php// 检查是否存在 HTTP_X_FORWARDED_FOR 头&#xff0c;如果存在&#xff0c;则将其拆分为数组&#xff0c;并将第一个 IP 地址…...

数据平台浅理解

定义 数据平台架构是指用于收集、存储、处理和分析数据的一系列组件、技术和流程的整体架构设计。它就像是一个复杂的数据生态系统的蓝图&#xff0c;旨在高效地管理数据从产生源头到产生价值的整个生命周期。 主要层次 数据源层 这是数据的起点&#xff0c;包含各种类型的数据…...

高通,联发科(MTK)等手机平台调优汇总

一、常见手机型号介绍&#xff1a; ISP除了用在安防行业&#xff0c;还有手机市场&#xff0c;以及目前新型的A/VR眼睛&#xff0c;机器3D视觉机器人&#xff0c;医疗内窥镜这些行业。 下面是一些最近几年发布的,,,旗舰SOC型号&#xff1a; 1.联发科&#xff1a;天玑92…...

win10 Outlook(new) 企业邮箱登录 登录失败。请在几分钟后重试。

windows系统经常弹出使用Outlook(new&#xff09;&#xff0c;自动切过去。 但是登录企业的内网邮箱&#xff0c;折腾了好几次都使用不了。排查网络等问题&#xff0c;在社区找到了答案。 推出一年多不支持企业账户&#xff0c;所以之前的折腾都是浪费时间。 因为这个答案不太…...

Sentaurus TCAD学习笔记:transform指令

目录 一、transform指令简介二、transform指令的实现1.cut指令2.flip指令3.rotate指令4.stretch指令5.translate指令6.reflect指令 三、transform指令示例 一、transform指令简介 在Sentaurus中&#xff0c;如果需要对器件进行翻转、平移等操作&#xff0c;可以通过transform指…...

SpringBoot+Lombok项目实体属性名xXxx格式,前端接收不到

问题解析 今天发现后端传给前端的实体类中&#xff0c;有属性为xXxxx格式的&#xff0c;前端也使用相同名称接收&#xff0c;结果却不显示值&#xff01;研究了一会发现接口请求回来后&#xff0c;原xXxxx的属性名&#xff0c;会被转为全小写。具体原因为&#xff1a;使用Lombo…...

初识JAVA-面向对象的三大特征之多态

1. 重温面向对象 面向对象是一种解决问题的思想&#xff0c;它把计算机程序看作是各种对象组合起来的。每个对象都有自己的数据&#xff08;属性&#xff09;和行为&#xff08;方法&#xff09;&#xff0c;主要依靠对象之间的交互来解决和实现问题。Java是一门纯面向对象的语…...

测试链接 勿看

这里写自标题 自定义定阿萨德义目录标题 欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题&#xff0c;有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants 创建一个自定…...

SQL中的行转列,列转行

SQL中的行列转换 1. 导入 有这样两张表&#xff0c;这两张表如何互相转换 student_table score_table 2. 行转列 使用 UNION ALL -- 行转列 SELECT name,语文 as subject,chinese_score as score FROM student_table UNION ALL SELECT name,数学 as subject,math_score…...

Windows的Redis查看自己设置的密码并更改设置密码

查看密码 由于我的Redis安装很久了&#xff0c;所以忘记是否有设置密码&#xff0c;查看步骤如下&#xff1a; 启动redis&#xff0c;启动流程可以看这篇文章&#xff1a;https://blog.csdn.net/changyana/article/details/127679871 在redis安装目录下打开redis-cli.exe&…...

初阶数据结构【队列及其接口的实现】

目录 前言一、队列的概念及结构二、队列的实现方式三、队列的实现3.1 基本结构3.2 队列基本功能接口初始化队列销毁队列 3.3 入队列接口3.4 出队列接口3.5 队列的其它接口获取队列头部元素获取队列队尾元素检测队列是否为空获取队列中有效元素个数 3.6 测试 总结 前言 上一期我…...

dockerfile1.0

docker的数据卷 docker file ------------- 自动自定义镜像 docker的数据卷&#xff1a; 容器与宿主机之间&#xff0c;或者容器和容器之间的数据共享&#xff08;目录&#xff09; 创建容器的时候&#xff0c;通过指定目录&#xff0c;实现容器于宿主机之间&#xff0c;或…...

CES 2025|全面拥抱端侧AI,美格智能在CES发布系列创新成果

要点&#xff1a; ▶ 在AI机器人领域&#xff0c;以高算力AI模组助力发布“通天晓”人形机器人和2款全新微小型AI机器人 ▶ 在AI硬件领域&#xff0c;发布消费级AI智能体产品——AIMO&#xff0c;引领个人专属的大模型时代 ▶ 在5G通信领域&#xff0c;发布全新5GWiFi-7 CPE…...

【9.1】Golang后端开发系列--Gin快速入门指南

文章目录 一、引言 &#x1f31f;二、Gin 框架概述 &#x1f4d6;&#xff08;一&#xff09;什么是 Gin&#xff08;二&#xff09;为什么选择 Gin 三、安装 Gin 框架 &#x1f4e6;&#xff08;一&#xff09;安装 Go 语言环境&#xff08;二&#xff09;使用 Go Modules 安装…...

电商系统,核心通用架构案例设计方案浅析

文章目录 一、用户系统案例设计1、用户信息的存储方案2、用户注册确保唯一3、用户数据合并方案4、用户敏感信息加密存储5、数据传输安全性6、多用户数据隔离性7、防止恶意注册8、用户好友关系存储方案9、用户登录token方案10、会员优先处理设计 二、网关系统设计1、网关的功能2…...

易飞ERP 9.2 安装包 百度云盘 下载

易飞9.2是鼎捷数智依托四十多年实践经验&#xff0c;面向中小企业的全面ERP解决方案‌。 以下是关于易飞9.2的详细介绍&#xff1a; ‌发布与更新‌&#xff1a; ‌发布时间‌&#xff1a;易飞V9.2新版发布于2023年9月。 ‌核心功能‌&#xff1a; ‌便捷高效‌&#xff1…...

3D目标检测数据集——Waymo数据集

Waymo数据集簡介 发布首页&#xff1a;https://waymo.com/open/ 论文&#xff1a;https://openaccess.thecvf.com/content_CVPR_2020/papers/Sun_Scalability_in_Perception_for_Autonomous_Driving_Waymo_Open_Dataset_CVPR_2020_paper.pdf github&#xff1a;https://github.…...

LSA更新、撤销

LSA的新旧判断&#xff1a; 1.seq&#xff0c;值越大越优先 2.chksum&#xff0c;值越大越优先 3.age&#xff0c;本地的LSA age和收到的LSA age作比较 如果差值<900s&#xff0c;认为age一致&#xff0c;保留本地的&#xff1a;我本地有一条LSA是100 你给的是400 差值小于…...

Redis复制(replica)

Redis主从复制 [Redis主从复制]&#xff08;replica&#xff09;是一个多Redis实例进行数据同步的过程&#xff0c;其中一个实例是主实例&#xff08;Master&#xff09;&#xff0c;其他实例是从实例&#xff08;Slave&#xff09;。主实例负责处理命令请求&#xff0c;而从实…...

Ubuntu上,ffmpeg如何使用cuda硬件解码、编码、转码加速

本文使用 Ubuntu 环境。Ubuntu 直接使用 APT 安装的就支持 CUDA 加速。本文使用这样下载的版本进行演示&#xff0c;你自己编译或者其他源的版本可能会不同。 ffmpeg 的一些介绍&#xff0c;以及 macOS 版本的 ffmpeg 硬件加速请见《macOS上如何安装&#xff08;不需要编译安装…...

磁盘满造成业务异常问题排查

最近遇到一个因为磁盘满导致的问题&#xff0c;分享一下&#xff0c;希望能够帮助到以后遇到同样问题的朋友。 早上突然收到业务老师反馈说&#xff1a;上传文件不能正常上传了。 想想之前都好好的&#xff0c;最近又没有更新&#xff0c;为什么突然不能使用了呢&#xff1f;…...

vim基本命令(vi、工作模式、普通模式、插入模式、可视模式、命令行模式、复制、粘贴、插入、删除、查找、替换)

1. Vim的作用 1.1. 文本编辑 1.1.1. 基础文本编辑功能 Vim是一个功能强大的文本编辑器&#xff0c;它可以用来创建、修改和保存各种文本文件。无论是编写简单的文本笔记&#xff0c;还是复杂的代码文件&#xff0c;Vim都能胜任。例如&#xff0c;我们可以用它来编写Python脚…...

vue的KeepAlive应用(针对全部页面及单一页面进行缓存)

KeepAlive的作用是缓存包裹在其中的动态切换组件 当一个组件在 中被切换时&#xff0c;它的 activated 和 deactivated 生命周期钩子将被调用&#xff0c;用来替代 mounted 和 unmounted。这适用于 的直接子节点及其所有子孙节点。 缓存全部页面 将app.vue中的路由出口改为&am…...

Big Model weekly | 第53期

点击蓝字 关注我们 AI TIME欢迎每一位AI爱好者的加入&#xff01; 01 CodeRosetta: Pushing the Boundaries of Unsupervised Code Translation for Parallel Programming 近期在大型语言模型&#xff08;LLMs&#xff09;的进展重新激发了自动编程语言翻译的兴趣。特别是编码器…...

基于STM32设计的粮食仓库(粮仓)环境监测系统

一、前言 1.1 项目开发背景 随着现代农业的发展和粮食储存规模的扩大&#xff0c;粮仓环境的智能化监控需求日益增长。传统的粮仓管理方式通常依赖人工检测和定期巡查&#xff0c;效率低下且容易出现疏漏&#xff0c;无法及时发现潜在问题&#xff0c;可能导致粮食受潮、霉变…...