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

【打工日常】使用Docker部署团队协作文档工具

一、ShowDoc介绍

​ShowDoc是一个适合IT团队共同协作API文档、技术文档的工具。通过showdoc,可以方便地使用markdown语法来书写出API文档、数据字典文档、技术文档、在线excel文档等等。

响应式网页设计:可将项目文档分享到电脑或移动设备查看。同时也可以将项目导出成word文件,以便离线浏览。

公开项目与私密项目:ShowDoc上的项目有公开项目和私密项目两种。公开项目可供任何登录与非登录的用户访问,而私密项目则需要输入密码验证访问。密码由项目创建者设置。

项目转让:项目创建者可以自由地把项目转让给网站的其他用户。

项目成员:你可以很方便地为ShowDoc的项目添加、删除项目成员。项目成员可以对项目进行编辑,但不可转让或删除项目(只有项目创建者才有权限)。

团队管理:利用showdoc的团队功能你可以更好地进行团队协作。

  1. markdown编辑:ShowDoc采用markdown编辑器,无论是编辑还是阅读体验都极佳很棒。

  2. 模板插入:在ShowDoc的编辑页面,点击编辑器上方的按钮可方便地插入API接口模板和数据字典模板。

  3. 历史版本:ShowDoc为页面提供历史版本功能,你可以方便地把页面恢复到之前的版本。

二、本次实践介绍

  1. 本次实践简介

本次实践部署环境为个人测试环境

  1. 本地环境规划

本次实践环境规划:下载镜像fastposter/fastposter:latest,通过docker-cli或者docker compose启动容器

镜像命名IP地址容器镜像版本操作系统版本
showdoclocalhostlatestubuntu 22.04

三、检查本地Docker环境

  1. 检查本地Docker版本

检查Docker版本:docker version  root@WellDone:/home/goodjob# docker version  
Client: Docker Engine - Community  Version:           25.0.0  API version:       1.44  Go version:        go1.21.6  Git commit:        e758fe5  Built:             Thu Jan 18 17:09:49 2024  OS/Arch:           linux/amd64  Context:           default  Server: Docker Engine - Community  Engine:  Version:          25.0.0  API version:      1.44 (minimum version 1.24)  Go version:       go1.21.6  Git commit:       615dfdf  Built:            Thu Jan 18 17:09:49 2024  OS/Arch:          linux/amd64  Experimental:     false  containerd:  Version:          1.6.27  GitCommit:        a1496014c916f9e62104b33d1bb5bd03b0858e59  runc:  Version:          1.1.11  GitCommit:        v1.1.11-0-g4bccb38  docker-init:  Version:          0.19.0  GitCommit:        de40ad0  
root@WellDone:/home/goodjob#
  1. 检查Docker服务状态

检查Docker服务状态,确保Docker服务正常运行。

