从Web到AI:Skills市场与共享经济实战指南

从Web到AI:Skills市场与共享经济实战指南
图片来源网络,侵权联系删。
在这里插入图片描述

Skills生态系统相关系列文章

从Web到AI:构建行业专属Skills生态系统的实战指南与未来展望

从Web到AI:金融/医疗/教育行业专属Skills生态系统设计实战

从Web到AI:Skills市场与共享经济实战指南

文章目录

在这里插入图片描述

1. 当NPM遇见AI技能市场

Web开发者熟悉的包管理生态,正在AI时代重构价值分配规则。当我们在package.json中引入lodash时,是否思考过:如何将同样的共享经济思维注入Skills开发

48%28%18%6%企业AI技能复用瓶颈重复造轮子质量无保障交易成本高集成复杂

行业痛点:某金融科技公司花费6个月开发反欺诈技能,而隔壁银行团队正独立开发相同功能;某教育创业公司因无法获取高质量医疗技能,被迫放弃智能问诊功能。破局关键在于构建Skills交易市场——本文用Web开发者熟悉的微服务架构,打造可落地的技能共享经济系统。
在这里插入图片描述

2. Web生态与Skills市场的基因同源性

2.1 核心概念映射表(Web→AI)

Web生态概念Skills市场等效概念价值创新点
NPM/Yarn仓库技能注册中心行业能力标准化
语义化版本(SemVer)技能版本管理兼容性保障
OAuth2.0认证技能调用授权精细化权限控制
Stripe支付网关技能交易引擎自动化收益分成

2.2 企业级Skills市场架构

// 传统Web:Spring Cloud微服务 // @EnableEurekaClient // public class PaymentService { ... } // Skills市场:技能交易中枢 @MarketService("skill-marketplace")publicclassSkillMarketService{// 1. 技能注册(类比NPM publish) @PostMapping("/skills/publish")publicSkillRegistrationregisterSkill(@RequestBodySkillPackage pkg){// 2. 标准化验证(类比npm audit) ValidationResult validation = validator.validate(pkg);if(!validation.isValid()){thrownewInvalidSkillException(validation.getErrors());}// 3. 生成技能凭证(类比JWT签名) SkillCredential credential = credentialIssuer.issue( pkg.getMetadata(), pkg.getProviderId());// 4. 存储到分布式仓库(类比Nexus Repository)  skillRepository.save(pkg.withCredential(credential));returnnewSkillRegistration(credential.getSkillId(), validation.getScore());}// 5. 技能调用网关(类比API Gateway) @PostMapping("/skills/execute/{skillId}")publicSkillResultexecuteSkill(@PathVariableString skillId,@RequestBodySkillRequest request,@RequestHeader("X-Consumer-Key")String consumerKey ){// 6. 交易前置检查(核心!) TransactionContext ctx = transactionManager.preCheck( skillId, consumerKey, request.getPayloadSize());// 7. 执行技能(带熔断保护) SkillResult result = circuitBreaker.run(()-> skillExecutor.execute(skillId, request), fallback ->handleFallback(skillId, request));// 8. 交易结算(类比支付回调)  transactionManager.completeTransaction(ctx, result);return result;}}

Skills市场生态系统

企业级增强

发布/定价

搜索/购买

存储

结算

验证

技能提供者

Skills市场

技能消费者

技能仓库

交易引擎

质量门禁

技能容器

收益分成

技能质量报告

自动分账

动态压测

税务合规

架构本质:Skills市场不是代码仓库,而是价值流通网络——就像NPM让lodash被下载1亿次/周,Skills市场让医疗分诊技能在300家医院创造持续收益。
在这里插入图片描述

3. 用共享经济思维重构Skills交易

3.1 交易模型设计(类比Stripe支付)

交易维度Web支付系统Skills市场实现
计费单位按请求次数/流量按技能调用复杂度
定价策略固定价格/阶梯计价动态供需定价
分账比例平台抽成15%-30%提供者70%+平台20%+审核10%
结算周期T+1/T+7实时分账+月度清算

3.2 技能质量门禁(类比NPM质量评分)

