教程:postman的平替hoppscotch,又叫postwoman,hoppscotch的docker-compose安装过程

news2024/11/28 23:35:09

目录

  • 1. 背景
  • 2. 前期准备
    • 2.1 准备docker-compose文件,两个版本,一个3合1,一个分开
      • 2.1.1 3合1版本(推荐)
      • 2.1.2 独立版本
    • 2.2 准备安装nginx-proxy-manager(可选)
    • 2.2 准备.env文件
      • 2.2.1 默认ip的.env
      • 2.2.2 二级域名版的.env(推荐)
  • 3. 安装
  • 4. 解决数据库迁移报错
    • 4.1 3合1版本
    • 4.2 独立版本
  • 5. 安装浏览器插件
  • 6. 配置github登录选项(可选)
  • 7. 官方相关文档

1. 背景

postman强制登录,不登录不给用,登录也就算了,还默认自动同步,这样的话就尴尬了。有些私人的接口啊,私人的账密啊,私人的token啊,真心不敢同步到别人的服务器上,把隐私安全寄托在别人的节操上。

一直在找平替,也有几家国产,现在不都喊着支持国货嘛,试用了一下,也是各种登录,各种同步,各种大版本升级,然后小版本的内容就不见了,寻寻觅觅的,可算是找到了一款开源的平替。

hoppscotch,以前还叫做postwoman,看看这个命名,想干啥懂的都懂。

看了开源代码的文档,只说了原生docker的用法,自带的docker-compose又很多坑,本科普就是把这个过程捋一遍,理论上照着做就行!

2. 前期准备

2.1 准备docker-compose文件,两个版本,一个3合1,一个分开

  • 稍微介绍一下,hoppscotch的服务容器分为4个,1个容器是api测试平台hoppscotch-frontend,端口是3000,(也就是常用的使用界面),即前台界面,如图,眼熟吧,跟postman差不多,主要使用的也是这个:
    在这里插入图片描述

  • 1个容器是后端接口hoppscotch-backend,端口是3170,没啥好说,所有核心服务都在这个里

  • 1个容器是后台管理平台hoppscotch-admin,端口是3100,如图
    在这里插入图片描述

  • 还有一个容器就是postgresql数据库了,hoppscotch不能换数据库,说是用了postgresql的什么json独有的功能,不能换mysql

2.1.1 3合1版本(推荐)

  • 推荐使用这个版本,可以直接把3个服务合成1个启动
  • 只需要确认一下容器hoppscotch-db数据库配置就行,完全可以一点不改,直接拿来就用
# To make it easier to self-host, we have a preset docker compose config that also
# has a container with a Postgres instance running.
# You can tweak around this file to match your instances

services:
  # The service that spins up all 3 services at once in one container
  hoppscotch-aio:
    container_name: hoppscotch-aio
    image: hoppscotch/hoppscotch
    restart: unless-stopped
    env_file:
      - ./.env
    depends_on:
      hoppscotch-db:
        condition: service_healthy
    ports:
      - "3000:3000"
      - "3100:3100"
      - "3170:3170"
      - "3080:80"

  # The preset DB service, you can delete/comment the below lines if
  # you are using an external postgres instance
  # This will be exposed at port 5432
  hoppscotch-db:
    image: postgres:15
    ports:
      - "5432:5432"
    volumes:
      - ./postgres-data:/var/lib/postgresql/data
    environment:
      # The default user defined by the docker image
      POSTGRES_USER: postgres
      # NOTE: Please UPDATE THIS PASSWORD!
      POSTGRES_PASSWORD: password
      POSTGRES_DB: hoppscotch
    healthcheck:
      test:
        [
          "CMD-SHELL",
          "sh -c 'pg_isready -U $${POSTGRES_USER} -d $${POSTGRES_DB}'",
        ]
      interval: 5s
      timeout: 5s
      retries: 10

