[{"data":1,"prerenderedAt":729},["ShallowReactive",2],{"$f1xrrfe8f4x7qd":3,"$f1alnusazolgg2":19},{"yearMonth":4,"slug":5,"title":6,"date":7,"type":8,"categories":9,"tags":11,"excerpt":13,"sticky":14,"unlisted":14,"comments":15,"wordCount":16,"readingTime":17,"html":18},"2023-04","blog-build-cn-v2","博客 cn 站搭建 v2.1","2023-04-01","post",[10],"blog-build（建站日志）",[12],"blog-build","1. 结构设计 blog-build-v2.1 2. 准备 1. ECS 服务器 * 1 2. OSS 对象存储 * 1 3. 域名 * 1（若服务器在境内，域名需备案） 4. 已安装的 picGo 软件（用于图片上传，可自行选择其他方式） 5. 记事本（随时复制粘贴一些配置以及重要信息） 3. 配置 OSS 对象存储 1. 前往对象存储 Bucket 列表 进入需要操作的 Bucket 2. 在",false,true,1448,4,"\u003Ch2 id=\"1.-%E7%BB%93%E6%9E%84%E8%AE%BE%E8%AE%A1\" tabindex=\"-1\">\u003Ca class=\"header-anchor\" href=\"#1.-%E7%BB%93%E6%9E%84%E8%AE%BE%E8%AE%A1\">#\u003C\u002Fa> 1. 结构设计\u003C\u002Fh2>\n\u003Cp>\u003Cpicture>\u003Csource type=\"image\u002Fwebp\" srcset=\"https:\u002F\u002Fmedia.cc01cc.cn\u002F31175d65.webp?x-oss-process=image\u002Fresize,w_672\u002Fformat,webp\u002Fquality,Q_85 672w, https:\u002F\u002Fmedia.cc01cc.cn\u002F31175d65.webp?x-oss-process=image\u002Fresize,w_1344\u002Fformat,webp\u002Fquality,Q_85 1344w\" sizes=\"min(42rem, 100vw - 2rem)\" \u002F>\u003Cimg src=\"https:\u002F\u002Fmedia.cc01cc.cn\u002F31175d65.webp\" alt=\"blog-build-v2.1\" loading=\"lazy\" decoding=\"async\" \u002F>\u003C\u002Fpicture>\u003C\u002Fp>\n\u003Ch2 id=\"2.-%E5%87%86%E5%A4%87\" tabindex=\"-1\">\u003Ca class=\"header-anchor\" href=\"#2.-%E5%87%86%E5%A4%87\">#\u003C\u002Fa> 2. 准备\u003C\u002Fh2>\n\u003Col>\n\u003Cli>ECS 服务器 * 1\u003C\u002Fli>\n\u003Cli>OSS 对象存储 * 1\u003C\u002Fli>\n\u003Cli>域名 * 1（若服务器在境内，域名需备案）\u003C\u002Fli>\n\u003Cli>已安装的 picGo 软件（用于图片上传，可自行选择其他方式）\u003C\u002Fli>\n\u003Cli>记事本（随时复制粘贴一些配置以及重要信息）\u003C\u002Fli>\n\u003C\u002Fol>\n\u003Ch2 id=\"3.-%E9%85%8D%E7%BD%AE-oss-%E5%AF%B9%E8%B1%A1%E5%AD%98%E5%82%A8\" tabindex=\"-1\">\u003Ca class=\"header-anchor\" href=\"#3.-%E9%85%8D%E7%BD%AE-oss-%E5%AF%B9%E8%B1%A1%E5%AD%98%E5%82%A8\">#\u003C\u002Fa> 3. 配置 OSS 对象存储\u003C\u002Fh2>\n\u003Col>\n\u003Cli>前往对象存储 Bucket 列表 \u003Ca href=\"https:\u002F\u002Foss.console.aliyun.com\u002Fbucket\">https:\u002F\u002Foss.console.aliyun.com\u002Fbucket\u003C\u002Fa> 进入需要操作的 Bucket\u003C\u002Fli>\n\u003Cli>在文件列表中新建两个目录 \u003Ccode>hexo_zeo\u003C\u002Fcode>, \u003Ccode>image_zeo\u003C\u002Fcode>，分别用于存放博客页面以及图片\u003C\u002Fli>\n\u003Cli>前往 RAM 访问控制 - 用户: \u003Ca href=\"https:\u002F\u002Fram.console.aliyun.com\u002Fusers\">https:\u002F\u002Fram.console.aliyun.com\u002Fusers\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>创建二个用户（不需要授权，后续在 Bucket 中授权，可以自行判断是否添加用户组）：\n\u003Col>\n\u003Cli>允许读写 博客页面 的用户（供 hexo deploy 使用）\u003C\u002Fli>\n\u003Cli>允许读写 图片 的用户（供 picGo 使用）\u003C\u002Fli>\n\u003C\u002Fol>\n\u003C\u002Fli>\n\u003Cli>创建用户后，分别进入用户详情页，创建 AccessKey，\u003Cstrong>记录 ID 和 key\u003C\u002Fstrong>\u003C\u002Fli>\n\u003Cli>配置 Bucket 授权策略（都要求 https 访问）：\n\u003Col>\n\u003Cli>分别指定资源将 读写 \u003Ccode>hexo_zeo\u002F*\u003C\u002Fcode>, \u003Ccode>image_zeo\u002F*\u003C\u002Fcode> 授权给子账号\u003C\u002Fli>\n\u003Cli>指定资源将 只读(不包含ListObject) \u003Ccode>hexo_zeo\u002F*\u003C\u002Fcode>, \u003Ccode>image_zeo\u002F*\u003C\u002Fcode> 授权给 ecs 公网 ip\n\u003Col>\n\u003Cli>OSS 资源预览必须使用 自定义域名，所以只能使用公网 ip\u003C\u002Fli>\n\u003Cli>参考：(如何配置访问OSS文件时是预览行为？: \u003Ca href=\"https:\u002F\u002Fhelp.aliyun.com\u002Fdocument_detail\u002F600802.html?spm=a2c4g.107034.0.i3#section-4e5-f7l-jpp\">https:\u002F\u002Fhelp.aliyun.com\u002Fdocument_detail\u002F600802.html?spm=a2c4g.107034.0.i3#section-4e5-f7l-jpp\u003C\u002Fa>)\u003C\u002Fli>\n\u003C\u002Fol>\n\u003C\u002Fli>\n\u003Cli>关于更多 阿里云 OSS 鉴权的流程和说明可以查看 OSS鉴权详解 \u003Ca href=\"https:\u002F\u002Fhelp.aliyun.com\u002Fdocument_detail\u002F212436.html\">https:\u002F\u002Fhelp.aliyun.com\u002Fdocument_detail\u002F212436.html\u003C\u002Fa>\u003C\u002Fli>\n\u003C\u002Fol>\n\u003C\u002Fli>\n\u003C\u002Fol>\n\u003Ch2 id=\"4.-%E6%A0%A1%E9%AA%8C-oss-%E9%85%8D%E7%BD%AE\" tabindex=\"-1\">\u003Ca class=\"header-anchor\" href=\"#4.-%E6%A0%A1%E9%AA%8C-oss-%E9%85%8D%E7%BD%AE\">#\u003C\u002Fa> 4. 校验 OSS 配置\u003C\u002Fh2>\n\u003Col>\n\u003Cli>\n\u003Cp>打开 picGo，配置阿里云 OSS，输入 \u003Ccode>image_zeo\u003C\u002Fcode> 对应读写子账号的 ID 和 key，测试图片是否可以上传。\u003C\u002Fp>\n\u003C\u002Fli>\n\u003Cli>\n\u003Cp>开启 ECS 服务器控制台，使用 \u003Ccode>wget\u003C\u002Fcode> 获取 OSS 中的资源，验证 ECS ip 授权是否正确\u003C\u002Fp>\n\u003C\u002Fli>\n\u003Cli>\n\u003Cp>进入本地 hexo 目录，执行 \u003Ccode>npm install hexo-deployer-ali-oss --save\u003C\u002Fcode> 安装部署插件\u003C\u002Fp>\n\u003C\u002Fli>\n\u003Cli>\n\u003Cp>配置 hexo\u003C\u002Fp>\n\u003Cpre data-lang=\"yml\" class=\"shiki shiki-themes github-light github-dark\" style=\"background-color:#fff;--shiki-dark-bg:#24292e;color:#24292e;--shiki-dark:#e1e4e8\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan style=\"color:#22863A;--shiki-dark:#85E89D\">deploy\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">:\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#22863A;--shiki-dark:#85E89D\">    type\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">: \u003C\u002Fspan>\u003Cspan style=\"color:#032F62;--shiki-dark:#9ECBFF\">ali-oss\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#22863A;--shiki-dark:#85E89D\">    region\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">: \u003C\u002Fspan>\u003Cspan style=\"color:#032F62;--shiki-dark:#9ECBFF\">&#x3C;您的oss 区域代码，例 oss-cn-hangzhou>\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#22863A;--shiki-dark:#85E89D\">    accessKeyId\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">: \u003C\u002Fspan>\u003Cspan style=\"color:#032F62;--shiki-dark:#9ECBFF\">&#x3C;您的oss  accessKeyId>\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#22863A;--shiki-dark:#85E89D\">    accessKeySecret\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">: \u003C\u002Fspan>\u003Cspan style=\"color:#032F62;--shiki-dark:#9ECBFF\">&#x3C;您的oss accessKeySecret>\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#22863A;--shiki-dark:#85E89D\">    bucket\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">: \u003C\u002Fspan>\u003Cspan style=\"color:#032F62;--shiki-dark:#9ECBFF\">&#x3C;您的bucket name>\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#22863A;--shiki-dark:#85E89D\">    remotePath\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">: \u003C\u002Fspan>\u003Cspan style=\"color:#032F62;--shiki-dark:#9ECBFF\">&#x3C;您要部署的目录>\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\u003C\u002Fli>\n\u003Cli>\n\u003Cp>运行 \u003Ccode>hexo deploy\u003C\u002Fcode> 查看是否部署成功\u003C\u002Fp>\n\u003C\u002Fli>\n\u003Cli>\n\u003Cp>前往 OSS 文件列表，核验文件是否上传成功\u003C\u002Fp>\n\u003C\u002Fli>\n\u003C\u002Fol>\n\u003Ch2 id=\"5.-oss-%E5%9F%9F%E5%90%8D%E9%85%8D%E7%BD%AE%E5%B9%B6%E5%BC%80%E5%90%AF-https\" tabindex=\"-1\">\u003Ca class=\"header-anchor\" href=\"#5.-oss-%E5%9F%9F%E5%90%8D%E9%85%8D%E7%BD%AE%E5%B9%B6%E5%BC%80%E5%90%AF-https\">#\u003C\u002Fa> 5. OSS 域名配置并开启 HTTPS\u003C\u002Fh2>\n\u003Col>\n\u003Cli>前往数字证书管理服务管理控制台\u003Ca href=\"https:\u002F\u002Fyundun.console.aliyun.com\u002F\">https:\u002F\u002Fyundun.console.aliyun.com\u002F\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>添加免费证书（每年可以领20份免费证书）域名之后需要绑定到 bucket\u003C\u002Fli>\n\u003Cli>前往对象存储 Bucket 列表 \u003Ca href=\"https:\u002F\u002Foss.console.aliyun.com\u002Fbucket\">https:\u002F\u002Foss.console.aliyun.com\u002Fbucket\u003C\u002Fa> 进入需要操作的 Bucket\u003C\u002Fli>\n\u003Cli>Bucket 配置 &gt; 域名管理，绑定域名，记录自己填写的域名\u003C\u002Fli>\n\u003Cli>点击绑定的域名，继续绑定证书\u003C\u002Fli>\n\u003Cli>进入 Bucket 文件列表，使用刚刚绑定的域名采用 HTTPS 模式复制并访问文件临时 url，验证操作是否成功\u003C\u002Fli>\n\u003C\u002Fol>\n\u003Cp>之后 ECS 将通过这个域名访问 OSS。\u003C\u002Fp>\n\u003Ch2 id=\"6.-%E7%BC%96%E5%86%99-spring-boot-%E7%A8%8B%E5%BA%8F\" tabindex=\"-1\">\u003Ca class=\"header-anchor\" href=\"#6.-%E7%BC%96%E5%86%99-spring-boot-%E7%A8%8B%E5%BA%8F\">#\u003C\u002Fa> 6. 编写 spring boot 程序\u003C\u002Fh2>\n\u003Cblockquote>\n\u003Cp>开发工具 VSCode + Java Extension Pack + Spring Boot Extension Pack\u003C\u002Fp>\n\u003C\u002Fblockquote>\n\u003Ch3 id=\"6.1.-%E7%A4%BA%E4%BE%8B%E4%BB%A3%E7%A0%81%E5%A6%82%E4%B8%8B\" tabindex=\"-1\">\u003Ca class=\"header-anchor\" href=\"#6.1.-%E7%A4%BA%E4%BE%8B%E4%BB%A3%E7%A0%81%E5%A6%82%E4%B8%8B\">#\u003C\u002Fa> 6.1. 示例代码如下\u003C\u002Fh3>\n\u003Cblockquote>\n\u003Cp>以 博客文件 hexo server 为例\u003C\u002Fp>\n\u003C\u002Fblockquote>\n\u003Cp>pom 文件\u003C\u002Fp>\n\u003Cpre data-lang=\"xml\" class=\"shiki shiki-themes github-light github-dark\" style=\"background-color:#fff;--shiki-dark-bg:#24292e;color:#24292e;--shiki-dark:#e1e4e8\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">&#x3C;?\u003C\u002Fspan>\u003Cspan style=\"color:#22863A;--shiki-dark:#85E89D\">xml\u003C\u002Fspan>\u003Cspan style=\"color:#6F42C1;--shiki-dark:#B392F0\"> version\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">=\u003C\u002Fspan>\u003Cspan style=\"color:#032F62;--shiki-dark:#9ECBFF\">\"1.0\"\u003C\u002Fspan>\u003Cspan style=\"color:#6F42C1;--shiki-dark:#B392F0\"> encoding\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">=\u003C\u002Fspan>\u003Cspan style=\"color:#032F62;--shiki-dark:#9ECBFF\">\"UTF-8\"\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">?>\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">&#x3C;\u003C\u002Fspan>\u003Cspan style=\"color:#22863A;--shiki-dark:#85E89D\">project\u003C\u002Fspan>\u003Cspan style=\"color:#6F42C1;--shiki-dark:#B392F0\"> xmlns\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">=\u003C\u002Fspan>\u003Cspan style=\"color:#032F62;--shiki-dark:#9ECBFF\">\"http:\u002F\u002Fmaven.apache.org\u002FPOM\u002F4.0.0\"\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6F42C1;--shiki-dark:#B392F0\"> xmlns:xsi\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">=\u003C\u002Fspan>\u003Cspan style=\"color:#032F62;--shiki-dark:#9ECBFF\">\"http:\u002F\u002Fwww.w3.org\u002F2001\u002FXMLSchema-instance\"\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6F42C1;--shiki-dark:#B392F0\"> xsi:schemaLocation\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">=\u003C\u002Fspan>\u003Cspan style=\"color:#032F62;--shiki-dark:#9ECBFF\">\"http:\u002F\u002Fmaven.apache.org\u002FPOM\u002F4.0.0 https:\u002F\u002Fmaven.apache.org\u002Fxsd\u002Fmaven-4.0.0.xsd\"\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">>\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\"> &#x3C;\u003C\u002Fspan>\u003Cspan style=\"color:#22863A;--shiki-dark:#85E89D\">modelVersion\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">>4.0.0&#x3C;\u002F\u003C\u002Fspan>\u003Cspan style=\"color:#22863A;--shiki-dark:#85E89D\">modelVersion\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">>\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\"> &#x3C;\u003C\u002Fspan>\u003Cspan style=\"color:#22863A;--shiki-dark:#85E89D\">parent\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">>\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">  &#x3C;\u003C\u002Fspan>\u003Cspan style=\"color:#22863A;--shiki-dark:#85E89D\">groupId\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">>org.springframework.boot&#x3C;\u002F\u003C\u002Fspan>\u003Cspan style=\"color:#22863A;--shiki-dark:#85E89D\">groupId\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">>\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">  &#x3C;\u003C\u002Fspan>\u003Cspan style=\"color:#22863A;--shiki-dark:#85E89D\">artifactId\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">>spring-boot-starter-parent&#x3C;\u002F\u003C\u002Fspan>\u003Cspan style=\"color:#22863A;--shiki-dark:#85E89D\">artifactId\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">>\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">  &#x3C;\u003C\u002Fspan>\u003Cspan style=\"color:#22863A;--shiki-dark:#85E89D\">version\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">>3.0.5&#x3C;\u002F\u003C\u002Fspan>\u003Cspan style=\"color:#22863A;--shiki-dark:#85E89D\">version\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">>\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">  &#x3C;\u003C\u002Fspan>\u003Cspan style=\"color:#22863A;--shiki-dark:#85E89D\">relativePath\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\"> \u002F> \u003C\u002Fspan>\u003Cspan style=\"color:#6A737D;--shiki-dark:#6A737D\">&#x3C;!-- lookup parent from repository -->\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\"> &#x3C;\u002F\u003C\u002Fspan>\u003Cspan style=\"color:#22863A;--shiki-dark:#85E89D\">parent\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">>\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\"> &#x3C;\u003C\u002Fspan>\u003Cspan style=\"color:#22863A;--shiki-dark:#85E89D\">groupId\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">>com.cc01cc&#x3C;\u002F\u003C\u002Fspan>\u003Cspan style=\"color:#22863A;--shiki-dark:#85E89D\">groupId\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">>\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\"> &#x3C;\u003C\u002Fspan>\u003Cspan style=\"color:#22863A;--shiki-dark:#85E89D\">artifactId\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">>blog-zeo&#x3C;\u002F\u003C\u002Fspan>\u003Cspan style=\"color:#22863A;--shiki-dark:#85E89D\">artifactId\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">>\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\"> &#x3C;\u003C\u002Fspan>\u003Cspan style=\"color:#22863A;--shiki-dark:#85E89D\">version\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">>0.0.1-SNAPSHOT&#x3C;\u002F\u003C\u002Fspan>\u003Cspan style=\"color:#22863A;--shiki-dark:#85E89D\">version\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">>\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\"> &#x3C;\u003C\u002Fspan>\u003Cspan style=\"color:#22863A;--shiki-dark:#85E89D\">name\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">>blog-zeo&#x3C;\u002F\u003C\u002Fspan>\u003Cspan style=\"color:#22863A;--shiki-dark:#85E89D\">name\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">>\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\"> &#x3C;\u003C\u002Fspan>\u003Cspan style=\"color:#22863A;--shiki-dark:#85E89D\">description\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">>cc01cc's blog&#x3C;\u002F\u003C\u002Fspan>\u003Cspan style=\"color:#22863A;--shiki-dark:#85E89D\">description\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">>\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\"> &#x3C;\u003C\u002Fspan>\u003Cspan style=\"color:#22863A;--shiki-dark:#85E89D\">properties\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">>\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">  &#x3C;\u003C\u002Fspan>\u003Cspan style=\"color:#22863A;--shiki-dark:#85E89D\">java.version\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">>17&#x3C;\u002F\u003C\u002Fspan>\u003Cspan style=\"color:#22863A;--shiki-dark:#85E89D\">java.version\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">>\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\"> &#x3C;\u002F\u003C\u002Fspan>\u003Cspan style=\"color:#22863A;--shiki-dark:#85E89D\">properties\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">>\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\"> &#x3C;\u003C\u002Fspan>\u003Cspan style=\"color:#22863A;--shiki-dark:#85E89D\">dependencies\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">>\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D;--shiki-dark:#6A737D\">  &#x3C;!-- https:\u002F\u002Fmvnrepository.com\u002Fartifact\u002Forg.apache.maven.plugins\u002Fmaven-resources-plugin -->\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">  &#x3C;\u003C\u002Fspan>\u003Cspan style=\"color:#22863A;--shiki-dark:#85E89D\">dependency\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">>\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">   &#x3C;\u003C\u002Fspan>\u003Cspan style=\"color:#22863A;--shiki-dark:#85E89D\">groupId\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">>org.apache.maven.plugins&#x3C;\u002F\u003C\u002Fspan>\u003Cspan style=\"color:#22863A;--shiki-dark:#85E89D\">groupId\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">>\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">   &#x3C;\u003C\u002Fspan>\u003Cspan style=\"color:#22863A;--shiki-dark:#85E89D\">artifactId\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">>maven-resources-plugin&#x3C;\u002F\u003C\u002Fspan>\u003Cspan style=\"color:#22863A;--shiki-dark:#85E89D\">artifactId\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">>\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">   &#x3C;\u003C\u002Fspan>\u003Cspan style=\"color:#22863A;--shiki-dark:#85E89D\">version\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">>3.3.1&#x3C;\u002F\u003C\u002Fspan>\u003Cspan style=\"color:#22863A;--shiki-dark:#85E89D\">version\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">>\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">  &#x3C;\u002F\u003C\u002Fspan>\u003Cspan style=\"color:#22863A;--shiki-dark:#85E89D\">dependency\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">>\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">  &#x3C;\u003C\u002Fspan>\u003Cspan style=\"color:#22863A;--shiki-dark:#85E89D\">dependency\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">>\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">   &#x3C;\u003C\u002Fspan>\u003Cspan style=\"color:#22863A;--shiki-dark:#85E89D\">groupId\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">>org.springframework.boot&#x3C;\u002F\u003C\u002Fspan>\u003Cspan style=\"color:#22863A;--shiki-dark:#85E89D\">groupId\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">>\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">   &#x3C;\u003C\u002Fspan>\u003Cspan style=\"color:#22863A;--shiki-dark:#85E89D\">artifactId\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">>spring-boot-starter-web&#x3C;\u002F\u003C\u002Fspan>\u003Cspan style=\"color:#22863A;--shiki-dark:#85E89D\">artifactId\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">>\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">  &#x3C;\u002F\u003C\u002Fspan>\u003Cspan style=\"color:#22863A;--shiki-dark:#85E89D\">dependency\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">>\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">  &#x3C;\u003C\u002Fspan>\u003Cspan style=\"color:#22863A;--shiki-dark:#85E89D\">dependency\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">>\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">   &#x3C;\u003C\u002Fspan>\u003Cspan style=\"color:#22863A;--shiki-dark:#85E89D\">groupId\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">>org.springframework.boot&#x3C;\u002F\u003C\u002Fspan>\u003Cspan style=\"color:#22863A;--shiki-dark:#85E89D\">groupId\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">>\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">   &#x3C;\u003C\u002Fspan>\u003Cspan style=\"color:#22863A;--shiki-dark:#85E89D\">artifactId\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">>spring-boot-devtools&#x3C;\u002F\u003C\u002Fspan>\u003Cspan style=\"color:#22863A;--shiki-dark:#85E89D\">artifactId\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">>\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">   &#x3C;\u003C\u002Fspan>\u003Cspan style=\"color:#22863A;--shiki-dark:#85E89D\">scope\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">>runtime&#x3C;\u002F\u003C\u002Fspan>\u003Cspan style=\"color:#22863A;--shiki-dark:#85E89D\">scope\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">>\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">   &#x3C;\u003C\u002Fspan>\u003Cspan style=\"color:#22863A;--shiki-dark:#85E89D\">optional\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">>true&#x3C;\u002F\u003C\u002Fspan>\u003Cspan style=\"color:#22863A;--shiki-dark:#85E89D\">optional\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">>\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">  &#x3C;\u002F\u003C\u002Fspan>\u003Cspan style=\"color:#22863A;--shiki-dark:#85E89D\">dependency\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">>\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">  &#x3C;\u003C\u002Fspan>\u003Cspan style=\"color:#22863A;--shiki-dark:#85E89D\">dependency\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">>\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">   &#x3C;\u003C\u002Fspan>\u003Cspan style=\"color:#22863A;--shiki-dark:#85E89D\">groupId\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">>org.springframework.boot&#x3C;\u002F\u003C\u002Fspan>\u003Cspan style=\"color:#22863A;--shiki-dark:#85E89D\">groupId\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">>\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">   &#x3C;\u003C\u002Fspan>\u003Cspan style=\"color:#22863A;--shiki-dark:#85E89D\">artifactId\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">>spring-boot-configuration-processor&#x3C;\u002F\u003C\u002Fspan>\u003Cspan style=\"color:#22863A;--shiki-dark:#85E89D\">artifactId\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">>\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">   &#x3C;\u003C\u002Fspan>\u003Cspan style=\"color:#22863A;--shiki-dark:#85E89D\">optional\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">>true&#x3C;\u002F\u003C\u002Fspan>\u003Cspan style=\"color:#22863A;--shiki-dark:#85E89D\">optional\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">>\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">  &#x3C;\u002F\u003C\u002Fspan>\u003Cspan style=\"color:#22863A;--shiki-dark:#85E89D\">dependency\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">>\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">  &#x3C;\u003C\u002Fspan>\u003Cspan style=\"color:#22863A;--shiki-dark:#85E89D\">dependency\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">>\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">   &#x3C;\u003C\u002Fspan>\u003Cspan style=\"color:#22863A;--shiki-dark:#85E89D\">groupId\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">>org.projectlombok&#x3C;\u002F\u003C\u002Fspan>\u003Cspan style=\"color:#22863A;--shiki-dark:#85E89D\">groupId\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">>\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">   &#x3C;\u003C\u002Fspan>\u003Cspan style=\"color:#22863A;--shiki-dark:#85E89D\">artifactId\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">>lombok&#x3C;\u002F\u003C\u002Fspan>\u003Cspan style=\"color:#22863A;--shiki-dark:#85E89D\">artifactId\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">>\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">   &#x3C;\u003C\u002Fspan>\u003Cspan style=\"color:#22863A;--shiki-dark:#85E89D\">optional\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">>true&#x3C;\u002F\u003C\u002Fspan>\u003Cspan style=\"color:#22863A;--shiki-dark:#85E89D\">optional\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">>\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">  &#x3C;\u002F\u003C\u002Fspan>\u003Cspan style=\"color:#22863A;--shiki-dark:#85E89D\">dependency\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">>\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">  &#x3C;\u003C\u002Fspan>\u003Cspan style=\"color:#22863A;--shiki-dark:#85E89D\">dependency\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">>\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">   &#x3C;\u003C\u002Fspan>\u003Cspan style=\"color:#22863A;--shiki-dark:#85E89D\">groupId\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">>org.springframework.boot&#x3C;\u002F\u003C\u002Fspan>\u003Cspan style=\"color:#22863A;--shiki-dark:#85E89D\">groupId\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">>\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">   &#x3C;\u003C\u002Fspan>\u003Cspan style=\"color:#22863A;--shiki-dark:#85E89D\">artifactId\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">>spring-boot-starter-test&#x3C;\u002F\u003C\u002Fspan>\u003Cspan style=\"color:#22863A;--shiki-dark:#85E89D\">artifactId\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">>\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">   &#x3C;\u003C\u002Fspan>\u003Cspan style=\"color:#22863A;--shiki-dark:#85E89D\">scope\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">>test&#x3C;\u002F\u003C\u002Fspan>\u003Cspan style=\"color:#22863A;--shiki-dark:#85E89D\">scope\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">>\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">  &#x3C;\u002F\u003C\u002Fspan>\u003Cspan style=\"color:#22863A;--shiki-dark:#85E89D\">dependency\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">>\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">  &#x3C;\u003C\u002Fspan>\u003Cspan style=\"color:#22863A;--shiki-dark:#85E89D\">dependency\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">>\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">   &#x3C;\u003C\u002Fspan>\u003Cspan style=\"color:#22863A;--shiki-dark:#85E89D\">groupId\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">>com.aliyun.oss&#x3C;\u002F\u003C\u002Fspan>\u003Cspan style=\"color:#22863A;--shiki-dark:#85E89D\">groupId\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">>\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">   &#x3C;\u003C\u002Fspan>\u003Cspan style=\"color:#22863A;--shiki-dark:#85E89D\">artifactId\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">>aliyun-sdk-oss&#x3C;\u002F\u003C\u002Fspan>\u003Cspan style=\"color:#22863A;--shiki-dark:#85E89D\">artifactId\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">>\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">   &#x3C;\u003C\u002Fspan>\u003Cspan style=\"color:#22863A;--shiki-dark:#85E89D\">version\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">>3.10.2&#x3C;\u002F\u003C\u002Fspan>\u003Cspan style=\"color:#22863A;--shiki-dark:#85E89D\">version\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">>\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">  &#x3C;\u002F\u003C\u002Fspan>\u003Cspan style=\"color:#22863A;--shiki-dark:#85E89D\">dependency\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">>\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">  &#x3C;\u003C\u002Fspan>\u003Cspan style=\"color:#22863A;--shiki-dark:#85E89D\">dependency\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">>\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">   &#x3C;\u003C\u002Fspan>\u003Cspan style=\"color:#22863A;--shiki-dark:#85E89D\">groupId\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">>com.aliyun&#x3C;\u002F\u003C\u002Fspan>\u003Cspan style=\"color:#22863A;--shiki-dark:#85E89D\">groupId\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">>\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">   &#x3C;\u003C\u002Fspan>\u003Cspan style=\"color:#22863A;--shiki-dark:#85E89D\">artifactId\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">>sts20150401&#x3C;\u002F\u003C\u002Fspan>\u003Cspan style=\"color:#22863A;--shiki-dark:#85E89D\">artifactId\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">>\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">   &#x3C;\u003C\u002Fspan>\u003Cspan style=\"color:#22863A;--shiki-dark:#85E89D\">version\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">>1.1.3&#x3C;\u002F\u003C\u002Fspan>\u003Cspan style=\"color:#22863A;--shiki-dark:#85E89D\">version\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">>\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">  &#x3C;\u002F\u003C\u002Fspan>\u003Cspan style=\"color:#22863A;--shiki-dark:#85E89D\">dependency\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">>\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\"> &#x3C;\u002F\u003C\u002Fspan>\u003Cspan style=\"color:#22863A;--shiki-dark:#85E89D\">dependencies\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">>\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\"> &#x3C;\u003C\u002Fspan>\u003Cspan style=\"color:#22863A;--shiki-dark:#85E89D\">build\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">>\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">  &#x3C;\u003C\u002Fspan>\u003Cspan style=\"color:#22863A;--shiki-dark:#85E89D\">finalName\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">>blog-zeo&#x3C;\u002F\u003C\u002Fspan>\u003Cspan style=\"color:#22863A;--shiki-dark:#85E89D\">finalName\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">>\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">  &#x3C;\u003C\u002Fspan>\u003Cspan style=\"color:#22863A;--shiki-dark:#85E89D\">resources\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">>\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">   &#x3C;\u003C\u002Fspan>\u003Cspan style=\"color:#22863A;--shiki-dark:#85E89D\">resource\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">>\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">    &#x3C;\u003C\u002Fspan>\u003Cspan style=\"color:#22863A;--shiki-dark:#85E89D\">directory\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">>src\u002Fmain\u002Fresources&#x3C;\u002F\u003C\u002Fspan>\u003Cspan style=\"color:#22863A;--shiki-dark:#85E89D\">directory\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">>\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D;--shiki-dark:#6A737D\">    &#x3C;!-- 需要将 maven 的 property 写入 src\u002Fmain\u002Fresources\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D;--shiki-dark:#6A737D\">\t\t\t\t下所有的配置文件中（只要该配置文件中使用了propetry对应的占位符，如上面 application.yml 配置的那样 -->\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">    &#x3C;\u003C\u002Fspan>\u003Cspan style=\"color:#22863A;--shiki-dark:#85E89D\">filtering\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">>true&#x3C;\u002F\u003C\u002Fspan>\u003Cspan style=\"color:#22863A;--shiki-dark:#85E89D\">filtering\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">>\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">   &#x3C;\u002F\u003C\u002Fspan>\u003Cspan style=\"color:#22863A;--shiki-dark:#85E89D\">resource\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">>\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">  &#x3C;\u002F\u003C\u002Fspan>\u003Cspan style=\"color:#22863A;--shiki-dark:#85E89D\">resources\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">>\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">  &#x3C;\u003C\u002Fspan>\u003Cspan style=\"color:#22863A;--shiki-dark:#85E89D\">plugins\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">>\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">   &#x3C;\u003C\u002Fspan>\u003Cspan style=\"color:#22863A;--shiki-dark:#85E89D\">plugin\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">>\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">    &#x3C;\u003C\u002Fspan>\u003Cspan style=\"color:#22863A;--shiki-dark:#85E89D\">groupId\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">>org.springframework.boot&#x3C;\u002F\u003C\u002Fspan>\u003Cspan style=\"color:#22863A;--shiki-dark:#85E89D\">groupId\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">>\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">    &#x3C;\u003C\u002Fspan>\u003Cspan style=\"color:#22863A;--shiki-dark:#85E89D\">artifactId\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">>spring-boot-maven-plugin&#x3C;\u002F\u003C\u002Fspan>\u003Cspan style=\"color:#22863A;--shiki-dark:#85E89D\">artifactId\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">>\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">   &#x3C;\u002F\u003C\u002Fspan>\u003Cspan style=\"color:#22863A;--shiki-dark:#85E89D\">plugin\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">>\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">   &#x3C;\u003C\u002Fspan>\u003Cspan style=\"color:#22863A;--shiki-dark:#85E89D\">plugin\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">>\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">    &#x3C;\u003C\u002Fspan>\u003Cspan style=\"color:#22863A;--shiki-dark:#85E89D\">groupId\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">>org.apache.maven.plugins&#x3C;\u002F\u003C\u002Fspan>\u003Cspan style=\"color:#22863A;--shiki-dark:#85E89D\">groupId\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">>\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">    &#x3C;\u003C\u002Fspan>\u003Cspan style=\"color:#22863A;--shiki-dark:#85E89D\">artifactId\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">>maven-jar-plugin&#x3C;\u002F\u003C\u002Fspan>\u003Cspan style=\"color:#22863A;--shiki-dark:#85E89D\">artifactId\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">>\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">    &#x3C;\u003C\u002Fspan>\u003Cspan style=\"color:#22863A;--shiki-dark:#85E89D\">version\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">>2.4&#x3C;\u002F\u003C\u002Fspan>\u003Cspan style=\"color:#22863A;--shiki-dark:#85E89D\">version\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">>\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">   &#x3C;\u002F\u003C\u002Fspan>\u003Cspan style=\"color:#22863A;--shiki-dark:#85E89D\">plugin\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">>\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">  &#x3C;\u002F\u003C\u002Fspan>\u003Cspan style=\"color:#22863A;--shiki-dark:#85E89D\">plugins\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">>\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\"> &#x3C;\u002F\u003C\u002Fspan>\u003Cspan style=\"color:#22863A;--shiki-dark:#85E89D\">build\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">>\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D;--shiki-dark:#6A737D\"> &#x3C;!-- 参考：Maven 之 profile 与Spring boot 的 profile - 夏之夜 - 博客园:\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D;--shiki-dark:#6A737D\">\thttps:\u002F\u002Fwww.cnblogs.com\u002Fsandyflower\u002Fp\u002F11600058.html -->\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\"> &#x3C;\u003C\u002Fspan>\u003Cspan style=\"color:#22863A;--shiki-dark:#85E89D\">profiles\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">>\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">  &#x3C;\u003C\u002Fspan>\u003Cspan style=\"color:#22863A;--shiki-dark:#85E89D\">profile\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">>\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">   &#x3C;\u003C\u002Fspan>\u003Cspan style=\"color:#22863A;--shiki-dark:#85E89D\">id\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">>local&#x3C;\u002F\u003C\u002Fspan>\u003Cspan style=\"color:#22863A;--shiki-dark:#85E89D\">id\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">>\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">   &#x3C;\u003C\u002Fspan>\u003Cspan style=\"color:#22863A;--shiki-dark:#85E89D\">activation\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">>\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">    &#x3C;\u003C\u002Fspan>\u003Cspan style=\"color:#22863A;--shiki-dark:#85E89D\">activeByDefault\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">>true&#x3C;\u002F\u003C\u002Fspan>\u003Cspan style=\"color:#22863A;--shiki-dark:#85E89D\">activeByDefault\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">>   \u003C\u002Fspan>\u003Cspan style=\"color:#6A737D;--shiki-dark:#6A737D\">&#x3C;!-- 运行时未指明 profile,则使用默认的，该配置表示 dev为默认配置 -->\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">   &#x3C;\u002F\u003C\u002Fspan>\u003Cspan style=\"color:#22863A;--shiki-dark:#85E89D\">activation\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">>\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">   &#x3C;\u003C\u002Fspan>\u003Cspan style=\"color:#22863A;--shiki-dark:#85E89D\">properties\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">>\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">    &#x3C;\u003C\u002Fspan>\u003Cspan style=\"color:#22863A;--shiki-dark:#85E89D\">package.env\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">>local&#x3C;\u002F\u003C\u002Fspan>\u003Cspan style=\"color:#22863A;--shiki-dark:#85E89D\">package.env\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">>\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">   &#x3C;\u002F\u003C\u002Fspan>\u003Cspan style=\"color:#22863A;--shiki-dark:#85E89D\">properties\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">>\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">  &#x3C;\u002F\u003C\u002Fspan>\u003Cspan style=\"color:#22863A;--shiki-dark:#85E89D\">profile\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">>\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">  &#x3C;\u003C\u002Fspan>\u003Cspan style=\"color:#22863A;--shiki-dark:#85E89D\">profile\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">>\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">   &#x3C;\u003C\u002Fspan>\u003Cspan style=\"color:#22863A;--shiki-dark:#85E89D\">id\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">>ecs&#x3C;\u002F\u003C\u002Fspan>\u003Cspan style=\"color:#22863A;--shiki-dark:#85E89D\">id\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">>\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">   &#x3C;\u003C\u002Fspan>\u003Cspan style=\"color:#22863A;--shiki-dark:#85E89D\">properties\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">>\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">    &#x3C;\u003C\u002Fspan>\u003Cspan style=\"color:#22863A;--shiki-dark:#85E89D\">package.env\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">>ecs&#x3C;\u002F\u003C\u002Fspan>\u003Cspan style=\"color:#22863A;--shiki-dark:#85E89D\">package.env\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">>\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">   &#x3C;\u002F\u003C\u002Fspan>\u003Cspan style=\"color:#22863A;--shiki-dark:#85E89D\">properties\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">>\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">  &#x3C;\u002F\u003C\u002Fspan>\u003Cspan style=\"color:#22863A;--shiki-dark:#85E89D\">profile\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">>\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\"> &#x3C;\u002F\u003C\u002Fspan>\u003Cspan style=\"color:#22863A;--shiki-dark:#85E89D\">profiles\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">>\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">&#x3C;\u002F\u003C\u002Fspan>\u003Cspan style=\"color:#22863A;--shiki-dark:#85E89D\">project\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">>\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>Controller 层代码如下\u003C\u002Fp>\n\u003Cpre data-lang=\"java\" class=\"shiki shiki-themes github-light github-dark\" style=\"background-color:#fff;--shiki-dark-bg:#24292e;color:#24292e;--shiki-dark:#e1e4e8\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">@\u003C\u002Fspan>\u003Cspan style=\"color:#D73A49;--shiki-dark:#F97583\">RestController\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#D73A49;--shiki-dark:#F97583\">public\u003C\u002Fspan>\u003Cspan style=\"color:#D73A49;--shiki-dark:#F97583\"> class\u003C\u002Fspan>\u003Cspan style=\"color:#6F42C1;--shiki-dark:#B392F0\"> BlogController\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\"> {\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#D73A49;--shiki-dark:#F97583\">    private\u003C\u002Fspan>\u003Cspan style=\"color:#D73A49;--shiki-dark:#F97583\"> static\u003C\u002Fspan>\u003Cspan style=\"color:#D73A49;--shiki-dark:#F97583\"> final\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\"> Logger logger \u003C\u002Fspan>\u003Cspan style=\"color:#D73A49;--shiki-dark:#F97583\">=\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\"> LoggerFactory.\u003C\u002Fspan>\u003Cspan style=\"color:#6F42C1;--shiki-dark:#B392F0\">getLogger\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">(BlogController.class);\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">    @\u003C\u002Fspan>\u003Cspan style=\"color:#D73A49;--shiki-dark:#F97583\">Resource\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#D73A49;--shiki-dark:#F97583\">    private\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\"> BlogService blogService;\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">    @\u003C\u002Fspan>\u003Cspan style=\"color:#D73A49;--shiki-dark:#F97583\">Value\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">(\u003C\u002Fspan>\u003Cspan style=\"color:#032F62;--shiki-dark:#9ECBFF\">\"${oss.url}\"\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">)\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#D73A49;--shiki-dark:#F97583\">    private\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\"> String targetUrlPrefix;\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">    @\u003C\u002Fspan>\u003Cspan style=\"color:#D73A49;--shiki-dark:#F97583\">Value\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">(\u003C\u002Fspan>\u003Cspan style=\"color:#032F62;--shiki-dark:#9ECBFF\">\"${oss.objectDir}\"\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">)\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#D73A49;--shiki-dark:#F97583\">    private\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\"> String objectDir;\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">    @\u003C\u002Fspan>\u003Cspan style=\"color:#D73A49;--shiki-dark:#F97583\">RequestMapping\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">(\u003C\u002Fspan>\u003Cspan style=\"color:#032F62;--shiki-dark:#9ECBFF\">\"\u002F{*objectName}\"\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">)\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#D73A49;--shiki-dark:#F97583\">    public\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\"> ResponseEntity&#x3C;\u003C\u002Fspan>\u003Cspan style=\"color:#D73A49;--shiki-dark:#F97583\">byte\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">[]> \u003C\u002Fspan>\u003Cspan style=\"color:#6F42C1;--shiki-dark:#B392F0\">getFile\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">(@\u003C\u002Fspan>\u003Cspan style=\"color:#D73A49;--shiki-dark:#F97583\">PathVariable\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\"> String \u003C\u002Fspan>\u003Cspan style=\"color:#E36209;--shiki-dark:#FFAB70\">objectName\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">, HttpServletRequest \u003C\u002Fspan>\u003Cspan style=\"color:#E36209;--shiki-dark:#FFAB70\">request\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">) {\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D;--shiki-dark:#6A737D\">        \u002F\u002F URL url = blogService.getHexoServerUrl(objectName);\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">        logger.\u003C\u002Fspan>\u003Cspan style=\"color:#6F42C1;--shiki-dark:#B392F0\">info\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">(\u003C\u002Fspan>\u003Cspan style=\"color:#032F62;--shiki-dark:#9ECBFF\">\"objectName: \"\u003C\u002Fspan>\u003Cspan style=\"color:#D73A49;--shiki-dark:#F97583\"> +\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\"> objectName);\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D;--shiki-dark:#6A737D\">        \u002F\u002F 日志记录 request 参数\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">        logger.\u003C\u002Fspan>\u003Cspan style=\"color:#6F42C1;--shiki-dark:#B392F0\">info\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">(\u003C\u002Fspan>\u003Cspan style=\"color:#032F62;--shiki-dark:#9ECBFF\">\"request: \"\u003C\u002Fspan>\u003Cspan style=\"color:#D73A49;--shiki-dark:#F97583\"> +\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\"> request);\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D;--shiki-dark:#6A737D\">        \u002F\u002F 以目录结尾的请求自动添加 index.html\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#D73A49;--shiki-dark:#F97583\">        if\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\"> (objectName.\u003C\u002Fspan>\u003Cspan style=\"color:#6F42C1;--shiki-dark:#B392F0\">endsWith\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">(\u003C\u002Fspan>\u003Cspan style=\"color:#032F62;--shiki-dark:#9ECBFF\">\"\u002F\"\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">)) {\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">            objectName \u003C\u002Fspan>\u003Cspan style=\"color:#D73A49;--shiki-dark:#F97583\">=\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\"> objectName \u003C\u002Fspan>\u003Cspan style=\"color:#D73A49;--shiki-dark:#F97583\">+\u003C\u002Fspan>\u003Cspan style=\"color:#032F62;--shiki-dark:#9ECBFF\"> \"index.html\"\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">;\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">        }\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">        URL url;\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#D73A49;--shiki-dark:#F97583\">        try\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\"> {\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">            url \u003C\u002Fspan>\u003Cspan style=\"color:#D73A49;--shiki-dark:#F97583\">=\u003C\u002Fspan>\u003Cspan style=\"color:#D73A49;--shiki-dark:#F97583\"> new\u003C\u002Fspan>\u003Cspan style=\"color:#6F42C1;--shiki-dark:#B392F0\"> URL\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">(targetUrlPrefix \u003C\u002Fspan>\u003Cspan style=\"color:#D73A49;--shiki-dark:#F97583\">+\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\"> objectDir \u003C\u002Fspan>\u003Cspan style=\"color:#D73A49;--shiki-dark:#F97583\">+\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\"> objectName);\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">            logger.\u003C\u002Fspan>\u003Cspan style=\"color:#6F42C1;--shiki-dark:#B392F0\">info\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">(\u003C\u002Fspan>\u003Cspan style=\"color:#032F62;--shiki-dark:#9ECBFF\">\"url: \"\u003C\u002Fspan>\u003Cspan style=\"color:#D73A49;--shiki-dark:#F97583\"> +\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\"> url);\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#D73A49;--shiki-dark:#F97583\">            return\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\"> blogService.\u003C\u002Fspan>\u003Cspan style=\"color:#6F42C1;--shiki-dark:#B392F0\">sendHttpRequest\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">(url, request);\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">        } \u003C\u002Fspan>\u003Cspan style=\"color:#D73A49;--shiki-dark:#F97583\">catch\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\"> (MalformedURLException \u003C\u002Fspan>\u003Cspan style=\"color:#E36209;--shiki-dark:#FFAB70\">e\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">) {\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">            logger.\u003C\u002Fspan>\u003Cspan style=\"color:#6F42C1;--shiki-dark:#B392F0\">error\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">(\u003C\u002Fspan>\u003Cspan style=\"color:#032F62;--shiki-dark:#9ECBFF\">\"url error: \"\u003C\u002Fspan>\u003Cspan style=\"color:#D73A49;--shiki-dark:#F97583\"> +\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\"> e.\u003C\u002Fspan>\u003Cspan style=\"color:#6F42C1;--shiki-dark:#B392F0\">getMessage\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">());\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">            e.\u003C\u002Fspan>\u003Cspan style=\"color:#6F42C1;--shiki-dark:#B392F0\">printStackTrace\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">();\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">        }\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#D73A49;--shiki-dark:#F97583\">        return\u003C\u002Fspan>\u003Cspan style=\"color:#005CC5;--shiki-dark:#79B8FF\"> null\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">;\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">    }\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">}\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>service 层代码如下\u003C\u002Fp>\n\u003Cpre data-lang=\"java\" class=\"shiki shiki-themes github-light github-dark\" style=\"background-color:#fff;--shiki-dark-bg:#24292e;color:#24292e;--shiki-dark:#e1e4e8\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan style=\"color:#D73A49;--shiki-dark:#F97583\">    public\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\"> ResponseEntity\u003C\u002Fspan>\u003Cspan style=\"color:#D73A49;--shiki-dark:#F97583\">&#x3C;byte\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">[]\u003C\u002Fspan>\u003Cspan style=\"color:#D73A49;--shiki-dark:#F97583\">>\u003C\u002Fspan>\u003Cspan style=\"color:#6F42C1;--shiki-dark:#B392F0\"> sendHttpRequest\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">(URL url, HttpServletRequest request) {\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">        logger.\u003C\u002Fspan>\u003Cspan style=\"color:#6F42C1;--shiki-dark:#B392F0\">info\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">(\u003C\u002Fspan>\u003Cspan style=\"color:#032F62;--shiki-dark:#9ECBFF\">\"url: \"\u003C\u002Fspan>\u003Cspan style=\"color:#D73A49;--shiki-dark:#F97583\"> +\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\"> url);\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">        HttpHeaders headers \u003C\u002Fspan>\u003Cspan style=\"color:#D73A49;--shiki-dark:#F97583\">=\u003C\u002Fspan>\u003Cspan style=\"color:#D73A49;--shiki-dark:#F97583\"> new\u003C\u002Fspan>\u003Cspan style=\"color:#6F42C1;--shiki-dark:#B392F0\"> HttpHeaders\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">();\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">        Enumeration&#x3C;\u003C\u002Fspan>\u003Cspan style=\"color:#D73A49;--shiki-dark:#F97583\">String\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">> headerNames \u003C\u002Fspan>\u003Cspan style=\"color:#D73A49;--shiki-dark:#F97583\">=\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\"> request.\u003C\u002Fspan>\u003Cspan style=\"color:#6F42C1;--shiki-dark:#B392F0\">getHeaderNames\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">();\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#D73A49;--shiki-dark:#F97583\">        while\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\"> (headerNames.\u003C\u002Fspan>\u003Cspan style=\"color:#6F42C1;--shiki-dark:#B392F0\">hasMoreElements\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">()) {\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">        String headerName \u003C\u002Fspan>\u003Cspan style=\"color:#D73A49;--shiki-dark:#F97583\">=\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\"> headerNames.\u003C\u002Fspan>\u003Cspan style=\"color:#6F42C1;--shiki-dark:#B392F0\">nextElement\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">();\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">        headers.\u003C\u002Fspan>\u003Cspan style=\"color:#6F42C1;--shiki-dark:#B392F0\">set\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">(headerName, request.\u003C\u002Fspan>\u003Cspan style=\"color:#6F42C1;--shiki-dark:#B392F0\">getHeader\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">(headerName));\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">        }\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">        HttpEntity&#x3C;\u003C\u002Fspan>\u003Cspan style=\"color:#D73A49;--shiki-dark:#F97583\">String\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">> entity \u003C\u002Fspan>\u003Cspan style=\"color:#D73A49;--shiki-dark:#F97583\">=\u003C\u002Fspan>\u003Cspan style=\"color:#D73A49;--shiki-dark:#F97583\"> new\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\"> HttpEntity&#x3C;>(headers);\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">        logger.\u003C\u002Fspan>\u003Cspan style=\"color:#6F42C1;--shiki-dark:#B392F0\">info\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">(\u003C\u002Fspan>\u003Cspan style=\"color:#032F62;--shiki-dark:#9ECBFF\">\"entity: \"\u003C\u002Fspan>\u003Cspan style=\"color:#D73A49;--shiki-dark:#F97583\"> +\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\"> entity);\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">        ResponseEntity&#x3C;\u003C\u002Fspan>\u003Cspan style=\"color:#D73A49;--shiki-dark:#F97583\">byte\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">[]> response;\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#D73A49;--shiki-dark:#F97583\">        try\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\"> {\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D;--shiki-dark:#6A737D\">            \u002F\u002F RestTemplate 在字符串转义的时候有个大坑，所以这儿直接转换成了 URI\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">            response \u003C\u002Fspan>\u003Cspan style=\"color:#D73A49;--shiki-dark:#F97583\">=\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\"> restTemplate.\u003C\u002Fspan>\u003Cspan style=\"color:#6F42C1;--shiki-dark:#B392F0\">exchange\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">(url.\u003C\u002Fspan>\u003Cspan style=\"color:#6F42C1;--shiki-dark:#B392F0\">toURI\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">(), HttpMethod.GET, entity, \u003C\u002Fspan>\u003Cspan style=\"color:#D73A49;--shiki-dark:#F97583\">byte\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">[].class);\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">            logger.\u003C\u002Fspan>\u003Cspan style=\"color:#6F42C1;--shiki-dark:#B392F0\">info\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">(\u003C\u002Fspan>\u003Cspan style=\"color:#032F62;--shiki-dark:#9ECBFF\">\"response: \"\u003C\u002Fspan>\u003Cspan style=\"color:#D73A49;--shiki-dark:#F97583\"> +\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\"> response.\u003C\u002Fspan>\u003Cspan style=\"color:#6F42C1;--shiki-dark:#B392F0\">getStatusCode\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">());\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#D73A49;--shiki-dark:#F97583\">            return\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\"> response;\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">        } \u003C\u002Fspan>\u003Cspan style=\"color:#D73A49;--shiki-dark:#F97583\">catch\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\"> (RestClientException \u003C\u002Fspan>\u003Cspan style=\"color:#E36209;--shiki-dark:#FFAB70\">e\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">) {\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">            logger.\u003C\u002Fspan>\u003Cspan style=\"color:#6F42C1;--shiki-dark:#B392F0\">error\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">(\u003C\u002Fspan>\u003Cspan style=\"color:#032F62;--shiki-dark:#9ECBFF\">\"RestClientException: \"\u003C\u002Fspan>\u003Cspan style=\"color:#D73A49;--shiki-dark:#F97583\"> +\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\"> e.\u003C\u002Fspan>\u003Cspan style=\"color:#6F42C1;--shiki-dark:#B392F0\">getMessage\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">());\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">            e.\u003C\u002Fspan>\u003Cspan style=\"color:#6F42C1;--shiki-dark:#B392F0\">printStackTrace\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">();\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">        } \u003C\u002Fspan>\u003Cspan style=\"color:#D73A49;--shiki-dark:#F97583\">catch\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\"> (URISyntaxException \u003C\u002Fspan>\u003Cspan style=\"color:#E36209;--shiki-dark:#FFAB70\">e\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">) {\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">            logger.\u003C\u002Fspan>\u003Cspan style=\"color:#6F42C1;--shiki-dark:#B392F0\">error\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">(\u003C\u002Fspan>\u003Cspan style=\"color:#032F62;--shiki-dark:#9ECBFF\">\"URISyntaxException: \"\u003C\u002Fspan>\u003Cspan style=\"color:#D73A49;--shiki-dark:#F97583\"> +\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\"> e.\u003C\u002Fspan>\u003Cspan style=\"color:#6F42C1;--shiki-dark:#B392F0\">getMessage\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">());\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">            e.\u003C\u002Fspan>\u003Cspan style=\"color:#6F42C1;--shiki-dark:#B392F0\">printStackTrace\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">();\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">        }\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#D73A49;--shiki-dark:#F97583\">        return\u003C\u002Fspan>\u003Cspan style=\"color:#005CC5;--shiki-dark:#79B8FF\"> null\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">;\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">    }\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>Application 层代码如下\u003C\u002Fp>\n\u003Cpre data-lang=\"java\" class=\"shiki shiki-themes github-light github-dark\" style=\"background-color:#fff;--shiki-dark-bg:#24292e;color:#24292e;--shiki-dark:#e1e4e8\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">@\u003C\u002Fspan>\u003Cspan style=\"color:#D73A49;--shiki-dark:#F97583\">SpringBootApplication\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#D73A49;--shiki-dark:#F97583\">public\u003C\u002Fspan>\u003Cspan style=\"color:#D73A49;--shiki-dark:#F97583\"> class\u003C\u002Fspan>\u003Cspan style=\"color:#6F42C1;--shiki-dark:#B392F0\"> BlogApplication\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\"> {\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#D73A49;--shiki-dark:#F97583\">    public\u003C\u002Fspan>\u003Cspan style=\"color:#D73A49;--shiki-dark:#F97583\"> static\u003C\u002Fspan>\u003Cspan style=\"color:#D73A49;--shiki-dark:#F97583\"> void\u003C\u002Fspan>\u003Cspan style=\"color:#6F42C1;--shiki-dark:#B392F0\"> main\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">(\u003C\u002Fspan>\u003Cspan style=\"color:#D73A49;--shiki-dark:#F97583\">String\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">[] \u003C\u002Fspan>\u003Cspan style=\"color:#E36209;--shiki-dark:#FFAB70\">args\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">) {\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">        SpringApplication.\u003C\u002Fspan>\u003Cspan style=\"color:#6F42C1;--shiki-dark:#B392F0\">run\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">(BlogApplication.class, args);\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">    }\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">    @\u003C\u002Fspan>\u003Cspan style=\"color:#D73A49;--shiki-dark:#F97583\">Bean\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#D73A49;--shiki-dark:#F97583\">    public\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\"> RestTemplate \u003C\u002Fspan>\u003Cspan style=\"color:#6F42C1;--shiki-dark:#B392F0\">restTemplate\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">() {\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#D73A49;--shiki-dark:#F97583\">        return\u003C\u002Fspan>\u003Cspan style=\"color:#D73A49;--shiki-dark:#F97583\"> new\u003C\u002Fspan>\u003Cspan style=\"color:#6F42C1;--shiki-dark:#B392F0\"> RestTemplate\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">();\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">    }\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">}\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>配置文件如下\u003C\u002Fp>\n\u003Cpre data-lang=\"yml\" class=\"shiki shiki-themes github-light github-dark\" style=\"background-color:#fff;--shiki-dark-bg:#24292e;color:#24292e;--shiki-dark:#e1e4e8\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D;--shiki-dark:#6A737D\"># application.yml\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#22863A;--shiki-dark:#85E89D\">spring\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">:\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#22863A;--shiki-dark:#85E89D\">  application\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">:\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#22863A;--shiki-dark:#85E89D\">    name\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">: \u003C\u002Fspan>\u003Cspan style=\"color:#032F62;--shiki-dark:#9ECBFF\">springboot-zeo-blog\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#22863A;--shiki-dark:#85E89D\">  mvc\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">:\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#22863A;--shiki-dark:#85E89D\">    pathmatch\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">:\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#22863A;--shiki-dark:#85E89D\">      matching-strategy\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">: \u003C\u002Fspan>\u003Cspan style=\"color:#032F62;--shiki-dark:#9ECBFF\">PATH_PATTERN_PARSER\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#22863A;--shiki-dark:#85E89D\">  autoconfigure\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">:\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#22863A;--shiki-dark:#85E89D\">    exclude\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">: \u003C\u002Fspan>\u003Cspan style=\"color:#032F62;--shiki-dark:#9ECBFF\">org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D;--shiki-dark:#6A737D\">  # 默认 local 环境\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#22863A;--shiki-dark:#85E89D\">  profiles\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">:\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#22863A;--shiki-dark:#85E89D\">    active\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">: @\u003C\u002Fspan>\u003Cspan style=\"color:#032F62;--shiki-dark:#9ECBFF\">package.env@\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\u003Cpre data-lang=\"yml\" class=\"shiki shiki-themes github-light github-dark\" style=\"background-color:#fff;--shiki-dark-bg:#24292e;color:#24292e;--shiki-dark:#e1e4e8\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D;--shiki-dark:#6A737D\"># application-local.yml\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#22863A;--shiki-dark:#85E89D\">server\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">:\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#22863A;--shiki-dark:#85E89D\">  port\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">: \u003C\u002Fspan>\u003Cspan style=\"color:#005CC5;--shiki-dark:#79B8FF\">12050\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#22863A;--shiki-dark:#85E89D\">logging\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">: \u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#22863A;--shiki-dark:#85E89D\">  file\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">:\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#22863A;--shiki-dark:#85E89D\">    path\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">: \u003C\u002Fspan>\u003Cspan style=\"color:#032F62;--shiki-dark:#9ECBFF\">.\u002Flogs\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#22863A;--shiki-dark:#85E89D\">oss\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">:\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#22863A;--shiki-dark:#85E89D\">  url\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">: \u003C\u002Fspan>\u003Cspan style=\"color:#032F62;--shiki-dark:#9ECBFF\">http:\u002F\u002F127.0.0.1:4000\u003C\u002Fspan>\u003Cspan style=\"color:#6A737D;--shiki-dark:#6A737D\"> # 此处填写博客文件的根目录，如果再 OSS 上就填写 OSS 的外网地址\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\u003Ch3 id=\"6.2.-%E6%89%93%E5%8C%85%E6%B5%8B%E8%AF%95\" tabindex=\"-1\">\u003Ca class=\"header-anchor\" href=\"#6.2.-%E6%89%93%E5%8C%85%E6%B5%8B%E8%AF%95\">#\u003C\u002Fa> 6.2. 打包测试\u003C\u002Fh3>\n\u003Col>\n\u003Cli>使用 \u003Ccode>maven package\u003C\u002Fcode> 打包 spring 应用\u003C\u002Fli>\n\u003Cli>将 \u003Ccode>target\u002F***.jar\u003C\u002Fcode> 上传到服务器\u003C\u002Fli>\n\u003Cli>在服务器运行 \u003Ccode>java -jar ***.jar\u003C\u002Fcode> 等待启动成功\u003C\u002Fli>\n\u003Cli>使用 \u003Ccode>wget http:\u002F\u002F127.0.0.1:12050\u002Fhexo\u002Findex.html\u003C\u002Fcode> 测试是否可以正常获取资源\u003C\u002Fli>\n\u003C\u002Fol>\n\u003Ch3 id=\"6.3.-%E6%B7%BB%E5%8A%A0%E9%83%A8%E7%BD%B2%E8%84%9A%E6%9C%AC\" tabindex=\"-1\">\u003Ca class=\"header-anchor\" href=\"#6.3.-%E6%B7%BB%E5%8A%A0%E9%83%A8%E7%BD%B2%E8%84%9A%E6%9C%AC\">#\u003C\u002Fa> 6.3. 添加部署脚本\u003C\u002Fh3>\n\u003Cp>添加部署脚背，为后续自动部署做准备\u003C\u002Fp>\n\u003Cp>在项目的根目录（不是仓库的根目录）添加 \u003Ccode>deploy.sh\u003C\u002Fcode>\u003C\u002Fp>\n\u003Cpre data-lang=\"bash\" class=\"shiki shiki-themes github-light github-dark\" style=\"background-color:#fff;--shiki-dark-bg:#24292e;color:#24292e;--shiki-dark:#e1e4e8\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D;--shiki-dark:#6A737D\"># 改编自 https:\u002F\u002Fatomgit.com\u002Fflow-example\u002Fspring-boot\u002Fblob\u002Fmaster\u002Fdeploy.sh\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D;--shiki-dark:#6A737D\">#!\u002Fbin\u002Fbash\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D;--shiki-dark:#6A737D\"># 修改APP_NAME为云效上的应用名，需和 jar 包名一致\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">APP_NAME\u003C\u002Fspan>\u003Cspan style=\"color:#D73A49;--shiki-dark:#F97583\">=\u003C\u002Fspan>\u003Cspan style=\"color:#032F62;--shiki-dark:#9ECBFF\">blog-zeo\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">PROG_NAME\u003C\u002Fspan>\u003Cspan style=\"color:#D73A49;--shiki-dark:#F97583\">=\u003C\u002Fspan>\u003Cspan style=\"color:#E36209;--shiki-dark:#FFAB70\">$0\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">ACTION\u003C\u002Fspan>\u003Cspan style=\"color:#D73A49;--shiki-dark:#F97583\">=\u003C\u002Fspan>\u003Cspan style=\"color:#E36209;--shiki-dark:#FFAB70\">$1\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">APP_START_TIMEOUT\u003C\u002Fspan>\u003Cspan style=\"color:#D73A49;--shiki-dark:#F97583\">=\u003C\u002Fspan>\u003Cspan style=\"color:#032F62;--shiki-dark:#9ECBFF\">20\u003C\u002Fspan>\u003Cspan style=\"color:#6A737D;--shiki-dark:#6A737D\">                          # 等待应用启动的时间\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">APP_PORT\u003C\u002Fspan>\u003Cspan style=\"color:#D73A49;--shiki-dark:#F97583\">=\u003C\u002Fspan>\u003Cspan style=\"color:#032F62;--shiki-dark:#9ECBFF\">12050\u003C\u002Fspan>\u003Cspan style=\"color:#6A737D;--shiki-dark:#6A737D\">                                 # 应用端口\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">HEALTH_CHECK_URL\u003C\u002Fspan>\u003Cspan style=\"color:#D73A49;--shiki-dark:#F97583\">=\u003C\u002Fspan>\u003Cspan style=\"color:#032F62;--shiki-dark:#9ECBFF\">http:\u002F\u002F127.0.0.1:\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">${APP_PORT}\u003C\u002Fspan>\u003Cspan style=\"color:#032F62;--shiki-dark:#9ECBFF\">\u002Fhexo\u002Findex.html\u003C\u002Fspan>\u003Cspan style=\"color:#6A737D;--shiki-dark:#6A737D\"> # 应用健康检查URL\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">APP_HOME\u003C\u002Fspan>\u003Cspan style=\"color:#D73A49;--shiki-dark:#F97583\">=\u003C\u002Fspan>\u003Cspan style=\"color:#032F62;--shiki-dark:#9ECBFF\">\u002Fhome\u002Fadmin\u002F\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">${APP_NAME}              \u003C\u002Fspan>\u003Cspan style=\"color:#6A737D;--shiki-dark:#6A737D\"># 从package.tgz中解压出来的jar包放到这个目录下\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">JAR_NAME\u003C\u002Fspan>\u003Cspan style=\"color:#D73A49;--shiki-dark:#F97583\">=\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">${APP_HOME}\u003C\u002Fspan>\u003Cspan style=\"color:#032F62;--shiki-dark:#9ECBFF\">\u002Ftarget\u002F\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">${APP_NAME}\u003C\u002Fspan>\u003Cspan style=\"color:#032F62;--shiki-dark:#9ECBFF\">.jar\u003C\u002Fspan>\u003Cspan style=\"color:#6A737D;--shiki-dark:#6A737D\">   # jar包的名字\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">JAVA_OUT\u003C\u002Fspan>\u003Cspan style=\"color:#D73A49;--shiki-dark:#F97583\">=\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">${APP_HOME}\u003C\u002Fspan>\u003Cspan style=\"color:#032F62;--shiki-dark:#9ECBFF\">\u002Flogs\u002Fstart.log\u003C\u002Fspan>\u003Cspan style=\"color:#6A737D;--shiki-dark:#6A737D\">           #应用的启动日志\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D;--shiki-dark:#6A737D\"># 创建出相关目录\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6F42C1;--shiki-dark:#B392F0\">mkdir\u003C\u002Fspan>\u003Cspan style=\"color:#005CC5;--shiki-dark:#79B8FF\"> -p\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\"> ${APP_HOME}\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6F42C1;--shiki-dark:#B392F0\">mkdir\u003C\u002Fspan>\u003Cspan style=\"color:#005CC5;--shiki-dark:#79B8FF\"> -p\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\"> ${APP_HOME}\u003C\u002Fspan>\u003Cspan style=\"color:#032F62;--shiki-dark:#9ECBFF\">\u002Flogs\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6F42C1;--shiki-dark:#B392F0\">usage\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">() {\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#005CC5;--shiki-dark:#79B8FF\">    echo\u003C\u002Fspan>\u003Cspan style=\"color:#032F62;--shiki-dark:#9ECBFF\"> \"Usage: \u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">$PROG_NAME\u003C\u002Fspan>\u003Cspan style=\"color:#032F62;--shiki-dark:#9ECBFF\"> {start|stop|restart}\"\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#005CC5;--shiki-dark:#79B8FF\">    exit\u003C\u002Fspan>\u003Cspan style=\"color:#005CC5;--shiki-dark:#79B8FF\"> 2\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">}\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6F42C1;--shiki-dark:#B392F0\">health_check\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">() {\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">    exptime\u003C\u002Fspan>\u003Cspan style=\"color:#D73A49;--shiki-dark:#F97583\">=\u003C\u002Fspan>\u003Cspan style=\"color:#032F62;--shiki-dark:#9ECBFF\">0\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#005CC5;--shiki-dark:#79B8FF\">    echo\u003C\u002Fspan>\u003Cspan style=\"color:#032F62;--shiki-dark:#9ECBFF\"> \"checking ${\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">HEALTH_CHECK_URL\u003C\u002Fspan>\u003Cspan style=\"color:#032F62;--shiki-dark:#9ECBFF\">}\"\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#D73A49;--shiki-dark:#F97583\">    while\u003C\u002Fspan>\u003Cspan style=\"color:#005CC5;--shiki-dark:#79B8FF\"> true\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">; \u003C\u002Fspan>\u003Cspan style=\"color:#D73A49;--shiki-dark:#F97583\">do\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">        status_code\u003C\u002Fspan>\u003Cspan style=\"color:#D73A49;--shiki-dark:#F97583\">=\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">$(\u003C\u002Fspan>\u003Cspan style=\"color:#6F42C1;--shiki-dark:#B392F0\">\u002Fusr\u002Fbin\u002Fcurl\u003C\u002Fspan>\u003Cspan style=\"color:#005CC5;--shiki-dark:#79B8FF\"> -L\u003C\u002Fspan>\u003Cspan style=\"color:#005CC5;--shiki-dark:#79B8FF\"> -o\u003C\u002Fspan>\u003Cspan style=\"color:#032F62;--shiki-dark:#9ECBFF\"> \u002Fdev\u002Fnull\u003C\u002Fspan>\u003Cspan style=\"color:#005CC5;--shiki-dark:#79B8FF\"> --connect-timeout\u003C\u002Fspan>\u003Cspan style=\"color:#005CC5;--shiki-dark:#79B8FF\"> 5\u003C\u002Fspan>\u003Cspan style=\"color:#005CC5;--shiki-dark:#79B8FF\"> -s\u003C\u002Fspan>\u003Cspan style=\"color:#005CC5;--shiki-dark:#79B8FF\"> -w\u003C\u002Fspan>\u003Cspan style=\"color:#032F62;--shiki-dark:#9ECBFF\"> %{http_code}\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\"> ${HEALTH_CHECK_URL})\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#D73A49;--shiki-dark:#F97583\">        if\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\"> [ \u003C\u002Fspan>\u003Cspan style=\"color:#032F62;--shiki-dark:#9ECBFF\">\"\u003C\u002Fspan>\u003Cspan style=\"color:#005CC5;--shiki-dark:#79B8FF\">$?\u003C\u002Fspan>\u003Cspan style=\"color:#032F62;--shiki-dark:#9ECBFF\">\"\u003C\u002Fspan>\u003Cspan style=\"color:#D73A49;--shiki-dark:#F97583\"> !=\u003C\u002Fspan>\u003Cspan style=\"color:#032F62;--shiki-dark:#9ECBFF\"> \"0\"\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\"> ]; \u003C\u002Fspan>\u003Cspan style=\"color:#D73A49;--shiki-dark:#F97583\">then\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#005CC5;--shiki-dark:#79B8FF\">            echo\u003C\u002Fspan>\u003Cspan style=\"color:#005CC5;--shiki-dark:#79B8FF\"> -n\u003C\u002Fspan>\u003Cspan style=\"color:#005CC5;--shiki-dark:#79B8FF\"> -e\u003C\u002Fspan>\u003Cspan style=\"color:#032F62;--shiki-dark:#9ECBFF\"> \"\\rapplication not started\"\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#D73A49;--shiki-dark:#F97583\">        else\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#005CC5;--shiki-dark:#79B8FF\">            echo\u003C\u002Fspan>\u003Cspan style=\"color:#032F62;--shiki-dark:#9ECBFF\"> \"code is \u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">$status_code\u003C\u002Fspan>\u003Cspan style=\"color:#032F62;--shiki-dark:#9ECBFF\">\"\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#D73A49;--shiki-dark:#F97583\">            if\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\"> [ \u003C\u002Fspan>\u003Cspan style=\"color:#032F62;--shiki-dark:#9ECBFF\">\"\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">$status_code\u003C\u002Fspan>\u003Cspan style=\"color:#032F62;--shiki-dark:#9ECBFF\">\"\u003C\u002Fspan>\u003Cspan style=\"color:#D73A49;--shiki-dark:#F97583\"> ==\u003C\u002Fspan>\u003Cspan style=\"color:#032F62;--shiki-dark:#9ECBFF\"> \"200\"\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\"> ]; \u003C\u002Fspan>\u003Cspan style=\"color:#D73A49;--shiki-dark:#F97583\">then\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#D73A49;--shiki-dark:#F97583\">                break\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#D73A49;--shiki-dark:#F97583\">            fi\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#D73A49;--shiki-dark:#F97583\">        fi\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6F42C1;--shiki-dark:#B392F0\">        sleep\u003C\u002Fspan>\u003Cspan style=\"color:#005CC5;--shiki-dark:#79B8FF\"> 1\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">        ((exptime\u003C\u002Fspan>\u003Cspan style=\"color:#D73A49;--shiki-dark:#F97583\">++\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">))\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#005CC5;--shiki-dark:#79B8FF\">        echo\u003C\u002Fspan>\u003Cspan style=\"color:#005CC5;--shiki-dark:#79B8FF\"> -e\u003C\u002Fspan>\u003Cspan style=\"color:#032F62;--shiki-dark:#9ECBFF\"> \"\\rWait app to pass health check: \u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">$exptime\u003C\u002Fspan>\u003Cspan style=\"color:#032F62;--shiki-dark:#9ECBFF\">...\"\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#D73A49;--shiki-dark:#F97583\">        if\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\"> [ $exptime \u003C\u002Fspan>\u003Cspan style=\"color:#D73A49;--shiki-dark:#F97583\">-gt\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\"> ${APP_START_TIMEOUT} ]; \u003C\u002Fspan>\u003Cspan style=\"color:#D73A49;--shiki-dark:#F97583\">then\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#005CC5;--shiki-dark:#79B8FF\">            echo\u003C\u002Fspan>\u003Cspan style=\"color:#032F62;--shiki-dark:#9ECBFF\"> 'app start failed'\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#005CC5;--shiki-dark:#79B8FF\">            exit\u003C\u002Fspan>\u003Cspan style=\"color:#005CC5;--shiki-dark:#79B8FF\"> 1\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#D73A49;--shiki-dark:#F97583\">        fi\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#D73A49;--shiki-dark:#F97583\">    done\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#005CC5;--shiki-dark:#79B8FF\">    echo\u003C\u002Fspan>\u003Cspan style=\"color:#032F62;--shiki-dark:#9ECBFF\"> \"check ${\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">HEALTH_CHECK_URL\u003C\u002Fspan>\u003Cspan style=\"color:#032F62;--shiki-dark:#9ECBFF\">} success\"\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">}\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6F42C1;--shiki-dark:#B392F0\">start_application\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">() {\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#005CC5;--shiki-dark:#79B8FF\">    echo\u003C\u002Fspan>\u003Cspan style=\"color:#032F62;--shiki-dark:#9ECBFF\"> \"starting java process\"\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6F42C1;--shiki-dark:#B392F0\">    nohup\u003C\u002Fspan>\u003Cspan style=\"color:#032F62;--shiki-dark:#9ECBFF\"> java\u003C\u002Fspan>\u003Cspan style=\"color:#005CC5;--shiki-dark:#79B8FF\"> -jar\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\"> ${JAR_NAME} \u003C\u002Fspan>\u003Cspan style=\"color:#D73A49;--shiki-dark:#F97583\">>\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">${JAVA_OUT} \u003C\u002Fspan>\u003Cspan style=\"color:#D73A49;--shiki-dark:#F97583\">2>&#x26;1\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\"> &#x26;\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#005CC5;--shiki-dark:#79B8FF\">    echo\u003C\u002Fspan>\u003Cspan style=\"color:#032F62;--shiki-dark:#9ECBFF\"> \"started java process\"\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">}\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6F42C1;--shiki-dark:#B392F0\">stop_application\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">() {\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">    checkjavapid\u003C\u002Fspan>\u003Cspan style=\"color:#D73A49;--shiki-dark:#F97583\">=\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">$(\u003C\u002Fspan>\u003Cspan style=\"color:#6F42C1;--shiki-dark:#B392F0\">ps\u003C\u002Fspan>\u003Cspan style=\"color:#005CC5;--shiki-dark:#79B8FF\"> -ef\u003C\u002Fspan>\u003Cspan style=\"color:#D73A49;--shiki-dark:#F97583\"> |\u003C\u002Fspan>\u003Cspan style=\"color:#6F42C1;--shiki-dark:#B392F0\"> grep\u003C\u002Fspan>\u003Cspan style=\"color:#032F62;--shiki-dark:#9ECBFF\"> java\u003C\u002Fspan>\u003Cspan style=\"color:#D73A49;--shiki-dark:#F97583\"> |\u003C\u002Fspan>\u003Cspan style=\"color:#6F42C1;--shiki-dark:#B392F0\"> grep\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\"> ${APP_NAME} \u003C\u002Fspan>\u003Cspan style=\"color:#D73A49;--shiki-dark:#F97583\">|\u003C\u002Fspan>\u003Cspan style=\"color:#6F42C1;--shiki-dark:#B392F0\"> grep\u003C\u002Fspan>\u003Cspan style=\"color:#005CC5;--shiki-dark:#79B8FF\"> -v\u003C\u002Fspan>\u003Cspan style=\"color:#032F62;--shiki-dark:#9ECBFF\"> grep\u003C\u002Fspan>\u003Cspan style=\"color:#D73A49;--shiki-dark:#F97583\"> |\u003C\u002Fspan>\u003Cspan style=\"color:#6F42C1;--shiki-dark:#B392F0\"> grep\u003C\u002Fspan>\u003Cspan style=\"color:#005CC5;--shiki-dark:#79B8FF\"> -v\u003C\u002Fspan>\u003Cspan style=\"color:#032F62;--shiki-dark:#9ECBFF\"> 'deploy.sh'\u003C\u002Fspan>\u003Cspan style=\"color:#D73A49;--shiki-dark:#F97583\"> |\u003C\u002Fspan>\u003Cspan style=\"color:#6F42C1;--shiki-dark:#B392F0\"> awk\u003C\u002Fspan>\u003Cspan style=\"color:#032F62;--shiki-dark:#9ECBFF\"> '{print$2}'\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">)\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#D73A49;--shiki-dark:#F97583\">    if\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\"> [[ \u003C\u002Fspan>\u003Cspan style=\"color:#D73A49;--shiki-dark:#F97583\">!\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\"> $checkjavapid ]]; \u003C\u002Fspan>\u003Cspan style=\"color:#D73A49;--shiki-dark:#F97583\">then\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#005CC5;--shiki-dark:#79B8FF\">        echo\u003C\u002Fspan>\u003Cspan style=\"color:#005CC5;--shiki-dark:#79B8FF\"> -e\u003C\u002Fspan>\u003Cspan style=\"color:#032F62;--shiki-dark:#9ECBFF\"> \"\\rno java process\"\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#D73A49;--shiki-dark:#F97583\">        return\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#D73A49;--shiki-dark:#F97583\">    fi\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#005CC5;--shiki-dark:#79B8FF\">    echo\u003C\u002Fspan>\u003Cspan style=\"color:#032F62;--shiki-dark:#9ECBFF\"> \"stop java process\"\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">    times\u003C\u002Fspan>\u003Cspan style=\"color:#D73A49;--shiki-dark:#F97583\">=\u003C\u002Fspan>\u003Cspan style=\"color:#032F62;--shiki-dark:#9ECBFF\">60\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#D73A49;--shiki-dark:#F97583\">    for\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\"> e \u003C\u002Fspan>\u003Cspan style=\"color:#D73A49;--shiki-dark:#F97583\">in\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\"> $(\u003C\u002Fspan>\u003Cspan style=\"color:#6F42C1;--shiki-dark:#B392F0\">seq\u003C\u002Fspan>\u003Cspan style=\"color:#005CC5;--shiki-dark:#79B8FF\"> 60\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">); \u003C\u002Fspan>\u003Cspan style=\"color:#D73A49;--shiki-dark:#F97583\">do\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6F42C1;--shiki-dark:#B392F0\">        sleep\u003C\u002Fspan>\u003Cspan style=\"color:#005CC5;--shiki-dark:#79B8FF\"> 1\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">        COSTTIME\u003C\u002Fspan>\u003Cspan style=\"color:#D73A49;--shiki-dark:#F97583\">=\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">$(($times - $e))\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">        checkjavapid\u003C\u002Fspan>\u003Cspan style=\"color:#D73A49;--shiki-dark:#F97583\">=\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">$(\u003C\u002Fspan>\u003Cspan style=\"color:#6F42C1;--shiki-dark:#B392F0\">ps\u003C\u002Fspan>\u003Cspan style=\"color:#005CC5;--shiki-dark:#79B8FF\"> -ef\u003C\u002Fspan>\u003Cspan style=\"color:#D73A49;--shiki-dark:#F97583\"> |\u003C\u002Fspan>\u003Cspan style=\"color:#6F42C1;--shiki-dark:#B392F0\"> grep\u003C\u002Fspan>\u003Cspan style=\"color:#032F62;--shiki-dark:#9ECBFF\"> java\u003C\u002Fspan>\u003Cspan style=\"color:#D73A49;--shiki-dark:#F97583\"> |\u003C\u002Fspan>\u003Cspan style=\"color:#6F42C1;--shiki-dark:#B392F0\"> grep\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\"> ${APP_NAME} \u003C\u002Fspan>\u003Cspan style=\"color:#D73A49;--shiki-dark:#F97583\">|\u003C\u002Fspan>\u003Cspan style=\"color:#6F42C1;--shiki-dark:#B392F0\"> grep\u003C\u002Fspan>\u003Cspan style=\"color:#005CC5;--shiki-dark:#79B8FF\"> -v\u003C\u002Fspan>\u003Cspan style=\"color:#032F62;--shiki-dark:#9ECBFF\"> grep\u003C\u002Fspan>\u003Cspan style=\"color:#D73A49;--shiki-dark:#F97583\"> |\u003C\u002Fspan>\u003Cspan style=\"color:#6F42C1;--shiki-dark:#B392F0\"> grep\u003C\u002Fspan>\u003Cspan style=\"color:#005CC5;--shiki-dark:#79B8FF\"> -v\u003C\u002Fspan>\u003Cspan style=\"color:#032F62;--shiki-dark:#9ECBFF\"> 'deploy.sh'\u003C\u002Fspan>\u003Cspan style=\"color:#D73A49;--shiki-dark:#F97583\"> |\u003C\u002Fspan>\u003Cspan style=\"color:#6F42C1;--shiki-dark:#B392F0\"> awk\u003C\u002Fspan>\u003Cspan style=\"color:#032F62;--shiki-dark:#9ECBFF\"> '{print$2}'\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">)\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#D73A49;--shiki-dark:#F97583\">        if\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\"> [[ $checkjavapid ]]; \u003C\u002Fspan>\u003Cspan style=\"color:#D73A49;--shiki-dark:#F97583\">then\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#005CC5;--shiki-dark:#79B8FF\">            kill\u003C\u002Fspan>\u003Cspan style=\"color:#005CC5;--shiki-dark:#79B8FF\"> -9\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\"> $checkjavapid\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#005CC5;--shiki-dark:#79B8FF\">            echo\u003C\u002Fspan>\u003Cspan style=\"color:#005CC5;--shiki-dark:#79B8FF\"> -e\u003C\u002Fspan>\u003Cspan style=\"color:#032F62;--shiki-dark:#9ECBFF\"> \"\\r        -- stopping java lasts $(\u003C\u002Fspan>\u003Cspan style=\"color:#6F42C1;--shiki-dark:#B392F0\">expr\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\"> $COSTTIME\u003C\u002Fspan>\u003Cspan style=\"color:#032F62;--shiki-dark:#9ECBFF\">) seconds.\"\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#D73A49;--shiki-dark:#F97583\">        else\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#005CC5;--shiki-dark:#79B8FF\">            echo\u003C\u002Fspan>\u003Cspan style=\"color:#005CC5;--shiki-dark:#79B8FF\"> -e\u003C\u002Fspan>\u003Cspan style=\"color:#032F62;--shiki-dark:#9ECBFF\"> \"\\rjava process has exited\"\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#D73A49;--shiki-dark:#F97583\">            break\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#D73A49;--shiki-dark:#F97583\">        fi\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#D73A49;--shiki-dark:#F97583\">    done\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#005CC5;--shiki-dark:#79B8FF\">    echo\u003C\u002Fspan>\u003Cspan style=\"color:#032F62;--shiki-dark:#9ECBFF\"> \"\"\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">}\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6F42C1;--shiki-dark:#B392F0\">start\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">() {\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6F42C1;--shiki-dark:#B392F0\">    start_application\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6F42C1;--shiki-dark:#B392F0\">    health_check\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">}\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6F42C1;--shiki-dark:#B392F0\">stop\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">() {\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6F42C1;--shiki-dark:#B392F0\">    stop_application\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">}\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#D73A49;--shiki-dark:#F97583\">case\u003C\u002Fspan>\u003Cspan style=\"color:#032F62;--shiki-dark:#9ECBFF\"> \"\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">$ACTION\u003C\u002Fspan>\u003Cspan style=\"color:#032F62;--shiki-dark:#9ECBFF\">\"\u003C\u002Fspan>\u003Cspan style=\"color:#D73A49;--shiki-dark:#F97583\"> in\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#032F62;--shiki-dark:#DBEDFF\">start\u003C\u002Fspan>\u003Cspan style=\"color:#D73A49;--shiki-dark:#F97583\">)\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6F42C1;--shiki-dark:#B392F0\">    start\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">    ;;\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#032F62;--shiki-dark:#DBEDFF\">stop\u003C\u002Fspan>\u003Cspan style=\"color:#D73A49;--shiki-dark:#F97583\">)\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6F42C1;--shiki-dark:#B392F0\">    stop\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">    ;;\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#032F62;--shiki-dark:#DBEDFF\">restart\u003C\u002Fspan>\u003Cspan style=\"color:#D73A49;--shiki-dark:#F97583\">)\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6F42C1;--shiki-dark:#B392F0\">    stop\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6F42C1;--shiki-dark:#B392F0\">    start\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">    ;;\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#D73A49;--shiki-dark:#F97583\">*)\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6F42C1;--shiki-dark:#B392F0\">    usage\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">    ;;\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#D73A49;--shiki-dark:#F97583\">esac\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\u003Ch3 id=\"6.4.-%E6%90%AD%E5%BB%BA%E8%87%AA%E5%8A%A8%E9%83%A8%E7%BD%B2%E6%B5%81%E6%B0%B4%E7%BA%BF\" tabindex=\"-1\">\u003Ca class=\"header-anchor\" href=\"#6.4.-%E6%90%AD%E5%BB%BA%E8%87%AA%E5%8A%A8%E9%83%A8%E7%BD%B2%E6%B5%81%E6%B0%B4%E7%BA%BF\">#\u003C\u002Fa> 6.4. 搭建自动部署流水线\u003C\u002Fh3>\n\u003Cp>部署配置: \u003Ca href=\"https:\u002F\u002Fhelp.aliyun.com\u002Fdocument_detail\u002F153848.htm#section-ol3-f7c-7ho\">https:\u002F\u002Fhelp.aliyun.com\u002Fdocument_detail\u002F153848.htm#section-ol3-f7c-7ho\u003C\u002Fa>\u003C\u002Fp>\n\u003Cp>Java 构建上传 &gt; Java 构建命令\u003C\u002Fp>\n\u003Cpre data-lang=\"bash\" class=\"shiki shiki-themes github-light github-dark\" style=\"background-color:#fff;--shiki-dark-bg:#24292e;color:#24292e;--shiki-dark:#e1e4e8\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D;--shiki-dark:#6A737D\"># 因为我的项目放在仓库的子目录所以需要先进入子目录\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#005CC5;--shiki-dark:#79B8FF\">cd\u003C\u002Fspan>\u003Cspan style=\"color:#032F62;--shiki-dark:#9ECBFF\"> blog\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6F42C1;--shiki-dark:#B392F0\">mvn\u003C\u002Fspan>\u003Cspan style=\"color:#005CC5;--shiki-dark:#79B8FF\"> -B\u003C\u002Fspan>\u003Cspan style=\"color:#032F62;--shiki-dark:#9ECBFF\"> clean\u003C\u002Fspan>\u003Cspan style=\"color:#032F62;--shiki-dark:#9ECBFF\"> package\u003C\u002Fspan>\u003Cspan style=\"color:#005CC5;--shiki-dark:#79B8FF\"> -Dmaven.test.skip=true\u003C\u002Fspan>\u003Cspan style=\"color:#005CC5;--shiki-dark:#79B8FF\"> -Dautoconfig.skip\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>Java 构建上传 &gt; 构建物上传 &gt; 打包路径\u003C\u002Fp>\n\u003Cpre data-lang=\"txt\" class=\"shiki shiki-themes github-light github-dark\" style=\"background-color:#fff;--shiki-dark-bg:#24292e;color:#24292e;--shiki-dark:#e1e4e8\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan>blog\u002Ftarget\u002Fblog-zeo.jar\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>blog\u002Fdeploy.sh\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>主机部署 &gt; 部署脚本\u003C\u002Fp>\n\u003Cpre data-lang=\"bash\" class=\"shiki shiki-themes github-light github-dark\" style=\"background-color:#fff;--shiki-dark-bg:#24292e;color:#24292e;--shiki-dark:#e1e4e8\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan style=\"color:#6F42C1;--shiki-dark:#B392F0\">rm\u003C\u002Fspan>\u003Cspan style=\"color:#005CC5;--shiki-dark:#79B8FF\"> -rf\u003C\u002Fspan>\u003Cspan style=\"color:#032F62;--shiki-dark:#9ECBFF\"> \u002Fhome\u002Fadmin\u002Fblog-zeo\u002Ftarget\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6F42C1;--shiki-dark:#B392F0\">rm\u003C\u002Fspan>\u003Cspan style=\"color:#005CC5;--shiki-dark:#79B8FF\"> -rf\u003C\u002Fspan>\u003Cspan style=\"color:#032F62;--shiki-dark:#9ECBFF\"> \u002Fhome\u002Fadmin\u002Fblog-zeo\u002Fdeploy.sh\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6F42C1;--shiki-dark:#B392F0\">mkdir\u003C\u002Fspan>\u003Cspan style=\"color:#005CC5;--shiki-dark:#79B8FF\"> -p\u003C\u002Fspan>\u003Cspan style=\"color:#032F62;--shiki-dark:#9ECBFF\"> \u002Fhome\u002Fadmin\u002Fblog-zeo\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6F42C1;--shiki-dark:#B392F0\">tar\u003C\u002Fspan>\u003Cspan style=\"color:#032F62;--shiki-dark:#9ECBFF\"> zxvf\u003C\u002Fspan>\u003Cspan style=\"color:#032F62;--shiki-dark:#9ECBFF\"> \u002Fhome\u002Fadmin\u002Fapp\u002Fpackage_blog-zeo.tgz\u003C\u002Fspan>\u003Cspan style=\"color:#005CC5;--shiki-dark:#79B8FF\"> -C\u003C\u002Fspan>\u003Cspan style=\"color:#032F62;--shiki-dark:#9ECBFF\"> \u002Fhome\u002Fadmin\u002Fblog-zeo\u002F\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6F42C1;--shiki-dark:#B392F0\">mv\u003C\u002Fspan>\u003Cspan style=\"color:#032F62;--shiki-dark:#9ECBFF\"> \u002Fhome\u002Fadmin\u002Fblog-zeo\u002Fblog\u002F\u003C\u002Fspan>\u003Cspan style=\"color:#005CC5;--shiki-dark:#79B8FF\">*\u003C\u002Fspan>\u003Cspan style=\"color:#032F62;--shiki-dark:#9ECBFF\"> \u002Fhome\u002Fadmin\u002Fblog-zeo\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6F42C1;--shiki-dark:#B392F0\">sh\u003C\u002Fspan>\u003Cspan style=\"color:#032F62;--shiki-dark:#9ECBFF\"> \u002Fhome\u002Fadmin\u002Fblog-zeo\u002Fdeploy.sh\u003C\u002Fspan>\u003Cspan style=\"color:#032F62;--shiki-dark:#9ECBFF\"> restart\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>其他参考：Web应用构建配置: \u003Ca href=\"https:\u002F\u002Fhelp.aliyun.com\u002Fdocument_detail\u002F59293.html\">https:\u002F\u002Fhelp.aliyun.com\u002Fdocument_detail\u002F59293.html\u003C\u002Fa>（我在仓库的根目录尝试配置了 release 文件，但似乎没有生效）\u003C\u002Fp>\n\u003Ch3 id=\"6.5.-%E9%AA%8C%E8%AF%81%E9%83%A8%E7%BD%B2\" tabindex=\"-1\">\u003Ca class=\"header-anchor\" href=\"#6.5.-%E9%AA%8C%E8%AF%81%E9%83%A8%E7%BD%B2\">#\u003C\u002Fa> 6.5. 验证部署\u003C\u002Fh3>\n\u003Cp>运行流水线，如无误则，部署成功（\u003Ca href=\"http:\u002F\u002Fdeploy.sh\">deploy.sh\u003C\u002Fa> 会自动进行检测）\u003C\u002Fp>\n\u003Ch3 id=\"6.6.-%E6%B7%BB%E5%8A%A0%E9%92%89%E9%92%89%E6%9C%BA%E5%99%A8%E4%BA%BA%E9%80%9A%E7%9F%A5\" tabindex=\"-1\">\u003Ca class=\"header-anchor\" href=\"#6.6.-%E6%B7%BB%E5%8A%A0%E9%92%89%E9%92%89%E6%9C%BA%E5%99%A8%E4%BA%BA%E9%80%9A%E7%9F%A5\">#\u003C\u002Fa> 6.6. 添加钉钉机器人通知\u003C\u002Fh3>\n\u003Ch2 id=\"7.-ecs-%E5%9F%9F%E5%90%8D%E9%85%8D%E7%BD%AE\" tabindex=\"-1\">\u003Ca class=\"header-anchor\" href=\"#7.-ecs-%E5%9F%9F%E5%90%8D%E9%85%8D%E7%BD%AE\">#\u003C\u002Fa> 7. ECS 域名配置\u003C\u002Fh2>\n\u003Cblockquote>\n\u003Cp>此处域名配置为临时配置，便于后续验证，验证无误后域名将指向 DCDN\u003C\u002Fp>\n\u003C\u002Fblockquote>\n\u003Col>\n\u003Cli>我之前已经配置了一个指向 ECS 的域名 \u003Ccode>cc01cc.cn\u003C\u002Fcode>\u003C\u002Fli>\n\u003Cli>在此基础上，我再配置一个 \u003Ccode>v01.static.cc01cc.cn\u003C\u002Fcode> 子域名，当前专门用于图片的访问\u003C\u002Fli>\n\u003Cli>前往域名解析 \u003Ca href=\"https:\u002F\u002Fdns.console.aliyun.com\u002F\">https:\u002F\u002Fdns.console.aliyun.com\u002F\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>给子域名添加 \u003Ccode>A\u003C\u002Fcode> \u003Ccode>AAAA\u003C\u002Fcode> 记录\u003C\u002Fli>\n\u003Cli>前往数字证书管理服务管理控制台\u003Ca href=\"https:\u002F\u002Fyundun.console.aliyun.com\u002F\">https:\u002F\u002Fyundun.console.aliyun.com\u002F\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>添加免费证书，并点击部署\u003C\u002Fli>\n\u003Cli>填写并记录证书存储路径等参数\u003C\u002Fli>\n\u003C\u002Fol>\n\u003Cp>不推荐使用 Let’s Encrypt 证书，尤其是在开启 CDN 等配置的情况下 certbot 更新相对麻烦。\u003C\u002Fp>\n\u003Cp>\u003Cpicture>\u003Csource type=\"image\u002Fwebp\" srcset=\"https:\u002F\u002Fmedia.cc01cc.cn\u002F5c28c280.webp?x-oss-process=image\u002Fresize,w_672\u002Fformat,webp\u002Fquality,Q_85 672w, https:\u002F\u002Fmedia.cc01cc.cn\u002F5c28c280.webp?x-oss-process=image\u002Fresize,w_1344\u002Fformat,webp\u002Fquality,Q_85 1344w\" sizes=\"min(42rem, 100vw - 2rem)\" \u002F>\u003Cimg src=\"https:\u002F\u002Fmedia.cc01cc.cn\u002F5c28c280.webp\" alt=\"https-20230628210913\" loading=\"lazy\" decoding=\"async\" \u002F>\u003C\u002Fpicture>\u003C\u002Fp>\n\u003Ch2 id=\"8.-%E9%85%8D%E7%BD%AE-nginx\" tabindex=\"-1\">\u003Ca class=\"header-anchor\" href=\"#8.-%E9%85%8D%E7%BD%AE-nginx\">#\u003C\u002Fa> 8. 配置 NGINX\u003C\u002Fh2>\n\u003Cp>我使用工具生成 NGINX 配置：NGINXConfig | DigitalOcean: \u003Ca href=\"https:\u002F\u002Fwww.digitalocean.com\u002Fcommunity\u002Ftools\u002Fnginx?global.app.lang=zhCN\">https:\u002F\u002Fwww.digitalocean.com\u002Fcommunity\u002Ftools\u002Fnginx?global.app.lang=zhCN\u003C\u002Fa>\u003C\u002Fp>\n\u003Cp>开源地址：digitalocean\u002Fnginxconfig.io: ⚙️ NGINX config generator on steroids 💉: \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fdigitalocean\u002Fnginxconfig.io\">https:\u002F\u002Fgithub.com\u002Fdigitalocean\u002Fnginxconfig.io\u003C\u002Fa>\u003C\u002Fp>\n\u003Col>\n\u003Cli>进入 ECS 控制台复制已有的 NGINX 配置\u003C\u002Fli>\n\u003Cli>参考已有配置，在 NGINX 配置中调整或添加新的配置\u003C\u002Fli>\n\u003C\u002Fol>\n\u003Ch3 id=\"8.1.-no-%E2%80%9Cssl_certificate%E2%80%9D-%E9%97%AE%E9%A2%98\" tabindex=\"-1\">\u003Ca class=\"header-anchor\" href=\"#8.1.-no-%E2%80%9Cssl_certificate%E2%80%9D-%E9%97%AE%E9%A2%98\">#\u003C\u002Fa> 8.1. no “ssl_certificate” 问题\u003C\u002Fh3>\n\u003Cp>中间遇到了个小坑，启动 nginx 服务的时候报错\u003C\u002Fp>\n\u003Cpre data-lang=\"txt\" class=\"shiki shiki-themes github-light github-dark\" style=\"background-color:#fff;--shiki-dark-bg:#24292e;color:#24292e;--shiki-dark:#e1e4e8\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan>nginx: [emerg] no \"ssl_certificate\" is defined for the \"listen ... ssl\" directive in \u002Fetc\u002Fnginx\u002Fsites-enabled\u002Fcc01cc.cn.conf:1\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>不要运行注释 SSL 相关指令即可，如果已经运行了可以\u003C\u002Fp>\n\u003Ch4 id=\"8.1.1.-%E3%80%90%E6%96%B9%E6%B3%95%E4%B8%80%E3%80%91\" tabindex=\"-1\">\u003Ca class=\"header-anchor\" href=\"#8.1.1.-%E3%80%90%E6%96%B9%E6%B3%95%E4%B8%80%E3%80%91\">#\u003C\u002Fa> 8.1.1. 【方法一】\u003C\u002Fh4>\n\u003Cpre data-lang=\"bash\" class=\"shiki shiki-themes github-light github-dark\" style=\"background-color:#fff;--shiki-dark-bg:#24292e;color:#24292e;--shiki-dark:#e1e4e8\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D;--shiki-dark:#6A737D\"># 批量取消注释\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6F42C1;--shiki-dark:#B392F0\">sed\u003C\u002Fspan>\u003Cspan style=\"color:#005CC5;--shiki-dark:#79B8FF\"> -i\u003C\u002Fspan>\u003Cspan style=\"color:#005CC5;--shiki-dark:#79B8FF\"> -r\u003C\u002Fspan>\u003Cspan style=\"color:#005CC5;--shiki-dark:#79B8FF\"> -z\u003C\u002Fspan>\u003Cspan style=\"color:#032F62;--shiki-dark:#9ECBFF\"> 's\u002F#?; ?#\u002F\u002Fg; s\u002F(server \\{)\\n    ssl off;\u002F\\1\u002Fg'\u003C\u002Fspan>\u003Cspan style=\"color:#032F62;--shiki-dark:#9ECBFF\"> \u002Fetc\u002Fnginx\u002Fsites-available\u002F\u003C\u002Fspan>\u003Cspan style=\"color:#005CC5;--shiki-dark:#79B8FF\">***\u003C\u002Fspan>\u003Cspan style=\"color:#032F62;--shiki-dark:#9ECBFF\">.conf\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\u003Ch4 id=\"8.1.2.-%E3%80%90%E6%96%B9%E6%B3%95%E4%BA%8C%E3%80%91%E6%89%8B%E5%8A%A8%E5%8F%96%E6%B6%88%E6%B3%A8%E9%87%8A\" tabindex=\"-1\">\u003Ca class=\"header-anchor\" href=\"#8.1.2.-%E3%80%90%E6%96%B9%E6%B3%95%E4%BA%8C%E3%80%91%E6%89%8B%E5%8A%A8%E5%8F%96%E6%B6%88%E6%B3%A8%E9%87%8A\">#\u003C\u002Fa> 8.1.2. 【方法二】手动取消注释\u003C\u002Fh4>\n\u003Cp>把 \u003Ccode>\u002Fetc\u002Fnginx\u002Fsites-enabled\u002F***.conf\u003C\u002Fcode>，\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-conf\">#;#ssl_certificate \u002Fetc\u002Fletsencrypt\u002Flive\u002F***\u002Ffullchain.pem;\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>以及其他类似注释手动取消\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-conf\">ssl_certificate \u002Fetc\u002Fletsencrypt\u002Flive\u002F***\u002Ffullchain.pem;\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch3 id=\"8.2.-%E6%A3%80%E6%9F%A5-nginx-%E9%85%8D%E7%BD%AE\" tabindex=\"-1\">\u003Ca class=\"header-anchor\" href=\"#8.2.-%E6%A3%80%E6%9F%A5-nginx-%E9%85%8D%E7%BD%AE\">#\u003C\u002Fa> 8.2. 检查 nginx 配置\u003C\u002Fh3>\n\u003Cp>配置完成后，访问指定域名，查看是否返回目标页面，同时检查 HTTPS 是否正常\u003C\u002Fp>\n\u003Ch4 id=\"8.2.1.-nginx-%E9%85%8D%E7%BD%AE%E6%8E%92%E6%9F%A5\" tabindex=\"-1\">\u003Ca class=\"header-anchor\" href=\"#8.2.1.-nginx-%E9%85%8D%E7%BD%AE%E6%8E%92%E6%9F%A5\">#\u003C\u002Fa> 8.2.1. nginx 配置排查\u003C\u002Fh4>\n\u003Cp>检查 nginx log, spring log\u003C\u002Fp>\n\u003Cp>关于权限问题，可以使用以下命令，查看运行 nginx 的用户\u003C\u002Fp>\n\u003Cpre data-lang=\"bash\" class=\"shiki shiki-themes github-light github-dark\" style=\"background-color:#fff;--shiki-dark-bg:#24292e;color:#24292e;--shiki-dark:#e1e4e8\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan style=\"color:#6F42C1;--shiki-dark:#B392F0\">ps\u003C\u002Fspan>\u003Cspan style=\"color:#032F62;--shiki-dark:#9ECBFF\"> aux\u003C\u002Fspan>\u003Cspan style=\"color:#D73A49;--shiki-dark:#F97583\"> |\u003C\u002Fspan>\u003Cspan style=\"color:#6F42C1;--shiki-dark:#B392F0\"> grep\u003C\u002Fspan>\u003Cspan style=\"color:#032F62;--shiki-dark:#9ECBFF\"> nginx\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\u003Ch2 id=\"9.-%E6%B7%BB%E5%8A%A0-dcdn\" tabindex=\"-1\">\u003Ca class=\"header-anchor\" href=\"#9.-%E6%B7%BB%E5%8A%A0-dcdn\">#\u003C\u002Fa> 9. 添加 DCDN\u003C\u002Fh2>\n\u003Cp>全站加速 - aliyun 文档: \u003Ca href=\"https:\u002F\u002Fhelp.aliyun.com\u002Fproduct\u002F64812.html\">https:\u002F\u002Fhelp.aliyun.com\u002Fproduct\u002F64812.html\u003C\u002Fa>\u003C\u002Fp>\n\u003Ch3 id=\"9.1.-%E6%B7%BB%E5%8A%A0-waf-%E8%BE%B9%E7%BC%98%E9%98%B2%E6%8A%A4\" tabindex=\"-1\">\u003Ca class=\"header-anchor\" href=\"#9.1.-%E6%B7%BB%E5%8A%A0-waf-%E8%BE%B9%E7%BC%98%E9%98%B2%E6%8A%A4\">#\u003C\u002Fa> 9.1. 添加 WAF 边缘防护\u003C\u002Fh3>\n\u003Cp>边缘WAF概述（新版） - aliyun 文档: \u003Ca href=\"https:\u002F\u002Fhelp.aliyun.com\u002Fdocument_detail\u002F404760.html\">https:\u002F\u002Fhelp.aliyun.com\u002Fdocument_detail\u002F404760.html\u003C\u002Fa>\u003C\u002Fp>\n\u003Ch2 id=\"10.-%E6%90%AD%E5%BB%BA-cn-%E7%AB%99%E8%87%AA%E5%8A%A8%E9%83%A8%E7%BD%B2%E6%B5%81%E6%B0%B4%E7%BA%BF\" tabindex=\"-1\">\u003Ca class=\"header-anchor\" href=\"#10.-%E6%90%AD%E5%BB%BA-cn-%E7%AB%99%E8%87%AA%E5%8A%A8%E9%83%A8%E7%BD%B2%E6%B5%81%E6%B0%B4%E7%BA%BF\">#\u003C\u002Fa> 10. 搭建 cn 站自动部署流水线\u003C\u002Fh2>\n\u003Cpre data-lang=\"bash\" class=\"shiki shiki-themes github-light github-dark\" style=\"background-color:#fff;--shiki-dark-bg:#24292e;color:#24292e;--shiki-dark:#e1e4e8\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan style=\"color:#6F42C1;--shiki-dark:#B392F0\">cnpm\u003C\u002Fspan>\u003Cspan style=\"color:#032F62;--shiki-dark:#9ECBFF\"> install\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6A737D;--shiki-dark:#6A737D\"># cnpm run build\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6F42C1;--shiki-dark:#B392F0\">cnpm\u003C\u002Fspan>\u003Cspan style=\"color:#032F62;--shiki-dark:#9ECBFF\"> install\u003C\u002Fspan>\u003Cspan style=\"color:#005CC5;--shiki-dark:#79B8FF\"> -g\u003C\u002Fspan>\u003Cspan style=\"color:#032F62;--shiki-dark:#9ECBFF\"> hexo-cli\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6F42C1;--shiki-dark:#B392F0\">hexo\u003C\u002Fspan>\u003Cspan style=\"color:#032F62;--shiki-dark:#9ECBFF\"> clean\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6F42C1;--shiki-dark:#B392F0\">hexo\u003C\u002Fspan>\u003Cspan style=\"color:#032F62;--shiki-dark:#9ECBFF\"> deploy\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\u003Ch3 id=\"10.1.-%E6%B7%BB%E5%8A%A0%E9%92%89%E9%92%89%E6%9C%BA%E5%99%A8%E4%BA%BA%E9%80%9A%E7%9F%A5\" tabindex=\"-1\">\u003Ca class=\"header-anchor\" href=\"#10.1.-%E6%B7%BB%E5%8A%A0%E9%92%89%E9%92%89%E6%9C%BA%E5%99%A8%E4%BA%BA%E9%80%9A%E7%9F%A5\">#\u003C\u002Fa> 10.1. 添加钉钉机器人通知\u003C\u002Fh3>\n\u003Ch2 id=\"11.-%E6%B7%BB%E5%8A%A0%E4%BA%91%E7%9B%91%E6%8E%A7\" tabindex=\"-1\">\u003Ca class=\"header-anchor\" href=\"#11.-%E6%B7%BB%E5%8A%A0%E4%BA%91%E7%9B%91%E6%8E%A7\">#\u003C\u002Fa> 11. 添加云监控\u003C\u002Fh2>\n\u003Cp>云监控 - aliyun 文档: \u003Ca href=\"https:\u002F\u002Fhelp.aliyun.com\u002Fproduct\u002F28572.html\">https:\u002F\u002Fhelp.aliyun.com\u002Fproduct\u002F28572.html\u003C\u002Fa>\u003C\u002Fp>\n\u003Cp>对 CDN, ECS, OSS 进行监控，包括可访问性，流量，带宽，请求次数等\u003C\u002Fp>\n\u003Ch3 id=\"11.1.-%E8%87%AA%E5%8A%A8%E6%8B%A8%E6%B5%8B\" tabindex=\"-1\">\u003Ca class=\"header-anchor\" href=\"#11.1.-%E8%87%AA%E5%8A%A8%E6%8B%A8%E6%B5%8B\">#\u003C\u002Fa> 11.1. 自动拨测\u003C\u002Fh3>\n\u003Cp>使用自动拨测工具，检测网站可访问性，以及信息完整性\u003C\u002Fp>\n\u003Ch2 id=\"12.-%E5%8F%AF%E4%BB%A5%E4%BC%98%E5%8C%96%E7%9A%84%E5%9C%B0%E6%96%B9\" tabindex=\"-1\">\u003Ca class=\"header-anchor\" href=\"#12.-%E5%8F%AF%E4%BB%A5%E4%BC%98%E5%8C%96%E7%9A%84%E5%9C%B0%E6%96%B9\">#\u003C\u002Fa> 12. 可以优化的地方\u003C\u002Fh2>\n\u003Col>\n\u003Cli>OSS 默认域名，强制下载现在使用的是自定义域名解决，之后将尝试修改 \u003Ccode>Content-Type\u003C\u002Fcode> 或 \u003Ccode>Content-Disposition\u003C\u002Fcode> 的方式\u003C\u002Fli>\n\u003Cli>暂时没有使用 DCDN，因为图片和其他资源使用了不同的域名，需要重新进行设计。\u003C\u002Fli>\n\u003C\u002Fol>\n\u003Ch2 id=\"13.-%E5%9B%BE%E5%BA%93-v2-%E6%B5%8B%E8%AF%95\" tabindex=\"-1\">\u003Ca class=\"header-anchor\" href=\"#13.-%E5%9B%BE%E5%BA%93-v2-%E6%B5%8B%E8%AF%95\">#\u003C\u002Fa> 13. 图库 v2 测试\u003C\u002Fh2>\n\u003Cp>\u003Cpicture>\u003Csource type=\"image\u002Fwebp\" srcset=\"https:\u002F\u002Fmedia.cc01cc.cn\u002F92c79552.webp?x-oss-process=image\u002Fresize,w_672\u002Fformat,webp\u002Fquality,Q_85 672w, https:\u002F\u002Fmedia.cc01cc.cn\u002F92c79552.webp?x-oss-process=image\u002Fresize,w_1344\u002Fformat,webp\u002Fquality,Q_85 1344w\" sizes=\"min(42rem, 100vw - 2rem)\" \u002F>\u003Cimg src=\"https:\u002F\u002Fmedia.cc01cc.cn\u002F92c79552.webp\" alt=\"Yeah\" loading=\"lazy\" decoding=\"async\" \u002F>\u003C\u002Fpicture>\u003C\u002Fp>\n\u003Ch2 id=\"14.-%E8%AE%B0%E5%BD%95\" tabindex=\"-1\">\u003Ca class=\"header-anchor\" href=\"#14.-%E8%AE%B0%E5%BD%95\">#\u003C\u002Fa> 14. 记录\u003C\u002Fh2>\n\u003Cp>总计部署了 31 次\u003C\u002Fp>\n\u003Cp>\u003Cpicture>\u003Csource type=\"image\u002Fwebp\" srcset=\"https:\u002F\u002Fmedia.cc01cc.cn\u002F0e1ce921.webp?x-oss-process=image\u002Fresize,w_672\u002Fformat,webp\u002Fquality,Q_85 672w, https:\u002F\u002Fmedia.cc01cc.cn\u002F0e1ce921.webp?x-oss-process=image\u002Fresize,w_1344\u002Fformat,webp\u002Fquality,Q_85 1344w\" sizes=\"min(42rem, 100vw - 2rem)\" \u002F>\u003Cimg src=\"https:\u002F\u002Fmedia.cc01cc.cn\u002F0e1ce921.webp\" alt=\"20230406004055\" loading=\"lazy\" decoding=\"async\" \u002F>\u003C\u002Fpicture>\u003C\u002Fp>\n\u003C!--\nCopyright © 2023-2024 [cc01cc](https:\u002F\u002Fgithub.com\u002Fcc01cc)\n\n本页面采用 [知识共享署名-非商业性使用 4.0 国际许可协议](http:\u002F\u002Fcreativecommons.org\u002Flicenses\u002Fby-nc\u002F4.0\u002F) 进行许可。\n\n转载请注明原始地址：\u003Chttps:\u002F\u002Fcc01cc.com\u002F>\n-->",[20,34,47,60,70,80,88,98,106,118,129,140,149,160,167,178,188,198,207,216,227,237,246,256,268,277,287,296,303,310,320,332,340,348,356,365,375,382,394,402,410,420,428,431,440,449,459,468,480,490,497,503,511,521,531,539,546,554,564,574,581,589,597,604,611,617,626,632,640,647,656,664,672,682,690,698,706,714,723],{"yearMonth":21,"slug":22,"title":23,"date":24,"type":8,"updated":24,"categories":25,"tags":26,"excerpt":30,"cover":31,"sticky":14,"unlisted":14,"comments":15,"wordCount":32,"readingTime":33},"2026-07","ui-rendering-test","UI 渲染测试页（全要素）","2026-07-22",[12],[27,28,29],"test","ui","rendering","本页用于测试博客 UI 的全部渲染场景：标题层级、文本样式、列表、引用、代码块、表格、图片、Mermaid、数学公式、提示块、任务列表等。可长期复用。","https:\u002F\u002Fmedia.cc01cc.cn\u002F2f415521.webp",957,3,{"yearMonth":35,"slug":36,"title":37,"date":38,"type":8,"updated":38,"categories":39,"tags":41,"excerpt":43,"cover":44,"sticky":14,"unlisted":14,"comments":15,"wordCount":45,"readingTime":46},"2024-11","one-touch-screenshot-multi-platform","多平台一键截图全攻略 - Windows, 平板(iPad)与手机(荣耀,华为,小米)","2024-11-24",[40],"uncategorized",[42],"screenshot","1. 背景 截屏是一项常见需求，传统的截屏流程往往需要手动选择区域并确认（例如 Windows PRINT SCREEN 快捷键），然而在追番，线上学习等场景下，我们更需要是快速截屏，避免视频等流程中断，而非图像编辑。 针对这一需求，本文将探讨一种全平台的一键截图解决方案，主要利用各操作系统自带的截屏工具，实现高效、便捷的屏幕捕捉体验。 2. Windows 平台 Windows 11 Pro 2","https:\u002F\u002Fmedia.cc01cc.cn\u002F40af2f20.webp",614,2,{"yearMonth":35,"slug":48,"title":49,"date":50,"type":8,"updated":50,"categories":51,"tags":52,"excerpt":56,"cover":57,"sticky":14,"unlisted":14,"comments":15,"wordCount":58,"readingTime":59},"windows-environment-variable-command-line","使用命令行管理 Windows 环境变量","2024-11-05",[40],[53,54,55],"windows","cmd","powershell","1. 使用命令提示符 (CMD) 1.1. 设置环境变量 添加或修改临时环境变量（当前会话有效） 添加或修改用户环境变量 添加或修改系统环境变量（需要管理员权限）： 1.2. 删除用户环境变量 将 MY_VAR 设置为空字符串（常用操作，非真正删除） 修改注册表之前，请做好备份等安全防护措施；注意注册表的修改具有延迟性，造成的系统或程序影响可能不会在第一时间被感知 若需要完全删除环境变量，可以使用","https:\u002F\u002Fmedia.cc01cc.cn\u002F17bd1416.webp",317,1,{"yearMonth":61,"slug":62,"title":63,"date":64,"type":8,"updated":64,"categories":65,"tags":66,"excerpt":67,"cover":68,"sticky":14,"unlisted":14,"comments":15,"wordCount":69,"readingTime":46},"2024-10","nginx-windows-simplify","在 Windows 中简化 Nginx 命令行操作","2024-10-30",[40],[],"本文的主要目的是为了实现打开命令行后可以直接运行 Nginx 的常用命令，不需要手动切换到工作目录，从而简化操作流程。 1. 背景 在 Windows 中运行 Nginx 每次都需要进入安装目录，运行 Nginx 工具： - 直接将 Nginx 的安装目录添加到「Windows 系统环境变量 > Path」中后，只能运行 nginx -v 命令。而 nginx -t 或者 start nginx ","https:\u002F\u002Fmedia.cc01cc.cn\u002Fe6b002d3.webp",445,{"yearMonth":61,"slug":71,"title":72,"date":64,"type":8,"updated":64,"categories":73,"tags":74,"excerpt":77,"cover":78,"sticky":14,"unlisted":14,"comments":15,"wordCount":79,"readingTime":33},"storage-strateies-jwt-browser","JWT 在浏览器中的存储策略",[40],[75,76],"frontend","security","1. 前置 在讨论JWT的存储位置前，我们首先需要了解： - JWT主要用于验证数据完整性和来源可靠性，而非提供消息的机密性。由于JWT可能被解码，因此不建议直接存储敏感数据。 - 在浏览器环境中，安全性相对较低，即使采用风险较低的方案，但是相比于后端等环境仍可能面临更高的潜在威胁。针对安全性需求较高的场景，推荐增加实施多因素认证（MFA）。 2. 存储环境对比 在浏览器环境中，常见的持久化存储位","https:\u002F\u002Fmedia.cc01cc.cn\u002F314fe11c.webp",1068,{"yearMonth":61,"slug":81,"title":82,"date":64,"type":8,"updated":64,"categories":83,"tags":84,"excerpt":85,"cover":86,"sticky":14,"unlisted":14,"comments":15,"wordCount":87,"readingTime":33},"understand-csrf-attacks-samesite","CSRF 攻击 与 SameSite 属性",[40],[75,76],"1. CSRF 攻击介绍 当用户登录银行网站A（例如 bank.com）时，其浏览器会存储认证信息。恶意网站B（例如 attacker.com）可能会包含一个自动提交的请求，模拟用户在银行网站A上的操作，如转账。如果用户被诱骗访问了这个恶意页面，银行网站A将收到带有认证信息的转账请求，从而导致用户的财产损失。 常见的处理 CSRF 攻击的方式主要有：CSRF Token（常存储于 session ","https:\u002F\u002Fmedia.cc01cc.cn\u002Fcd84877e.webp",902,{"yearMonth":89,"slug":90,"title":91,"date":92,"type":8,"updated":92,"categories":93,"tags":94,"excerpt":95,"cover":96,"sticky":14,"unlisted":14,"comments":15,"wordCount":97,"readingTime":59},"2024-04","package-spring-boot-jar","将 Spring Boot 项目打包成可以独立运行的 jar 包","2024-04-23",[40],[],"| 环境 | | ----------------------- | | Windows 11 Pro 23H2 OS build 22631.3447 | | OpenJDK 64-Bit Server VM Temurin-21.0.2+13 (build 21.0.2+13-LTS, mixed mode, sharing)| | Spring Boot, Java version 等版本详","https:\u002F\u002Fmedia.cc01cc.cn\u002Fbed407db.webp",215,{"yearMonth":89,"slug":99,"title":100,"date":92,"type":8,"updated":92,"categories":101,"tags":102,"excerpt":103,"cover":104,"sticky":14,"unlisted":14,"comments":15,"wordCount":105,"readingTime":46},"understand-cross-same-site-origin","理解「跨域（源）」和「跨网站」的差异与联系",[40],[],"1. 跨域和跨站比较 URL A: https:\u002F\u002Fwww.example.com:443 | URL B | URL A 和 URL B 的差异 | 源（域） | 网站 | 无协议网站 | | ------------------------------- | ----------------------------------------------- | ------------------","https:\u002F\u002Fmedia.cc01cc.cn\u002Fdf87372c.webp",434,{"yearMonth":89,"slug":107,"title":108,"date":109,"type":8,"updated":109,"categories":110,"tags":112,"excerpt":115,"cover":116,"sticky":14,"unlisted":14,"comments":15,"wordCount":117,"readingTime":46},"log-developer-20240422-cors-but-not","开发日志（20240422）：一次以为是跨域但并不是跨域的问题排查记录","2024-04-22",[111],"log-developer",[113,114],"cors","log","1. 日志 在前后端联调的时候，遇到了报错，如下图所示（现在再看感觉非常简单了），发现前一个请求通过了，但是第二个请求报错，然后看到 strict-origin-when-cross-origin 条件反射的认为是跨域配置的问题。（没有发现后端报错，具体原因后文解释） 预检请求 | 正式请求 ---------|---------- 预检请求 | 正式请求 然后先后修改或尝试了，后端添加跨域，Ng","https:\u002F\u002Fmedia.cc01cc.cn\u002Fc567ffd7.webp",793,{"yearMonth":89,"slug":119,"title":120,"date":121,"type":8,"updated":122,"categories":123,"tags":124,"excerpt":126,"cover":127,"sticky":14,"unlisted":14,"comments":15,"wordCount":128,"readingTime":46},"practical-skills-for-git","Git 实用技巧（按场景汇总）回退历史、新建空白分支等","2024-04-15","2024-04-16",[40],[125],"git","git version 2.39.2.windows 1. 回退到历史 commit 回退分支历史是一个敏感的操作，需要小心谨慎。最好在备份、团队协商和测试的基础上进行操作，以避免不必要的问题。 将本地和远程分支回退到历史 commit 的过程涉及使用 Git 的命令来修改分支历史。请注意，在执行这些操作之前，务必备份你的代码，以防发生意外情况。以下为一般步骤： 1. 查找历史 commit 的哈","https:\u002F\u002Fmedia.cc01cc.cn\u002Fd8499c9d.webp",787,{"yearMonth":89,"slug":130,"title":131,"date":132,"type":8,"updated":132,"categories":133,"tags":135,"excerpt":137,"cover":138,"sticky":14,"unlisted":14,"comments":15,"wordCount":139,"readingTime":17},"java-jdk-version-lts-install-verify","JDK版本详解（含LTS）以及安装校验","2024-04-05",[134],"Java",[136],"java","1. JDK 版本 (Oracle Java SE 支持路线图) 数据来源：Oracle Java SE 支持路线图 | 甲骨文中国: | 版本 | GA Date | Premier Support Until | Extended Support Until（限 LTS）| | ----------------- | ----------------------- | ------------","https:\u002F\u002Fmedia.cc01cc.cn\u002Fcf259bb5.webp",1257,{"yearMonth":141,"slug":142,"title":143,"date":144,"type":8,"updated":122,"categories":145,"tags":146,"excerpt":147,"sticky":14,"unlisted":14,"comments":15,"wordCount":148,"readingTime":46},"2024-03","blog-build-cn-v3-3","CN 站日志 v3.3","2024-03-23",[10],[12],"1. 迁移到 EdgeOne 迁移到 EdgeOne 后，原先腾讯云云监控告警将无法使用，需要 EdgeOne 标准版才可配置告警功能。 1. EdgeOne 套餐内的站点关联主域名（一级域名），校验域名所有权 2. 添加子域名，在 DNS 中重新解析，配置源站（和 CDN 中的步骤一致） 3. 托管 SSL（介绍页说是限免，可以实现 SSL 自动续费，还有到期提醒，自动部署，遂添加尝试一下） 4",619,{"yearMonth":141,"slug":150,"title":151,"date":152,"type":8,"updated":152,"categories":153,"tags":155,"excerpt":158,"sticky":14,"unlisted":14,"comments":15,"wordCount":159,"readingTime":33},"font-source-han-install-use-qa","思源字体安装、使用及常见问题解答","2024-03-22",[154],"personalization（个性化）",[156,157],"font","personalization","| 环境 | | ----------------------- | | Windows 11 Pro 23H2 | | Microsoft 365 Word 2402 | | 思源宋体：v2.002 | | 思源黑体：v2.004 | 1. 结论 本人非专业字体工作者，个人建议，仅供参考；先说结论，链接以及详细说明见后文 - 安装 SC 版本，无其余后缀 HW, VF, CN 等 - 关于 HW",1008,{"yearMonth":141,"slug":161,"title":162,"date":152,"type":8,"updated":152,"categories":163,"tags":164,"excerpt":165,"sticky":14,"unlisted":14,"comments":15,"wordCount":166,"readingTime":46},"font-test-set","字体测试集",[154],[156,157],"1. 字体测试集 本人非专业字体工作者，字体测试集为个人经验总结整理，仅供参考 中文文本的选取参考了： - 字型设计：關於「南去經三國，東來過五湖」 与 思源字体文档中的测试字体 - 不同地区的字型区分：思源字体文档中的 63 字 - 由于思源字体字型默认为日文，所以添加了不同地区字型存在较大差异的常用字 门。 - 添置部分中文符号，查看全角半角，以及间距等 关于中文字符中，同字不同型的更多内容可",515,{"yearMonth":141,"slug":168,"title":169,"date":170,"type":8,"updated":170,"categories":171,"tags":173,"excerpt":176,"sticky":14,"unlisted":14,"comments":15,"wordCount":177,"readingTime":46},"windows-defender-firewall-inbound-outbound","Windows 防火墙入站和出站","2024-03-20",[172],"computer-network（计算机网络）",[53,174,175],"operating-system","computer-network","1. 介绍 1.1. 出站和入站 - 出站是从本地计算机访问外部网络，例如浏览器发起请求访问网站 - 零一居 - 入站是从外部网络访问本地计算机，例如使用 localsend 将文件从手机（外部网络）传送到本地计算机 1.2. Windows 默认逻辑 - 阻止所有传入流量，除非请求匹配规则 - 允许所有传出流量，除非与规则匹配 2. 操作指南 2.1. 开启 Windows 高级防火墙 (WFA",537,{"yearMonth":141,"slug":179,"title":180,"date":181,"type":8,"updated":181,"categories":182,"tags":183,"excerpt":186,"sticky":14,"unlisted":14,"comments":15,"wordCount":187,"readingTime":46},"mbr-gpt-comparison","选择 MBR 还是 GPT？你需要了解的都在这里","2024-03-05",[40],[184,185],"computer-tips","disk","1. 摘要 磁盘分区表是一种存储在磁盘上的数据结构，用于存储关于磁盘分区的信息，包括分区的大小、位置和类型。MBR 和 GPT 是两种常见的磁盘分区表格式。GPT 格式较新，具有较多优势，包括： * 支持更大的磁盘容量。MBR 最大支持 2.2TB，而 GPT 支持高达 9.44ZB。 * 支持更多分区。MBR 最多支持 4 个主分区，而 GPT 支持 128 个主分区。 * 更高的安全性。GPT",567,{"yearMonth":141,"slug":189,"title":190,"date":191,"type":8,"updated":191,"categories":192,"tags":194,"excerpt":196,"sticky":14,"unlisted":14,"comments":15,"wordCount":197,"readingTime":46},"html-iso-8601-rfc-3339-rfc-5322-comparison","常用日期和时间标准对比：HTML, ISO 8601, RFC 3339, RFC 5322","2024-03-01",[193],"specification",[195,193],"software-engineering","1. HTML, ISO 8601, RFC 3339, RFC 5322 对比 日期和时间，对于不同系统和平台之间的数据交换和互操作至关重要。本文将对比 HTML 标准、ISO 8601、RFC 3339 和 RFC 5322，为读者提供参考。 html-iso-8601-rfc-3339-rfc-5322-comparison-20240301195432 * 表格文字版见文末-附 1.1. ",586,{"yearMonth":199,"slug":200,"title":201,"date":202,"type":8,"updated":202,"categories":203,"tags":204,"excerpt":205,"sticky":14,"unlisted":14,"comments":15,"wordCount":206,"readingTime":33},"2024-02","understanding-software-versioning","软件版本号解读（语义化SemVer、日历化CalVer及标识符）","2024-02-23",[193],[195,193],"1. 版本控制规范 1.1. 语义化版本（SemVer） 版本格式：主版本号.次版本号.修订号，版本号递增规则： 1. 主版本号(MAJOR version)：添加了不兼容的 API 修改， 2. 次版本号(MINOR version)：添加了向下兼容的功能性新增， 3. 修订号(PATCH version)：添加向下兼容的问题修正。 1.1.1. 补充说明 1. 版本号均从 0 开始，一般使用 ",1072,{"yearMonth":208,"slug":209,"title":210,"date":211,"type":8,"updated":202,"categories":212,"tags":213,"excerpt":214,"sticky":14,"unlisted":14,"comments":15,"wordCount":215,"readingTime":46},"2024-01","blog-build-cn-v3-v3-1","博客 cn 站搭建 v3 v3.1","2024-01-29",[10],[12],"1. 架构设计 v3.1 版本 blog-build-v3.1 2. v2.x 存在的痛点 在v2.x版本中，围绕 服务器 遇到了两个主要的问题： 1. 服务器成本高：博客以静态页面为主，理论上可以实现无服务器部署，但是为了防止恶意攻击，不得不使用服务器进行访问控制。 2. 架构复杂：由于使用了服务器进行访问控制，虽然鉴权逻辑更加灵活，但是导致架构较为复杂，维护成本相对静态存储更高。 3. v3 ",524,{"yearMonth":208,"slug":217,"title":218,"date":211,"type":8,"updated":211,"categories":219,"tags":221,"excerpt":226,"sticky":14,"unlisted":14,"comments":15,"wordCount":215,"readingTime":46},"cloud-tencent-cdn-ali-oss","腾讯云 CDN 搭配 阿里云 OSS",[220],"cloud",[12,222,223,224,225,220],"tencent","ali","cdn","oss","ID: B2-P1 准备 1. 腾讯云 CDN 2. 阿里云 OSS 3. 域名（境内部署，需要备案） 4. 授权给待部署域名的 SSL 证书（腾讯云有免费额度的 SSL 证书） 5. 记事本（可以直接用电脑自带的 Notepad，用于临时记录信息） 创建子用户 创建子账户，后续将授予 OSS 只读权限，提供给 CDN 使用。 1. 访问 ，进入 阿里云 RAM 控制台，创建用户 RAM-crea",{"yearMonth":208,"slug":228,"title":229,"date":211,"type":8,"updated":211,"categories":230,"tags":232,"excerpt":235,"sticky":14,"unlisted":14,"comments":15,"wordCount":236,"readingTime":59},"living-cost-electricity","生活成本之电力",[231],"life（生活）",[233,234],"life","living-cost","ID: B2-O6 电价 浙江政务服务网-浙江省物价局关于完善居民生活用电阶梯电价政策有关事项的通知: | 浙江省电网居民生活用电价格表 | 单位：元\u002F千瓦时 | | | | |-----------------|-------------------|-------|-------|-------| | 电压等级 | | 电度电价 | 分时电价-高峰 | 分时电价-低谷 | | 不满1千伏“一户",213,{"yearMonth":238,"slug":239,"title":240,"date":241,"type":8,"updated":241,"categories":242,"tags":243,"excerpt":244,"sticky":14,"unlisted":14,"comments":15,"wordCount":245,"readingTime":59},"2023-10","use-feishu-base-calcu-time-diff","飞书-多维表格-计算时间差","2023-10-21",[40],[],"1. 选择字段类型 1. 如图所示，字段类型选择 公式 20231021010528 2. 编辑公式 1. 单击 公式编辑器 2. 在弹出的公式编辑框中输入公式 TEXT([终结时间]-[开始时间],\"HH:MM\") 1. [终结时间] 和 [开始时间] 请替换成你的表格中对应的字段名称 2. HH:MM 表示输出的时间格式为 时:分 3. 其中 \"YYY\u002FMM\u002FDD HH:MM\" 表示 年月日时",117,{"yearMonth":238,"slug":247,"title":248,"date":249,"type":8,"categories":250,"tags":251,"excerpt":254,"sticky":14,"unlisted":14,"comments":15,"wordCount":255,"readingTime":59},"linux-centos-mirror","更换 cnetos 软件源","2023-10-08",[40],[252,253],"linux","centos","linux-centos-mirror 实践环境: CentOS Linux release 7.8.2003 (Core) 1. 备份软件源目录 2. 修改软件源列表 运行一下命令，修改软件源 - CentOS 7 - CentOS 8 更新软件包缓存 参考 1. centos | 镜像站使用帮助 | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror: 2. C",105,{"yearMonth":257,"slug":258,"title":259,"date":260,"type":8,"categories":261,"tags":263,"excerpt":266,"sticky":14,"unlisted":14,"comments":15,"wordCount":267,"readingTime":46},"2023-06","database-mysql-install-windows-zip","MySQL (zip) 安装 (windows)","2023-06-09",[262],"database",[264,262,265],"from-mine","mysql","MySQL:: MySQL 8.0 Reference Manual:: 2.3.4 Installing MySQL on Microsoft Windows Using a noinstall ZIP Archive: 1. 下载 MySQL Community Downloads: 如下图，选上一个，不要选 Debug Binaries & Test Suite MySQL-Communit",479,{"yearMonth":257,"slug":269,"title":270,"date":271,"type":8,"updated":271,"categories":272,"tags":273,"excerpt":274,"sticky":14,"unlisted":14,"comments":15,"wordCount":275,"readingTime":276},"use-personalized-font","零一的个性化-字体","2023-06-07",[154],[156,157,264],"- 1. 字体选择标准 - 2. 字体字重选择 - 3. 字体的场景应用 - 3.1. 中文文本 - 3.2. 代码编程 - 3.3. 中英文文本 - 3.4. 远古命令行 - 4. 部分概念收集 - 4.1. 字体类型 - 4.2. OTF TTF .otf .ttf 区别 - 4.2.1. True Type Fonts (TTF) - 4.2.2. Open Type Fonts (OTF)",2174,6,{"yearMonth":278,"slug":279,"title":280,"date":281,"type":8,"categories":282,"tags":284,"excerpt":285,"sticky":14,"unlisted":14,"comments":15,"wordCount":286,"readingTime":59},"2023-05","software-pandoc-guide","Pandoc 使用指南","2023-05-30",[283],"software",[283,264],"文档文件格式转换 快速开始 - .\u002Fpandoc-lab\u002Fdemo.ipynb 原始文件路径 - -f 原文件格式 - -t 目标文件格式 - -o 目标文件路径 - -t gfm Github-Flavored Markdown 类型 markdown - markdown-variants - Pandoc User’s Guide: 更多技巧 1. 进入用户手册: 1. (PDF 版本): ",142,{"yearMonth":278,"slug":288,"title":289,"date":290,"type":8,"categories":291,"tags":292,"excerpt":294,"sticky":14,"unlisted":14,"comments":15,"wordCount":295,"readingTime":59},"software-latex-guide","Latex 指南","2023-05-28",[283],[283,293,264],"latex","1. 学习资料 1. 【视频教程】latex中文教程-15集从入门到精通包含各种latex操作- 哔哩哔哩 : 2. Latex 符号集 - KaTeX : 3. tug.org\u002Ftwg\u002Fmactex\u002Ftutorials\u002Fltxprimer-1.0.pdf : 4. dralpha.altervista.org\u002Fzh\u002Ftech\u002Flnotes2.pdf : 2. Latex模板网站 1. LaTeX",282,{"yearMonth":278,"slug":297,"title":298,"date":290,"type":8,"categories":299,"tags":300,"excerpt":301,"sticky":14,"unlisted":14,"comments":15,"wordCount":302,"readingTime":46},"software-latex-install","Latex 安装",[283],[283,293,264],"1. 安装 Tex Live - 操作环境：windows 10\u002F11 - 【参考】 1. Tex Live : 2. CTAN : 3. proTeXt - a TeX distribution for Windows : 4. SumatraPDF reader : 1.1. 离线安装 Tex Live（使用 iso） 1. 前往 挑选合适的镜像源（比较纠结的话，就选择离自己比较近的即可） 1",419,{"yearMonth":278,"slug":304,"title":305,"date":290,"type":8,"categories":306,"tags":307,"excerpt":308,"sticky":14,"unlisted":14,"comments":15,"wordCount":309,"readingTime":59},"software-tex-studio","TexStudio 指南",[283],[283,264],"software-tex-studio 1. 安装并配置 Tex Studio 1. 运行 texstudio 安装程序 1. Latex Studio(可能被屏蔽) 2. Latex Studio(应该是个镜像，目前可以访问) 2. 在 Tex Studio 的设置>构建选项卡中，调整默认编译器为 XeLaTeX（XeLaTeX 采用 UTF-8 编码支持中日韩文字） 3. 修改渲染方式（避免中",202,{"yearMonth":278,"slug":311,"title":312,"date":313,"type":8,"categories":314,"tags":316,"excerpt":318,"sticky":14,"unlisted":14,"comments":15,"wordCount":319,"readingTime":59},"ai-pic-process-getChannel","使用 PIL, OpenCV, Matplotlib 获取图片通道数","2023-05-24",[315],"ai",[315,317,264],"picture-processing","1. PIL [参考] [参考] python - Number of channels in pil (pillow) image - Stack Overflow: 2. OpenCV 3. ~~Matplotlib (plt)~~ This function exists for historical reasons. It is recommended to use PIL.Image.o",226,{"yearMonth":278,"slug":321,"title":322,"date":323,"type":8,"categories":324,"tags":326,"excerpt":330,"sticky":14,"unlisted":14,"comments":15,"wordCount":331,"readingTime":59},"research-write-template-ieee","IEEE 论文模板下载","2023-05-15",[325],"research",[327,328,325,329],"paper","article","template","1. 进入 IEEE 文章模板下载页面： 2. 单击 IEEE Template Selector 按钮，进入模板选择页面 IEEE-Article-Templates20230515204725 3. 根据页面提示，选择合适的模板下载即可 ieee-template-20230515205241 -->",48,{"yearMonth":278,"slug":333,"title":334,"date":335,"type":8,"categories":336,"tags":337,"excerpt":338,"sticky":14,"unlisted":14,"comments":15,"wordCount":339,"readingTime":59},"software-recommend-00-index","软件推荐","2023-05-01",[40],[283],"1. Windows 1.1. ImageGlass 开源软件 ImageGlass 是一款轻量化的通用图片查看器。 imageglass-20230501181007 1. 官网: 2. 安装包: 3. 安装包-百度网盘: 1.1.1. 体验 是一款非常出色的图片浏览器，过去一直都是我浏览图片的主力。 不过 Windows 11 自带的 照片 应用，经过几次升级，从 UI 到功能都非常的舒适，所",389,{"yearMonth":4,"slug":341,"title":342,"date":343,"type":8,"categories":344,"tags":345,"excerpt":346,"sticky":14,"unlisted":14,"comments":15,"wordCount":347,"readingTime":59},"linux-apt-apt-get","apt 与 apt-get 的区别","2023-04-30",[252],[264,252],"【参考】 Difference Between apt and apt-get Explained - It's FOSS : 简述 1. apt-get, apt-cache 相对于 apt 命令相对低级，拥有大量相似的命令与不常用的功能； 2. apt 是 apt-get 和 apt-cache 的子集，提供相对常用的命令。 细节差异 【参考】apt(8) — apt — Debian jes",200,{"yearMonth":4,"slug":349,"title":350,"date":343,"type":8,"categories":351,"tags":353,"excerpt":354,"sticky":14,"unlisted":14,"comments":15,"wordCount":355,"readingTime":59},"python-logging","Python 日志模块使用",[352],"python",[352,114],"将日志导出到文件【方法一】 *实测，Colab 中新建的日志文件只有当 running time 结束后才会出现。 将日志导出到文件【方法二】 *实测，Colab 中此方法无法写入到文件，会输出到控制台，暂未找到原因。 参考\u002F扩展 - logging - Python doc: - Logging in Python - Real Python: - logginginpython.ipynb -",87,{"yearMonth":4,"slug":357,"title":358,"date":359,"type":8,"updated":359,"categories":360,"tags":362,"excerpt":363,"sticky":14,"unlisted":14,"comments":15,"wordCount":364,"readingTime":59},"thought-ai","关于 AI 的思考","2023-04-27",[361],"thought",[315,361],"- 我并不觉得「感性」是当下自然人面对 AI 的最大优势。 - 我的观点，大语言模型训练的 AI 目前的缺陷主要在于，暂时没有实现和物理模型的关联，例如 AI 说「苹果」，但它仅仅指的是「苹果」这个字面本身，而不是「苹果」作为水果这么一个物体。 - 人类的思维有人类思维的优势，AI 的思维有 AI 思维的优势，我们不要拿人类思维的劣势去对比 AI 思维的优势，而过于悲观；也不要拿人类思维的优势去对",205,{"yearMonth":4,"slug":366,"title":367,"date":368,"type":8,"categories":369,"tags":370,"excerpt":373,"sticky":14,"unlisted":14,"comments":15,"wordCount":374,"readingTime":59},"ai-colab-tensorflow-example","colab 中 安装 tensorflow example 报错以及解决方案","2023-04-23",[315],[315,371,372],"colab","tensorflow","运行 报错 ai-colab-tensorflow-example-01 解决方案 扩展 1. tensorflow\u002Fexamples: TensorFlow examples: 同步 1. StackOverflow: How to install tensorflow examples in colab 1. Q: 2. A: -->",30,{"yearMonth":4,"slug":376,"title":377,"date":368,"type":8,"categories":378,"tags":379,"excerpt":380,"sticky":14,"unlisted":14,"comments":15,"wordCount":381,"readingTime":59},"ai-initial","初识 机器学习\u002F深度学习",[315],[264],"- 1. 参考教程 - 2. 服务器资源 - 3. 环境配置 - 3.1. cudnn, CUDA 的区别 - 3.2. 查询 CUDA 版本 - 3.3. 查询版本 - 4. 训练集\u002F验证集\u002F测试集 - 4.1. K 折交叉验证法 - 5. 过拟合 - 6. 环境 - 7. 数据集 - 7.1. 图像标注 - 8. 数据预处理 - 9. 训练与预测 - 10. 验证 - 11. 预测结果导出 -",369,{"yearMonth":4,"slug":383,"title":384,"date":385,"type":8,"updated":202,"categories":386,"tags":387,"excerpt":392,"sticky":14,"unlisted":14,"comments":15,"wordCount":393,"readingTime":59},"it-file-system-zfs","初识 zfs","2023-04-11",[40],[388,389,390,391],"todo","new-bing","zfs","file system","1. 定义 - ZFS：ZFS 是一种先进的文件系统和逻辑卷管理器，它提供了数据完整性保护、高存储容量、快照和写时复制克隆等功能。 - 存储池：存储池是 ZFS 结构的最上层。一个存储池包含一个或多个虚拟设备（vdev），每个虚拟设备又包含一个或多个设备。存储池是独立的单元，一台物理计算机上可能有两个或更多个独立的存储池，但每个存储池都是完全独立的。存储池之间不能共享虚拟设备。 2. 创建方法 2",204,{"yearMonth":4,"slug":395,"title":396,"date":397,"type":8,"categories":398,"tags":399,"excerpt":400,"sticky":14,"unlisted":14,"comments":15,"wordCount":401,"readingTime":46},"it-file-system-link-soft-hard","软链接和硬链接","2023-04-10",[40],[391],"1. 定义 - 软链接：软链接（也称为符号链接）是一种特殊的文件，它存储了目标文件或目录的路径信息。软链接可以跨文件系统，也可以指向目录。 - 硬链接：硬链接是同一个文件的多个名称，它们指向同一个 inode 节点。硬链接不能跨文件系统，也不能指向目录。 2. 创建方法 Windows 中 链接名在前，目标文件在后 Linux 中 连接名灾后，目标文件在前 2.1. Windows 环境：命令提示",733,{"yearMonth":4,"slug":403,"title":404,"date":405,"type":8,"categories":406,"tags":407,"excerpt":408,"sticky":14,"unlisted":14,"comments":15,"wordCount":409,"readingTime":33},"blog-build-beian-auto","com 和 cn 站自动化部署时备案信息的处理","2023-04-07",[10],[12],"原因 我的博客主要有两个站：境内的 cc01cc.cn 和 境外的 cc01cc.com cn-com-结构图 com 站，使用的是 GitHub 和 Vercel 的自动化部署服务，而且不需要付费；所以作为一个相对稳定的支撑。 cn 站，在境内我没有找到免费的服务，所以从定制化以及经济成本的角度，使用 DCDN + ECS + OSS 方案。 cn 站 和 com 站几乎全部的内容都一致，但是 ",810,{"yearMonth":4,"slug":411,"title":412,"date":413,"type":8,"updated":414,"categories":415,"tags":416,"excerpt":417,"cover":418,"banner":418,"sticky":15,"unlisted":14,"comments":15,"wordCount":419,"readingTime":276},"log-life-zeo","昔日织（ヒビオル）","2023-04-06","2024-11-04",[231],[233],"昔日织会记下，那些漠然被岁月消磨的记忆，那些不得不别过的人儿，也会在昔日织里，与你执手相看泪眼 《朝花夕誓——于离别之朝束起约定之花》 编织 记录第一次学习或接触某项技术，或者一些重要的事件。 - 201X 远古时期，接触并学习 C 和 Java。 - 2019 年 学习 HTML\u002FCSS\u002FJS - 2020 年 接触 物联网 开发，基于 Arduino 开发板实现环境温湿度状态监测。 - 202","https:\u002F\u002Fmedia.cc01cc.cn\u002F55f20649.webp",2259,{"yearMonth":4,"slug":421,"title":422,"date":423,"type":8,"categories":424,"tags":425,"excerpt":426,"sticky":14,"unlisted":14,"comments":15,"wordCount":427,"readingTime":59},"blog-build-aliyun-sts","获取并生成 Aliyun STS 签名 URL 访问 OSS","2023-04-02",[10],[12],"此文章是在搭建 cn 站 v2 的过程中的一个小弯路 如果使用服务器连接 OSS，不需要 STS 授权，直接 IP 授权即可。 此方法适用于给用户临时授权， 使用 Spring Boot 搭建授权服务 为了方便后续拆分，以及调整，此处将 博客页面和图片 的授权分别放置于不同的模块中。 关于授权的相关概念 - 什么是STS: - 基本概念: - OSS访问域名使用规则: - 在URL中包含签名: 获",323,{"yearMonth":4,"slug":5,"title":6,"date":7,"type":8,"categories":429,"tags":430,"excerpt":13,"sticky":14,"unlisted":14,"comments":15,"wordCount":16,"readingTime":17},[10],[12],{"yearMonth":432,"slug":433,"title":434,"date":435,"type":8,"categories":436,"tags":437,"excerpt":438,"sticky":14,"unlisted":14,"comments":15,"wordCount":439,"readingTime":59},"2023-03","blog-static-pic-cdn-oss","搭建静态资源存储库（含图床）（OSS 存储+ DCDN 流量保护）","2023-03-28",[10],[12],"此图床已于 2024 年 1 月 28 日停止使用。 图床搭建完成！ Yeah 因为在 DCDN 中设置了多重防御，图片可能无法加载 *如果访问权限控制的比较严格，不推荐在文章中内嵌直接指向图库的 cdn 链接，因为一旦被拦截就显示不出来了。如果 cdn 指向网页而非图片，被拦截了也可以通过滑块校验最终正常访问。 后期将调整图像加载策略 -->",126,{"yearMonth":432,"slug":441,"title":442,"date":443,"type":8,"updated":443,"categories":444,"tags":445,"excerpt":447,"sticky":14,"unlisted":14,"comments":15,"wordCount":448,"readingTime":17},"thought-chatgpt-ai-feature-me","关于 chatgpt 的思考以及我未来的方向","2023-03-19",[361],[315,446,361],"me","--> ChatGPT 也包括 new bing 和 GPT 4.0 等 ChatGPT 火了相当一段时间了，最近在新领域的探索和学习中 ChatGPT 也帮助了我相当多，我觉得需要进行一个总结和思考。 我是 ChatGPT 此类模型以及 ai 的坚定支持者，也想对那些反对者坦言，其实并不存在支持和反对的选择，这是历史发展的趋势。 使用下来的体验是，ChatGPT 非常适合教育者的工作，尤其是你对",1492,{"yearMonth":432,"slug":450,"title":451,"date":452,"type":8,"updated":453,"categories":454,"tags":455,"excerpt":457,"sticky":14,"unlisted":14,"comments":15,"wordCount":458,"readingTime":59},"linux-debian-mirror","更换 Debian 软件源","2023-03-17","2023-10-19",[40],[252,456],"debian","linux-debian-mirror 运行以下命令备份软件源并配置镜像源 此命令一并更新了「安全更新软件源」，一般而言，为了更及时地获得安全更新，不推荐使用镜像站安全更新软件源，因为镜像站往往有同步延迟。参考 但实测，使用原始地址非常缓慢，甚至无法连接，所以还是使用了镜像站的安全更新软件源。如果需要使用原始地址，相关配置文档可以参考： 配置结果 感谢 感谢 北京外国语大学开源软件镜像站 提供的镜",207,{"yearMonth":432,"slug":460,"title":461,"date":452,"type":8,"categories":462,"tags":463,"excerpt":466,"sticky":14,"unlisted":14,"comments":15,"wordCount":467,"readingTime":59},"linux-ubuntu-mirror","更换 Ubuntu 软件源",[40],[252,464,465],"ubuntu","from-repo-mine","【环境】Ubuntu: 20.04 LTS 1. 备份默认软件源列表 2. 修改软件源列表 [方法一] 命令修改配置文件 [方法二] 手动修改配置文件 使用 vi 命令，因为大部分 Linux 都自带了这个编辑器，不需要更新 （vim，VS Code 以及 SSH 远程连接都需要下载或更新相关软件） 1. 使用 sudo vi \u002Fetc\u002Fapt\u002Fsources.list 打开软件源配置文件 2. ",265,{"yearMonth":432,"slug":469,"title":470,"date":471,"type":8,"categories":472,"tags":473,"excerpt":478,"sticky":14,"unlisted":14,"comments":15,"wordCount":479,"readingTime":33},"blog-deploy-cloud-server","将 Hexo 博客部署到阿里云服务器（自动部署）","2023-03-16",[10],[12,474,475,476,477],"cloud server","aliyun","nginx","hexo","1. 使用 阿里云 云效 自动部署 - 因为我的服务器是阿里云的 ecs 所以使用的是阿里云的 DevOps 服务 - 总体思路：创建自动构建流水线 - 这是我第一次使用 云效 如有更佳的方法欢迎探讨 1.1. 代码源 1. 【初始化】使用 token 从 Github 同步到 云效 代码仓库 2. 云效中添加 git ssh 公钥 3. 本地新增 云效代码仓库 远程地址 4. 添加 Webhoo",881,{"yearMonth":432,"slug":481,"title":482,"date":471,"type":8,"categories":483,"tags":484,"excerpt":488,"sticky":14,"unlisted":14,"comments":15,"wordCount":489,"readingTime":59},"python-hardware-info","使用 python 获取硬件信息",[352],[352,485,486,487],"gpu","cpu","memory","1. 获取内存信息 1.1. 使用 psutil 获取内存信息 psutil 为 python 内置组件，不需要安装 可以应用于获取实时内存占用等场景 1. 引用 psutil 2. 获取物理内存信息 3. 获取交换内存信息 2. 获取 CPU 信息 2.1. 使用 py-cpuinfo 获取 CPU 信息 1. 安装 py-cpuinfo 2. 引用 py-cpuinfo 3. 获取 CPU 信",209,{"yearMonth":432,"slug":491,"title":491,"date":492,"type":8,"categories":493,"tags":494,"excerpt":495,"sticky":14,"unlisted":14,"comments":15,"wordCount":496,"readingTime":46},"log-life-20230314","2023-03-14",[231],[233],"前两天，环境好不容易搭建成功了，本来想着，总算可以跑代码了。虽然 GPU 可以调用，但是总有各种各样的bug，经常显存溢出然后崩溃，搜索也没有什么结果或解决方案；还有其他各种神奇的错误，明明文件在那里，上一个函数还能读取文件的，下一个函数就读取不到了。或许是因为用的是 wsl2，和原生 Linux 还是有些区别的，但是相关资料又太少，总之一山翻过又是更高的一山，很难受。 也没有其他办法，想着安装原",435,{"yearMonth":432,"slug":498,"title":498,"date":499,"type":8,"categories":500,"tags":501,"excerpt":502,"sticky":14,"unlisted":14,"comments":15,"wordCount":166,"readingTime":46},"log-life-20230312","2023-03-12",[231],[233],"植树节 今天，心情有些不平衡，不，是非常 pro max 的不平衡； 最近除了工作，一直忙着毕设。毕设是图像识别方向，第一步需要搭建环境。但是从接触的第一天开始，各种稀奇古怪的环境问题就不停地困扰着我。进度被拖得断断续续，前段时间，被这些环境问题，折磨的有些 emo 了，焦虑地睡不着。然后就花了完整的几日，想彻底解决这个顽疾，但是 tensorflow-gpu, scikit-learn, num",{"yearMonth":432,"slug":504,"title":505,"date":499,"type":8,"categories":506,"tags":507,"excerpt":509,"sticky":14,"unlisted":14,"comments":15,"wordCount":510,"readingTime":33},"use-jupyter-notebook","Jupyter Notebooks 使用指南",[40],[508,465],"jupyter notebook","- 1. 参考 - 2. 安装 Jupyter Notebook - 2.1. 使用 Anaconda 安装 - 2.2. 使用 pip 安装 - 2.3. 在云服务器中使用 Anaconda 安装 - 3. 更换默认目录 - 3.1. 生成 jupyter notebook 配置文件 - 3.2. 修改配置文件 - 3.3. 修改 jupyter notebook 快捷方式 - 3.4. 重新启",935,{"yearMonth":432,"slug":512,"title":513,"date":514,"type":8,"categories":515,"tags":516,"excerpt":519,"sticky":14,"unlisted":14,"comments":15,"wordCount":520,"readingTime":59},"ai-env-common","机器学习环境搭建-常用","2023-03-11",[315],[315,517,518,465],"ml","dl","1. tf-models Intel CPU + Nvidia GPU 2. OpenCV-python pytorch(含 cuda) Start Locally | PyTorch: -->",14,{"yearMonth":432,"slug":522,"title":523,"date":514,"type":8,"categories":524,"tags":525,"excerpt":529,"sticky":14,"unlisted":14,"comments":15,"wordCount":530,"readingTime":59},"ai-env-hardware-acceleration","机器学习环境搭建-硬件优化",[315],[517,518,315,486,485,526,527,528,465],"intel","amd","nvidia","使用 CPU GPU 加速等紧密贴合硬件的库时，务必查看官方文档的硬件要求 在测试或搭建硬件优化库时，务必备份原环境，以及及时的备份数据 1. Intel CPU + Intel GPU - Installing Intel® Distribution for Python* and Intel® Performance...: 2. Nvidia GPU 3. Intel CPU 4. AMD ",254,{"yearMonth":432,"slug":532,"title":533,"date":514,"type":8,"categories":534,"tags":535,"excerpt":537,"sticky":14,"unlisted":14,"comments":15,"wordCount":538,"readingTime":59},"use-conda-install","Conda 安装",[352],[352,536,465],"conda","1. Windows 安装 Anaconda 1. 访问 Anaconda 产品网站 2. 下载并运行安装包 3. 根据安装向导完成安装程序 2. 云服务器安装 Anaconda (以 Ubuntu 20.04 为例) 1. 访问 Anaconda 产品网站 2. 复制适合的 Anaconda Installers 安装包下载链接 Anaconda Installers 3. 在服务器中输入以下命",166,{"yearMonth":432,"slug":540,"title":541,"date":514,"type":8,"updated":122,"categories":542,"tags":543,"excerpt":544,"sticky":14,"unlisted":14,"comments":15,"wordCount":545,"readingTime":46},"use-conda-use","Conda 使用指南",[352],[352,536],"- 环境： conda\u002F4.12.0 requests\u002F2.25.1 CPython\u002F3.8.* Windows\u002F10 Windows\u002F10.0.19041 - 由于编辑顺序的差异，mamba 和 conda 命令存在混用的情况，未安装 mamba 的读者可以使用 conda 平替大部分 mamba 命令。 1. 快速开始 2. 阅读资料 1. Anaconda | For Practitione",786,{"yearMonth":432,"slug":547,"title":548,"date":549,"type":8,"categories":550,"tags":551,"excerpt":552,"sticky":14,"unlisted":14,"comments":15,"wordCount":553,"readingTime":59},"use-conda-config","Conda 配置","2023-03-07",[352],[352,536,465],"1. 命令行操作 1.1. 查看配置 1.2. 修改配置 2. 配置 Conda 镜像环境 2.1. (windows)使用配置文件修改镜像源 - 使用 conda info 命令查看 .condarc 配置文件位置（一般为 $env:userprofile\u002F.condarc） - 在 PowerShell 中使用 notepad $env:userprofile\u002F.condarc 命令，通过记事",280,{"yearMonth":432,"slug":555,"title":556,"date":557,"type":8,"updated":558,"categories":559,"tags":560,"excerpt":562,"sticky":14,"unlisted":14,"comments":15,"wordCount":563,"readingTime":46},"git-ssh","Git 配置 SSH 公钥","2023-03-05","2024-10-21",[40],[125,561,465],"ssh","1. 打开 Git Bash git-bash 2. 检查现存的SSH密钥 如果提示 No such file or directory 则表明此位置没有 SSH 密钥对，可以在下一步创建新的 SSH 密钥对。 3. 生成新的SSH密钥 How to use ssh-keygen to generate a new SSH key: RSA、DSA、ECDSA、EdDSA 和 Ed25519 的区",492,{"yearMonth":432,"slug":565,"title":566,"date":567,"type":8,"categories":568,"tags":569,"excerpt":572,"sticky":14,"unlisted":14,"comments":15,"wordCount":573,"readingTime":59},"linux-docker-rocky-install","Rocky Linux 安装 Docker Engine","2023-03-02",[40],[252,570,571],"rocky linux","docker","1. 参考 Install Docker Engine on RHEL 2. 清理旧版本 3. 方法一：从仓库安装 3.1. 建立仓库 3.2. 安装 Docker Engine 以下方法二选一 3.2.1. 安装最新版本的 Docker Engine 3.2.2. 安装特定版本的 Docker Engine 1. 列举仓库中可用的版本 - 返回示例 1. 从第二列中选择并安装特定的版本 4. 方",131,{"yearMonth":432,"slug":575,"title":576,"date":567,"type":8,"categories":577,"tags":578,"excerpt":579,"sticky":14,"unlisted":14,"comments":15,"wordCount":580,"readingTime":46},"linux-docker-ubuntu-install","Ubuntu 安装 Docker Engine",[40],[252,464,571,465],"- 1. 清理旧版本 - 2. 安装方法 - 3. 方法一 从仓库安装 - 3.1. 建立仓库 - 3.1.1. 更新 apt 包索引，并安装相关依赖 - 3.1.2. 添加 Docker 官方 GPG 公钥 - 3.1.3. 建立仓库（stable） - 3.2. 安装 Docker Engine - 3.2.1. 安装最新版本的 Docker Engine - 3.2.2. 安装特定版本的 D",410,{"yearMonth":432,"slug":582,"title":583,"date":567,"type":8,"categories":584,"tags":585,"excerpt":587,"sticky":14,"unlisted":14,"comments":15,"wordCount":588,"readingTime":59},"linux-rocky-rustdesk-server","安装 RustDesk 服务器 (适用 Rocky Linux, CentOS, RHEL 系列发行版)",[40],[252,570,586,571],"rustdesk","环境：Rocky Linux 9.1 1. 安装 Docker Engine - 可以参考 [[linux-docker-rocky-install]] - 英文可以参考官方文档 Install Docker Engine on RHEL 2. 安装 Docker Compose 3. 验证 Docker Compose 4. 创建 Docker Compose 配置文件 1. 创建安装\u002F运行目录",353,{"yearMonth":432,"slug":590,"title":591,"date":592,"type":8,"categories":593,"tags":594,"excerpt":595,"sticky":14,"unlisted":14,"comments":15,"wordCount":596,"readingTime":59},"blog-build-hexo","Hexo 博客搭建","2023-03-01",[10],[12,477],"参考 1. 安装 文档 | Hexo 2. 部署 | Hexo 安装 1. 安装 Git 和 NodeJS 2. 安装 hexo npm install -g hexo-cli 部署 1. 克隆 https:\u002F\u002Fgithub.com\u002Fcc01cc\u002Fcc01cc.github.io.git 2. 复制 nodemodules 目录 【金山文档】 nodemodules 3. 使用 git subtr",185,{"yearMonth":432,"slug":598,"title":599,"date":592,"type":8,"categories":600,"tags":601,"excerpt":602,"sticky":14,"unlisted":14,"comments":15,"wordCount":603,"readingTime":59},"resouce-bookRef-computer-network","Computer Networking: A Top-Down Approach",[40],[],"1. 配套 Web 站点 - Jim Kurose Homepage : - Computer Science Resources | Pearson: 2. 章节 |Chapter|Title|Link| |--|--|--| |Chapter 1| Computer Networks and the Internet| | |Chapter 2| The Application Layer| ",236,{"yearMonth":432,"slug":605,"title":606,"date":592,"type":8,"categories":607,"tags":608,"excerpt":609,"sticky":14,"unlisted":14,"comments":15,"wordCount":610,"readingTime":59},"use-linux-ubuntu-todesk","Ubuntu 安装 Todesk",[40],[464],"环境：Ubuntu 22.04 LTS 1. 更新软件源 2. 安装 x11 Ubuntu 22.04 默认使用 Wayland 图形系统，但是 Todesk 仅支持 x11 1. Debian11 与ubuntu22.04做被控端无法显示桌面 - Bug 反馈 - Powered by Discuz! 2. software installation - How to install X11\u002Fx",171,{"yearMonth":432,"slug":612,"title":612,"date":592,"type":8,"categories":613,"tags":614,"excerpt":615,"sticky":14,"unlisted":14,"comments":15,"wordCount":616,"readingTime":59},"use-word",[40],[],"Word 论文排版 |标题|链接| |--|--| |标题&大纲|BV1E5411K7By| |图片&表格|BV1iZ4y1P7wa| -->",26,{"yearMonth":618,"slug":619,"title":620,"date":621,"type":8,"categories":622,"tags":623,"excerpt":624,"sticky":14,"unlisted":14,"comments":15,"wordCount":625,"readingTime":46},"2023-02","blog-build-log","建站日志","2023-02-26",[10],[12],"2024年3月 3月23日 cn 站 v3.3 由于近期爬虫过多，爬取速率过高，频发触发腾讯云监控平台告警，故将 cn 站从 腾讯云 CDN 切换到 腾讯云 EdgeOne 设置防护。 log-build-v3.3 2024年2月 2月8日 cn 站 v3.2 - 将博客域名从 cc01cc.cn 更改为 blog.cc01cc.cn 使用 301 永久重定向。 - 开始拆分 cn 站 com 站",516,{"yearMonth":618,"slug":627,"title":627,"date":621,"type":8,"categories":628,"tags":629,"excerpt":630,"sticky":14,"unlisted":14,"comments":15,"wordCount":631,"readingTime":59},"guide-url",[40],[],"url 规范",182,{"yearMonth":618,"slug":633,"title":634,"date":635,"type":8,"categories":636,"tags":637,"excerpt":638,"sticky":14,"unlisted":14,"comments":15,"wordCount":639,"readingTime":59},"blog-todo","博客规划","2023-02-25",[10],[388,12],"架构规划 - [ ] 【暂缓】将博客从 「云服务器ECS」 迁移到 「Serverless 应用引擎」 - [ ] 在「Serverless 应用引擎」创建博客相关应用 风险控制 - [X] 风险预警 - [ ] 风险不停机处置方案（DCDN, ECS） - [ ] 更换 CDN 服务商以及 WAF 提供商 - [ ] 添加阿里云云监控回调函数 配置规划 配置指南 | Hexo Fluid 用户手",119,{"yearMonth":618,"slug":641,"title":642,"date":643,"type":8,"categories":644,"tags":645,"excerpt":646,"sticky":14,"unlisted":14,"comments":15,"wordCount":46,"readingTime":59},"Hello-World","Hello World","2023-02-16",[40],[],"Hello World! -->",{"yearMonth":648,"slug":649,"title":649,"date":650,"type":8,"categories":651,"tags":652,"excerpt":654,"sticky":14,"unlisted":14,"comments":15,"wordCount":655,"readingTime":59},"2023-01","blog-init-hexo","2023-01-30",[10],[653,477,12],"init","这两天在考虑将博客从 Hugo 迁移到 Hexo；看了网上许多文章都是从 Hexo 迁移到 Hugo，感觉我在逆向行驶，当初选择 Hugo 的主要原因是： 1. Hugo 运行和构建速度快 2. Hugo 有庞大的用户基础 虽然主题和一些细节上有些不太满意的地方，但原先考虑搭建博客之后慢慢地调整，但一段时间评估下来，短期内并无闲余去优化。而 Hexo 在文档和主题以及主题的文档上在浅看之后都相对满",261,{"yearMonth":657,"slug":658,"title":658,"date":659,"type":8,"categories":660,"tags":661,"excerpt":662,"sticky":14,"unlisted":14,"comments":15,"wordCount":663,"readingTime":59},"2022-12","log-life-20221226","2022-12-26",[231],[233],"从 21 日起，到今天（26日）大致一周，我经历各种颠簸（地理、生理、心理） - 地理上：在各个酒店之间流转，从车站旁的酒店，到考场旁的酒店，到家旁边的酒店 - 生理上：21 日，室友 covid-19 单管阳性，从 21 日晚间开始，我开始四肢酸痛，头晕 - 21日晚间 四肢酸痛，头晕（有时会短暂失去意识） - 22日 头痛 + 眼睛胀痛（最难受的时刻） - 23日 头晕 + 咳嗽 - 24日 ",263,{"yearMonth":657,"slug":665,"title":666,"date":667,"type":8,"categories":668,"tags":669,"excerpt":670,"sticky":14,"unlisted":14,"comments":15,"wordCount":671,"readingTime":59},"use-conda-tensorflow","安装 tensorflow GPU（使用 conda）","2022-12-06",[352],[352,536,465],"环境：windows 11 1. 快速开始 运行以下命令，直接新建一个包含 tensorflow (gpu) 以及其他常用库的新环境。 2. 「方法一」半自动安装 - 先安装 cudnn 和 cudatoolkit 包，再安装 tensorflow 包 3. 「方法二」全自动安装 - 缺点是版本相对 pypi 稍低 - 如：目前 pypi 版本为 2.8，conda 的版本为 2.6 - cond",190,{"yearMonth":673,"slug":674,"title":675,"date":676,"type":8,"categories":677,"tags":678,"excerpt":680,"sticky":14,"unlisted":14,"comments":15,"wordCount":681,"readingTime":59},"2022-11","java-redis-jedis","jedis","2022-11-19",[40],[136,679,675],"redis","Java Redis Jedis",35,{"yearMonth":673,"slug":683,"title":684,"date":685,"type":8,"categories":686,"tags":687,"excerpt":688,"sticky":14,"unlisted":14,"comments":15,"wordCount":689,"readingTime":59},"use-conda-mamba","使用 mamba 提速 Conda","2022-11-16",[352],[352,536,465],"1. 介绍 GitHub - mamba-org\u002Fmamba: The Fast Cross-Platform Package Manager: mamba 是 Conda 包管理器的 C++ 重新实现 - 使用多线程并行下载存储库数据和包文件 - 使用 libsolv 加速处理依赖关系 - 为了提高效率，mamba 的核心部分使用 C++ 实现的 - 为了提高兼容性，mamba 使用与 Cond",275,{"yearMonth":673,"slug":691,"title":691,"date":692,"type":8,"categories":693,"tags":694,"excerpt":696,"sticky":14,"unlisted":14,"comments":15,"wordCount":697,"readingTime":46},"blog-init-hugo","2022-11-13",[10],[653,695,12],"hugo","这是使用 Hugo 建立本站的第一篇文章。 今日是 2022 年 11 月 13 日。 历程 之前也尝试过使用 Jekyll 搭建博客，当初因为 Jekyll 是 GitHub 推荐，同时有着庞大的用户基础，所以就选择了它。但是尝试了没多久就慢慢停滞了，主要原因： - 我自己在其他平台也有博文，博客定位不清，博客搭建和维护的动力不足。 - 但是由于当初能力有限，Jekyll 大量的纯英文文档阅读有",550,{"yearMonth":699,"slug":700,"title":700,"date":701,"type":8,"categories":702,"tags":703,"excerpt":704,"sticky":14,"unlisted":14,"comments":15,"wordCount":705,"readingTime":59},"2022-06","use-github","2022-06-06",[40],[],"使用 GitHub 的一些小技巧",88,{"yearMonth":699,"slug":707,"title":708,"date":709,"type":8,"categories":710,"tags":711,"excerpt":712,"sticky":14,"unlisted":14,"comments":15,"wordCount":713,"readingTime":59},"java-yaml","java 读取 yaml","2022-06-04",[40],[],"1. pom.xml 2. 文件结构 3. config.yml yaml 中的层级关系，转化到 Java 中，类似于类的包裹 4. Main.java 5. Config.java 6. Qq\u002FFeishu\u002FDingtalk.java 以 Qq.java 为例 7. 注意点 1. yaml 中 @ 等字符，可以使用单双引号包裹 2. yaml 区分大小写 8. 参考 1. YAML file r",76,{"yearMonth":715,"slug":716,"title":716,"date":717,"type":8,"categories":718,"tags":719,"excerpt":721,"sticky":14,"unlisted":14,"comments":15,"wordCount":722,"readingTime":59},"2022-05","blog-init-jekyll","2022-05-31",[10],[653,720,12],"jekyll","Jekyll 目录结构 加载 liquid 如果需要让 jekyll 为页面加载 liquid 需要在头部使用 博文链接 Tags Filters | Jekyll • Simple, blog-aware, static sites: 博文使用 post_url 标签引用链接 参考 Setup | Jekyll • Simple, blog-aware, static sites -->",60,{"yearMonth":715,"slug":724,"title":724,"date":725,"type":8,"categories":726,"tags":727,"excerpt":728,"sticky":14,"unlisted":14,"comments":15,"wordCount":520,"readingTime":59},"initial-blog-jekyll","2022-05-30",[40],[],"第一篇博客（jekyll 创建）",1786302335590]