systemctl status docker  root@WellDone:/home/goodjob/Downloads# systemctl status docker  
● docker.service - Docker Application Container Engine  Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)  Active: active (running) since Wed 2024-01-24 08:54:31 CST; 1 day 4h ago  
TriggeredBy: ● docker.socket  Docs: https://docs.docker.com  Main PID: 1549 (dockerd)  Tasks: 65  Memory: 419.5M  CPU: 38.874s  CGroup: /system.slice/docker.service  ├─  1549 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock  ├─  2010 /usr/bin/docker-proxy -proto tcp -host-ip 0.0.0.0 -host-port 6379 -container-ip 172.17.0.2 -container-port 6379  ├─  2016 /usr/bin/docker-proxy -proto tcp -host-ip :: -host-port 6379 -container-ip 172.17.0.2 -container-port 6379  ├─  2029 /usr/bin/docker-proxy -proto tcp -host-ip 0.0.0.0 -host-port 5432 -container-ip 172.17.0.3 -container-port 5432  ├─  2036 /usr/bin/docker-proxy -proto tcp -host-ip :: -host-port 5432 -container-ip 172.17.0.3 -container-port 5432  ├─123083 /usr/bin/docker-proxy -proto tcp -host-ip 0.0.0.0 -host-port 8888 -container-ip 172.17.0.4 -container-port 8080  └─123095 /usr/bin/docker-proxy -proto tcp -host-ip :: -host-port 8888 -container-ip 172.17.0.4 -container-port 8080  1月 24 08:54:31 WellDone dockerd[1549]: time="2024-01-24T08:54:31.067895045+08:00" level=info msg="API listen on /run/docker.sock"  
1月 24 08:54:31 WellDone systemd[1]: Started Docker Application Container Engine.  
1月 24 16:13:48 WellDone dockerd[1549]: time="2024-01-24T16:13:48.185008219+08:00" level=info msg="ignoring event" container=8ad99af82d8a41dd661d>  
1月 24 16:13:48 WellDone dockerd[1549]: time="2024-01-24T16:13:48.189484205+08:00" level=warning msg="ShouldRestart failed, container will not be>  
1月 24 21:58:08 WellDone dockerd[1549]: time="2024-01-24T21:58:08.024915139+08:00" level=info msg="ignoring event" container=27fd28e2993f31b170b8>  
1月 24 21:58:08 WellDone dockerd[1549]: time="2024-01-24T21:58:08.029986730+08:00" level=warning msg="ShouldRestart failed, container will not be>  
1月 25 10:46:16 WellDone dockerd[1549]: time="2024-01-25T10:46:16.329180722+08:00" level=info msg="Container failed to exit within 10s of signal >  
1月 25 10:46:16 WellDone dockerd[1549]: time="2024-01-25T10:46:16.350757439+08:00" level=info msg="ignoring event" container=b1223add00f36bbb3246>  
1月 25 10:49:21 WellDone dockerd[1549]: time="2024-01-25T10:49:21.993755983+08:00" level=info msg="Container failed to exit within 10s of signal >  
1月 25 10:49:22 WellDone dockerd[1549]: time="2024-01-25T10:49:22.015822650+08:00" level=info msg="ignoring event" container=edb0e153b45dbe62acd8>  
lines 1-28/28 (END)

四、部署showdoc镜像

  1. 下载showdoc镜像

docker pull fastposter/fastposter root@HEJIAJIN-FX506HE:/docker_software# docker pull fastposter/fastposter
Using default tag: latest
latest: Pulling from fastposter/fastposter
7d63c13d9b9b: Pull complete 
6ad2a11ca37b: Pull complete 
8076cdef4689: Pull complete 
0ba90f5a7dd0: Pull complete 
27c191df269f: Pull complete 
e332e26a6509: Pull complete 
b6aa2cfacc25: Pull complete 
Digest: sha256:0d1c173c7bc5ef6b51a815a995f06dd89b4902e4773be98687259134cf6ea267
Status: Downloaded newer image for fastposter/fastposter:latest
docker.io/fastposter/fastposter:latest
  1. 创建容器

使用docker快速创建showdoc的容器。

完整创建过程:1.使用docker-cli启动一个showdoc的容器。docker run -d --name showdoc --user=root -p 1222:80 --restart always -v /docker_software/showdoc/html:/var/www/html/ star7th/showdoc:latest2.使用docker-compose启动一个showdoc的容器  version: '3.9'
services:showdoc:image: 'star7th/showdoc:latest'volumes:- '/docker_software/showdoc/html:/var/www/html/'restart: alwaysports:- '1222:80'user: rootcontainer_name: showdoc
  1. 检查容器运行状态

检查容器的运行状态,确保服务的正常运行。
docker ps

NAME         IMAGE                    COMMAND                   SERVICE      CREATED         STATUS         PORTS
showdoc      star7th/showdoc:latest   "/entrypoint bash do…"   showdoc      3 minutes ago   Up 3 minutes   443/tcp, 9000/tcp, 0.0.0.0:1222->80/tcp, :::1222->80/tcp

查看容器运行日志
docker logs -f showdoc