2.1.2 独立版本

  • 这个版本就是多个容器都分开了,各起各的
  • 直接在下面的docker-compose里修改成你自己版本的就行,主要就是改一下数据库连接
  • hoppscotch-backend容器里的DATABASE_URL,数据库连接,账号是postgresql默认的,可以不改,密码如果想改,要改对应的hoppscotch-db容器里的postgresql配置里的POSTGRES_PASSWORD字段,172.17.0.1这个要看你本地的docker 网络 ip(一般本地开发都用127.0.0.1,这个就是docker自己的本地开发ip,类似的),理论上应该是这个,可以通过ifconfig,找到docker0,复制列出来的ip就行
  • 其实除了172.17.0.1要确认一下是否一样,其他的都可以不改的
# To make it easier to self-host, we have a preset docker compose config that also
# has a container with a Postgres instance running.
# You can tweak around this file to match your instances

services:
  # This service runs the backend app in the port 3170
  hoppscotch-backend:
    container_name: hoppscotch-backend
    image: hoppscotch/hoppscotch-backend
    restart: unless-stopped
    env_file:
      - ./.env
    environment:
      # Edit the below line to match your PostgresDB URL if you have an outside DB (make sure to update the .env file as well)
      - DATABASE_URL=postgresql://postgres:password@172.17.0.1:5432/hoppscotch?connect_timeout=300
    depends_on:
      hoppscotch-db:
        condition: service_healthy
    ports:
      - "3180:80"
      - "3170:3170"

  # The main hoppscotch app. This will be hosted at port 3000
  # NOTE: To do TLS or play around with how the app is hosted, you can look into the Caddyfile for
  #       the SH admin dashboard server at packages/hoppscotch-selfhost-web/Caddyfile
  hoppscotch-frontend:
    container_name: hoppscotch-frontend
    image: hoppscotch/hoppscotch-frontend
    restart: unless-stopped
    env_file:
      - ./.env
    depends_on:
      - hoppscotch-backend
    ports:
      - "3080:80"
      - "3000:3000"

  # The Self Host dashboard for managing the app. This will be hosted at port 3100
  # NOTE: To do TLS or play around with how the app is hosted, you can look into the Caddyfile for
  #       the SH admin dashboard server at packages/hoppscotch-sh-admin/Caddyfile
  hoppscotch-admin:
    container_name: hoppscotch-admin
    image: hoppscotch/hoppscotch-admin
    restart: unless-stopped
    env_file:
      - ./.env
    depends_on:
      - hoppscotch-backend
    ports:
      - "3280:80"
      - "3100:3100"

  # The preset DB service, you can delete/comment the below lines if
  # you are using an external postgres instance
  # This will be exposed at port 5432
  hoppscotch-db:
    image: postgres:15
    ports:
      - "5432:5432"
    volumes:
      - ./postgres-data:/var/lib/postgresql/data
    environment:
      # The default user defined by the docker image
      POSTGRES_USER: postgres
      # NOTE: Please UPDATE THIS PASSWORD!
      POSTGRES_PASSWORD: password
      POSTGRES_DB: hoppscotch
    healthcheck:
      test:
        [
          "CMD-SHELL",
          "sh -c 'pg_isready -U $${POSTGRES_USER} -d $${POSTGRES_DB}'",
        ]
      interval: 5s
      timeout: 5s
      retries: 10

2.2 准备安装nginx-proxy-manager(可选)

  • 为什么要安装这个呢,因为hoppscotch起的是3个服务端口,如果用域名的话就是3个二级域名,使用nginx-proxy-manager配置起来简单快速,如果不打算使用域名,可不看
  • 强烈推荐安装这个,简单说就是一个可以通过简单的配置就实现反向代理,https证书安装的神器
  • 假设配置了,那大概就是这样,
    • 端口3000对应:https://h-frontend.xxx.xxx
    • 端口3170对应:https://h-backend.xxx.xxx
    • 端口3100对应:https://h-admin.xxx.xxx
  • 贴一下docker-compose文件,没啥好说的,直接跑起就行
