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

目录

  • 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 instancesservices:# The service that spins up all 3 services at once in one containerhoppscotch-aio:container_name: hoppscotch-aioimage: hoppscotch/hoppscotchrestart: unless-stoppedenv_file:- ./.envdepends_on:hoppscotch-db:condition: service_healthyports:- "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 5432hoppscotch-db:image: postgres:15ports:- "5432:5432"volumes:- ./postgres-data:/var/lib/postgresql/dataenvironment:# The default user defined by the docker imagePOSTGRES_USER: postgres# NOTE: Please UPDATE THIS PASSWORD!POSTGRES_PASSWORD: passwordPOSTGRES_DB: hoppscotchhealthcheck:test:["CMD-SHELL","sh -c 'pg_isready -U $${POSTGRES_USER} -d $${POSTGRES_DB}'",]interval: 5stimeout: 5sretries: 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 instancesservices:# This service runs the backend app in the port 3170hoppscotch-backend:container_name: hoppscotch-backendimage: hoppscotch/hoppscotch-backendrestart: unless-stoppedenv_file:- ./.envenvironment:# 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=300depends_on:hoppscotch-db:condition: service_healthyports:- "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/Caddyfilehoppscotch-frontend:container_name: hoppscotch-frontendimage: hoppscotch/hoppscotch-frontendrestart: unless-stoppedenv_file:- ./.envdepends_on:- hoppscotch-backendports:- "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/Caddyfilehoppscotch-admin:container_name: hoppscotch-adminimage: hoppscotch/hoppscotch-adminrestart: unless-stoppedenv_file:- ./.envdepends_on:- hoppscotch-backendports:- "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 5432hoppscotch-db:image: postgres:15ports:- "5432:5432"volumes:- ./postgres-data:/var/lib/postgresql/dataenvironment:# The default user defined by the docker imagePOSTGRES_USER: postgres# NOTE: Please UPDATE THIS PASSWORD!POSTGRES_PASSWORD: passwordPOSTGRES_DB: hoppscotchhealthcheck:test:["CMD-SHELL","sh -c 'pg_isready -U $${POSTGRES_USER} -d $${POSTGRES_DB}'",]interval: 5stimeout: 5sretries: 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-stoppedports:- '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.mzph.cn/web/50967.shtml

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

相关文章

Spring Boot OAuth2.0应用

本文展示Spring Boot中&#xff0c;新版本OAuth2.0的简单实现&#xff0c;版本信息&#xff1a; spring-boot 2.7.10 spring-security-oauth2-authorization-server 0.4.0 spring-security-oauth2-client 5.7.7 spring-boot-starter-oauth2-resource-server 2.7.10展示三个服务…

Android高版本抓包总结

方案1 CharlesVirtualXposedJustTrustMe 推荐使用三星手机此方案 VirtualXposed下载链接&#xff1a;https://github.com/android-hacker/VirtualXposed/releases JustTrustMe下载链接&#xff1a;https://github.com/Fuzion24/JustTrustMe/releases/ 下载完成后使用adb命令…

从易车“超级818冠军之夜” 看如何借势体育营销点燃汽车消费热潮

编辑 | 魏力 发布 | 大力财经 导语&#xff1a;这个8月&#xff0c;是属于奥运的8月。 巴黎奥运会虽圆满落幕&#xff0c;但属于奥运健儿们的热度还在持续。在这股奥运热潮的带动下&#xff0c;全民运动热情持续释放&#xff0c;同时也激发出巨大的消费潜力。 赛场外&#…

黄热病疫苗市场调研:预计到 2030 年全球市场规模将达到 1.8 亿美元

一、黄热病疫苗市场研究 &#xff08;一&#xff09;发展趋势 1. 市场规模增长&#xff1a;据调研团队报告所示&#xff0c;预计到 2030 年全球黄热病疫苗市场规模将达到 1.8 亿美元&#xff0c;年复合增长率为 3.0%。这表明市场在未来几年将保持稳定增长态势。增长的原因主要…

LSI-9361阵列卡笔记

背景 要将raid0更改为JBOD直通模式 注意的点是要先将raid模式调整为JBOD之后重启机器&#xff0c;即可 备注&#xff1a;转换过程中硬盘中的数据未丢失。 步骤贴图 refer https://zhiliao.h3c.com/questions/dispcont/123250 https://blog.csdn.net/GreapFruit_J/article/…

Android Activity启动流程(Android 13)

文章目录 Android Activity启动流程(Android 13)概述流程图前提流程分析Activity#startActivity()Activity#startActivityForResult()Instrumentation#execStartActivity()ActivityTaskManager#getService() ActivityTaskManagerService#startActivity()ActivityTaskManagerSer…

解决window 端口的占用问题

netstat -nao | findstr "5554" taskkill -pid 5076 -f 本文资料来自 https://cloud.tencent.com/developer/article/1703982

基于机器学习的二手房房价数据分析与价格预测模型

有需要本项目的可以私信博主&#xff0c;提供远程部署讲解 本研究聚焦重庆二手房市场&#xff0c;通过创新的数据采集和分析方法&#xff0c;深入探讨影响房价的关键因素&#xff0c;并开发了预测模型。 我们首先利用Python编写的爬虫程序&#xff0c;巧妙规避了链家网站的反…

