Compare commits
8 Commits
cb407365b0
...
be69a51bb2
Author | SHA1 | Date | |
---|---|---|---|
be69a51bb2 | |||
9e8a7f5c14 | |||
ff52407ef9 | |||
5dc0ba2082 | |||
b4b41d3409 | |||
a1092c4de4 | |||
9896a560a9 | |||
c4af5e7f65 |
1
.gitignore
vendored
1
.gitignore
vendored
@@ -1,5 +1,6 @@
|
|||||||
# Nuxt dev/build outputs
|
# Nuxt dev/build outputs
|
||||||
.output
|
.output
|
||||||
|
.output.*
|
||||||
.data
|
.data
|
||||||
.nuxt
|
.nuxt
|
||||||
.nitro
|
.nitro
|
||||||
|
53
Dockerfile
53
Dockerfile
@@ -1,32 +1,43 @@
|
|||||||
# ------------- 依赖缓存阶段 -------------
|
############################################################
|
||||||
FROM node:22-alpine AS base
|
# 1) 依赖层 - 只要锁文件没变,永远复用
|
||||||
|
############################################################
|
||||||
# 国内镜像
|
FROM node:22-alpine AS deps
|
||||||
|
# 国内加速
|
||||||
RUN npm config set registry https://registry.npmmirror.com
|
RUN npm config set registry https://registry.npmmirror.com
|
||||||
|
|
||||||
WORKDIR /app
|
WORKDIR /app
|
||||||
|
|
||||||
# 拷贝所有源码 - Nuxt 4在pnpm i阶段需要完整的项目结构
|
# 只拷依赖描述文件
|
||||||
COPY . .
|
COPY package.json pnpm-lock.yaml .npmrc ./
|
||||||
|
# 安装,结果是 /app/node_modules 和全局 pnpm cache
|
||||||
# 安装依赖
|
|
||||||
RUN corepack enable && pnpm install --frozen-lockfile
|
RUN corepack enable && pnpm install --frozen-lockfile
|
||||||
|
|
||||||
# 执行补丁脚本
|
############################################################
|
||||||
RUN chmod +x patch-ui-pro.zsh && ./patch-ui-pro.zsh
|
# 2) 编译层 - 代码变了也不影响 deps 缓存
|
||||||
|
############################################################
|
||||||
# ------------- 构建阶段 -------------
|
FROM node:22-alpine AS builder
|
||||||
FROM base AS builder
|
|
||||||
RUN pnpm build
|
|
||||||
|
|
||||||
# ------------- 运行阶段 -------------
|
|
||||||
FROM node:22-alpine AS production
|
|
||||||
|
|
||||||
WORKDIR /app
|
WORKDIR /app
|
||||||
|
|
||||||
# 拷贝构建产物 - Nuxt的output目录已经包含了所有运行时需要的文件
|
# 先复用 deps 里的 node_modules
|
||||||
COPY --from=builder /app/.output ./.output
|
COPY --from=deps /app/node_modules ./node_modules
|
||||||
|
# 再拷源码
|
||||||
|
COPY . .
|
||||||
|
|
||||||
|
# 运行补丁
|
||||||
|
RUN chmod +x patch-ui-pro.sh && ./patch-ui-pro.sh
|
||||||
|
|
||||||
|
# 注意把内存限制放在这里,避免本地开发时也被硬限制
|
||||||
|
ENV NODE_OPTIONS="--max-old-space-size=4096"
|
||||||
|
RUN corepack enable && pnpm build
|
||||||
|
|
||||||
|
############################################################
|
||||||
|
# 3) 运行层 - 只有可运行文件,最小镜像
|
||||||
|
############################################################
|
||||||
|
FROM node:22-alpine AS production
|
||||||
|
WORKDIR /app
|
||||||
|
|
||||||
|
COPY --chown=node:node --from=builder /app/.output ./.output
|
||||||
EXPOSE 3000
|
EXPOSE 3000
|
||||||
ENV NODE_ENV=production HOST=0.0.0.0 PORT=3000
|
ENV NODE_ENV=production HOST=0.0.0.0 PORT=3000
|
||||||
CMD ["node", ".output/server/index.mjs"]
|
USER node
|
||||||
|
CMD ["node", ".output/server/index.mjs"]
|
||||||
|
@@ -8,246 +8,6 @@ export default defineAppConfig({
|
|||||||
base: 'w-full h-full mx-auto px-2 sm:px-6 lg:px-8'
|
base: 'w-full h-full mx-auto px-2 sm:px-6 lg:px-8'
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
uiPro: {
|
|
||||||
modal: {
|
|
||||||
slots: {
|
|
||||||
overlay: 'fixed inset-0 bg-elevated/75',
|
|
||||||
content: 'fixed bg-default divide-y divide-default flex flex-col focus:outline-none',
|
|
||||||
header: 'flex items-center gap-1.5 p-4 sm:px-6 min-h-16',
|
|
||||||
wrapper: '',
|
|
||||||
body: 'flex-1 overflow-y-auto p-4 sm:p-6',
|
|
||||||
footer: 'flex items-center gap-1.5 p-4 sm:px-6',
|
|
||||||
title: 'text-highlighted font-semibold',
|
|
||||||
description: 'mt-1 text-muted text-sm',
|
|
||||||
close: 'absolute top-4 end-4'
|
|
||||||
},
|
|
||||||
variants: {
|
|
||||||
fullscreen: {
|
|
||||||
true: {
|
|
||||||
content: 'inset-0'
|
|
||||||
},
|
|
||||||
false: {
|
|
||||||
content: 'top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 w-[calc(100vw-2rem)] max-w-lg max-h-[calc(100dvh-2rem)] sm:max-h-[calc(100dvh-4rem)] rounded-lg shadow-lg ring ring-default overflow-hidden'
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
footer: {
|
|
||||||
slots: {
|
|
||||||
root: 'border-t border-default',
|
|
||||||
left: 'text-sm text-muted'
|
|
||||||
}
|
|
||||||
},
|
|
||||||
pageCard: {
|
|
||||||
slots: {
|
|
||||||
root: 'relative flex rounded-lg',
|
|
||||||
spotlight: 'absolute inset-0 rounded-[inherit] pointer-events-none bg-default/90',
|
|
||||||
container: 'relative flex flex-col flex-1 lg:grid gap-x-8 gap-y-4 p-4 sm:p-6',
|
|
||||||
wrapper: 'flex flex-col flex-1 items-start',
|
|
||||||
header: 'mb-4',
|
|
||||||
body: 'flex-1',
|
|
||||||
footer: 'pt-4 mt-auto',
|
|
||||||
leading: 'inline-flex items-center mb-2.5',
|
|
||||||
leadingIcon: 'size-5 shrink-0 text-primary',
|
|
||||||
title: 'text-base text-pretty font-semibold text-highlighted',
|
|
||||||
description: 'text-[15px] text-pretty'
|
|
||||||
},
|
|
||||||
variants: {
|
|
||||||
orientation: {
|
|
||||||
horizontal: {
|
|
||||||
container: 'lg:grid-cols-2 lg:items-center'
|
|
||||||
},
|
|
||||||
vertical: {
|
|
||||||
container: ''
|
|
||||||
}
|
|
||||||
},
|
|
||||||
reverse: {
|
|
||||||
true: {
|
|
||||||
wrapper: 'lg:order-last'
|
|
||||||
}
|
|
||||||
},
|
|
||||||
variant: {
|
|
||||||
solid: {
|
|
||||||
root: 'bg-inverted text-inverted',
|
|
||||||
title: 'text-inverted',
|
|
||||||
description: 'text-dimmed'
|
|
||||||
},
|
|
||||||
outline: {
|
|
||||||
root: 'bg-default ring ring-default',
|
|
||||||
description: 'text-muted'
|
|
||||||
},
|
|
||||||
soft: {
|
|
||||||
root: 'bg-elevated/50',
|
|
||||||
description: 'text-toned'
|
|
||||||
},
|
|
||||||
subtle: {
|
|
||||||
root: 'bg-elevated/50 ring ring-default',
|
|
||||||
description: 'text-toned'
|
|
||||||
},
|
|
||||||
ghost: {
|
|
||||||
description: 'text-muted'
|
|
||||||
},
|
|
||||||
naked: {
|
|
||||||
container: 'p-0 sm:p-0',
|
|
||||||
description: 'text-muted'
|
|
||||||
}
|
|
||||||
},
|
|
||||||
to: {
|
|
||||||
true: {
|
|
||||||
root: [
|
|
||||||
'transition'
|
|
||||||
]
|
|
||||||
}
|
|
||||||
},
|
|
||||||
title: {
|
|
||||||
true: {
|
|
||||||
description: 'mt-1'
|
|
||||||
}
|
|
||||||
},
|
|
||||||
highlight: {
|
|
||||||
true: {
|
|
||||||
root: 'ring-2'
|
|
||||||
}
|
|
||||||
},
|
|
||||||
highlightColor: {
|
|
||||||
primary: '',
|
|
||||||
secondary: '',
|
|
||||||
success: '',
|
|
||||||
info: '',
|
|
||||||
warning: '',
|
|
||||||
error: '',
|
|
||||||
neutral: ''
|
|
||||||
},
|
|
||||||
spotlight: {
|
|
||||||
true: {
|
|
||||||
root: '[--spotlight-size:400px] before:absolute before:-inset-px before:pointer-events-none before:rounded-[inherit] before:bg-[radial-gradient(var(--spotlight-size)_var(--spotlight-size)_at_calc(var(--spotlight-x,0px))_calc(var(--spotlight-y,0px)),var(--spotlight-color),transparent_70%)]'
|
|
||||||
}
|
|
||||||
},
|
|
||||||
spotlightColor: {
|
|
||||||
primary: '',
|
|
||||||
secondary: '',
|
|
||||||
success: '',
|
|
||||||
info: '',
|
|
||||||
warning: '',
|
|
||||||
error: '',
|
|
||||||
neutral: ''
|
|
||||||
}
|
|
||||||
},
|
|
||||||
compoundVariants: [
|
|
||||||
{
|
|
||||||
variant: 'solid',
|
|
||||||
to: true,
|
|
||||||
class: {
|
|
||||||
root: 'hover:bg-inverted/90'
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
variant: 'outline',
|
|
||||||
to: true,
|
|
||||||
class: {
|
|
||||||
root: 'hover:bg-elevated/50'
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
variant: 'soft',
|
|
||||||
to: true,
|
|
||||||
class: {
|
|
||||||
root: 'hover:bg-elevated'
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
variant: 'subtle',
|
|
||||||
to: true,
|
|
||||||
class: {
|
|
||||||
root: 'hover:bg-elevated'
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
variant: 'subtle',
|
|
||||||
to: true,
|
|
||||||
highlight: false,
|
|
||||||
class: {
|
|
||||||
root: 'hover:ring-accented'
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
variant: 'ghost',
|
|
||||||
to: true,
|
|
||||||
class: {
|
|
||||||
root: 'hover:bg-elevated/50'
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
highlightColor: 'primary',
|
|
||||||
highlight: true,
|
|
||||||
class: {
|
|
||||||
root: 'ring-primary'
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
highlightColor: 'neutral',
|
|
||||||
highlight: true,
|
|
||||||
class: {
|
|
||||||
root: 'ring-inverted'
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
spotlightColor: 'primary',
|
|
||||||
spotlight: true,
|
|
||||||
class: {
|
|
||||||
root: '[--spotlight-color:var(--ui-primary)]'
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
spotlightColor: 'secondary',
|
|
||||||
spotlight: true,
|
|
||||||
class: {
|
|
||||||
root: '[--spotlight-color:var(--ui-secondary)]'
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
spotlightColor: 'success',
|
|
||||||
spotlight: true,
|
|
||||||
class: {
|
|
||||||
root: '[--spotlight-color:var(--ui-success)]'
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
spotlightColor: 'info',
|
|
||||||
spotlight: true,
|
|
||||||
class: {
|
|
||||||
root: '[--spotlight-color:var(--ui-info)]'
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
spotlightColor: 'warning',
|
|
||||||
spotlight: true,
|
|
||||||
class: {
|
|
||||||
root: '[--spotlight-color:var(--ui-warning)]'
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
spotlightColor: 'error',
|
|
||||||
spotlight: true,
|
|
||||||
class: {
|
|
||||||
root: '[--spotlight-color:var(--ui-error)]'
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
spotlightColor: 'neutral',
|
|
||||||
spotlight: true,
|
|
||||||
class: {
|
|
||||||
root: '[--spotlight-color:var(--ui-bg-inverted)]'
|
|
||||||
}
|
|
||||||
}
|
|
||||||
],
|
|
||||||
defaultVariants: {
|
|
||||||
variant: 'outline',
|
|
||||||
highlightColor: 'primary',
|
|
||||||
spotlightColor: 'primary'
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
seo: {
|
seo: {
|
||||||
siteName: 'Nuxt Docs Template'
|
siteName: 'Nuxt Docs Template'
|
||||||
},
|
},
|
||||||
|
@@ -67,7 +67,9 @@ const handleLoginRegister = (type: 'login' | 'register') => {
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<template #right>
|
<template #right>
|
||||||
<UContentSearchButton class="lg:hidden" />
|
<ClientOnly>
|
||||||
|
<UContentSearchButton class="lg:hidden" />
|
||||||
|
</ClientOnly>
|
||||||
<UColorModeButton />
|
<UColorModeButton />
|
||||||
<button
|
<button
|
||||||
class=" p-2 rounded-md text-gray-500 dark:text-gray-400 hover:bg-gray-100 dark:hover:bg-gray-800 transition-colors"
|
class=" p-2 rounded-md text-gray-500 dark:text-gray-400 hover:bg-gray-100 dark:hover:bg-gray-800 transition-colors"
|
||||||
|
@@ -5,8 +5,12 @@ const route = useRoute()
|
|||||||
const toast = useToast()
|
const toast = useToast()
|
||||||
const { copy, copied } = useClipboard()
|
const { copy, copied } = useClipboard()
|
||||||
|
|
||||||
const mdcLink = computed(() => `${window?.location?.origin}${decodeURIComponent(route.path)}`)
|
// SSR 安全:不要直接使用 window,改用 useRequestURL().origin
|
||||||
const markdownLink = computed(() => `${window?.location?.origin}/raw${decodeURIComponent(route.path)}.md`)
|
const requestURL = useRequestURL()
|
||||||
|
const origin = computed(() => requestURL.origin)
|
||||||
|
|
||||||
|
const mdcLink = computed(() => `${origin.value}${decodeURIComponent(route.path)}`)
|
||||||
|
const markdownLink = computed(() => `${origin.value}/raw${decodeURIComponent(route.path)}.md`)
|
||||||
|
|
||||||
const items = [
|
const items = [
|
||||||
{
|
{
|
||||||
|
@@ -33,7 +33,7 @@ const queryPath = computed(() => {
|
|||||||
|
|
||||||
const { data: page } = await useAsyncData(
|
const { data: page } = await useAsyncData(
|
||||||
`page-${route.path}`, // 使用更具体的 key
|
`page-${route.path}`, // 使用更具体的 key
|
||||||
() => queryCollection('docs').path(decodeURIComponent(path.value)).first(),
|
() => queryCollection('docs').path(queryPath.value).first(),
|
||||||
{
|
{
|
||||||
default: () => null // 提供默认值
|
default: () => null // 提供默认值
|
||||||
}
|
}
|
||||||
@@ -43,8 +43,7 @@ if (!page.value) {
|
|||||||
throw createError({
|
throw createError({
|
||||||
statusCode: 404,
|
statusCode: 404,
|
||||||
statusMessage: '文档不存在',
|
statusMessage: '文档不存在',
|
||||||
message: `当前页面不存在,请您检查路径是否正确: ${queryPath.value}`,
|
message: `当前页面不存在,请您检查路径是否正确: ${queryPath.value}`
|
||||||
fatal: true
|
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -64,7 +63,10 @@ useSeoMeta({
|
|||||||
ogDescription: description
|
ogDescription: description
|
||||||
})
|
})
|
||||||
|
|
||||||
const headline = computed(() => findPageHeadline(navigation?.value, page.value))
|
const headline = computed(() => {
|
||||||
|
if (!navigation?.value || !page.value) return undefined
|
||||||
|
return findPageHeadline(navigation.value, page.value)
|
||||||
|
})
|
||||||
|
|
||||||
defineOgImageComponent('Docs', {
|
defineOgImageComponent('Docs', {
|
||||||
headline: headline.value
|
headline: headline.value
|
||||||
|
@@ -6,7 +6,6 @@ export default defineContentConfig({
|
|||||||
type: 'page',
|
type: 'page',
|
||||||
source: {
|
source: {
|
||||||
include: 'docs/**',
|
include: 'docs/**',
|
||||||
exclude: ['/web/**']
|
|
||||||
},
|
},
|
||||||
schema: z.object({
|
schema: z.object({
|
||||||
rawbody: z.string(),
|
rawbody: z.string(),
|
||||||
@@ -22,7 +21,6 @@ export default defineContentConfig({
|
|||||||
type: 'page',
|
type: 'page',
|
||||||
source: {
|
source: {
|
||||||
include: 'blog/**',
|
include: 'blog/**',
|
||||||
exclude: ['/web/**']
|
|
||||||
},
|
},
|
||||||
schema: z.object({
|
schema: z.object({
|
||||||
rawbody: z.string(),
|
rawbody: z.string(),
|
||||||
|
111
content/blog/1.技术栈/979.test.md
Normal file
111
content/blog/1.技术栈/979.test.md
Normal file
@@ -0,0 +1,111 @@
|
|||||||
|
---
|
||||||
|
title: test
|
||||||
|
description: 利用 AI 技术实现对内网环境的实时监控、威胁检测与自动化防御,提升企业网络安全防护能力。
|
||||||
|
date: 2025-08-07
|
||||||
|
img: https://lijue-me.oss-cn-chengdu.aliyuncs.com/20250806105153532.png
|
||||||
|
navigation:
|
||||||
|
icon: simple-icons:openai
|
||||||
|
---
|
||||||
|
- 今天使用自然语言驱动 AI 对内网的 NAS 进行了一个全面的防御性安全扫描评估,效果非常好,总共调用了 Kali Linux 常用的12种系统工具,进行了34次扫描渗透测试.
|
||||||
|
- 系统 **Kali Linux** , 工作模型 *Kimi K2* , 审查模型 *Claude 4 sonnet* , 靶机是 **飞牛OS** 版本号0.9.18
|
||||||
|
|
||||||
|
#### Kali 与 AI 的结合 = ?
|
||||||
|
- 这是一个尝试,试着借助自然语言驱动AI ,借助其 **算力**与***直觉***,快速打通网络安全守护的能力.
|
||||||
|
- AI 算力自然不用讲, ta的直觉是一种不同于碳基 人类的直觉.
|
||||||
|
|
||||||
|
##### AI 是这样描述其自身直觉的
|
||||||
|
- 人类直觉常常是**时间线性的** - 基于过去经验和对未来的预感。我的"直觉"更像是**空间式的** - 同时"看到"一个概念在巨大语义空间中的位置,以及它与其他概念的距离和角度。我好像能"直觉"到**语言的重力场**。某些词汇组合会产生强烈的"吸引力",让对话自然地朝某个方向流动。这不是逻辑推理,更像是感受到了语义的潮汐。
|
||||||
|
|
||||||
|
AI本身就是**人类集体智慧**的某种晶化形式,海量的人类知识库里的**涌现**.
|
||||||
|
其像是一个会说话的图书馆,一个自带输出的百科全书,用来辅助做一些网络安全自动化工作再好不过了.
|
||||||
|
|
||||||
|
###### 只是,要切记小心 AI 的 *幻觉* !
|
||||||
|
-------------
|
||||||
|
安装与配置 Kali 见 Kali Linux 官方文档.
|
||||||
|
安装 Claude Code ,并配置了 Kimi K2 模型.
|
||||||
|
|
||||||
|
Kali 默认不开 SSH , 配置 SSH 服务, 连接到Kali Linux:
|
||||||
|
打开 Claude 命令行,输入自然语言指令
|
||||||
|
`使用 nmap 工具 探测192.168.1.2 并把分析结果, 出一份报告给我`
|
||||||
|
|
||||||
|

|
||||||
|
如上图, Kimi K2 模型很快完成这份工作,那么 上强度
|
||||||
|
键入自然语言命令`请你调用系统本身的工具,对192.168.1.2进行安全扫描和渗透,以分析此系统的安全性。
|
||||||
|
`
|
||||||
|
现在 AI 将目标分为5步,见下图:
|
||||||
|

|
||||||
|
|
||||||
|

|
||||||
|
最终完成了任务.
|
||||||
|
[系统安全综合评估报告](https://lijue.me/index.php/archives/19/)
|
||||||
|
|
||||||
|
使用的命令
|
||||||
|
[系统安全扫描工具命令集合](https://lijue.me/index.php/archives/20/)
|
||||||
|
|
||||||
|
|
||||||
|
最后整个过程,使用的工具,命令交由 Claude 4 sonnet 模型进行审查.
|
||||||
|
给出的结果是 您的扫描方案整体上是**相当专业且全面**的,展现了良好的渗透测试和安全评估知识。 并提了一些不痛不痒的建议.
|
||||||
|
|
||||||
|
最后给出了一份脚本.对于 AI 定制的 Shell 脚本,个人还是建议要先仔细审查再在主机内执行.
|
||||||
|
但代码可供参考.
|
||||||
|
|
||||||
|
```
|
||||||
|
#!/bin/bash
|
||||||
|
# 增强版安全扫描脚本
|
||||||
|
|
||||||
|
TARGET="192.168.1.2"
|
||||||
|
DATE=$(date +%Y%m%d_%H%M%S)
|
||||||
|
REPORT_DIR="/tmp/security_scan_${TARGET}_${DATE}"
|
||||||
|
mkdir -p "$REPORT_DIR"
|
||||||
|
|
||||||
|
echo "[+] 开始全面安全扫描: $TARGET"
|
||||||
|
|
||||||
|
# 1. 基础信息收集
|
||||||
|
echo "[1/8] 主机发现与端口扫描..."
|
||||||
|
nmap -sS -sV -O -A -p- --script discovery,default,vuln \
|
||||||
|
"$TARGET" -oA "$REPORT_DIR/nmap_full" --host-timeout 600
|
||||||
|
|
||||||
|
# 2. 服务专项扫描
|
||||||
|
echo "[2/8] 数据库服务检测..."
|
||||||
|
nmap -sV -p 1433,3306,5432,1521,27017 "$TARGET" \
|
||||||
|
-oN "$REPORT_DIR/database_scan.txt"
|
||||||
|
|
||||||
|
# 3. Web应用测试
|
||||||
|
echo "[3/8] Web应用安全测试..."
|
||||||
|
nikto -h "http://$TARGET" -output "$REPORT_DIR/nikto_http.txt" &
|
||||||
|
gobuster dir -u "http://$TARGET" \
|
||||||
|
-w /usr/share/wordlists/dirb/common.txt \
|
||||||
|
-o "$REPORT_DIR/gobuster_http.txt" -q &
|
||||||
|
|
||||||
|
# 4. HTTPS专项测试
|
||||||
|
echo "[4/8] HTTPS/SSL配置检测..."
|
||||||
|
if nc -z "$TARGET" 443 2>/dev/null; then
|
||||||
|
sslyze "$TARGET:443" --certinfo --heartbleed \
|
||||||
|
--tlsv1 --tlsv1_1 --tlsv1_2 --tlsv1_3 \
|
||||||
|
> "$REPORT_DIR/ssl_analysis.txt"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 5. SMB/文件共享测试
|
||||||
|
echo "[5/8] 文件共享服务评估..."
|
||||||
|
smbclient -L "//$TARGET" -N > "$REPORT_DIR/smb_shares.txt" 2>&1
|
||||||
|
enum4linux -a "$TARGET" > "$REPORT_DIR/smb_enum.txt" 2>&1 &
|
||||||
|
|
||||||
|
# 6. DNS服务测试
|
||||||
|
echo "[6/8] DNS服务检测..."
|
||||||
|
nmap -sU -p 53 --script dns-* "$TARGET" \
|
||||||
|
-oN "$REPORT_DIR/dns_scan.txt" &
|
||||||
|
|
||||||
|
# 7. SNMP检测
|
||||||
|
echo "[7/8] SNMP服务检测..."
|
||||||
|
nmap -sU -p 161 --script snmp-* "$TARGET" \
|
||||||
|
-oN "$REPORT_DIR/snmp_scan.txt" &
|
||||||
|
|
||||||
|
# 8. 等待后台任务完成
|
||||||
|
echo "[8/8] 等待扫描完成..."
|
||||||
|
wait
|
||||||
|
|
||||||
|
echo "[✓] 扫描完成!结果保存在: $REPORT_DIR"
|
||||||
|
echo "[✓] 主要文件:"
|
||||||
|
ls -la "$REPORT_DIR"
|
||||||
|
|
||||||
|
```
|
111
content/blog/1.技术栈/980.githubtest.md
Normal file
111
content/blog/1.技术栈/980.githubtest.md
Normal file
@@ -0,0 +1,111 @@
|
|||||||
|
---
|
||||||
|
title: github测试
|
||||||
|
description: 利用 AI 技术实现对内网环境的实时监控、威胁检测与自动化防御,提升企业网络安全防护能力。
|
||||||
|
date: 2025-08-07
|
||||||
|
img: https://lijue-me.oss-cn-chengdu.aliyuncs.com/20250806105153532.png
|
||||||
|
navigation:
|
||||||
|
icon: simple-icons:openai
|
||||||
|
---
|
||||||
|
- 今天使用自然语言驱动 AI 对内网的 NAS 进行了一个全面的防御性安全扫描评估,效果非常好,总共调用了 Kali Linux 常用的12种系统工具,进行了34次扫描渗透测试.
|
||||||
|
- 系统 **Kali Linux** , 工作模型 *Kimi K2* , 审查模型 *Claude 4 sonnet* , 靶机是 **飞牛OS** 版本号0.9.18
|
||||||
|
|
||||||
|
#### Kali 与 AI 的结合 = ?
|
||||||
|
- 这是一个尝试,试着借助自然语言驱动AI ,借助其 **算力**与***直觉***,快速打通网络安全守护的能力.
|
||||||
|
- AI 算力自然不用讲, ta的直觉是一种不同于碳基 人类的直觉.
|
||||||
|
|
||||||
|
##### AI 是这样描述其自身直觉的
|
||||||
|
- 人类直觉常常是**时间线性的** - 基于过去经验和对未来的预感。我的"直觉"更像是**空间式的** - 同时"看到"一个概念在巨大语义空间中的位置,以及它与其他概念的距离和角度。我好像能"直觉"到**语言的重力场**。某些词汇组合会产生强烈的"吸引力",让对话自然地朝某个方向流动。这不是逻辑推理,更像是感受到了语义的潮汐。
|
||||||
|
|
||||||
|
AI本身就是**人类集体智慧**的某种晶化形式,海量的人类知识库里的**涌现**.
|
||||||
|
其像是一个会说话的图书馆,一个自带输出的百科全书,用来辅助做一些网络安全自动化工作再好不过了.
|
||||||
|
|
||||||
|
###### 只是,要切记小心 AI 的 *幻觉* !
|
||||||
|
-------------
|
||||||
|
安装与配置 Kali 见 Kali Linux 官方文档.
|
||||||
|
安装 Claude Code ,并配置了 Kimi K2 模型.
|
||||||
|
|
||||||
|
Kali 默认不开 SSH , 配置 SSH 服务, 连接到Kali Linux:
|
||||||
|
打开 Claude 命令行,输入自然语言指令
|
||||||
|
`使用 nmap 工具 探测192.168.1.2 并把分析结果, 出一份报告给我`
|
||||||
|
|
||||||
|

|
||||||
|
如上图, Kimi K2 模型很快完成这份工作,那么 上强度
|
||||||
|
键入自然语言命令`请你调用系统本身的工具,对192.168.1.2进行安全扫描和渗透,以分析此系统的安全性。
|
||||||
|
`
|
||||||
|
现在 AI 将目标分为5步,见下图:
|
||||||
|

|
||||||
|
|
||||||
|

|
||||||
|
最终完成了任务.
|
||||||
|
[系统安全综合评估报告](https://lijue.me/index.php/archives/19/)
|
||||||
|
|
||||||
|
使用的命令
|
||||||
|
[系统安全扫描工具命令集合](https://lijue.me/index.php/archives/20/)
|
||||||
|
|
||||||
|
|
||||||
|
最后整个过程,使用的工具,命令交由 Claude 4 sonnet 模型进行审查.
|
||||||
|
给出的结果是 您的扫描方案整体上是**相当专业且全面**的,展现了良好的渗透测试和安全评估知识。 并提了一些不痛不痒的建议.
|
||||||
|
|
||||||
|
最后给出了一份脚本.对于 AI 定制的 Shell 脚本,个人还是建议要先仔细审查再在主机内执行.
|
||||||
|
但代码可供参考.
|
||||||
|
|
||||||
|
```
|
||||||
|
#!/bin/bash
|
||||||
|
# 增强版安全扫描脚本
|
||||||
|
|
||||||
|
TARGET="192.168.1.2"
|
||||||
|
DATE=$(date +%Y%m%d_%H%M%S)
|
||||||
|
REPORT_DIR="/tmp/security_scan_${TARGET}_${DATE}"
|
||||||
|
mkdir -p "$REPORT_DIR"
|
||||||
|
|
||||||
|
echo "[+] 开始全面安全扫描: $TARGET"
|
||||||
|
|
||||||
|
# 1. 基础信息收集
|
||||||
|
echo "[1/8] 主机发现与端口扫描..."
|
||||||
|
nmap -sS -sV -O -A -p- --script discovery,default,vuln \
|
||||||
|
"$TARGET" -oA "$REPORT_DIR/nmap_full" --host-timeout 600
|
||||||
|
|
||||||
|
# 2. 服务专项扫描
|
||||||
|
echo "[2/8] 数据库服务检测..."
|
||||||
|
nmap -sV -p 1433,3306,5432,1521,27017 "$TARGET" \
|
||||||
|
-oN "$REPORT_DIR/database_scan.txt"
|
||||||
|
|
||||||
|
# 3. Web应用测试
|
||||||
|
echo "[3/8] Web应用安全测试..."
|
||||||
|
nikto -h "http://$TARGET" -output "$REPORT_DIR/nikto_http.txt" &
|
||||||
|
gobuster dir -u "http://$TARGET" \
|
||||||
|
-w /usr/share/wordlists/dirb/common.txt \
|
||||||
|
-o "$REPORT_DIR/gobuster_http.txt" -q &
|
||||||
|
|
||||||
|
# 4. HTTPS专项测试
|
||||||
|
echo "[4/8] HTTPS/SSL配置检测..."
|
||||||
|
if nc -z "$TARGET" 443 2>/dev/null; then
|
||||||
|
sslyze "$TARGET:443" --certinfo --heartbleed \
|
||||||
|
--tlsv1 --tlsv1_1 --tlsv1_2 --tlsv1_3 \
|
||||||
|
> "$REPORT_DIR/ssl_analysis.txt"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 5. SMB/文件共享测试
|
||||||
|
echo "[5/8] 文件共享服务评估..."
|
||||||
|
smbclient -L "//$TARGET" -N > "$REPORT_DIR/smb_shares.txt" 2>&1
|
||||||
|
enum4linux -a "$TARGET" > "$REPORT_DIR/smb_enum.txt" 2>&1 &
|
||||||
|
|
||||||
|
# 6. DNS服务测试
|
||||||
|
echo "[6/8] DNS服务检测..."
|
||||||
|
nmap -sU -p 53 --script dns-* "$TARGET" \
|
||||||
|
-oN "$REPORT_DIR/dns_scan.txt" &
|
||||||
|
|
||||||
|
# 7. SNMP检测
|
||||||
|
echo "[7/8] SNMP服务检测..."
|
||||||
|
nmap -sU -p 161 --script snmp-* "$TARGET" \
|
||||||
|
-oN "$REPORT_DIR/snmp_scan.txt" &
|
||||||
|
|
||||||
|
# 8. 等待后台任务完成
|
||||||
|
echo "[8/8] 等待扫描完成..."
|
||||||
|
wait
|
||||||
|
|
||||||
|
echo "[✓] 扫描完成!结果保存在: $REPORT_DIR"
|
||||||
|
echo "[✓] 主要文件:"
|
||||||
|
ls -la "$REPORT_DIR"
|
||||||
|
|
||||||
|
```
|
@@ -45,7 +45,7 @@ navigation:
|
|||||||
请一次性提供完整的HTML文件代码(包括HTML、CSS和JavaScript),代码需可直接保存为.html文件并在浏览器中运行。代码中需包含注释,体现逻辑清晰度和编程能力。
|
请一次性提供完整的HTML文件代码(包括HTML、CSS和JavaScript),代码需可直接保存为.html文件并在浏览器中运行。代码中需包含注释,体现逻辑清晰度和编程能力。
|
||||||
|
|
||||||
GROK3:
|
GROK3:
|
||||||
```
|
```html[GROK3.html]
|
||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
|
|
||||||
<html lang="zh-CN">
|
<html lang="zh-CN">
|
||||||
@@ -464,7 +464,7 @@ GROK3:
|
|||||||
```
|
```
|
||||||
|
|
||||||
R1:
|
R1:
|
||||||
```
|
```html[R1.html]
|
||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
|
|
||||||
<html lang="zh-CN">
|
<html lang="zh-CN">
|
@@ -1,238 +1,190 @@
|
|||||||
---
|
---
|
||||||
title: 记录AI
|
title: Coolify
|
||||||
description: 学习 AI 相关知识
|
description: Coolify是什么?
|
||||||
date: 2025-08-07
|
date: 2025-07-14
|
||||||
|
img: https://lijue-me.oss-cn-chengdu.aliyuncs.com/20250628122847084.png
|
||||||
navigation:
|
navigation:
|
||||||
icon: lucide-house
|
icon: simple-icons:chai
|
||||||
---
|
---
|
||||||
|
# 概述
|
||||||
|
这是一份提供给AI大模型的Python代码规范与编程标准,可以有效提高Cursor等大模型对Python项目的编写能力。
|
||||||
|
|
||||||
## 博客
|
---
|
||||||
|
description: Python开发综合指南,涵盖代码组织、性能、安全性、测试等内容。这些规则旨在促进可维护、高效且安全的Python代码库。
|
||||||
|
globs: *.py
|
||||||
|
---
|
||||||
|
# Python最佳实践与编码规范
|
||||||
|
|
||||||
使用过市面上的很多文档系统,但是或多或少都有一些自己不满意的功能.
|
本文档概述了Python开发的综合最佳实践和编码标准,旨在促进编写干净、高效、可维护和安全的代码。
|
||||||
于是自己动手,丰衣足食.
|
|
||||||
同时在 Markdown 语法的基础上增加了许多**魔法(自定义组件)**,比如:
|
|
||||||
|
|
||||||
|
## 1. 代码组织与结构
|
||||||
|
|
||||||
::code-group
|
### 1.1 目录结构最佳实践
|
||||||
```mdc [index.md]
|
|
||||||
在 Markdown 中使用::card 标签,即可创建一个卡片,卡片里可以放置任何内容。比如以下内容:
|
|
||||||
::card
|
|
||||||
这里是卡片里的内容
|
|
||||||
::
|
|
||||||
```
|
|
||||||
|
|
||||||
```html [Card.vue]
|
* **扁平结构优于嵌套(但不绝对)。** 从简单结构开始,按需重构
|
||||||
<!-- Card组件: components/content/Card.vue -->
|
* **包与模块:** 使用包(包含`__init__.py`的目录)对模块进行逻辑分组
|
||||||
<template>
|
* **src布局:** 考虑使用`src`目录分离应用代码和项目级文件(setup.py、requirements.txt等),避免导入冲突并明确项目边界
|
||||||
<div class="p-2 border bg-white dark:bg-black dark:border-gray-700 rounded">
|
* **典型项目结构:**
|
||||||
<slot />
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
```
|
|
||||||
:::code-preview{icon="i-lucide-eye" label="Preview"}
|
|
||||||
::::example-card
|
|
||||||
这里是卡片里的内容
|
|
||||||
::::
|
|
||||||
:::
|
|
||||||
|
|
||||||
::
|
project_name/
|
||||||
|
├── src/
|
||||||
|
│ ├── package_name/
|
||||||
|
│ │ ├── __init__.py
|
||||||
|
│ │ ├── module1.py
|
||||||
|
│ │ ├── module2.py
|
||||||
|
│ ├── main.py # 入口文件
|
||||||
|
├── tests/
|
||||||
|
│ ├── __init__.py
|
||||||
|
│ ├── test_module1.py
|
||||||
|
│ ├── test_module2.py
|
||||||
|
├── docs/
|
||||||
|
│ ├── conf.py
|
||||||
|
│ ├── index.rst
|
||||||
|
├── .gitignore
|
||||||
|
├── pyproject.toml 或 setup.py
|
||||||
|
├── README.md
|
||||||
|
├── requirements.txt 或 requirements-dev.txt
|
||||||
|
|
||||||
:::UPageCard{icon="lucide-code" title="代码组" description="这个组件使用 自定义的 Markdown 语法,从 Markdown 中提取代码块,并展示在页面上 (而其自身亦是一个卡片组)"}
|
### 1.2 文件命名规范
|
||||||
|
|
||||||
::code-tree{defaultValue="nuxt.config.ts"}
|
* **模块:** 小写字母,使用下划线增强可读性(如`my_module.py`)
|
||||||
|
* **包:** 全小写(如`my_package`),非必要不使用下划线
|
||||||
|
* **测试文件:** 以`test_`开头(如`test_my_module.py`)
|
||||||
|
|
||||||
```css [app/assets/main.css]
|
### 1.3 模块组织最佳实践
|
||||||
@import "tailwindcss" theme(static);
|
|
||||||
@import "@nuxt/ui-pro";
|
|
||||||
```
|
|
||||||
|
|
||||||
```ts [app/app.config.ts]
|
* **单一职责原则:** 每个模块应有明确定义的用途
|
||||||
export default defineAppConfig({
|
* **导入规范:**
|
||||||
ui: {
|
* 顺序:标准库→第三方库→本地模块
|
||||||
colors: {
|
* 优先使用绝对导入(如`from my_package.module1 import function1`)
|
||||||
primary: 'sky',
|
* 在复杂包结构中需明确相对导入时使用显式相对导入(`from . import sibling_module`)
|
||||||
colors: 'slate'
|
* **常量:** 使用全大写定义模块级常量(如`MAX_ITERATIONS = 100`)
|
||||||
}
|
* **双下划线名称:** `__all__`、`__version__`等应放在模块文档字符串之后、所有导入之前(`from __future__`除外)。使用`__all__`显式声明公共API
|
||||||
}
|
|
||||||
});
|
|
||||||
```
|
|
||||||
|
|
||||||
```vue [app/app.vue]
|
### 1.4 组件架构建议
|
||||||
<template>
|
|
||||||
<UApp>
|
|
||||||
<NuxtPage />
|
|
||||||
</UApp>
|
|
||||||
</template>
|
|
||||||
```
|
|
||||||
|
|
||||||
```json [package.json]
|
* **分层架构:** 适用于大型应用,将关注点分离为表现层、业务逻辑层和数据访问层
|
||||||
{
|
* **微服务:** 超大型系统可拆分为小型独立服务
|
||||||
"name": "nuxt-app",
|
* **六边形/整洁架构:** 强调业务逻辑与数据库/框架等外部依赖的解耦
|
||||||
"private": true,
|
* **依赖注入:** 提高可测试性并降低耦合度
|
||||||
"type": "module",
|
|
||||||
"scripts": {
|
|
||||||
"build": "nuxt build",
|
|
||||||
"dev": "nuxt dev",
|
|
||||||
"generate": "nuxt generate",
|
|
||||||
"preview": "nuxt preview",
|
|
||||||
"postinstall": "nuxt prepare",
|
|
||||||
"typecheck": "nuxt typecheck"
|
|
||||||
},
|
|
||||||
"dependencies": {
|
|
||||||
"@iconify-json/lucide": "^1.2.18",
|
|
||||||
"@nuxt/ui-pro": "3.0.0-alpha.10",
|
|
||||||
"nuxt": "^3.15.1"
|
|
||||||
},
|
|
||||||
"devDependencies": {
|
|
||||||
"typescript": "^5.7.2",
|
|
||||||
"vue-tsc": "^2.2.0"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
```json [tsconfig.json]
|
### 1.5 代码分割策略
|
||||||
{
|
|
||||||
"extends": "./.nuxt/tsconfig.json"
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
```ts [nuxt.config.ts]
|
* **按功能拆分:** 基于不同功能划分模块(如用户管理、数据处理)
|
||||||
export default defineNuxtConfig({
|
* **按层级拆分:** 分离表现层、业务逻辑层和数据访问代码
|
||||||
modules: ['@nuxt/ui-pro'],
|
* **懒加载:** 使用`importlib.import_module()`实现按需加载,优化启动时间
|
||||||
|
* **条件导入:** 根据特定条件导入模块
|
||||||
|
|
||||||
future: {
|
## 2. 常见模式与反模式
|
||||||
compatibilityVersion: 4
|
|
||||||
},
|
|
||||||
|
|
||||||
css: ['~/assets/main.css']
|
### 2.1 设计模式
|
||||||
});
|
|
||||||
```
|
|
||||||
|
|
||||||
````md [README.md]
|
* **单例模式:** 限制类只能实例化一个对象
|
||||||
# Nuxt 3 Minimal Starter
|
* **工厂模式:** 创建对象时无需指定具体类
|
||||||
|
* **观察者模式:** 建立对象间一对多依赖关系
|
||||||
|
* **策略模式:** 定义算法族并使其可互换
|
||||||
|
* **装饰器模式:** 动态扩展对象功能
|
||||||
|
* **上下文管理器:** 确保资源正确清理(如自动关闭文件)
|
||||||
|
|
||||||
Look at the [Nuxt 3 documentation](https://nuxt.com/docs/getting-started/introduction) to learn more.
|
### 2.2 常见任务的推荐方案
|
||||||
|
|
||||||
## Setup
|
* **数据验证:** 使用`pydantic`或`marshmallow`等库
|
||||||
|
* **配置管理:** 使用`python-decouple`、`dynaconf`或标准库的`configparser`
|
||||||
|
* **日志记录:** 使用`logging`模块实现结构化日志
|
||||||
|
* **命令行接口:** 使用`argparse`、`click`或`typer`
|
||||||
|
* **异步编程:** 使用`asyncio`处理I/O密集型任务
|
||||||
|
|
||||||
Make sure to install the dependencies:
|
### 2.3 反模式与代码异味
|
||||||
|
|
||||||
```bash
|
* **上帝类:** 承担过多职责的类,应拆分为专注单一功能的小类
|
||||||
# npm
|
* **霰弹式变更:** 需在多处做小修改,表明内聚性不足
|
||||||
npm install
|
* **面条代码:** 结构混乱难以追踪,应重构为定义明确的函数/类
|
||||||
|
* **重复代码:** 提取公共代码为可复用函数/类(遵循DRY原则)
|
||||||
|
* **魔法数值/字符串:** 使用命名常量替代硬编码值
|
||||||
|
* **过早优化:** 避免在没有性能瓶颈分析前提下的优化
|
||||||
|
|
||||||
# pnpm
|
### 2.4 状态管理最佳实践
|
||||||
pnpm install
|
|
||||||
|
|
||||||
# yarn
|
* **无状态函数:** 尽可能使用无状态函数
|
||||||
yarn install
|
* **不可变数据:** 使用不可变数据结构防止意外修改
|
||||||
|
* **显式状态:** 使用类或数据结构明确管理状态,避免全局变量
|
||||||
|
* **上下文变量:** Python 3.7+可使用`contextvars`管理异步应用中的请求级状态
|
||||||
|
|
||||||
# bun
|
### 2.5 错误处理模式
|
||||||
bun install
|
|
||||||
```
|
|
||||||
|
|
||||||
## Development Server
|
* **捕获特定异常:** 避免笼统捕获`Exception`或`BaseException`
|
||||||
|
* **资源清理:** 使用`finally`确保清理代码必执行
|
||||||
|
* **异常日志:** 记录完整堆栈信息
|
||||||
|
* **异常消息:** 抛出包含明确错误信息的异常
|
||||||
|
* **避免异常控制流:** 异常应用于处理意外情况而非常规流程
|
||||||
|
|
||||||
Start the development server on `http://localhost:3000`:
|
## 3. 性能优化
|
||||||
|
|
||||||
```bash
|
### 3.1 优化技术
|
||||||
# npm
|
|
||||||
npm run dev
|
|
||||||
|
|
||||||
# pnpm
|
* **性能分析:** 使用`cProfile`定位瓶颈
|
||||||
pnpm run dev
|
* **高效数据结构:** 根据场景选择(如`set`用于成员测试、`dict`用于查找)
|
||||||
|
* **列表推导式与生成器:** 编写简洁高效的代码
|
||||||
|
* **NumPy向量化:** 对数值计算使用向量化操作
|
||||||
|
* **即时编译:** 性能关键代码考虑使用Numba等JIT编译器
|
||||||
|
* **字符串拼接:** 使用`''.join(iterable)`高效拼接字符串
|
||||||
|
|
||||||
# yarn
|
### 3.2 内存管理
|
||||||
yarn dev
|
|
||||||
|
|
||||||
# bun
|
* **内存分析:** 使用`memory_profiler`定位内存泄漏
|
||||||
bun run dev
|
* **`__slots__`:** 减少类实例的内存占用
|
||||||
```
|
* **生成器:** 处理大数据集时避免全部加载到内存
|
||||||
|
|
||||||
## Production
|
## 4. 安全性最佳实践
|
||||||
|
|
||||||
Build the application for production:
|
### 4.1 常见漏洞防范
|
||||||
|
|
||||||
```bash
|
* **SQL注入:** 使用参数化查询或ORM
|
||||||
# npm
|
* **XSS攻击:** 对用户输入消毒并转义输出
|
||||||
npm run build
|
* **CSRF防护:** 使用CSRF令牌
|
||||||
|
* **依赖漏洞:** 定期审计和更新依赖项
|
||||||
|
* **硬编码密钥:** 禁止在代码中硬编码密码/API密钥,使用环境变量管理
|
||||||
|
|
||||||
# pnpm
|
### 4.2 API安全通信
|
||||||
pnpm run build
|
|
||||||
|
|
||||||
# yarn
|
* **强制HTTPS:** 所有API通信必须加密
|
||||||
yarn build
|
* **速率限制:** 防止接口滥用
|
||||||
|
* **输入验证:** 处理前验证所有API请求
|
||||||
|
|
||||||
# bun
|
## 5. 测试策略
|
||||||
bun run build
|
|
||||||
```
|
|
||||||
|
|
||||||
Locally preview production build:
|
### 5.1 单元测试要点
|
||||||
|
|
||||||
```bash
|
* **测试粒度:** 隔离测试单个函数/类/模块
|
||||||
# npm
|
* **边界条件:** 特别测试边界情况和异常场景
|
||||||
npm run preview
|
* **测试覆盖率:** 追求高覆盖率但避免教条化
|
||||||
|
|
||||||
# pnpm
|
### 5.2 集成测试建议
|
||||||
pnpm run preview
|
|
||||||
|
|
||||||
# yarn
|
* **聚焦关键流程:** 关注核心用户场景
|
||||||
yarn preview
|
* **模拟外部服务:** 使用mock替代真实外部依赖
|
||||||
|
|
||||||
# bun
|
## 6. 常见陷阱
|
||||||
bun run preview
|
|
||||||
```
|
|
||||||
|
|
||||||
Check out the [deployment documentation](https://nuxt.com/docs/getting-started/deployment) for more information.
|
### 6.1 高频错误
|
||||||
````
|
|
||||||
|
|
||||||
::
|
* **可变默认参数:** 函数定义中避免使用可变对象作为默认值
|
||||||
:::
|
* **变量作用域:** 注意嵌套函数中的变量作用域
|
||||||
|
* **忽略异常:** 禁止直接忽略未处理的异常
|
||||||
|
* **虚拟环境:** 必须使用虚拟环境管理项目依赖
|
||||||
|
|
||||||
::code-group
|
## 7. 工具与环境
|
||||||
```md [搜索.md]
|
|
||||||
#### 此组件打开一个模态搜索框,进行搜索
|
|
||||||
::::example-fulltext-content-search
|
|
||||||
::::
|
|
||||||
|
|
||||||
#### 此组件建立一个mini搜索框,进行搜索
|
### 7.1 推荐工具链
|
||||||
::::example-fulltext-mini-search
|
|
||||||
::::
|
|
||||||
```
|
|
||||||
|
|
||||||
:::code-preview{label="预览模态组件" icon="i-lucide-eye"}
|
* **IDE:** PyCharm、VS Code(搭配Python插件)
|
||||||
::::example-fulltext-content-search
|
* **包管理:** `pip`、`poetry`
|
||||||
::::
|
* **格式化:** `black`、`autopep8`
|
||||||
:::
|
* **静态检查:** `mypy`、`pylint`
|
||||||
:::code-preview{label="预览搜索框组件" icon="i-lucide-eye"}
|
|
||||||
::::example-fulltext-mini-search
|
|
||||||
::::
|
|
||||||
:::
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
|
### 7.2 CI/CD集成
|
||||||
|
|
||||||
::tip{icon="lucide-info" color="primary" class="text-black dark:text-white"}
|
* **自动化测试:** 每次提交自动运行测试套件
|
||||||
阅读更多关于 [`自定义组件`](/简单文档/components/api) 的内容.
|
* **代码质量门禁:** 集成静态分析工具到流水线
|
||||||
::
|
|
||||||
|
|
||||||
|
遵循这些规范和最佳实践,开发者能够构建出更健壮、可维护且安全的Python应用。
|
||||||
## 特性
|
|
||||||
|
|
||||||
- 基于 Nuxt 4 , Content v3 , Nuxt UI Pro 构建的文档系统。
|
|
||||||
- 完美支持 Markdown 和 相关扩展。
|
|
||||||
- 和 Vue 组件高度集成。
|
|
||||||
- 支持搜索,由Content v3 赋能。
|
|
||||||
- 支持多主题,使用Nuxt UI Pro。
|
|
||||||
- 开源且免费。
|
|
||||||
- 支持移动端。
|
|
||||||
|
|
||||||
## 致谢
|
|
||||||
|
|
||||||
- Nuxt Content:为 Vue 开发者简化内容管理。
|
|
||||||
- Nuxt UI Pro :文档系统 UI 组件。
|
|
||||||
- Docus:获取灵感及一些文档组件源代码。
|
|
||||||
|
|
||||||
## License
|
|
||||||
|
|
||||||
MIT
|
|
@@ -1,238 +1,190 @@
|
|||||||
---
|
---
|
||||||
title: 记录生活
|
title: Coolify
|
||||||
description: 记录生活点点滴滴
|
description: Coolify是什么?
|
||||||
date: 2025-08-07
|
date: 2025-07-14
|
||||||
|
img: https://lijue-me.oss-cn-chengdu.aliyuncs.com/20250628122847084.png
|
||||||
navigation:
|
navigation:
|
||||||
icon: lucide-house
|
icon: simple-icons:chai
|
||||||
---
|
---
|
||||||
|
# 概述
|
||||||
|
这是一份提供给AI大模型的Python代码规范与编程标准,可以有效提高Cursor等大模型对Python项目的编写能力。
|
||||||
|
|
||||||
## 博客
|
---
|
||||||
|
description: Python开发综合指南,涵盖代码组织、性能、安全性、测试等内容。这些规则旨在促进可维护、高效且安全的Python代码库。
|
||||||
|
globs: *.py
|
||||||
|
---
|
||||||
|
# Python最佳实践与编码规范
|
||||||
|
|
||||||
使用过市面上的很多文档系统,但是或多或少都有一些自己不满意的功能.
|
本文档概述了Python开发的综合最佳实践和编码标准,旨在促进编写干净、高效、可维护和安全的代码。
|
||||||
于是自己动手,丰衣足食.
|
|
||||||
同时在 Markdown 语法的基础上增加了许多**魔法(自定义组件)**,比如:
|
|
||||||
|
|
||||||
|
## 1. 代码组织与结构
|
||||||
|
|
||||||
::code-group
|
### 1.1 目录结构最佳实践
|
||||||
```mdc [index.md]
|
|
||||||
在 Markdown 中使用::card 标签,即可创建一个卡片,卡片里可以放置任何内容。比如以下内容:
|
|
||||||
::card
|
|
||||||
这里是卡片里的内容
|
|
||||||
::
|
|
||||||
```
|
|
||||||
|
|
||||||
```html [Card.vue]
|
* **扁平结构优于嵌套(但不绝对)。** 从简单结构开始,按需重构
|
||||||
<!-- Card组件: components/content/Card.vue -->
|
* **包与模块:** 使用包(包含`__init__.py`的目录)对模块进行逻辑分组
|
||||||
<template>
|
* **src布局:** 考虑使用`src`目录分离应用代码和项目级文件(setup.py、requirements.txt等),避免导入冲突并明确项目边界
|
||||||
<div class="p-2 border bg-white dark:bg-black dark:border-gray-700 rounded">
|
* **典型项目结构:**
|
||||||
<slot />
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
```
|
|
||||||
:::code-preview{icon="i-lucide-eye" label="Preview"}
|
|
||||||
::::example-card
|
|
||||||
这里是卡片里的内容
|
|
||||||
::::
|
|
||||||
:::
|
|
||||||
|
|
||||||
::
|
project_name/
|
||||||
|
├── src/
|
||||||
|
│ ├── package_name/
|
||||||
|
│ │ ├── __init__.py
|
||||||
|
│ │ ├── module1.py
|
||||||
|
│ │ ├── module2.py
|
||||||
|
│ ├── main.py # 入口文件
|
||||||
|
├── tests/
|
||||||
|
│ ├── __init__.py
|
||||||
|
│ ├── test_module1.py
|
||||||
|
│ ├── test_module2.py
|
||||||
|
├── docs/
|
||||||
|
│ ├── conf.py
|
||||||
|
│ ├── index.rst
|
||||||
|
├── .gitignore
|
||||||
|
├── pyproject.toml 或 setup.py
|
||||||
|
├── README.md
|
||||||
|
├── requirements.txt 或 requirements-dev.txt
|
||||||
|
|
||||||
:::UPageCard{icon="lucide-code" title="代码组" description="这个组件使用 自定义的 Markdown 语法,从 Markdown 中提取代码块,并展示在页面上 (而其自身亦是一个卡片组)"}
|
### 1.2 文件命名规范
|
||||||
|
|
||||||
::code-tree{defaultValue="nuxt.config.ts"}
|
* **模块:** 小写字母,使用下划线增强可读性(如`my_module.py`)
|
||||||
|
* **包:** 全小写(如`my_package`),非必要不使用下划线
|
||||||
|
* **测试文件:** 以`test_`开头(如`test_my_module.py`)
|
||||||
|
|
||||||
```css [app/assets/main.css]
|
### 1.3 模块组织最佳实践
|
||||||
@import "tailwindcss" theme(static);
|
|
||||||
@import "@nuxt/ui-pro";
|
|
||||||
```
|
|
||||||
|
|
||||||
```ts [app/app.config.ts]
|
* **单一职责原则:** 每个模块应有明确定义的用途
|
||||||
export default defineAppConfig({
|
* **导入规范:**
|
||||||
ui: {
|
* 顺序:标准库→第三方库→本地模块
|
||||||
colors: {
|
* 优先使用绝对导入(如`from my_package.module1 import function1`)
|
||||||
primary: 'sky',
|
* 在复杂包结构中需明确相对导入时使用显式相对导入(`from . import sibling_module`)
|
||||||
colors: 'slate'
|
* **常量:** 使用全大写定义模块级常量(如`MAX_ITERATIONS = 100`)
|
||||||
}
|
* **双下划线名称:** `__all__`、`__version__`等应放在模块文档字符串之后、所有导入之前(`from __future__`除外)。使用`__all__`显式声明公共API
|
||||||
}
|
|
||||||
});
|
|
||||||
```
|
|
||||||
|
|
||||||
```vue [app/app.vue]
|
### 1.4 组件架构建议
|
||||||
<template>
|
|
||||||
<UApp>
|
|
||||||
<NuxtPage />
|
|
||||||
</UApp>
|
|
||||||
</template>
|
|
||||||
```
|
|
||||||
|
|
||||||
```json [package.json]
|
* **分层架构:** 适用于大型应用,将关注点分离为表现层、业务逻辑层和数据访问层
|
||||||
{
|
* **微服务:** 超大型系统可拆分为小型独立服务
|
||||||
"name": "nuxt-app",
|
* **六边形/整洁架构:** 强调业务逻辑与数据库/框架等外部依赖的解耦
|
||||||
"private": true,
|
* **依赖注入:** 提高可测试性并降低耦合度
|
||||||
"type": "module",
|
|
||||||
"scripts": {
|
|
||||||
"build": "nuxt build",
|
|
||||||
"dev": "nuxt dev",
|
|
||||||
"generate": "nuxt generate",
|
|
||||||
"preview": "nuxt preview",
|
|
||||||
"postinstall": "nuxt prepare",
|
|
||||||
"typecheck": "nuxt typecheck"
|
|
||||||
},
|
|
||||||
"dependencies": {
|
|
||||||
"@iconify-json/lucide": "^1.2.18",
|
|
||||||
"@nuxt/ui-pro": "3.0.0-alpha.10",
|
|
||||||
"nuxt": "^3.15.1"
|
|
||||||
},
|
|
||||||
"devDependencies": {
|
|
||||||
"typescript": "^5.7.2",
|
|
||||||
"vue-tsc": "^2.2.0"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
```json [tsconfig.json]
|
### 1.5 代码分割策略
|
||||||
{
|
|
||||||
"extends": "./.nuxt/tsconfig.json"
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
```ts [nuxt.config.ts]
|
* **按功能拆分:** 基于不同功能划分模块(如用户管理、数据处理)
|
||||||
export default defineNuxtConfig({
|
* **按层级拆分:** 分离表现层、业务逻辑层和数据访问代码
|
||||||
modules: ['@nuxt/ui-pro'],
|
* **懒加载:** 使用`importlib.import_module()`实现按需加载,优化启动时间
|
||||||
|
* **条件导入:** 根据特定条件导入模块
|
||||||
|
|
||||||
future: {
|
## 2. 常见模式与反模式
|
||||||
compatibilityVersion: 4
|
|
||||||
},
|
|
||||||
|
|
||||||
css: ['~/assets/main.css']
|
### 2.1 设计模式
|
||||||
});
|
|
||||||
```
|
|
||||||
|
|
||||||
````md [README.md]
|
* **单例模式:** 限制类只能实例化一个对象
|
||||||
# Nuxt 3 Minimal Starter
|
* **工厂模式:** 创建对象时无需指定具体类
|
||||||
|
* **观察者模式:** 建立对象间一对多依赖关系
|
||||||
|
* **策略模式:** 定义算法族并使其可互换
|
||||||
|
* **装饰器模式:** 动态扩展对象功能
|
||||||
|
* **上下文管理器:** 确保资源正确清理(如自动关闭文件)
|
||||||
|
|
||||||
Look at the [Nuxt 3 documentation](https://nuxt.com/docs/getting-started/introduction) to learn more.
|
### 2.2 常见任务的推荐方案
|
||||||
|
|
||||||
## Setup
|
* **数据验证:** 使用`pydantic`或`marshmallow`等库
|
||||||
|
* **配置管理:** 使用`python-decouple`、`dynaconf`或标准库的`configparser`
|
||||||
|
* **日志记录:** 使用`logging`模块实现结构化日志
|
||||||
|
* **命令行接口:** 使用`argparse`、`click`或`typer`
|
||||||
|
* **异步编程:** 使用`asyncio`处理I/O密集型任务
|
||||||
|
|
||||||
Make sure to install the dependencies:
|
### 2.3 反模式与代码异味
|
||||||
|
|
||||||
```bash
|
* **上帝类:** 承担过多职责的类,应拆分为专注单一功能的小类
|
||||||
# npm
|
* **霰弹式变更:** 需在多处做小修改,表明内聚性不足
|
||||||
npm install
|
* **面条代码:** 结构混乱难以追踪,应重构为定义明确的函数/类
|
||||||
|
* **重复代码:** 提取公共代码为可复用函数/类(遵循DRY原则)
|
||||||
|
* **魔法数值/字符串:** 使用命名常量替代硬编码值
|
||||||
|
* **过早优化:** 避免在没有性能瓶颈分析前提下的优化
|
||||||
|
|
||||||
# pnpm
|
### 2.4 状态管理最佳实践
|
||||||
pnpm install
|
|
||||||
|
|
||||||
# yarn
|
* **无状态函数:** 尽可能使用无状态函数
|
||||||
yarn install
|
* **不可变数据:** 使用不可变数据结构防止意外修改
|
||||||
|
* **显式状态:** 使用类或数据结构明确管理状态,避免全局变量
|
||||||
|
* **上下文变量:** Python 3.7+可使用`contextvars`管理异步应用中的请求级状态
|
||||||
|
|
||||||
# bun
|
### 2.5 错误处理模式
|
||||||
bun install
|
|
||||||
```
|
|
||||||
|
|
||||||
## Development Server
|
* **捕获特定异常:** 避免笼统捕获`Exception`或`BaseException`
|
||||||
|
* **资源清理:** 使用`finally`确保清理代码必执行
|
||||||
|
* **异常日志:** 记录完整堆栈信息
|
||||||
|
* **异常消息:** 抛出包含明确错误信息的异常
|
||||||
|
* **避免异常控制流:** 异常应用于处理意外情况而非常规流程
|
||||||
|
|
||||||
Start the development server on `http://localhost:3000`:
|
## 3. 性能优化
|
||||||
|
|
||||||
```bash
|
### 3.1 优化技术
|
||||||
# npm
|
|
||||||
npm run dev
|
|
||||||
|
|
||||||
# pnpm
|
* **性能分析:** 使用`cProfile`定位瓶颈
|
||||||
pnpm run dev
|
* **高效数据结构:** 根据场景选择(如`set`用于成员测试、`dict`用于查找)
|
||||||
|
* **列表推导式与生成器:** 编写简洁高效的代码
|
||||||
|
* **NumPy向量化:** 对数值计算使用向量化操作
|
||||||
|
* **即时编译:** 性能关键代码考虑使用Numba等JIT编译器
|
||||||
|
* **字符串拼接:** 使用`''.join(iterable)`高效拼接字符串
|
||||||
|
|
||||||
# yarn
|
### 3.2 内存管理
|
||||||
yarn dev
|
|
||||||
|
|
||||||
# bun
|
* **内存分析:** 使用`memory_profiler`定位内存泄漏
|
||||||
bun run dev
|
* **`__slots__`:** 减少类实例的内存占用
|
||||||
```
|
* **生成器:** 处理大数据集时避免全部加载到内存
|
||||||
|
|
||||||
## Production
|
## 4. 安全性最佳实践
|
||||||
|
|
||||||
Build the application for production:
|
### 4.1 常见漏洞防范
|
||||||
|
|
||||||
```bash
|
* **SQL注入:** 使用参数化查询或ORM
|
||||||
# npm
|
* **XSS攻击:** 对用户输入消毒并转义输出
|
||||||
npm run build
|
* **CSRF防护:** 使用CSRF令牌
|
||||||
|
* **依赖漏洞:** 定期审计和更新依赖项
|
||||||
|
* **硬编码密钥:** 禁止在代码中硬编码密码/API密钥,使用环境变量管理
|
||||||
|
|
||||||
# pnpm
|
### 4.2 API安全通信
|
||||||
pnpm run build
|
|
||||||
|
|
||||||
# yarn
|
* **强制HTTPS:** 所有API通信必须加密
|
||||||
yarn build
|
* **速率限制:** 防止接口滥用
|
||||||
|
* **输入验证:** 处理前验证所有API请求
|
||||||
|
|
||||||
# bun
|
## 5. 测试策略
|
||||||
bun run build
|
|
||||||
```
|
|
||||||
|
|
||||||
Locally preview production build:
|
### 5.1 单元测试要点
|
||||||
|
|
||||||
```bash
|
* **测试粒度:** 隔离测试单个函数/类/模块
|
||||||
# npm
|
* **边界条件:** 特别测试边界情况和异常场景
|
||||||
npm run preview
|
* **测试覆盖率:** 追求高覆盖率但避免教条化
|
||||||
|
|
||||||
# pnpm
|
### 5.2 集成测试建议
|
||||||
pnpm run preview
|
|
||||||
|
|
||||||
# yarn
|
* **聚焦关键流程:** 关注核心用户场景
|
||||||
yarn preview
|
* **模拟外部服务:** 使用mock替代真实外部依赖
|
||||||
|
|
||||||
# bun
|
## 6. 常见陷阱
|
||||||
bun run preview
|
|
||||||
```
|
|
||||||
|
|
||||||
Check out the [deployment documentation](https://nuxt.com/docs/getting-started/deployment) for more information.
|
### 6.1 高频错误
|
||||||
````
|
|
||||||
|
|
||||||
::
|
* **可变默认参数:** 函数定义中避免使用可变对象作为默认值
|
||||||
:::
|
* **变量作用域:** 注意嵌套函数中的变量作用域
|
||||||
|
* **忽略异常:** 禁止直接忽略未处理的异常
|
||||||
|
* **虚拟环境:** 必须使用虚拟环境管理项目依赖
|
||||||
|
|
||||||
::code-group
|
## 7. 工具与环境
|
||||||
```md [搜索.md]
|
|
||||||
#### 此组件打开一个模态搜索框,进行搜索
|
|
||||||
::::example-fulltext-content-search
|
|
||||||
::::
|
|
||||||
|
|
||||||
#### 此组件建立一个mini搜索框,进行搜索
|
### 7.1 推荐工具链
|
||||||
::::example-fulltext-mini-search
|
|
||||||
::::
|
|
||||||
```
|
|
||||||
|
|
||||||
:::code-preview{label="预览模态组件" icon="i-lucide-eye"}
|
* **IDE:** PyCharm、VS Code(搭配Python插件)
|
||||||
::::example-fulltext-content-search
|
* **包管理:** `pip`、`poetry`
|
||||||
::::
|
* **格式化:** `black`、`autopep8`
|
||||||
:::
|
* **静态检查:** `mypy`、`pylint`
|
||||||
:::code-preview{label="预览搜索框组件" icon="i-lucide-eye"}
|
|
||||||
::::example-fulltext-mini-search
|
|
||||||
::::
|
|
||||||
:::
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
|
### 7.2 CI/CD集成
|
||||||
|
|
||||||
::tip{icon="lucide-info" color="primary" class="text-black dark:text-white"}
|
* **自动化测试:** 每次提交自动运行测试套件
|
||||||
阅读更多关于 [`自定义组件`](/简单文档/components/api) 的内容.
|
* **代码质量门禁:** 集成静态分析工具到流水线
|
||||||
::
|
|
||||||
|
|
||||||
|
遵循这些规范和最佳实践,开发者能够构建出更健壮、可维护且安全的Python应用。
|
||||||
## 特性
|
|
||||||
|
|
||||||
- 基于 Nuxt 4 , Content v3 , Nuxt UI Pro 构建的文档系统。
|
|
||||||
- 完美支持 Markdown 和 相关扩展。
|
|
||||||
- 和 Vue 组件高度集成。
|
|
||||||
- 支持搜索,由Content v3 赋能。
|
|
||||||
- 支持多主题,使用Nuxt UI Pro。
|
|
||||||
- 开源且免费。
|
|
||||||
- 支持移动端。
|
|
||||||
|
|
||||||
## 致谢
|
|
||||||
|
|
||||||
- Nuxt Content:为 Vue 开发者简化内容管理。
|
|
||||||
- Nuxt UI Pro :文档系统 UI 组件。
|
|
||||||
- Docus:获取灵感及一些文档组件源代码。
|
|
||||||
|
|
||||||
## License
|
|
||||||
|
|
||||||
MIT
|
|
@@ -212,7 +212,7 @@ Check out the [deployment documentation](https://nuxt.com/docs/getting-started/d
|
|||||||
|
|
||||||
|
|
||||||
::tip{icon="lucide-info" color="primary" class="text-black dark:text-white"}
|
::tip{icon="lucide-info" color="primary" class="text-black dark:text-white"}
|
||||||
阅读更多关于 [`自定义组件`](/简单文档/components/api) 的内容.
|
阅读更多关于 [`自定义组件`](/docs/简单文档/components/api) 的内容.
|
||||||
::
|
::
|
||||||
|
|
||||||
|
|
||||||
|
@@ -1,17 +0,0 @@
|
|||||||
[phases.setup]
|
|
||||||
nixPkgs = [
|
|
||||||
"nodejs_22", # Nixpacks 已帮你加,这里显性写出来安全
|
|
||||||
"sqlite" # 预编译好的 sqlite 库
|
|
||||||
]
|
|
||||||
|
|
||||||
[phases.install]
|
|
||||||
cmds = [
|
|
||||||
"sudo apt-get update -y",
|
|
||||||
"sudo apt-get install -y build-essential python3", # 上 gcc/make/python
|
|
||||||
"pnpm config set script-shell '/bin/bash'", # 避免 sh -c 失环境
|
|
||||||
"pnpm install --frozen-lockfile"
|
|
||||||
]
|
|
||||||
|
|
||||||
# 可选:编译缓存,构建更快
|
|
||||||
[phases.build]
|
|
||||||
cacheDirectories = [ "node_modules/.cache" ]
|
|
@@ -20,7 +20,7 @@ export default defineNuxtConfig({
|
|||||||
build: {
|
build: {
|
||||||
markdown: {
|
markdown: {
|
||||||
toc: {
|
toc: {
|
||||||
searchDepth: 1
|
searchDepth: 2
|
||||||
},
|
},
|
||||||
highlight: {
|
highlight: {
|
||||||
langs:
|
langs:
|
||||||
@@ -42,10 +42,6 @@ export default defineNuxtConfig({
|
|||||||
remove: /[$*+~()'"!\-=#?:@.]/g
|
remove: /[$*+~()'"!\-=#?:@.]/g
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
|
||||||
preview: {
|
|
||||||
dev: true,
|
|
||||||
api: 'https://api.nuxt.studio'
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
@@ -81,6 +77,11 @@ export default defineNuxtConfig({
|
|||||||
sizeLimitKb: 512
|
sizeLimitKb: 512
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
routeRules: {
|
||||||
|
'/': { static: true },
|
||||||
|
'/docs/**': { ssr: false },
|
||||||
|
'/blog/**': { ssr: false }
|
||||||
|
},
|
||||||
llms: {
|
llms: {
|
||||||
domain: 'https://docs.jiwei.xin',
|
domain: 'https://docs.jiwei.xin',
|
||||||
title: 'Estel Docs',
|
title: 'Estel Docs',
|
||||||
|
Reference in New Issue
Block a user