version: '3'
services:
  app:
    image: 'jc21/nginx-proxy-manager:latest'
    restart: unless-stopped
    ports:
      - '80:80'
      - '81:81'
      - '443:443'
    volumes:
      - ./data:/data
      - ./letsencrypt:/etc/letsencrypt

2.2 准备.env文件

  • 这个是hoppscotch的配置文件,里面配置了所有需要用的字段,标注了必改的必须认真看看
  • 打开源码地址,找到.env.example,把内容复制,在本地随便找个编辑器,粘贴后修改
  • 主要改到的地方有(以下讲解一下各个改到的参数的用途,最后附上改好的全文):
    • DATABASE_URL必改,数据库连接,具体可参考前面的2.1.2 3个分开版本里面的数据库字段说明
    • JWT_SECRET必改,jwt加密,可以通过Windows自带的powershell自带的函数快速生成,打开powershell,输入 [guid]::NewGuid().ToString(),把生成的直接复制填上就行
    • SESSION_SECRET必改,同上
    • REDIRECT_URL:跳转地址,默认是http://localhost:3000,也就是前端api界面服务,如果要配置二级域名,就改成对应的二级域名,假设配置了证书的二级域名,类似这样:https://h-frontend.xxx.xxx
    • WHITELISTED_ORIGINS:白名单,必须配置,不然会有cors错误,默认是http://localhost:3170,http://localhost:3000,http://localhost:3100,如果要配置二级域名,就改成对应的二级域名,具体端口对应的,假设配置了证书的二级域名,类似这样:https://h-backend.xxx.xxx,https://h-frontend.xxx.xxx,https://h-admin.xxx.xxx
    • VITE_ALLOWED_AUTH_PROVIDERS:配置登录方式,可改可不改,如果没有同步需求的话,不用改,默认是GOOGLE,GITHUB,MICROSOFT,EMAIL,也就是配置了谷歌登录,github登录,微软登录和邮箱登录
      • 后面跟着的是对应的登录方式的配置,具体配置方法可以搜索或问gpt4
      • 需要关注的是***_CALLBACK_URL,每一个登录方式里都有一个回调地址,默认是http://localhost:3170/v1/auth/google/callback,可以看出是用的接口的端口,假设配置了证书的二级域名,类似这样:https://h-backend.xxx.xxx/v1/auth/microsoft/callback
  • VITE_BASE_URL必改,前端地址,默认是http://localhost:3000,假设配置了证书的二级域名,类似这样:https://h-frontend.xxx.xxx
  • VITE_SHORTCODE_BASE_URL必改,短地址,可以跟前端地址一样,同上
  • VITE_ADMIN_URL必改,后台地址,默认是http://localhost:3100,假设配置了证书的二级域名,类似这样:https://h-admin.xxx.xxx
  • VITE_BACKEND_GQL_URL必改,默认是http://localhost:3170/graphql,假设配置了证书的二级域名,类似这样:https://h-backend.xxx.xxx/graphql
  • VITE_BACKEND_WS_URL必改,默认是ws://localhost:3170/graphql,假设配置了证书的二级域名,类似这样ws://h-backend.lulua.net/graphql
  • VITE_BACKEND_API_URL必改,默认是http://localhost:3170/v1,假设配置了证书的二级域名,类似这样https://h-backend.xxx.xxx/v1

2.2.1 默认ip的.env

#-----------------------Backend Config------------------------------#
# Prisma Config
DATABASE_URL=postgresql://postgres:password@172.17.0.1:5432/hoppscotch

# Auth Tokens Config
JWT_SECRET="自己生成"
TOKEN_SALT_COMPLEXITY=10
MAGIC_LINK_TOKEN_VALIDITY= 3
REFRESH_TOKEN_VALIDITY="604800000" # Default validity is 7 days (604800000 ms) in ms
ACCESS_TOKEN_VALIDITY="86400000" # Default validity is 1 day (86400000 ms) in ms
SESSION_SECRET='自己生成'
# Reccomended to be true, set to false if you are using http
# Note: Some auth providers may not support http requests
ALLOW_SECURE_COOKIES=true