Not found /var/www/html/index.php, copy...
Same version, skip upgrade.
delay 30s start mock...
2024-03-15 15:41:05,123 CRIT Supervisor is running as root.  Privileges were not dropped because no user is specified in the config file.  If you intend to run as root, you can set user=root in the config file to avoid this message.
2024-03-15 15:41:05,123 INFO Included extra file "/opt/docker/etc/supervisor.d/nginx.conf" during parsing
2024-03-15 15:41:05,123 INFO Included extra file "/opt/docker/etc/supervisor.d/php-fpm.conf" during parsing
2024-03-15 15:41:05,126 INFO RPC interface 'supervisor' initialized
2024-03-15 15:41:05,126 INFO supervisord started with pid 65
2024-03-15 15:41:06,128 INFO spawned: 'nginxd' with pid 66
2024-03-15 15:41:06,129 INFO spawned: 'php-fpmd' with pid 67
-> Executing /opt/docker/bin/service.d/nginx.d//10-init.sh
2024-03-15 15:41:06,132 INFO success: nginxd entered RUNNING state, process has stayed up for > than 0 seconds (startsecs)
2024-03-15 15:41:06,132 INFO success: php-fpmd entered RUNNING state, process has stayed up for > than 0 seconds (startsecs)
-> Executing /opt/docker/bin/service.d/php-fpm.d//10-init.sh
Setting php-fpm user to application
[15-Mar-2024 15:41:06] NOTICE: fpm is running, pid 67
[15-Mar-2024 15:41:06] NOTICE: ready to handle connections
[php-fpm:access] 127.0.0.1 -  15/Mar/2024:15:41:06 +0000 "GET /index.php" 302 /app/index.php 13.245 2048 75.50%
172.24.0.1 - - [15/Mar/2024:15:41:06 +0000] "GET / HTTP/1.1" 302 5 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36 Edg/122.0.0.0"
[php-fpm:access] 127.0.0.1 -  15/Mar/2024:15:41:06 +0000 "GET /install/index.php" 200 /app/install/index.php 1.296 2048 0.00%
172.24.0.1 - - [15/Mar/2024:15:41:06 +0000] "GET /install/index.php HTTP/1.1" 200 3204 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36 Edg/122.0.0.0"
[php-fpm:access] 127.0.0.1 -  15/Mar/2024:15:41:26 +0000 "GET /install/ajax.php?lang=zh" 200 /app/install/ajax.php 0.698 2048 0.00%
172.24.0.1 - - [15/Mar/2024:15:41:26 +0000] "GET /install/ajax.php?lang=zh HTTP/1.1" 200 197 "http://localhost:1222/install/index.php" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36 Edg/122.0.0.0"> mockServer@1.0.0 start
> npm run pm2 start index.js> mockServer@1.0.0 pm2
> node ./node_modules/pm2/bin/pm2 "start" "index.js"-------------__/\\\\\\\\\\\\\____/\\\\____________/\\\\____/\\\\\\\\\______\/\\\/\\\_\/\\\\\\________/\\\\\\__/\\\///\\\____\/\\\_______\/\\\_\/\\\//\\\____/\\\//\\\_\///______\//\\\___\/\\\\\\\\\\\\\/__\/\\\\///\\\/\\\/_\/\\\___________/\\\/____\/\\\/____\/\\\__\///\\\/___\/\\\________/\\\//______\/\\\_____________\/\\\____\///_____\/\\\_____/\\\//_________\/\\\_____________\/\\\_____________\/\\\___/\\\/____________\/\\\_____________\/\\\_____________\/\\\__/\\\\\\\\\\\\\\\__\///______________\///______________\///__\///__Runtime EditionPM2 is a Production Process Manager for Node.js applicationswith a built-in Load Balancer.Start and Daemonize any application:$ pm2 start app.jsLoad Balance 4 instances of api.js:$ pm2 start api.js -i 4Monitor in production:$ pm2 monitorMake pm2 auto-boot at server restart:$ pm2 startupTo go further checkout:http://pm2.io/-------------[PM2] Spawning PM2 daemon with pm2_home=/root/.pm2
[PM2] PM2 Successfully daemonized
[PM2] Starting /showdoc_data/mock/index.js in fork_mode (1 instance)
[PM2] Done.
┌─────┬──────────┬─────────────┬─────────┬─────────┬──────────┬────────┬──────┬───────────┬──────────┬──────────┬──────────┬──────────┐
│ id  │ name     │ namespace   │ version │ mode    │ pid      │ uptime │ ↺    │ status    │ cpu      │ mem      │ user     │ watching │
├─────┼──────────┼─────────────┼─────────┼─────────┼──────────┼────────┼──────┼───────────┼──────────┼──────────┼──────────┼──────────┤
│ 0   │ index    │ default     │ 1.0.0   │ fork    │ 135      │ 0s     │ 0    │ online    │ 0%       │ 26.9mb   │ root     │ disabled │
└─────┴──────────┴─────────────┴─────────┴─────────┴──────────┴────────┴──────┴───────────┴──────────┴──────────┴──────────┴──────────┘