Mac文件需要分卷压缩怎么办 Mac上怎么解压分卷压缩的文件

在处理大型文件的传输和存储的时候&#xff0c;Mac用户常面临文件大小超过限制的问题。为了有效管理这些大文件&#xff0c;分卷压缩成为一种必不可少的解决方案。Mac文件需要分卷压缩怎么办&#xff1f;Mac上怎么解压分卷压缩的文件&#xff1f;本文将向你介绍如何使用BetterZ…

探索数据结构:并查集的分析与实现

✨✨ 欢迎大家来到贝蒂大讲堂✨✨ &#x1f388;&#x1f388;养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; 所属专栏&#xff1a;数据结构与算法 贝蒂的主页&#xff1a;Betty’s blog 1. 并查集的引入 1.1 并查集的概念 并查集是一种树型数据结构&#xf…

什么是品牌低价 低价要如何处理

在消费领域&#xff0c;当消费者遭遇商品价格混乱不堪的局面&#xff0c;他们大可以选择敬而远之&#xff0c;放弃购买。但对于品牌商而言&#xff0c;若线上出现低价、乱价的情况&#xff0c;若坐视不管&#xff0c;那必然会引发一系列严重后果。 品牌若是对线上的低价、乱价现…

Linux环境下OpenSSH升级到 OpenSSH_9.8p1(内置保姆级教程并包含openssl升级过程)

文章目录 前言一、下载openssh、openssl二进制包二、升级步骤1.系统开启telnet&#xff0c;防止意外导致shh无法连接2.确认升级前openssh的版本3.升级openssh3.1.备份旧ssh配置文件及目录3.2.备份旧ssh相关的二进制程序文件3.3.安装gcc,并解压9.8p1的安装包3.4.执行openssh编译…

Kali Linux 三种网络攻击方法总结(DDoS、CC 和 ARP 欺骗)

一、引言 在当今数字化的时代&#xff0c;网络安全成为了至关重要的议题。了解网络攻击的方法和原理不仅有助于我们增强防范意识&#xff0c;更是网络安全领域专业人员必备的知识。Kali Linux 作为一款专为网络安全专业人员和爱好者设计的操作系统&#xff0c;提供了丰富的工具…

ES5到ES6 js的语法更新

js是一门弱语言类型&#xff0c;为了实现更有逻辑的代码&#xff0c;需要不断更新语法规范&#xff0c;es就是用来规范js语法的标准。 09年发布了es5&#xff0c;到15年发布es6&#xff0c;到现在es6泛指es5.1以后的版本es2016&#xff0c;es2017。 var、let、const 关键字&…

【C++】OJ习题(初阶)

&#x1f680;个人主页&#xff1a;奋斗的小羊 &#x1f680;所属专栏&#xff1a;C 很荣幸您能阅读我的文章&#xff0c;诚请评论指点&#xff0c;欢迎欢迎 ~ 目录 &#x1f4a5;1、字符串&#x1f4a5;1.1 字符串相加&#x1f4a5;1.2 验证回文字符串&#x1f4a5;1.3 反转…

电商平台的推荐算法需要备案吗?

答案是肯定的&#xff01; 政策要求&#xff1a; 根据我国《互联网信息服务算法推荐管理规定》&#xff08;以下简称《规定》&#xff09;第六条&#xff0c;具有舆论属性或社会动员能力的互联网信息服务&#xff0c;包括电商平台的推荐算法&#xff0c;需要进行备案。 电商平…

ubuntu24.04安装nginx1.24

ubuntu安装nginx 更新包索引 sudo apt update安装nginx sudo apt install nginx确认安装成功并检查Nginx版本 nginx -v启动Nginx服务 sudo systemctl start nginx设置Nginx开机自启 sudo systemctl enable nginx在浏览器中访问 http://<your_server_IP> 来确认Nginx…

Linux学习记录(十二)————共享内存

文章目录 5.共享内存1.概念2.相关函数共享内存映射共享内存进程间的通信 5.共享内存 1.概念 共享内存&#xff08;Shared Memory&#xff09;就是允许多个进程访问同一个内存空间&#xff0c;是在多个进程之间共享和传递数据最 高效的方式。操作系统将不同进程之间共享内存安排…

HTML5+JavaScript绘制彩虹和云朵

HTML5JavaScript绘制彩虹和云朵 彩虹&#xff0c;简称虹&#xff0c;是气象中的一种光学现象&#xff0c;当太阳光照射到半空中的水滴&#xff0c;光线被折射及反射&#xff0c;在天空上形成拱形的七彩光谱&#xff0c;由外圈至内圈呈红、橙、黄、绿、蓝、靛、紫七种颜色。事实…

【流媒体】RTMPDump—RTMP_ConnectStream(创建流连接)

目录 1. RTMP_ConnectStream函数1.1 读取packet&#xff08;RTMP_ReadPacket&#xff09;1.2 解析packet&#xff08;RTMP_ClientPacket&#xff09;1.2.1 设置Chunk Size&#xff08;HandleChangeChunkSize&#xff09;1.2.2 用户控制信息&#xff08;HandleCtrl&#xff09;1…