# Hoppscotch App Domain Config
REDIRECT_URL="http://localhost:3000"
WHITELISTED_ORIGINS="http://localhost:3170,http://localhost:3000,http://localhost:3100"
VITE_ALLOWED_AUTH_PROVIDERS=GOOGLE,GITHUB,MICROSOFT,EMAIL

# Google Auth Config
GOOGLE_CLIENT_ID="************************************************"
GOOGLE_CLIENT_SECRET="************************************************"
GOOGLE_CALLBACK_URL="http://localhost:3170/v1/auth/google/callback"
GOOGLE_SCOPE="email,profile"

# Github Auth Config
GITHUB_CLIENT_ID="************************************************"
GITHUB_CLIENT_SECRET="************************************************"
GITHUB_CALLBACK_URL="http://localhost:3170/v1/auth/github/callback"
GITHUB_SCOPE="user:email"

# Microsoft Auth Config
MICROSOFT_CLIENT_ID="************************************************"
MICROSOFT_CLIENT_SECRET="************************************************"
MICROSOFT_CALLBACK_URL="http://localhost:3170/v1/auth/microsoft/callback"
MICROSOFT_SCOPE="user.read"
MICROSOFT_TENANT="common"

# Mailer config
MAILER_SMTP_ENABLE="true"
MAILER_USE_CUSTOM_CONFIGS="false"
MAILER_ADDRESS_FROM='"From Name Here" <from@example.com>'

MAILER_SMTP_URL="smtps://user@domain.com:pass@smtp.domain.com" # used if custom mailer configs is false

# The following are used if custom mailer configs is true
MAILER_SMTP_HOST="smtp.domain.com"
MAILER_SMTP_PORT="587"
MAILER_SMTP_SECURE="true"
MAILER_SMTP_USER="user@domain.com"
MAILER_SMTP_PASSWORD="pass"
MAILER_TLS_REJECT_UNAUTHORIZED="true"

# Rate Limit Config
RATE_LIMIT_TTL=60 # In seconds
RATE_LIMIT_MAX=100 # Max requests per IP


#-----------------------Frontend Config------------------------------#


# Base URLs
VITE_BASE_URL=http://localhost:3000
VITE_SHORTCODE_BASE_URL=http://localhost:3000
VITE_ADMIN_URL=http://localhost:3100

# Backend URLs
VITE_BACKEND_GQL_URL=http://localhost:3170/graphql
VITE_BACKEND_WS_URL=ws://localhost:3170/graphql
VITE_BACKEND_API_URL=http://localhost:3170/v1

# Terms Of Service And Privacy Policy Links (Optional)
VITE_APP_TOS_LINK=https://docs.hoppscotch.io/support/terms
VITE_APP_PRIVACY_POLICY_LINK=https://docs.hoppscotch.io/support/privacy

# Set to `true` for subpath based access
ENABLE_SUBPATH_BASED_ACCESS=false

2.2.2 二级域名版的.env(推荐)

#-----------------------Backend Config------------------------------#
# Prisma Config
DATABASE_URL=postgresql://postgres:password@172.17.0.1:5432/hoppscotch

# Auth Tokens Config
JWT_SECRET="自己生成"
TOKEN_SALT_COMPLEXITY=10
MAGIC_LINK_TOKEN_VALIDITY= 3
REFRESH_TOKEN_VALIDITY="604800000" # Default validity is 7 days (604800000 ms) in ms
ACCESS_TOKEN_VALIDITY="86400000" # Default validity is 1 day (86400000 ms) in ms
SESSION_SECRET='自己生成'
# Reccomended to be true, set to false if you are using http
# Note: Some auth providers may not support http requests
ALLOW_SECURE_COOKIES=true