五、访问showdoc

访问地址:http://localhost:1222

  1. 选择语言

2.查看初始化结果(初始化成功。默认管理员账户密码是showdoc/123456。)

3.进入ShowDoc登录页

4.登录ShowDoc首页

5.进入后台管理界面

6.新建项目

7.新建与编辑文档

8.团队管理

相关文章:

【打工日常】使用Docker部署团队协作文档工具

一、ShowDoc介绍 ​ShowDoc是一个适合IT团队共同协作API文档、技术文档的工具。通过showdoc,可以方便地使用markdown语法来书写出API文档、数据字典文档、技术文档、在线excel文档等等。 响应式网页设计:可将项目文档分享到电脑或移动设备查看。同时也可…...

(一)Neo4j下载安装以及初次使用

(一)下载 官网地址:Neo4j Graph Database & AnamConnect data as its stored with Neo4j. Perform powerful, complex queries at scale and speed with our graph data platform.https://neo4j.com/ (二)安装并配…...

QT for Mcu的学习建议

QT for MCU(微控制器单元)是一个相对较新的领域,它允许在资源受限的微控制器上运行Qt框架,从而为嵌入式设备带来丰富的用户界面和跨平台的开发体验。以下是一些建议,可以帮助你开始学习Qt for MCU: 理解Qt…...

【C语言初阶(五)】数组

❣博主主页: 33的博客❣ ▶文章专栏分类: C语言从入门到精通◀ 🚚我的代码仓库: 33的代码仓库🚚 目录 1. 前言2.一维数组的概念3.一维数组的创建和初始化3.1数组的创建3.2数组的初始化3.3数组的类型 4.一维数组的使用4.1数组下标4.2数组元素打印4.4数组元…...

词令微信小程序怎么添加到我的小程序?

微信小程序怎么添加到我的小程序? 1、找到并打开要添加的小程序; 2、打开小程序后,点击右上角的「…」 3、点击后底部弹窗更多选项,请找到并点击「添加到我的小程序」; 4、添加成功后,就可以在首页下拉我的…...

【PyTorch】基础学习:在Pycharm等IDE中打印或查看Pytorch版本信息

【PyTorch】基础学习:在Pycharm等IDE中打印或查看Pytorch版本信息 🌈 个人主页:高斯小哥 🔥 高质量专栏:Matplotlib之旅:零基础精通数据可视化、Python基础【高质量合集】、PyTorch零基础入门教程&#x1…...

SDN网络简单认识(2)——南向接口