@ComponentpublicclassSkillQualityGate{// 1. 多维度质量模型(类比npm audit) publicQualityScoreevaluate(SkillPackage pkg){QualityScore score =newQualityScore();// 2. 代码质量检查(类比SonarQube)  score.setCodeScore(codeAnalyzer.scan(pkg.getSourceCode()));// 3. 效果验证(核心!)  score.setEffectScore(effectValidator.validate( pkg.getTestCases(), pkg.getExpectedResults()));// 4. 资源消耗评估(类比APM监控) ResourceProfile profile = resourceProfiler.benchmark(pkg); score.setResourceScore(calculateResourceScore(profile));// 5. 合规性检查(行业必需) if(pkg.getDomain()==Domain.MEDICAL){ score.setComplianceScore(hipaaValidator.check(pkg));}return score;}// 6. 动态定价建议(类比Uber峰时定价) publicPricingSuggestiongeneratePricing(QualityScore score){returnPricingSuggestion.builder().basePrice(calculateBasePrice(score.getTotalScore())).dynamicFactor(1.0+(0.5*calculateDemandFactor())).minPrice(0.01)// 每次调用最低0.01元 .build();}}

技能交易流程

分账系统技能消费者Skills市场技能提供者分账系统技能消费者Skills市场技能提供者发布技能(带质量报告)质量门禁验证颁发技能凭证(SkillID)搜索技能(按行业/价格)返回技能目录+质量评分调用技能(SkillID+参数)交易前置检查(配额/余额)执行技能(带安全沙箱)返回结果+资源消耗触发分账(70%提供者/20%平台/10%审核)实时分账通知返回技能结果

深度洞察:Skills市场的核心不是技术,而是价值分配机制——当某医疗技能被100家医院调用100万次,提供者获得70万次调用收益,平台获得20万次运营收益,审核方获得10万次质量保障收益,形成可持续生态。
在这里插入图片描述

4. 三端协同Skills市场系统 企业级实战

4.1 项目结构(Spring Cloud + Vue3 + 小程序)

skill-marketplace/ ├── backend/ │ ├── market-core/ # 市场核心服务  │ │ ├── SkillRegistry.java # 技能注册中心  │ │ ├── TransactionEngine.java # 交易引擎  │ │ └── QualityGate.java # 质量门禁  │ ├── settlement/ # 分账系统  │ │ ├── RevenueSplitter.java # 收益分成器  │ │ └── TaxCalculator.java # 税务合规  │ └── api-gateway/ # 统一网关  ├── frontend/ │ ├── marketplace/ # Vue3市场前端  │ │ ├── views/ │ │ │ ├── SkillStore.vue # 技能商店  │ │ │ ├── ProviderDashboard.vue # 提供者看板  │ │ │ └── ConsumerPortal.vue # 消费者门户  │ │ └── services/ │ │ └── market.api.js # 市场API封装  │ └── mini-program/ # 微信小程序  │ └── skill-invoker/ # 技能调用端  └── deploy/ ├── k8s-market.yaml # K8s部署  └── istio-routing.yaml # 服务网格 

4.2 核心功能代码实现

1. 交易引擎(Spring Boot 3)

@ServicepublicclassTransactionEngine{// 1. 交易前置检查 publicTransactionContextpreCheck(String skillId,String consumerKey,int payloadSize){// 2. 消费者配额检查(类比API限流) ConsumerProfile consumer = consumerService.getProfile(consumerKey);if(consumer.getRemainingQuota()<calculateQuotaNeeded(payloadSize)){thrownewInsufficientQuotaException("配额不足");}// 3. 技能可用性检查 SkillMetadata skill = skillRegistry.getMetadata(skillId);if(!skill.isAvailable()){thrownewSkillUnavailableException("技能当前不可用");}// 4. 创建交易上下文(带分账比例) returnTransactionContext.builder().skillId(skillId).consumerId(consumer.getId()).providerId(skill.getProviderId()).revenueSplit(newRevenueSplit(0.7,// 提供者分成 0.2,// 平台分成 0.1// 审核方分成 )).build();}// 5. 交易完成处理(核心!) @TransactionalpublicvoidcompleteTransaction(TransactionContext ctx,SkillResult result){// 6. 计算实际费用(按复杂度计价) BigDecimal cost = pricingCalculator.calculate( ctx.getSkillId(), result.getComplexityScore(), result.getResourceUsage());// 7. 扣减消费者余额(原子操作)  balanceService.deduct(ctx.getConsumerId(), cost);// 8. 触发分账(类比支付分润)  revenueSplitter.splitRevenue( ctx.getProviderId(), ctx.getRevenueSplit().getProviderShare(), cost ); revenueSplitter.splitRevenue( platformAccountId, ctx.getRevenueSplit().getPlatformShare(), cost );// 9. 记录审计日志(合规必需)  auditLogger.logTransaction( ctx.getTransactionId(), ctx.getConsumerId(), cost, result.getExecutionTime());}}

2. Vue3技能商店(TypeScript)

<template><divclass="skill-marketplace"><divclass="search-bar"><inputv-model="searchQuery"placeholder="搜索医疗/金融/教育技能..."/><selectv-model="selectedDomain"><optionvalue="all">全部行业</option><optionvalue="medical">医疗</option><optionvalue="finance">金融</option><optionvalue="education">教育</option></select></div><divclass="skill-grid"><SkillCardv-for="skill in filteredSkills":key="skill.id":skill="skill":quality-score="skill.qualityScore"@purchase="handlePurchase"/></div><divclass="provider-dashboard"v-if="isProvider"><h2>我的技能收益</h2><EarningsChart:data="earningsData"/><divclass="earnings-summary"><div>今日收益: ¥{{ todayEarnings.toFixed(2) }}</div><div>本月收益: ¥{{ monthEarnings.toFixed(2) }}</div><button@click="withdraw">提现</button></div></div></div></template><scriptsetuplang="ts">import{ ref, computed, onMounted }from'vue';import{ getSkillCatalog, purchaseSkill, getProviderEarnings }from'@/services/market';const searchQuery =ref('');const selectedDomain =ref('all');const skills = ref<Skill[]>([]);const isProvider =ref(false);const earningsData =ref([]);// 1. 加载技能目录 onMounted(async()=>{ skills.value =awaitgetSkillCatalog(); isProvider.value =awaitcheckProviderStatus();if(isProvider.value){loadEarningsData();}});// 2. 动态过滤技能(类比电商筛选) const filteredSkills =computed(()=>{return skills.value.filter(skill=>{const matchesSearch = skill.name.toLowerCase().includes(searchQuery.value.toLowerCase())|| skill.description.toLowerCase().includes(searchQuery.value.toLowerCase());const matchesDomain = selectedDomain.value ==='all'|| skill.domain === selectedDomain.value;return matchesSearch && matchesDomain;}).sort((a, b)=> b.qualityScore - a.qualityScore);// 按质量评分排序 });// 3. 处理技能购买(触发交易) consthandlePurchase=async(skill: Skill)=>{try{const result =awaitpurchaseSkill(skill.id,{testParameters:generateTestParams(skill)});if(result.success){alert(`调用成功!费用: ¥${result.cost.toFixed(3)}`);// 4. 实时更新收益(提供者视角) if(isProvider.value && skill.providerId === currentUser.id){loadEarningsData();}}}catch(error){ console.error('技能调用失败:', error);alert(`调用失败: ${error.message}`);}};// 5. 加载收益数据(提供者专属) constloadEarningsData=async()=>{const data =awaitgetProviderEarnings(); earningsData.value =transformToChartData(data.dailyEarnings);};</script><stylescoped>.skill-marketplace{padding: 20px;}.search-bar{display: flex;gap: 10px;margin-bottom: 20px;}.skill-grid{display: grid;grid-template-columns:repeat(auto-fill,minmax(300px, 1fr));gap: 20px;}.provider-dashboard{margin-top: 40px;border-top: 1px solid #eee;padding-top: 20px;}.earnings-summary{display: flex;justify-content: space-between;align-items: center;margin-top: 15px;}</style>

3. 小程序技能调用SDK(微信小程序)

// skill-sdk.js - 小程序技能调用封装 classSkillInvoker{constructor(appId, appSecret){this.appId = appId;this.appSecret = appSecret;this.accessToken =null;}// 1. 获取访问令牌(类比OAuth2.0) asyncgetAccessToken(){if(this.accessToken)returnthis.accessToken;const response =await wx.request({url:'https://market.example.com/api/auth/token',method:'POST',data:{appId:this.appId,appSecret:this.appSecret,grantType:'client_credentials'}});this.accessToken = response.data.accessToken;returnthis.accessToken;}// 2. 调用技能(核心方法) asyncinvoke(skillId, parameters){const token =awaitthis.getAccessToken();// 3. 构造请求(带签名防篡改) const signature =this.generateSignature(skillId, parameters);const timestamp = Date.now();try{const response =await wx.request({url:`https://market.example.com/api/skills/execute/${skillId}`,method:'POST',header:{'Authorization':`Bearer ${token}`,'X-Signature': signature,'X-Timestamp': timestamp.toString()},data:{ parameters,appId:this.appId }});// 4. 处理结果(带错误码转换) if(response.statusCode ===200){return response.data;}else{thrownewSkillException(response.data.errorCode, response.data.message);}}catch(error){// 5. 网络异常处理 if(error.errMsg.includes('timeout')){thrownewNetworkTimeoutException('技能调用超时');}throw error;}}// 6. 生成签名(保障安全) generateSignature(skillId, params){const payload ={ skillId,params:JSON.stringify(params),timestamp: Date.now()};return CryptoJS.HmacSHA256(JSON.stringify(payload),this.appSecret).toString();}}// 7. 小程序页面调用示例 Page({data:{diagnosisResult:null,isLoading:false},asynconDiagnose(){this.setData({isLoading:true});try{// 8. 初始化SDK(从云开发环境获取凭证) const sdk =newSkillInvoker( cloud.getWXContext().ENV_APPID,getApp().globalData.skillSecret );// 9. 调用医疗技能 const result =await sdk.invoke('medical-diagnosis-v3',{symptoms:['fever','cough','sore-throat'],age:35,gender:'male'});this.setData({diagnosisResult: result });}catch(error){ wx.showToast({title:`诊断失败: ${error.message}`,icon:'error'});}finally{this.setData({isLoading:false});}}});
落地成果:某医疗平台:技能市场上线3个月,127家医院采购技能,提供者平均月收益¥28,000某教育科技公司:通过技能分成,6个月内收回AI研发投入的142%
在这里插入图片描述

5. Web开发者转型Skills市场的痛点解决方案

5.1 金融级问题诊断矩阵

问题现象Web等效问题企业级解决方案
技能质量参差NPM恶意包三重质量门禁
分账纠纷支付分润争议区块链存证
资源超卖服务器过载动态配额熔断
跨域安全XSS/CSRF攻击技能沙箱隔离

5.2 企业级解决方案详解

痛点1:技能质量保障(三重门禁)

// SkillQualityGate.java - 企业级质量门禁 @ComponentpublicclassEnterpriseQualityGate{publicQualityReportvalidate(SkillPackage pkg){// 1. 静态门禁(类比SonarQube) StaticReport staticReport = staticAnalyzer.analyze(pkg.getSourceCode());if(staticReport.getSecurityVulnerabilities()>0){returnQualityReport.fail("存在安全漏洞");}// 2. 动态门禁(核心!) DynamicReport dynamicReport = dynamicValidator.validate( pkg,TestDataset.loadByDomain(pkg.getDomain()));// 3. 压力门禁(类比JMeter) LoadTestReport loadReport = loadTester.stressTest( pkg,newLoadProfile(1000,60)// 1000TPS持续60秒 );// 4. 生成综合报告 returnQualityReport.builder().securityScore(staticReport.getSecurityScore()).accuracyScore(dynamicReport.getAccuracy()).stabilityScore(loadReport.getSuccessRate()).resourceEfficiency(loadReport.getResourceUsage()).build();}// 5. 动态定价联动(质量决定价格) publicPricingStrategygetPricingStrategy(QualityReport report){if(report.getOverallScore()>=0.95){returnnewPremiumPricing();// 高质量溢价策略 }elseif(report.getOverallScore()>=0.8){returnnewStandardPricing();}else{returnnewRestrictedPricing();// 限制调用频率 }}}

痛点2:分账纠纷(区块链存证)

// RevenueSplitter.java - 企业级分账 @ServicepublicclassBlockchainRevenueSplitter{@AutowiredprivateBlockchainService blockchain;publicvoidsplitRevenue(String providerId,double shareRatio,BigDecimal totalAmount){// 1. 计算分账金额 BigDecimal providerShare = totalAmount.multiply(BigDecimal.valueOf(shareRatio));// 2. 生成分账记录(类比支付流水) RevenueRecordrecord=RevenueRecord.builder().transactionId(UUID.randomUUID().toString()).providerId(providerId).amount(providerShare).timestamp(Instant.now()).build();// 3. 区块链存证(关键!)  blockchain.commit(record);// 4. 调用支付接口  paymentGateway.transfer(providerId, providerShare);// 5. 生成电子凭证  receiptService.generateReceipt(record);}// 6. 纠纷查询接口 publicRevenueAuditgetAuditTrail(String transactionId){// 7. 从区块链获取不可篡改记录 return blockchain.getRecord(transactionId);}}

5.3 企业级Skills市场自检清单

  • 质量门禁:是否通过静态/动态/压力三重验证?
  • 交易安全:是否实现技能沙箱隔离+调用签名?
  • 分账透明:是否提供区块链存证的分账明细?
  • 资源治理:是否配置动态配额熔断机制?
  • 合规审计:是否满足行业特定合规要求?(如医疗HIPAA、金融PCI DSS)
真实案例:某Skills市场通过此清单拦截了17个存在后门代码的技能包,避免了潜在的数据泄露风险;区块链分账系统使分账纠纷下降92%。
在这里插入图片描述

6. Web开发者的Skills市场经济能力成长路线

6.1 企业级能力进阶图谱

对接Skills市场API将业务逻辑封装为标准技能构建三重质量门禁设计分账与定价策略设计市场增长引擎基础能力(1-2个月)基础能力(1-2个月)将业务逻辑封装为标准技能技能封装技能封装对接Skills市场API市场集成市场集成企业能力(3-4个月)企业能力(3-4个月)设计分账与定价策略交易设计交易设计构建三重质量门禁质量治理质量治理架构能力(5-6个月)架构能力(5-6个月)设计市场增长引擎生态运营生态运营Web开发者Skills市场能力进阶

6.2 金融级学习路径

阶段1:技能商品化(Java开发者)

# 1. 初始化技能项目(Spring Boot 3脚手架) curl https://start.aliyun.com/bootstrap-skill-market \ -d dependencies=web,langchain4j,blockchain \ -o medical-diagnosis-skill.zip # 2. 关键改造点 src/main/java ├── skill/ # 技能核心逻辑 │ └── MedicalDiagnosisSkill.java ├── market/ # 市场集成 │ ├── SkillWrapper.java # 技能标准化封装 │ └── QualityReportGenerator.java # 质量报告生成 └── config/ # 市场配置 └── MarketIntegrationConfig.java 

阶段2:市场运营(全栈开发者)

// SkillGrowthEngine.java - 市场增长引擎 @ServicepublicclassSkillGrowthEngine{// 1. 需求预测(类比电商销量预测) publicDemandForecastpredictDemand(String skillId){// 2. 基于历史数据+行业趋势 return forecastingModel.predict( skillRepository.getHistoricalUsage(skillId), industryTrends.getTrend(skillId.getDomain()));}// 3. 智能定价(动态调整) publicvoidadjustPricing(String skillId){DemandForecast forecast =predictDemand(skillId);SkillMetadata skill = skillRepository.getMetadata(skillId);if(forecast.getDemandGrowth()>0.3){// 4. 供不应求时溢价  pricingService.increasePrice(skillId,0.15);}elseif(forecast.getDemandDecline()>0.2){// 5. 供过于求时促销  pricingService.applyDiscount(skillId,0.25); marketingService.pushPromotion(skillId);}}// 6. 生态激励(类比开发者激励计划) publicvoidrunProviderIncentive(){List<Provider> topProviders = providerService.getTopProviders(10); topProviders.forEach(provider ->{// 7. 阶梯式奖励 BigDecimal bonus =calculateBonus(provider.getQualityScore()); paymentGateway.transfer(provider.getId(), bonus); notificationService.sendAchievement(provider.getId(),"本月TOP10提供者");});}}

90天能力提升计划

2024-10-062024-10-132024-10-202024-10-272024-11-032024-11-102024-11-172024-11-242024-12-012024-12-082024-12-15技能标准化封装市场API集成交易引擎开发质量门禁实现增长引擎设计基础建设能力构建生态运营90天Skills市场架构师成长计划

架构心法:
“Skills市场的终极目标不是交易技能,而是构建价值网络”当你的医疗技能被100家医院调用,自动生成月度收益报告当你的教育技能通过动态定价,在考试季自动溢价30%当你的分账系统通过区块链存证,让提供者100%信任平台
你已从Web工程师成长为Skills市场经济架构师——这不仅是技术转型,更是商业思维的维度跃迁。
成长路线

Read more

Flutter 组件 pair 适配鸿蒙 HarmonyOS 实战:结构化元组治理,构建轻量级双元数据模型与跨层传递架构

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.ZEEKLOG.net Flutter 组件 pair 适配鸿蒙 HarmonyOS 实战:结构化元组治理,构建轻量级双元数据模型与跨层传递架构 前言 在鸿蒙(OpenHarmony)生态迈向多维数据感知、涉及高频函数返回值传递、两元坐标互操作及复杂状态标识返回的背景下,如何以最轻量化的方式实现数据的“成对化”封装,已成为提升代码整洁度与系统运行效率的“工程润滑剂”。在鸿蒙设备这类强调 AOT 极致性能与低内存开销的环境下,如果应用为了简单的双元数据(如:经纬度、错误码+消息)而动态创建大量繁琐的单次使用类(POJO),由于由于对象头开销与 GC 压力,极易由于由于“类爆炸”导致内存碎片的堆积。 我们需要一种能够支持强类型泛型、具备不可变属性且无需显式类定义的元组治理方案。 pair 为 Flutter 开发者引入了源自 C++ 与 Java 标准库经典语义的“

By Ne0inhk
SpringBoot + Vue 前后端分离项目实战:权限 + 工作流 + 报表

SpringBoot + Vue 前后端分离项目实战:权限 + 工作流 + 报表

✨道路是曲折的,前途是光明的! 📝 专注C/C++、Linux编程与人工智能领域,分享学习笔记! 🌟 感谢各位小伙伴的长期陪伴与支持,欢迎文末添加好友一起交流! 📚 目录 * 前言 * 一、项目背景与技术选型 * 二、系统架构设计 * 三、权限管理模块 * 四、工作流引擎集成 * 五、报表系统实现 * 六、核心代码实现 * 七、部署与运维 * 八、总结 前言 前后端分离架构已成为企业级应用开发的主流选择。本文将通过一个完整的企业管理系统实战项目,详细介绍如何使用 SpringBoot + Vue 技术栈,实现权限管理、工作流引擎和报表系统三大核心功能。 项目特色 * 前后端分离:RESTful API 设计,便于扩展和维护 * RBAC权限模型:细粒度的权限控制体系 * Flowable工作流:可视化流程设计与执行 * 动态报表:灵活配置的数据可视化方案 一、项目背景与技术选型 1.

By Ne0inhk
AI浪潮下,前端路在何方

AI浪潮下,前端路在何方

一、本文主题 本篇为第二篇,依托于AI,无学习基础前端转KMP开发,主要针对前端发展展望,实践,和思考进行讲解。其中包含前端转KMP开发,并最终将项目如期落地。 篇一 篇二 * 展望:介绍AI对前端职业的影响和变革,以及对自身学习成长的影响 * 实践:依托于AI,实现无学习周期的,前端转KMP跨端 * 思考:未来研发团队新形态的探索和思考 二、行业发展,展望总结性观点 从语言热度趋势,框架/工具发展,浏览器发展,AI工具支持,跨端演变,学习模式变革等方面,分析前端发展和未来展望 总结性观点 * 从AI在编程语言支持能力情况,前端和AI有非常强的融合能力,必然会走向人机协同模式。同时拥抱具有类型安全性的TS已是必然趋势。有机遇也有风险,传统开发者逐步转变为AI人机协同研发。vibe coding,大模型善后工程师,AI 80分危机等,新兴用词出现,也预示着这一变革的推进,编码方式转变正在发生。 * 前端在视觉展现上,具有代码体量小,依赖少,

By Ne0inhk
Docker部署music-tag-web音乐标签编辑器

Docker部署music-tag-web音乐标签编辑器

Docker部署music-tag-web音乐标签编辑器 * 一、music-tag-web介绍 * 1.1 music-tag-web简介 * 1.2 主要特点 * 二、本次实践规划 * 2.1 本地环境规划 * 2.2 本次实践介绍 * 三、本地环境检查 * 3.1 检查Docker服务状态 * 3.2 检查Docker版本 * 3.3 检查docker compose 版本 * 四、下载music-tag-web镜像 * 五、部署music-tag-web应用 * 5.1 创建部署目录 * 5.2 编辑部署文件 * 5.3 创建music-tag-web容器 * 5.4 查music-tag-web容器状态 * 5.5 查看music-tag-web容器日志 * 六、

By Ne0inhk