# Hoppscotch App Domain Config
REDIRECT_URL="https://h-frontend.xxx.xxx"
WHITELISTED_ORIGINS="https://h-backend.xxx.xxx,https://h-frontend.xxx.xxx,https://h-admin.xxx.xxx"
VITE_ALLOWED_AUTH_PROVIDERS=GOOGLE,GITHUB,MICROSOFT,EMAIL

# Google Auth Config
GOOGLE_CLIENT_ID="************************************************"
GOOGLE_CLIENT_SECRET="************************************************"
GOOGLE_CALLBACK_URL="https://h-backend.xxx.xxx/v1/auth/google/callback"
GOOGLE_SCOPE="email,profile"

# Github Auth Config
GITHUB_CLIENT_ID="************************************************"
GITHUB_CLIENT_SECRET="************************************************"
GITHUB_CALLBACK_URL="https://h-backend.xxx.xxx/v1/auth/github/callback"
GITHUB_SCOPE="user:email"

# Microsoft Auth Config
MICROSOFT_CLIENT_ID="************************************************"
MICROSOFT_CLIENT_SECRET="************************************************"
MICROSOFT_CALLBACK_URL="https://h-backend.xxx.xxx/v1/auth/microsoft/callback"
MICROSOFT_SCOPE="user.read"
MICROSOFT_TENANT="common"

# Mailer config
MAILER_SMTP_ENABLE="true"
MAILER_USE_CUSTOM_CONFIGS="false"
MAILER_ADDRESS_FROM='"From Name Here" <from@example.com>'

MAILER_SMTP_URL="smtps://user@domain.com:pass@smtp.domain.com" # used if custom mailer configs is false

# The following are used if custom mailer configs is true
MAILER_SMTP_HOST="smtp.domain.com"
MAILER_SMTP_PORT="587"
MAILER_SMTP_SECURE="true"
MAILER_SMTP_USER="user@domain.com"
MAILER_SMTP_PASSWORD="pass"
MAILER_TLS_REJECT_UNAUTHORIZED="true"

# Rate Limit Config
RATE_LIMIT_TTL=60 # In seconds
RATE_LIMIT_MAX=100 # Max requests per IP


#-----------------------Frontend Config------------------------------#


# Base URLs
VITE_BASE_URL=https://h-frontend.xxx.xxx
VITE_SHORTCODE_BASE_URL=https://h-frontend.xxx.xxx
VITE_ADMIN_URL=https://h-admin.xxx.xxx

# Backend URLs
VITE_BACKEND_GQL_URL=https://h-backend.xxx.xxx/graphql
VITE_BACKEND_WS_URL=ws://h-backend.xxx.xxx/graphql
VITE_BACKEND_API_URL=https://h-backend.xxx.xxx/v1

# Terms Of Service And Privacy Policy Links (Optional)
VITE_APP_TOS_LINK=https://docs.hoppscotch.io/support/terms
VITE_APP_PRIVACY_POLICY_LINK=https://docs.hoppscotch.io/support/privacy

# Set to `true` for subpath based access
ENABLE_SUBPATH_BASED_ACCESS=false

3. 安装

  • 安装就很简单了,复杂的是前期的准备工作,把前面任意版本的docker-compose文件和.env文件,在服务器上新建个文件夹hoppscotch放好,结构如图:
    在这里插入图片描述
  • 直接命令:docker-compose up -d ,使用docker ps 观察是否成功启动容器(PS:如果无法拉取镜像,可看我另一文章)
  • 启动成功后,会多一个文件夹,是postgresql的存储目录,如图:
    在这里插入图片描述
  • 细心观察会发现,其实容器一直在重启报错,这是因为没有数据库迁移,看下一步

4. 解决数据库迁移报错