目录 一、概述 二、南向接口与南向协议 2.1 南向接口(Southbound Interfaces) 2.2 南向协议(Southbound Protocols) 2.3 区别与联系 三、常见南向协议 2.1 OpenFlow 2.2 OVSDB(Open vSwitch Database Manageme…...

如何保存缓存和MySQL的双写一致呢?

如何保存缓存和MySQL的双写一致呢? 所谓的双写一致指的是,在同时使用缓存(如Redis)和数据库(如MySQL)的场景下,确保数据在缓存和数据库中的更新操作保持一致。当对数据进行修改的时候,无论是先修改缓存还是先修改数据库,最终都要保…...

第十三篇:复习Java面向对象

文章目录 一、面向对象的概念二、类和对象1. 如何定义/使用类2. 定义类的补充注意事项 三、面向对象三大特征1. 封装2. 继承2.1 例子2.2 继承类型2.3 继承的特性2.4 继承中的关键字2.4.1 extend2.4.2 implements2.4.3 super/this2.4.4 final 3. 多态4. 抽象类4.1 抽象类4.2 抽象…...

PyTorch学习笔记之基础函数篇(四)

文章目录 2.8 torch.logspace函数讲解2.9 torch.ones函数2.10 torch.rand函数2.11 torch.randn函数2.12 torch.zeros函数 2.8 torch.logspace函数讲解 torch.logspace 函数在 PyTorch 中用于生成一个在对数尺度上均匀分布的张量(tensor)。这意味着张量中…...

C++/CLI学习笔记3(快速打通c++与c#相互调用的桥梁)

c/cli变量和操作符 3.1:什么是变里 变量是存储数据以便应用程序临时使用的内存位置,具有名称、类型和值。变量值在应用程序执行期间可能改变,变量名也是。变量使用前必须声明,即指定类型和提供名称。变量的类型决定了值的范围以及能执行的操…...

unity

Unity官方下载_Unity最新版_从Unity Hub下载安装 | Unity中国官网 Unity Remote - Unity 手册 登陆账号,找到一个3d 免费资源 3D Animations & Models | Unity Asset Store unity 里面window->package Manager 里面可以看到自己的asset ,下载后…...

考研复习C语言初阶(3)

目录 一.函数是什么? 二.C语言中函数的分类 2.1库函数 2.2自定义函数 三.函数的参数 3.1实际参数(实参) 3.2 形式参数(形参) 四.函数的调用 4.1 传值调用 4.2 传址调用 五. 函数的嵌套调用和链式访问 5.1 嵌套调用 5…...

CCF 202009-3 点亮数字人生(拓扑排序)

题目背景 土豪大学的计算机系开了一门数字逻辑电路课,第一个实验叫做“点亮数字人生”,要用最基础的逻辑元件组装出实际可用的电路。时间已经是深夜了,尽管实验箱上密密麻麻的连线已经拆装了好几遍,小君同学却依旧没能让她的电路正…...

Docker笔记-进入运行中的镜像,查看日志等操作

docker搭建好后&#xff0c;查看运行的docker镜像&#xff1a; docker ps -a 进入运行的容器&#xff0c;命令如下&#xff1a; docker exec -it <容器ID> /bin/bash # 或者&#xff0c;直接用容器里面的命令&#xff0c;比如mysql镜像 docker exec -it <容器ID>…...

大语言模型(LLM) RAG概念

RAG&#xff08;Retrieval-Augmented Generation&#xff09;是一种用于自然语言处理的模型架构&#xff0c;特别是针对生成式任务。RAG模型结合了检索和生成两种方法&#xff0c;以提高生成式任务的性能。它将信息检索&#xff08;Retrieval&#xff09;和文本生成&#xff08…...

PHP使用AES进行加解密

前言 对接一个第三方平台&#xff0c;其使用AES对称加密 代码 //方式1 //加密 function enAES($originTxt, $keyQ6Mr6rDpn12iZb){return base64_encode(openssl_encrypt($originTxt, AES-128-ECB,$key, OPENSSL_RAW_DATA)); }//解密 function deAES($originTxt, $keyQ6Mr6rD…...

20240313寻找集成联调交付的具体方式

集成联调交付&#xff08;Integrated Joint Debugging and Delivery&#xff09;是软件开发过程中的一个阶段&#xff0c;主要涉及将不同的软件模块或组件整合在一起&#xff0c;并进行联合调试和测试&#xff0c;以确保它们能够作为一个整体正常工作。这个过程通常发生在开发周…...

makefile 学习

patsubst 函数 原型$(patsubst 原模式&#xff0c; 目标模式&#xff0c; 文件列表) 如果文件列表中没有匹配的字符串&#xff0c;就会把整个文件列表的值赋值给变量 // 如果当前目录下有 main.cpp test.cpp SRC $(wildcard *.cpp *.c) # 在工作目录下寻找所有c cpp 文件 …...

释放人工智能的力量:GPU服务器托管和高电机柜托管的关键作用

随着人工智能技术的不断发展&#xff0c;GPU服务器托管和高电机柜托管也变得愈发重要。这些技术在人工智能领域发挥着关键作用&#xff0c;为AI算法的训练和推理提供了强大的计算支持。 GPU服务器托管是指将GPU服务器放置在专门的数据中心中&#xff0c;通过云服务提供商提供的…...

Flask RESTful 示例

目录 1. 环境准备2. 安装依赖3. 修改main.py4. 运行应用5. API使用示例获取所有任务获取单个任务创建新任务更新任务删除任务 中文乱码问题&#xff1a; 下面创建一个简单的Flask RESTful API示例。首先&#xff0c;我们需要创建环境&#xff0c;安装必要的依赖&#xff0c;然后…...

label-studio的使用教程(导入本地路径)

文章目录 1. 准备环境2. 脚本启动2.1 Windows2.2 Linux 3. 安装label-studio机器学习后端3.1 pip安装(推荐)3.2 GitHub仓库安装 4. 后端配置4.1 yolo环境4.2 引入后端模型4.3 修改脚本4.4 启动后端 5. 标注工程5.1 创建工程5.2 配置图片路径5.3 配置工程类型标签5.4 配置模型5.…...

基于uniapp+WebSocket实现聊天对话、消息监听、消息推送、聊天室等功能,多端兼容

基于 ​UniApp + WebSocket​实现多端兼容的实时通讯系统,涵盖WebSocket连接建立、消息收发机制、多端兼容性配置、消息实时监听等功能,适配​微信小程序、H5、Android、iOS等终端 目录 技术选型分析WebSocket协议优势UniApp跨平台特性WebSocket 基础实现连接管理消息收发连接…...

Objective-C常用命名规范总结

【OC】常用命名规范总结 文章目录 【OC】常用命名规范总结1.类名&#xff08;Class Name)2.协议名&#xff08;Protocol Name)3.方法名&#xff08;Method Name)4.属性名&#xff08;Property Name&#xff09;5.局部变量/实例变量&#xff08;Local / Instance Variables&…...

python爬虫:Newspaper3k 的详细使用(好用的新闻网站文章抓取和解析的Python库)

更多内容请见: 爬虫和逆向教程-专栏介绍和目录 文章目录 一、Newspaper3k 概述1.1 Newspaper3k 介绍1.2 主要功能1.3 典型应用场景1.4 安装二、基本用法2.2 提取单篇文章的内容2.2 处理多篇文档三、高级选项3.1 自定义配置3.2 分析文章情感四、实战案例4.1 构建新闻摘要聚合器…...

什么是EULA和DPA

文章目录 EULA&#xff08;End User License Agreement&#xff09;DPA&#xff08;Data Protection Agreement&#xff09;一、定义与背景二、核心内容三、法律效力与责任四、实际应用与意义 EULA&#xff08;End User License Agreement&#xff09; 定义&#xff1a; EULA即…...

用docker来安装部署freeswitch记录

今天刚才测试一个callcenter的项目&#xff0c;所以尝试安装freeswitch 1、使用轩辕镜像 - 中国开发者首选的专业 Docker 镜像加速服务平台 编辑下面/etc/docker/daemon.json文件为 {"registry-mirrors": ["https://docker.xuanyuan.me"] }同时可以进入轩…...

全志A40i android7.1 调试信息打印串口由uart0改为uart3

一&#xff0c;概述 1. 目的 将调试信息打印串口由uart0改为uart3。 2. 版本信息 Uboot版本&#xff1a;2014.07&#xff1b; Kernel版本&#xff1a;Linux-3.10&#xff1b; 二&#xff0c;Uboot 1. sys_config.fex改动 使能uart3(TX:PH00 RX:PH01)&#xff0c;并让boo…...

如何理解 IP 数据报中的 TTL?

目录 前言理解 前言 面试灵魂一问&#xff1a;说说对 IP 数据报中 TTL 的理解&#xff1f;我们都知道&#xff0c;IP 数据报由首部和数据两部分组成&#xff0c;首部又分为两部分&#xff1a;固定部分和可变部分&#xff0c;共占 20 字节&#xff0c;而即将讨论的 TTL 就位于首…...

Web 架构之 CDN 加速原理与落地实践

文章目录 一、思维导图二、正文内容&#xff08;一&#xff09;CDN 基础概念1. 定义2. 组成部分 &#xff08;二&#xff09;CDN 加速原理1. 请求路由2. 内容缓存3. 内容更新 &#xff08;三&#xff09;CDN 落地实践1. 选择 CDN 服务商2. 配置 CDN3. 集成到 Web 架构 &#xf…...