4.1 3合1版本

  • 运行命令:docker compose run --entrypoint sh hoppscotch-aio,这时候会进入容器内部
  • 在容器内运行命令:npm config set registry https://registry.npmmirror.com,配置一下镜像地址
  • 在容器内运行命令:pnpx prisma migrate deploy,这是在做数据库迁移,PS,这里偶尔会卡住,直接ctrl+c,强行停止,重新运行一次命令就ok。
  • 在容器内运行命令:exit,退出容器
  • 运行命令:docker-compose down,关闭容器
  • 运行命令:docker-compose up -d,启动容器,这时候理论上就不重启了
  • 浏览器尝试打开地址:
    • ip版本
      • 前端地址是:http://localhost:3000,第一次打开要加载资源,有点慢,等全部打开后,就是眼熟的类似postman的界面了
      • 后台管理地址是:http://localhost:3100
    • 二级域名版本
      • 前端地址是:https://h-frontend.xxx.xxx,第一次打开要加载资源,有点慢,等全部打开后,就是眼熟的类似postman的界面了
      • 后台管理地址是:https://h-admin.xxx.xxx

4.2 独立版本

  • 运行命令:docker compose run --entrypoint sh hoppscotch-backend,这时候会进入容器内部
  • 在容器内运行命令:npm config set registry https://registry.npmmirror.com,配置一下镜像地址
  • 在容器内运行命令:pnpx prisma migrate deploy,这是在做数据库迁移,PS,这里偶尔会卡住,直接ctrl+c,强行停止,重新运行一次命令就ok。
  • 在容器内运行命令:exit,退出容器
  • 运行命令:docker-compose down,关闭容器
  • 运行命令:docker-compose up -d,启动容器,这时候理论上就不重启了
  • 浏览器尝试打开地址:
    • ip版本
      • 前端地址是:http://localhost:3000,第一次打开要加载资源,有点慢,等全部打开后,就是眼熟的类似postman的界面了
      • 后台管理地址是:http://localhost:3100
    • 二级域名版本
      • 前端地址是:https://h-frontend.xxx.xxx,第一次打开要加载资源,有点慢,等全部打开后,就是眼熟的类似postman的界面了
      • 后台管理地址是:https://h-admin.xxx.xxx

5. 安装浏览器插件

  • 其实理论上,到上面的一步,能打开前端界面,能测试api,就可以愉快的使用了,但是,多用几个api就会发现,有些接口明明是通的,但是无法使用,这是浏览器的锅,为了安全,浏览器自作主张加了很多安全策略,在平时的时候保护了我们,但在开发的时候就是拦路虎,比如不同源不能调用接口啦,比如有证书的域名不能调用无证书的接口啦等等等。
  • 解决的办法hoppscotch也提供了,安装hoppscotch提供的浏览器插件
  • 先点击前端界面的设置按钮
    在这里插入图片描述
  • 往下拖动,最底下有浏览器插件的字眼,点击使用的对应的浏览器图标,会跳转到相应的地址
    在这里插入图片描述
  • 安装完成后,还得设置启用
    在这里插入图片描述
  • 哦对了,如果有人不习惯侧边栏在右侧,可以选择在左侧
    在这里插入图片描述
  • 至此,就可以愉快的使用了!

6. 配置github登录选项(可选)

  • 如果想配置github登录,先打开github设置页,打开后,点击右上角,新建一个新的支持oauth的app
    在这里插入图片描述
  • 如下图所示,按照图里提示的填写,最重要的是回调地址,这个地址其实配置在.env文件里
    在这里插入图片描述
  • 注册成功后,获得GITHUB_CLIENT_IDGITHUB_CLIENT_SECRET,填写到.env文件对应的地方
  • 最后,需要重启一下服务,这里用个坑,修改了.env文件后,不会生效,需要清空配置表
  • 先用docker ps,获得postgresql的容器id
  • 获得容器id后,组装命令:docker exec -it <db_container_id> psql -d hoppscotch -c "TRUNCATE \"InfraConfig\";",把<db_container_id>一整个替换成容器id,不要留<>,运行完毕后
  • 使用命令:docker-compose down,停止服务
  • 使用命令:docker-compose up -d ,启动服务
  • 重启成功后,点击登录,使用github登录,能够成功跳转github并登录就ok了
    在这里插入图片描述

7. 官方相关文档

  • 附上github项目地址
  • 附上官方文档地址

over, enjoy!!!
如对您有帮助,感谢投喂!
微信感谢投喂版

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

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

相关文章

爬虫案例5——爬取东方财富网的港股数据

简介&#xff1a;个人学习分享&#xff0c;如有错误&#xff0c;欢迎批评指正 任务&#xff1a;从东方财富网中爬取港股的代码&#xff0c;名称&#xff0c;最近价格&#xff0c;涨跌幅&#xff0c;今开&#xff0c;最高等数据 目标网页地址&#xff1a;https://data.eastmone…

科技大厂对AI的垄断

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

探索HTML中的“iframe”标签——WEB开发系列12

现代网页开发中&#xff0c;​​<iframe>​​ 标签是一个非常重要的工具。允许我们在一个网页中嵌入另一个网页&#xff0c;对于展示外部内容、应用嵌套或实现复杂的布局设计都非常有用。来一起探讨如何使用 ​​iframe​​ 标签&#xff0c;包括设置高度和宽度、移除边框…

记录 升级到Gradle 8.4.2 遇到的坑

序言 最近将Gradle从4.0.1 升级到 8.4.2 遇到了很多坑&#xff0c;记录下来帮助有缘人 升级gradle 修改根目录的build.gradle dependencies {classpath com.android.tools.build:gradle:8.4.2classpath org.jetbrains.kotlin:kotlin-gradle-plugin:1.9.0}修改gradle-wrapper.…

【html+css 绚丽Loading】000011 三元轮回珠

前言&#xff1a;哈喽&#xff0c;大家好&#xff0c;今天给大家分享htmlcss 绚丽Loading&#xff01;并提供具体代码帮助大家深入理解&#xff0c;彻底掌握&#xff01;创作不易&#xff0c;如果能帮助到大家或者给大家一些灵感和启发&#xff0c;欢迎收藏关注哦 &#x1f495…

【TS】函数重载的作用

前言 当调用一个函数时&#xff0c;通常会提示有多种调用方式&#xff0c;各种调用方式的参数类型、参数数量、返回值等均可能不同。本文通过自己封装的message作为案例模拟一下。 实现 自己封装的message组件&#xff0c;有以下7种调用方式 message({mode: "mode"…

QT-计算器

QT-计算器 一、演示效果二、关键程序三、下载链接 一、演示效果 二、关键程序 #include "mainwindow.h" #include "ui_mainwindow.h" #include <QDebug>MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow) {ui…

分布式事务:基本概念

文章目录 一、基础概念1、什么是事务2、本地事务3 、分布式事务4、分布式事务产生的场景 二、分布式事务基础理论1、CAP理论&#xff08;1&#xff09;理解CAP&#xff08;2&#xff09;CAP组合方式&#xff08;3&#xff09;总结 2、BASE理论 三、分布式事务解决方案之2PC&…

【Java日志系列】Logback日志框架

目录 前言 一、Logback简介 二、Logback组件 三、快速入门 四、配置文件的使用 1. 配置文件中的标签 1.1 logger标签 1.2 root标签 1.3 appender标签 1.4 filter标签 1.5 encoder标签 1.6 property标签 2. 常见的Appender 2.1 ConsoleAppender 2.2 FileAppender…

瓜子二手车源码开发

瓜子二手车作为国内知名的二手车交易平台&#xff0c;其开发需求与功能架构主要围绕提升用户体验、保障交易安全、优化交易流程以及提供全面服务等方面展开。以下是对瓜子二手车开发需求与功能架构的详细分析 一、开发需求 用户需求&#xff1a; 便捷性&#xff1a;用户希望能…

ReTagList标签列表(API)

组件实现基于 Vue3 + Element Plus + Typescript,同时引用 vueUse + lodash-es + tailwindCss (不影响功能,可忽略) 基于ElTag实现的Tag列表,支持Tag列表多选,动态Tag列表 ReTagList标签列表 基础 简单展示Tag列表,可通过size指定尺寸 查看 /demo/tag-list/basic.md …

叉车门口拐角盲区防撞系统,精准微波距离测距,助力企业安全生产

叉车流动性强、作业场所不固定&#xff0c;是特种设备管理的薄弱环节。如何管住叉车、管好叉车&#xff0c;保障作业人员安全一直都是重点话题&#xff0c;引入智慧叉车&#xff0c;使用智能化监管&#xff0c;很多城市相继开展智慧叉车试点工作&#xff0c;给叉车装上“智慧大…

机械学习—零基础学习日志(如何理解概率论4)

当已知一个概率&#xff0c;求解另外一个函数的概率。以下是离散型的概率计算方法。 这里是连续型的&#xff0c;已知概念密度&#xff0c;计算对应的另外一个函数的概率。 这里需要求解对应的原始函数。 这里我们做一道练习题。 《概率论与数理统计期末不挂科|考研零基础入门…

精选这五款热门好用的骨传导耳机,帮你避免踩坑的麻烦!

相信大家都已经深有体会&#xff0c;拿那种常规的入耳式无线蓝牙耳机来做运动耳机&#xff0c;很难满足运动需要。如果选择前两年流行的颈挂式无线运动蓝牙耳机&#xff0c;虽然简单轻巧&#xff0c;但也是入耳式设计&#xff0c;长时间佩戴耳朵不舒服。这样看来&#xff0c;运…

科普篇 | 如何查找参考基因组信息

前 言 很多老师会发现&#xff0c;高通量测序后需要生信分析的过程中&#xff0c;需要填写一个信息分析表。而信息分析表中有一个对生信分析很重要的信息——基因组文件及注释文件。通常这类文件我们都是需要老师提供对应的下载链接&#xff0c;以便于生信直接利用这个链接去…

Git介绍及配置

目录 Git GitHub GitLab Gitee 配置Git 安装git 初次运行 Git 前的配置 注册一个代码托管平台 用户信息 获取 Git 仓库 初始化仓库 克隆现有的仓库 https方式&#xff1a; ssh方式&#xff1a; 上传本地项目至Git仓库 https方式 ssh-key方式 添加个人公钥​ …

【python】PyQt5中的QFrame控件,控制图形的边框样式、阴影效果、形状等属性

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…

【Redis】Redis 底层的数据结构(结合源码)

众所周知&#xff0c;Redis 是一个高性能的开源内存数据库&#xff0c;支持多种数据结构&#xff08;如字符串、哈希、列表和集合&#xff09;&#xff0c;提供持久化选项以确保数据安全&#xff0c;并具备高可用性和分布式功能。 下面我们就来了解一下其底层所使用到的数据结…

包装类和简单泛型

一、包装类 在Java中&#xff0c;由于基本类型不是继承自Object&#xff0c;为了在泛型代码中可以支持基本类型&#xff0c;Java给每个基本类型都对应了一个包装类型。 1.1 基本数据类型和对应的包装类 注意&#xff1a;除了 Integer 和 Character&#xff0c; 其余基本类型的…

微信怎么恢复好友?找回失联好友,5个有效方法奉上!

微信&#xff0c;这个我们日常沟通不可或缺的工具&#xff0c;但有时会因为一些小疏忽&#xff0c;让我们不小心与好友失去了联系。可能是误删了好友&#xff0c;也可能是换了手机没来得及备份&#xff0c;导致那些熟悉的面孔从列表中消失。 那么&#xff0c;微信怎么恢复好友…