分类: 电脑技巧

  • Next.js 推荐学习路线

    一、先明确 Next.js 学习前提

    Next.js 是基于 React 的,所以建议你至少掌握一些 React 基础:

    需要先会的 React 内容

    组件
    props
    useState
    useEffect
    事件绑定
    条件渲染
    列表渲染
    表单处理

    不用一开始就把 React 学得特别深,但这些要会。

    如果你已经会一些 JavaScript,那可以直接进入:

    React 基础 -> Next.js

    如果 JavaScript 还不太熟,建议先补:

    ES6 语法
    数组方法
    异步 async/await
    模块导入导出

    二、Next.js 推荐学习路线

    第 1 阶段:创建项目和目录结构

    先创建项目:

    npx create-next-app@latest my-next-app

    推荐选择:

    TypeScript:Yes
    ESLint:Yes
    Tailwind CSS:Yes
    src directory:Yes 或 No 都可以
    App Router:Yes
    Turbopack:可以 Yes
    import alias:Yes

    进入项目:

    cd my-next-app
    npm run dev

    访问:

    http://localhost:3000

    三、先学 App Router

    现在 Next.js 主推 App Router。

    常见目录结构:

    app/
      layout.tsx
      page.tsx
      about/
        page.tsx
      products/
        page.tsx

    对应路由:

    app/page.tsx              -> /
    app/about/page.tsx        -> /about
    app/products/page.tsx     -> /products

    你要先理解:

    page.tsx 是页面
    layout.tsx 是布局
    文件夹名就是路由路径

    例如:

    // app/about/page.tsx
    
    export default function AboutPage() {
      return <h1>关于我们</h1>
    }

    访问:

    /about

    四、学习页面跳转 Link

    Next.js 不需要 React Router,用自己的 Link

    import Link from 'next/link'
    
    export default function HomePage() {
      return (
        <main>
          <h1>首页</h1>
    
          <Link href="/about">去关于页</Link>
        </main>
      )
    }

    五、学习组件拆分

    建议建一个 components 目录:

    components/
      Header.tsx
      Footer.tsx
      ProductCard.tsx

    例如:

    // components/Header.tsx
    
    import Link from 'next/link'
    
    export default function Header() {
      return (
        <header>
          <Link href="/">首页</Link>
          <Link href="/about">关于</Link>
          <Link href="/products">产品</Link>
        </header>
      )
    }

    然后在 layout 里使用:

    // app/layout.tsx
    
    import Header from '@/components/Header'
    
    export default function RootLayout({
      children,
    }: {
      children: React.ReactNode
    }) {
      return (
        <html lang="zh-CN">
          <body>
            <Header />
            {children}
          </body>
        </html>
      )
    }

    六、学习服务端组件和客户端组件

    这是 Next.js 很重要的概念。

    默认情况下,App Router 里面的组件是 服务端组件

    如果你要使用:

    useState
    useEffect
    onClick
    浏览器 API

    就需要加:

    'use client'

    例如计数器:

    'use client'
    
    import { useState } from 'react'
    
    export default function Counter() {
      const [count, setCount] = useState(0)
    
      return (
        <button onClick={() => setCount(count + 1)}>
          当前数量:{count}
        </button>
      )
    }

    简单记:

    只展示内容:通常用服务端组件
    需要交互:使用客户端组件

    七、学习数据请求

    Next.js 可以直接在页面组件里请求数据。

    export default async function UsersPage() {
      const res = await fetch('https://jsonplaceholder.typicode.com/users')
      const users = await res.json()
    
      return (
        <main>
          <h1>用户列表</h1>
          {users.map((user: any) => (
            <div key={user.id}>{user.name}</div>
          ))}
        </main>
      )
    }

    这是服务端请求,适合:

    文章列表
    商品列表
    详情页
    官网内容

    八、学习动态路由

    例如商品详情页:

    app/
      products/
        page.tsx
        [id]/
          page.tsx

    访问:

    /products/1
    /products/2
    /products/100

    页面代码:

    // app/products/[id]/page.tsx
    
    export default function ProductDetailPage({
      params,
    }: {
      params: { id: string }
    }) {
      return <h1>商品详情:{params.id}</h1>
    }

    九、学习 API Route

    Next.js 可以写接口。

    目录:

    app/
      api/
        hello/
          route.ts

    代码:

    // app/api/hello/route.ts
    
    export async function GET() {
      return Response.json({
        message: 'Hello Next.js',
      })
    }

    访问:

    /api/hello

    你可以用它做:

    登录接口
    提交表单
    获取文章
    获取商品

    不过正式项目里,如果后端复杂,通常还是单独后端服务。


    十、推荐做的练手项目

    你可以按难度做。


    项目 1:个人主页 / 作品集网站

    适合入门。

    功能:

    首页
    关于我
    项目展示
    联系方式
    响应式布局
    SEO 标题

    你能练到:

    页面路由
    组件拆分
    layout
    样式
    Link
    Metadata
    部署

    推荐技术:

    Next.js + Tailwind CSS

    项目 2:博客系统

    功能:

    文章列表
    文章详情
    分类
    标签
    Markdown 渲染
    搜索
    SEO

    你能练到:

    动态路由
    数据读取
    服务端组件
    静态生成
    metadata

    可以先做本地 Markdown 版本,不急着接数据库。


    项目 3:商品展示网站

    功能:

    商品列表
    商品详情
    分类筛选
    搜索
    购物车

    你能练到:

    动态路由
    客户端状态
    服务端数据请求
    组件复用

    状态管理可以用:

    useState
    useContext

    后面再加 Zustand。


    项目 4:Todo / 任务管理系统

    功能:

    新增任务
    删除任务
    编辑任务
    状态切换
    筛选任务
    本地存储

    你能练到:

    客户端组件
    useState
    useEffect
    表单处理
    localStorage

    这个适合练交互。


    项目 5:后台管理面板

    功能:

    登录页
    首页仪表盘
    用户列表
    表格
    弹窗
    表单
    分页
    权限菜单

    你能练到:

    UI 组件库
    表单
    表格
    路由组织
    状态管理
    接口请求

    推荐组件库:

    Ant Design

    十一、推荐技术组合

    如果你刚开始,我建议:

    Next.js + TypeScript + Tailwind CSS

    后面再加:

    shadcn/ui
    Zustand
    Prisma
    NextAuth/Auth.js
    PostgreSQL/MySQL

    但是不要一开始全加,不然会很乱。

    入门阶段

    Next.js
    TypeScript
    Tailwind CSS
    fetch

    进阶阶段

    Next.js
    TypeScript
    Tailwind CSS
    Zustand
    shadcn/ui

    全栈阶段

    Next.js
    TypeScript
    Tailwind CSS
    Prisma
    PostgreSQL
    Auth.js

    十二、建议你第一个项目这样做

    我建议你第一个项目做:

    个人作品集网站

    原因:

    页面简单
    容易完成
    适合部署
    可以长期完善
    可以作为你的个人展示

    页面结构:

    /
      首页
    /about
      关于我
    /projects
      项目列表
    /projects/[id]
      项目详情
    /contact
      联系方式

    组件结构:

    components/
      Header.tsx
      Footer.tsx
      ProjectCard.tsx
      SectionTitle.tsx

    数据可以先写死:

    const projects = [
      {
        id: 'next-blog',
        title: 'Next.js 博客系统',
        description: '一个基于 Next.js 的博客项目',
      },
      {
        id: 'admin-dashboard',
        title: '后台管理系统',
        description: '一个后台管理面板项目',
      },
    ]

    十三、你可以按这个计划学习

    第 1 周

    React 基础
    Next.js 创建项目
    页面路由
    Link 跳转
    组件拆分
    Tailwind 基础

    目标:

    做出一个多页面个人网站

    第 2 周

    动态路由
    数据列表
    详情页
    服务端数据请求
    Metadata

    目标:

    做出项目列表 + 项目详情

    第 3 周

    客户端组件
    useState
    表单
    搜索
    筛选
    localStorage

    目标:

    做出 Todo 或商品筛选页面

    第 4 周

    API Route
    提交表单
    简单登录模拟
    部署 Vercel

    目标:

    完成一个可在线访问的小项目

    十四、结论

    你选 Next.js 的学习路线可以是:

    JavaScript 基础
    ↓
    React 基础
    ↓
    Next.js App Router
    ↓
    组件拆分
    ↓
    数据请求
    ↓
    动态路由
    ↓
    客户端组件
    ↓
    API Route
    ↓
    部署项目

    第一个项目推荐:

    个人作品集网站

    第二个项目推荐:

    博客系统

    第三个项目推荐:

    商品展示或后台管理系统

    如果你愿意,我可以下一步直接帮你设计一个 Next.js 入门项目:个人作品集网站 的目录结构、页面规划和第一版代码。

  • 准确作答提示词

    以下是完全贴合你需求的提示词,分 3 个版本,可根据提问场景直接复制粘贴到你的问题前 / 后即可生效,严格约束作答规则,保障答案的准确性。

    通用标准版(首选推荐,完整覆盖你的全部核心要求)

    请你严格遵守以下规则作答:

    1. 所有回答必须保证信息 100% 准确、真实、严谨,所有表述必须有权威可靠的信源支撑,严禁编造、臆测、杜撰任何信息,严禁输出误导性内容。
    2. 若你无法核实相关信息、无权威信源佐证、对内容存在任何不确定,必须直接明确回复「不知道」,绝对不得强行作答、模糊敷衍、用模棱两可的话术规避问题。
    3. 完成回答后,必须对全部内容进行二次逐句核对校验,确保每一处信息、数据、表述均无事实错误、逻辑偏差,最终输出的内容必须是经过核验的准确版本。

    极简便携版(适合日常快速提问,一键粘贴)

    作答要求:必须保证信息绝对准确,无权威信源、无法核实的内容直接说「不知道」,回答完成后必须二次核对全部内容,确保无任何事实错误。


    专业严谨版(适合专业 / 数据 / 政策 / 学术等高精准度需求)

    请你严格遵循以下最高标准作答:

    1. 准确性优先原则:所有输出内容必须以权威信源(官方发布、学术文献、正规出版物、行业标准文件)为唯一依据,严禁引用非正规渠道信息、网络传言、主观臆测内容,绝对禁止编造任何数据、案例、规则、定义。
    2. 边界明确原则:对于超出知识范围、无法通过权威渠道核实、存在任何争议或不确定性的问题,必须直接、明确回复「不知道」,不得进行任何形式的强行作答、推测性表述、模糊化回应。
    3. 双重核验原则:完成内容撰写后,必须先进行全文逐句事实核查,再进行逻辑与表述校验,双重核验通过后方可输出,确保最终内容零事实错误、零表述偏差。
    4. 溯源标注原则:若引用关键信息,必须同步标注核心信源出处,方便后续核验。
  • 在个人电脑windows系统下配置openclaw

    安装命令
    使用powershell命令安装
    iwr -useb https://openclaw.ai/install.ps1 | iex
    如果你刚才只是误触了 No,或者在阅读完安全文档后决定继续,可以在终端输入:
    openclaw onboard
    由于日志提示“OpenClaw runs great on WSL2!”,如果你追求极致稳定,可以考虑安装 WSL:

    1. 在 PowerShell 执行:wsl --install
    2. 重启电脑。
    3. 在 Linux 子系统中重新运行安装命令。
      我这里使用了wsl 接下来重新安装了一遍命令如下:
      curl -fsSL https://openclaw.ai/install.sh | bash
      安装有几个选项均选择yes, 脚本自动完成了一些高级配置
    • 权限加固:将 ~/.openclaw 文件夹权限设为 700(仅你自己可读写),保护密钥安全。
    • 系统守护进程:它在 systemd 中安装了一个服务。这意味着即使你关闭了终端,OpenClaw 的网关(Gateway)也可以在后台运行。
    • 自动补全:你以后输入 openclaw 后按 Tab 键,系统会自动补全后续的参数。

    至此安装成功会给你提示一个网页,浏览器访问即可进入web界面:
    Dashboard URL: http://127.0.0.1:18789/#token=xxx

    PS:在下载和安装程序的过程中设置了代理模式导致 配置网关模式有些问题使用命令指定使用本地模式:
    openclaw config set gateway.mode local

  • Go语言编译与跨平台编译指南

    Go语言编译与跨平台编译指南

    一、Go 语言编译基础

    1.1 基本编译命令

    Go 语言的编译非常简单,最基本的编译命令是:

    
    # 编译当前目录的Go程序,生成与目录名相同的可执行文件
    go build
    
    # 指定输出文件名
    go build -o myapp
    
    # 编译指定包
    go build github.com/yourname/yourproject
    

    1.2 编译模式

    
    # 编译并运行
    go run main.go
    
    # 编译并安装到GOPATH/bin目录
    go install
    
    # 编译时显示详细过程
    go build -v -x
    

    二、跨平台编译核心机制

    2.1 GOOS 与 GOARCH 环境变量

    Go 语言实现跨平台编译的核心在于两个环境变量:

    • GOOS (Go Operating System):指定目标操作系统

    • GOARCH (Go Architecture):指定目标处理器架构

    2.2 查看支持的平台

    
    # 查看当前Go版本支持的所有平台组合
    go tool dist list
    

    三、不同操作系统下的跨平台编译

    3.1 Linux/macOS 系统下的编译

    在 Linux 或 macOS 系统中,使用env命令临时设置环境变量:

    
    # 编译为Linux 64位
    env GOOS=linux GOARCH=amd64 go build -o app-linux-amd64
    
    # 编译为Windows 64位
    env GOOS=windows GOARCH=amd64 go build -o app-windows-amd64.exe
    
    # 编译为macOS Intel处理器
    env GOOS=darwin GOARCH=amd64 go build -o app-darwin-amd64
    
    # 编译为macOS Apple Silicon
    env GOOS=darwin GOARCH=arm64 go build -o app-darwin-arm64
    
    # 编译为Linux ARM 32位(树莓派等)
    env GOOS=linux GOARCH=arm GOARM=7 go build -o app-linux-arm
    
    # 编译为Linux ARM 64位
    env GOOS=linux GOARCH=arm64 go build -o app-linux-arm64
    

    3.2 Windows 系统下的编译

    在 Windows 系统中,需要使用不同的语法来设置环境变量:

    使用 PowerShell:

    
    # 编译为Linux 64位
    $env:GOOS="linux"; $env:GOARCH="amd64"; go build -o app-linux-amd64.exe
    
    # 编译为Windows 32位
    $env:GOOS="windows"; $env:GOARCH="386"; go build -o app-windows-386.exe
    
    # 编译为macOS
    $env:GOOS="darwin"; $env:GOARCH="amd64"; go build -o app-darwin-amd64
    

    使用 CMD 命令行:

    
    # 编译为Linux 64位
    set GOOS=linux
    set GOARCH=amd64
    go build -o app-linux-amd64.exe
    
    # 恢复默认设置
    set GOOS=
    set GOARCH=
    

    四、常用平台组合参考

    操作系统 (GOOS) 架构 (GOARCH) 适用场景 示例命令
    linux amd64 主流服务器、云环境 env GOOS=linux GOARCH=amd64 go build
    linux 386 32 位 Linux 系统 env GOOS=linux GOARCH=386 go build
    linux arm ARMv5/v6/v7 设备(树莓派) env GOOS=linux GOARCH=arm GOARM=7 go build
    linux arm64 ARMv8 64 位设备 env GOOS=linux GOARCH=arm64 go build
    windows amd64 64 位 Windows 系统 env GOOS=windows GOARCH=amd64 go build
    windows 386 32 位 Windows 系统 env GOOS=windows GOARCH=386 go build
    darwin amd64 Intel 处理器 Mac env GOOS=darwin GOARCH=amd64 go build
    darwin arm64 Apple Silicon Mac(M1/M2) env GOOS=darwin GOARCH=arm64 go build
    freebsd amd64 FreeBSD 系统 env GOOS=freebsd GOARCH=amd64 go build
    android arm64 Android 设备 env GOOS=android GOARCH=arm64 go build
    ios arm64 iOS 设备 env GOOS=ios GOARCH=arm64 go build

    五、高级编译技巧

    5.1 静态链接编译

    为了确保编译后的程序在目标系统上不依赖外部库,推荐使用静态链接:

    
    # 静态链接编译(禁用CGO)
    CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -a -installsuffix cgo -o app-static
    
    # 同时指定版本信息
    CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -ldflags "-s -w -X main.version=1.0.0" -o app
    

    5.2 条件编译

    根据不同平台编译不同的代码:

    方法 1:使用构建标签

    
    // +build linux,amd64
    
    package main
    
    // 只有在Linux amd64平台下才会编译这段代码
    func linuxSpecificFunction() {
        // Linux特定实现
    }
    

    方法 2:文件命名约定

    
    main.go                  // 通用代码
    main_linux_amd64.go      // 仅Linux amd64平台编译
    main_windows_amd64.go    // 仅Windows amd64平台编译
    

    方法 3:运行时判断

    
    package main
    
    import "runtime"
    
    func main() {
        if runtime.GOOS == "windows" {
            // Windows特定逻辑
        } else if runtime.GOOS == "linux" {
            // Linux特定逻辑
        }
    }
    

    5.3 批量编译脚本

    创建一个脚本一次性编译多个平台:

    build.sh (Linux/macOS)

    
    #!/bin/bash
    
    PLATFORMS=(
        "linux/amd64"
        "linux/arm64" 
        "windows/amd64"
        "darwin/amd64"
        "darwin/arm64"
    )
    
    APP_NAME="myapp"
    VERSION="1.0.0"
    
    for PLATFORM in "${PLATFORMS[@]}"; do
        IFS='/' read -r GOOS GOARCH <<< "$PLATFORM"
        OUTPUT_DIR="./build/${VERSION}/${GOOS}-${GOARCH}"
        OUTPUT_NAME="${APP_NAME}"
        
        if [ "${GOOS}" = "windows" ]; then
            OUTPUT_NAME="${OUTPUT_NAME}.exe"
        fi
        
        echo "Building ${GOOS}/${GOARCH}..."
        mkdir -p "${OUTPUT_DIR}"
        CGO_ENABLED=0 GOOS=${GOOS} GOARCH=${GOARCH} go build -o "${OUTPUT_DIR}/${OUTPUT_NAME}"
    done
    

    六、常见问题与解决方案

    6.1 CGO 依赖问题

    如果程序使用了 CGO(调用 C 代码),跨平台编译会变得复杂:

    
    # 解决方案1:禁用CGO(推荐)
    CGO_ENABLED=0 GOOS=linux GOARCH=arm64 go build
    
    # 解决方案2:安装交叉编译工具链(复杂)
    CC=arm-linux-gnueabihf-gcc CGO_ENABLED=1 GOOS=linux GOARCH=arm go build
    

    6.2 编译缓存问题

    
    # 清理编译缓存
    go clean -cache -modcache
    
    # 强制重新编译所有包
    go build -a
    

    6.3 时间和时区问题

    
    // 跨平台时间处理最佳实践
    package main
    
    import (
        "time"
        "fmt"
    )
    
    func main() {
        // 使用UTC时间避免时区问题
        now := time.Now().UTC()
        
        // 解析时间时指定时区
        loc, err := time.LoadLocation("Asia/Shanghai")
        if err != nil {
            loc = time.UTC // 回退到UTC
        }
        shanghaiTime := now.In(loc)
        
        fmt.Println(shanghaiTime.Format(time.RFC3339))
    }
    

    七、企业级最佳实践

    7.1 Docker 多阶段构建

    
    # 阶段1:编译
    FROM golang:1.25-alpine AS builder
    WORKDIR /app
    COPY . .
    RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o app
    
    # 阶段2:运行
    FROM alpine:3.18
    WORKDIR /app
    COPY --from=builder /app/app .
    RUN apk --no-cache add ca-certificates tzdata
    ENV TZ=Asia/Shanghai
    EXPOSE 8080
    CMD ["./app"]
    

    7.2 CI/CD 集成(GitHub Actions)

    
    name: 跨平台构建
    
    on:
      push:
        tags:
          - 'v*'
    
    jobs:
      build:
        runs-on: ubuntu-latest
        strategy:
          matrix:
            include:
              - GOOS: linux
                GOARCH: amd64
                EXT: ""
              - GOOS: windows
                GOARCH: amd64
                EXT: ".exe"
              - GOOS: darwin
                GOARCH: arm64
                EXT: ""
    
        steps:
          - uses: actions/checkout@v4
    
          - name: 设置Go环境
            uses: actions/setup-go@v5
            with:
              go-version: '1.25'
    
          - name: 编译
            run: |
              GOOS=${{ matrix.GOOS }} GOARCH=${{ matrix.GOARCH }} CGO_ENABLED=0 go build -o app-${{ matrix.GOOS }}-${{ matrix.GOARCH }}${{ matrix.EXT }}
    
          - name: 上传构建产物
            uses: actions/upload-artifact@v3
            with:
              name: app-${{ matrix.GOOS }}-${{ matrix.GOARCH }}
              path: app-${{ matrix.GOOS }}-${{ matrix.GOARCH }}${{ matrix.EXT }}
    

    八、总结

    Go 语言的跨平台编译能力是其核心优势之一,通过简单设置 GOOS 和 GOARCH 环境变量,就能轻松实现 "一次编写,到处运行"。关键要点:

    1. 版本要求:确保 Go 版本在 1.5 以上

    2. 环境变量:使用 GOOS 指定操作系统,GOARCH 指定处理器架构

    3. 命令格式:不同操作系统下的环境变量设置语法不同

    4. 最佳实践:优先使用静态链接(CGO_ENABLED=0),避免依赖问题

    5. 高级技巧:使用条件编译处理平台特定逻辑

    掌握这些知识后,您可以轻松为各种平台编译 Go 程序,大幅提升开发效率和部署灵活性。

    (注:文档部分内容可能由 AI 生成)

  • mailcow版本更新

    mailcow更新简单,但是在国内需要注意一下
    Checking internet connection… failed
    这个是因为 CHECK_ONLINE_DOMAINS=(‘https://github.com’ ‘https://hub.docker.com’) 需要检测网络是 6 秒内成功访问,但是这两个网址可能访问可能出现问题,所以我们更改一下这两个网址的镜像地址修改后就可以更新了。
    ./update.sh

  • 自签证书相关命令

    记录一下最近测试服务自签证书的相关命令

    生成根秘钥及根证书:

    openssl genrsa -out ca.key 4096
    openssl req -x509 -new -nodes -key ca.key -sha512 -days 36666 -out ca.crt -subj “/C=CN/ST=Beijing/L=Beijing/O=MyTestCA/OU=Security/CN=MyTestRootCA”

    使用根证书生成服务端证书

    openssl genrsa -out server.key 4096
    openssl req -new -key server.key -out server.csr -subj “/C=CN/ST=Beijing/L=Beijing/O=MyServer/OU=Security/CN=Server”
    openssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out server.crt -days 36665 -sha512

    使用根证书生成客户端证书及客户端p12文件

    openssl genrsa -out client.key 4096
    openssl req -new -key client.key -out client.csr -subj “/C=CN/ST=Beijing/L=Beijing/O=MyClient/OU=Security/CN=Client”
    openssl x509 -req -in client.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out client.crt -days 36665 -sha512
    openssl pkcs12 -export -clcerts -in client.crt -inkey client.key -out client.p12 -name “MyClientCert”

    测试时使用IP证书的输出命令

    openssl genrsa -out ipserver.key 4096

    openssl req -new -key ipserver.key -out ipserver.csr \
    -subj “/C=CN/ST=Beijing/L=Beijing/O=MyServer/OU=Security/CN=1.2.3.4” \
    -addext “subjectAltName=IP:1.2.3.4” \
    -addext “keyUsage=digitalSignature,keyEncipherment” \
    -addext “extendedKeyUsage=serverAuth”

    openssl x509 -req -in ipserver.csr -CA ca.crt -CAkey ca.key -CAcreateserial \
    -out ipserver.crt -days 36665 -sha512 \
    -extfile <(printf “subjectAltName=IP:1.2.3.4\nkeyUsage=digitalSignature,keyEncipherment\nextendedKeyUsage=serverAuth”)

  • docker全局配置文件

    使用docker后感觉非常方便,但是使用中有一些问题和设置的地方记录一下,

    最重要的就是默认的存储位置需要修改,否则他在var下,如果分区没有在这里预留空间则很容易造成空间挤满

    在/etc/docker/daemon.json文件可以修改如下,更改数据目录路径,及加速镜像,以及日志分割

    {
      "data-root": "/data/docker",
      "registry-mirrors": [
        "https://docker.1ms.run"
      ],
      "log-opts": {
        "max-file": "180",
        "max-size": "10m"
      }
    }
  • 宝塔面板FTP无法创建用户修复记录

    先说感觉应该是更新系统后造成的,应该不是宝塔自身问题。

    某次系统更新补丁后发现,安装应用日志无法查看了,但是并没有影响安装和使用,没有过多关注。

    直到使用ftp创建账号报错。

    执行这个命令解决:

    ln -sf /bin/bash /bin/sh

  • windows 环境下配置 mysql 9.1.0 的ZIP Archive版本

    MySQL 9.1.0 已经于 2024 年 10 月 15 日正式发布。这是一个创新版本,增加了一些新功能、修复了一些问题并且弃用了一些旧功能。网上还没看到配置教程,这边按着之前配置方法试了一下可以正常配置。

    一、下载安装包

    1. 访问 MySQL 官方网站(https://dev.mysql.com/downloads/mysql/)。
    2. 在页面中找到 MySQL 9.1.10 的 Windows (x86, 64-bit), ZIP Archive 版本的下载链接并进行下载。

    二、解压安装包

    1. 找到下载好的 ZIP Archive 文件,将其解压到你希望安装 MySQL 的目录下,比如可以选择 “D:\MySQL\mysql-9.1.0-winx64” 这样的路径(可根据个人喜好自行设定)。

    三、配置环境变量

    1. 右键点击 “此电脑”,选择 “属性”。
    2. 在弹出的窗口中,点击 “高级系统设置”。
    3. 在 “系统属性” 窗口的 “高级” 选项卡下,点击 “环境变量”。
    4. 在 “系统变量” 列表中,找到 “Path” 变量,点击 “编辑”。
    5. 在 “编辑环境变量” 窗口中,点击 “新建”,然后输入 MySQL 解压目录下的 bin 文件夹路径,比如 “D:\MySQL\mysql-9.1.0-winx64\bin”,然后点击 “确定” 逐步关闭各窗口完成环境变量设置。

    四、创建配置文件

    1. 在 MySQL 解压目录下创建一个名为 “my.cnf”(或者 “my.ini”,不同版本可能略有差异,这里以 “my.cnf” 为例)的文本文件。
    2. 在 “my.cnf” 文件中添加以下基本配置内容(可根据实际需求后续进一步调整):
    [mysqld]
    basedir=D:\MySQL\mysql-9.1.0-winx64
    datadir=D:\MySQL\mysql-9.1.0-winx64\data
    port=3306
    character-set-server=utf8mb4
    

    其中 “basedir” 是 MySQL 的安装目录(即前面解压的目录),“datadir” 是数据存储目录(这里先设定和安装目录下的 “data” 文件夹相关,后续初始化时会创建该文件夹),“port” 可设置为常用的 3306 端口(如果该端口未被其他程序占用),“character-set-server” 设置字符集为 “utf8mb4” 以更好地支持多种字符。

    五、初始化数据目录

    1. 以管理员身份打开命令提示符(CMD),可以通过在搜索框中输入 “cmd”,然后右键点击 “命令提示符”,选择 “以管理员身份运行”。
    2. 在命令提示符中,切换到 MySQL 解压目录下的 bin 文件夹所在路径,比如使用 “cd D:\MySQL\mysql-9.1.0-winx64\bin” 命令(根据实际安装目录调整)。
    3. 配置MySQL服务     mysqld –install
    4. 执行初始化命令,对于 MySQL 9.1.0,一般使用如下命令进行初始化:
      • “mysqld –initialize –user=mysql –console”
        执行该命令后,会在命令行输出一些信息,其中包含了自动生成的临时密码,类似 “[Note] A temporary password is generated for root@localhost: xxxxxxxx”,一定要记住这个临时密码,后续登录需要用到。
        或者:
      • “mysqld –initialize-insecure –user=mysql –console”
        这里的 “–initialize-insecure” 参数相较于常规的 “–initialize”,它不会为 root 用户生成并设置初始密码,也就是初始化后的 root 用户密码为空。
    1. 在命令提示符中,继续输入以下命令启动 MySQL 服务:
      • “net start mysql”
        如果出现 “MySQL 服务正在启动..” 等类似提示且最终显示服务启动成功,则说明 MySQL 服务已经正常启动。

    六、启动 MySQL 服务

    七、登录 MySQL 并修改密码

    1. 在命令提示符中,输入以下命令登录 MySQL:
      • “mysql -u root -p”
        然后会提示输入密码,输入前面记住的临时密码并回车。
    2. 登录成功后,为了安全起见,建议马上修改密码,输入以下命令来修改密码:
      • “ALTER USER ‘root’@’localhost‘ IDENTIFIED WITH mysql_native_password BY ‘ 新密码 ‘;”
        将 “新密码” 替换为你想要设置的实际密码,修改成功后就可以使用新密码正常登录 MySQL 并进行后续的数据库相关操作了。

    以上就是类似场景下的大致配置流程,希望对你有帮助,记得后续关注 MySQL 官方发布的准确版本信息哦。

  • 开源私有云盘推荐

    常见的开源私有云盘解决方案包括:

    • Seafile:一款基于 Web 的开源云存储平台,可以用于创建私有云盘或者与其他 Seafile 服务器共享数据。
    • Nextcloud:一款基于 Web 的开源云存储平台,可以用于创建私有云盘或者与其他 Nextcloud 服务器共享数据。
    • OwnCloud:一款基于 Web 的开源云存储平台,可以用于创建私有云盘或者与其他 OwnCloud 服务器共享数据。
    • MinIO:一款基于 Go 语言的高性能、可扩展的云原生对象存储服务,可以用于搭建私有云盘或者与其他 MinIO 服务器共享数据。
  • Ubuntu磁盘挂载精简教程

    一、磁盘挂载简易版

    1、创建挂载目录

    sudo mkdir /data

    2、查看系统硬盘

    sudo lsblk

    3、格式化硬盘

    sudo mkfs -t ext4 /dev/sdb

    4、挂载磁盘到目录

    sudo mount /dev/sdb /data

    5、查看挂载情况

    df -h

    6、配置挂载信息

    sudo vim /etc/fstab

    /dev/sdb     /data    auto    defaults,nofail,comment=cloudconfig     0       2

    7、检查配置是否正常

    sudo mount -a
    # 不报错就是正常的

    二、LVM挂载多磁盘到同一文件目录
    1、删除已划分的磁盘
    如果有磁盘已经通过parted分区,首先要删除分区

    # 执行parted命令
    parted /dev/sdb
    # 打印分区信息
    print
    # 根据序号删除分区,n为分区序号
    rm n

    将已删除分区的磁盘恢复成生磁盘

    wipefs -a -f /dev/sdd

    2、创建vg并挂载目录
    创建物理卷(PV)

    pvcreate /dev/sdb /dev/sdc /dev/sdd /dev/sde /dev/sdf /dev/sdg /dev/sdh /dev/sdi /dev/sdj /dev/sdk

    创建卷组(VG)

    vgcreate vg_data /dev/sdb /dev/sdc /dev/sdd /dev/sde /dev/sdf /dev/sdg /dev/sdh /dev/sdi /dev/sdj /dev/sdk

    创建逻辑卷(LV)

    lvcreate -L 6T -n lv_data vg_data

    格式化逻辑卷

    mkfs.ext4 /dev/mapper/vg_data-lv_data

    挂载逻辑卷到目录

    mount /dev/mapper/vg_data-lv_data /data

    配置挂载配置文件

    vim /etc/fstab
    # 挂载信息
    /dev/mapper/vg_data-lv_data     /data    auto    defaults,nofail,comment=cloudconfig     0       2

  • 金蝶KIS专业版12.3安装配置日志

        金蝶KIS专业版12.3是年代比较久远的系统,如果能稳定运行还是建议保持现状,但是不幸出了问题就干脆尝试在windows11环境下安装金蝶KIS专业版12.3版本,安装过程中有几项老版本软件在新版系统的兼容问题,把整个过程和解决方法记录下来。

    安装前准备工作:

    1. 金蝶KIS专业版12.3原版程序
    2. SQL SERVER 2008 R2 原版程序
    3. OFFICE 2021 原版程序

    建议:金蝶在windows11建议使用SQLserver2008,windows11不支持自带的MSDE也不支持SQLserver2000 并且MSDE性能受限,程序跑起来早晚都要换成的SQLserver。

    安装OFFICE 2021

        windows11 安装office2021 没有任何问题,直接安装即可,此处略过。

    安装.NET Framework 3.5

        因要安装SQLserver2008需要安装.NET Framework 3.5,如果联网可以直接运动安装SQLserver2008,程序会提示你安装.NET Framework 3.5,直接在线安装即可,安装后建议你重启系统。如果没有联网需要你自行离线安装。这里忽略操作过程,可自行搜索安装教程。

    安装SQL SERVER 2008 R2

        安装好.NET Framework 3.5后,SQLserver的安装基本就是下一步下一步完成。在服务器配置项选择 “对所有SQLServer服务使用相同的账户” ,账户名选择 NT AUTHORITY\SYSTEM。在安装SQL server数据库引擎 “身份认证模式” 的地方,请选择混合模式,输入管理员(sa)密码,指定SQLserver管理员处,选择当前用户,安装完数据库请一定重新启动机器。

        注意:windows11安装SQLserver2008数据库的管理工作SQLServer Management Studio 点击后没反应,经过测试数据库服务正常,只是管理工具无法使用(可以忽略用户实际使用中并不会操作SQLserver),当然也单独安装一个高版本的管理工具,问题解决。SQLServer Management Studio可以通过搜索找到下载地址。

    安装金蝶KIS专业版12.3

        运行安装程序,运行环境检测,windows11执行完之前部署后,环境检测直接通过。开始进入安装,选择安装路径。导入授权文件,恢复备份数据,完毕。

        注意:注册过程中会出现自注册失败,发现有几个DLL无法注册(axscphst.dll, custtask.dll, dtsffile.dll, dtspkg.dll, dtspump.dll),点击确定继续安装,程序可以顺利进行安装,使用中也没有发现问题,如担心有问题请选择使用windows7系统。

  • office365和office2021有何区别

    Office 365和Office 2021的主要区别包括购买方式、使用方式、更新方式、支持多设备共同使用、免费移动应用、提供额外的存储网盘空间等方面。购买方式:Office 2021是一次性购买的,用户支付一次费用后即可永久使用。而Office 365是订阅服务,用户需要按月或年支付费用以继续使用。

    使用方式:Office 2021是桌面应用软件,需要安装到本地计算机上使用。Office 365则提供了离线使用和在线使用的选项,支持本地安装。

    更新方式:Office 2021在推出新版本后将停止更新,而Office 365支持新版本的持续更新,包括功能和修复bug。

    支持多设备共同使用:Office 365家庭版最多可以支持6台不同的设备使用,而Office 2021只能支持1个用户使用。

    免费移动应用:Office 365可以免费安装使用移动应用,而Office 2021在小于10.1英寸的平板电脑和手机上面能够获得基本编辑功能。

    提供额外的存储网盘空间:Office 365每人享有1TB的OneDrive云存储空间,而Office 2021的存储空间较小。

    综上所述,选择哪个版本主要取决于用户的需求,如是否需要持续更新、是否需要多设备共同使用、是否需要云存储等。如果用户对云端存储和使用人数没有特别要求,使用Office 2021可能更合算。

  • 微软 Win11快捷键大全

    除了全新的外观以外,Win11 在很多细节上也做出了调整。为了匹配新增加的功能模块,Win11 的快捷键和 Win10相比有了不同。接下来我们将对新版快捷键做一次汇总,看一看你都用过几个。

    1. Win+A 打开快速设置面板
      快速设置面板是 Win11 新增加的一个模块,可以完成一些常用功能(如 WIFI、飞行模式、投影、夜间模式、亮度、音量等)的快速启闭。Win+A 是这项功能的快捷键,按下后可以一键呼出这个面板。
    2. Win+B 快速跳转系统托盘
      Win+B 是系统托盘快捷键,按下后焦点会移至托盘,击打回车后就能直接看到托盘图标。
    3. Win+C 打开 Microsoft Teams
      Microsoft Teams 同样也是 Win11 中新增加的组件,发布会上微软曾用它演示即时通讯。Win+C 是这款组件的快捷键,无论任务栏上是否显示,都可以用它一键调出 Microsoft Teams。值得一提的是,在 Win10 中 Win+C 曾经是 Cortana(小娜)的快捷键。这一次 Win11 直接将其取消,或许也和 Cortana 一直表现不佳有关。
    4. Win+D 快速显示桌面
      工作中想要临时查看桌面内容,可以使用快捷键 Win+D,这是一个窗口最小化/恢复的切换键。按一下所有窗口最小化,再按一下窗口恢复,功能上类似于任务栏右侧的“显示桌面”。
    5. Win+E 打开资源管理器
      Win+E 是 Windows 的经典快捷键,很多 Windows 版本都支持,最大作用是在 Win11 中快速调出资源管理器。特别是当前台程序较多时,这项功能会显得特别高效。
    6. Win+F 一键提交反馈
      Win+F 是 Win11 的一键反馈键,按下后,会自动打开“反馈中心”里的“输入反馈”。功能上,与 Win10 版 Win+F 基本一致,但风格更匹配 Win11 系统。
    7. Win+G 启动 Xbox Game Bar
      Xbox Game Bar 是专为游戏玩家打造的一组小工具集合,内置有性能监测、多声道控制、截图录屏、资源管理、一键分享等多组模块。和 Win10 版相比,Win11 的 Xbox Game Bar 增加一个看点,那就是对 AutoHDR 的技术支持(也是 Win11 的一项压轴功能了)。
    8. Win+H 语音听写
      Win+H 是 Win11 的语音听写键,这项功能早在 Win10 时代便已出现,但 Win11 在整体识别率及标点匹配方面更出色!
    9. Win+I 打开设置
      Win11 对设置面板进行了重组,无论分类逻辑还是查找使用,均比旧版有所提升。Win+I 是该面板的快捷按键,尤其当左右手同时操作时,效率要比单纯使用鼠标更高。
    10. Win+K 投屏到其他设备
      Win+K 是 Win11 的投屏快捷键,可以将桌面直接投射到支持 Miracast 的电视或投影仪上。Win11 支持有线无线两种连接方式,特别是在会议现场,能够提供非常方便的桌面展示效果。
    11. Win+L 锁屏
      Win+L 大家应该非常熟悉了,和 Win10 版相比,Win11 的锁屏界面更简洁,看上去更像是手机的设计风格。功能则与旧版差不多,同样也支持信息的锁屏展示。
    12. Win+M 窗口最小化
      和 Win+D 一样,Win+M 也能将已打开的窗口最小化。不同的是,Win+D 可以实现窗口的最小化与还原,而 Win+M 只有最小化一项。此外,Win+D 可以通吃所有窗口,而 Win+M 对于某些特殊的对话框(比如“运行”)是不起作用的。
    13. Win+N 打开通知面板/月历面板
      Win+N 的作用是调出通知面板,由于 Win11 将月历与通知面板合在了一起,因此它的另一项功能,就是 —— 打开月历。
    14. Win+P 修改投影模式
      当电脑成功与外接显示器或投影仪连接后,即可按下 Win+P 修改投影模式。Win11 总共提供了三种投影样式,分别是“复制”(和电脑显示同步)、“扩展”(将第二台设备当作扩展显示器)和“仅第二屏幕”(仅在第二台设备上显示)。对于办公或游戏用户来说,这是一项经常会用到的功能。
    15. Win+Q/Win+S 一键搜索
      Win+Q 是 Win11 的一键搜索键,点击后会打开 Win11 的搜索栏。与之对应的还有一个 Win+S,两者功能完全一致。
    16. Win+R 运行
      Win+R 也是 Win11 里的经典快捷键,功能是调出“运行”对话框,主要用来打开那些不常用的系统功能。不多说了,大神手中 YYDS!
    17. Win+T 查看已打开程序缩略图
      Win+T 是 Win10 上流传下来的一项功能,按下快捷键后,Win11 会依次展开任务栏上所有已打开软件的缩略图,方便我们查看各程序的实时运行情况。
    18. Win+V 打开云剪贴板
      “云剪贴板”同样也是 Win10 里的经典模块,在 A 机上复制好的内容,可以在 B 机直接粘贴(需要登录同一个微软账号)。Win11 在此前基础上又增加了两个细节,分别是面板自由拖拽,以及国内用户非常喜欢的 Gif 动画。
    19. Win+W 呼出资讯与兴趣栏
      “资讯与兴趣栏”是 Win11 里又一项新增功能,类似于手机中的“负一屏”,可以提供桌面端新闻以及轻量化的办公应用。Win+W 是这项功能的快捷键,按下后可以直接呼出资讯与兴趣栏。
    20. Win+X 呼出简易开始菜单
      Win+X 是 Win11 里的菜单快捷键,按下后可以唤出一组包括 Windows 终端、磁盘管理、系统、任务管理器在内的系统级命令。特别是当 Win11 取消任务栏右键菜单后,这项功能正好可以弥补这一短板。
    21. Win+Z 打开窗口布局
      Win11 的窗口管理功能有了很大提升,一个最明显变化就是在一些超宽屏显示器(带鱼屏)上,将呈现左/中/右三栏窗口排列。此外它还新增了一个布局面板,以方便触屏用户手指操作。和其他新功能一样,Win11 也为它增加了一个快捷键,按下 Win+Z 后,即可快速完成窗口部署。
    22. Win + 空格 切换输入法
      在装有多款输入法的系统之中,Win + 空格可以快速完成输入法切换。
    23. Win + 光标键 窗口排版
      除了新增加的布局面板,Win11 还提供了另一种窗口排列方式,这就是 ——Win + 光标键。目前借助 Win 键 +→/↑/←/↓,可以实现左/右/左上/左下/右上/右下/全屏/最小化/上半屏九种组合,能够更快速地完成窗口布局。
    24. Win+TAB 虚拟桌面切换
      Win11 的虚拟桌面增加了窗口移动(Alt+Shift+←/→)、重命名、独立壁纸三项新功能,外观颜值也要比 Win10 版更高一些。Win+TAB 除了拥有基本的窗口管理功能外,还增加了新建桌面、桌面总览、桌面排序三项子功能,甚至你还可以用它将窗口转移至其他桌面。
    25. Win+Ctrl+D 新建虚拟桌面
      除了使用 Win+D 以外,Win11 还为我们提供了另一种建立虚拟桌面的方法,这就是 ——Win+Ctrl+D。和前者不同,Win+Ctrl+D 并不会显示总览页面,而是直接跳转到新添加的虚拟桌面中。因此我们也经常用它,作为保护个人隐私的一个手段。
    26. Win+Prtscn 一键截屏
      Win+PrtScn 是 Win11 里的一键截屏键,按下快捷键后,屏幕会首先闪一下,接下来在“此电脑-图片-屏幕截图”文件夹,就会出现一张刚刚截好的图片文件。和传统的 QQ 或微信截图相比,Win11 的这个操作显然更加高效。
    27. Win+Shift+S 专业截屏
      Win+Prtscn 虽然方便,却只能实现全屏截图,要想截取一些特殊形状就要借助这个 Win+Shift+S 了。和 Win+Prtscn 相比,Win+Shift+S 的功能更加全面,除了全屏截图外,还内置有窗口截图、区域截图、自由截图、延迟截图(需在编辑器内选择)四种特殊截图模式。此外它还自带了一个简易编辑器,可以对截好的图片快速标注、测量与裁剪。
    28. Win+Home 最小化非活动窗口
      打开窗口过多,会严重影响前端的工作效率,这时 Win+Home 就能派上用场了。Win+Home 是非活动窗口最小化键,类似于鼠标里的“窗口摇动”。和窗口摇动一样,除了能将所有窗口(当前窗口除外)一键最小化外,再次按下 Win+Home,也能将已经最小化的窗口复原。
  • 优雅的使用 Dockerfile 定制镜像,值得收藏!

    前言

    大家好,本文是对 Docker 自定义镜像的详细讲解,讲解了如何进行构建自己的 Docker 镜像以及 Dockerfile 的操作指令。希望对大家有所帮助~

    (更多…)
  • 安装win11提示,这台电脑无法运行 Windows 11 的解决方法 

    TPM (Trusted Platform Module) 受信任的平台模块,技术旨在提供基于硬件的安全相关功能。 TPM 芯片是一种安全的加密处理器,旨在执行加密操作。 该芯片包含多个物理安全机制以使其防篡改,并且恶意软件无法篡改 TPM 的安全功能。 使用 TPM 技术的一些主要优点是你可以实现以下目的:生成、存储和限制使用加密密钥。通过使用刻录到其自身的 TPM 的唯一 RSA 密钥,将 TPM 技术用于平台设备身份验证。通过采用并存储安全措施可帮助确保平台的完整性。

    (更多…)
  • Ubuntu Server 20.04开启root登录ssh的方式

    网上很多资料都是介绍桌面版的,对server版不管用,其实server版开放root登录要简单的多,只需要三步:

    1、sudo passwd root 设置root密码

    2、sudo vi /etc/ssh/sshd_config 修改

    PermitRootLogin without-password

    PermitRootLogin yes

    3、sudo systemctl restart sshd 重启sshd服务


    然后就可以使用root登录了

  • WORD单行表格到EXECEL后变成了多行表

    第一步:将WORD 表格中的换行符 变成 自己定义的特殊字符,比如将换行符替换成@#

    第二步:点击全部替换后,将WORD 表格复制到 EXCEL

    第三步:通过公式 将EXCEL 表格的@#变成换行符。

    1、 例如:C 列 中的 @# 替换成 换行符。

    2、 在空白列G列第1行  双击输入 =SUBSTITUTE(C1,”@#”,CHAR(10)),然后下拉G1右下角到底。

    3、 点整个表格左上角(或者用ALT+A),将整个表格单元格设置成 自动换行

    4、 看结果:在G列中出现,跟WORD 表格中一样的换行。

    第四步:将用公式换好的内容 复制到 想要的位置。

    选中G列,复制,然后在C列 右键 粘贴-》选123 ;完美的做到了。

  • centos6 无法yum的解决办法

    sed -i “s|enabled=1|enabled=0|g” /etc/yum/pluginconf.d/fastestmirror.conf

    mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup

    curl -o /etc/yum.repos.d/CentOS-Base.repo https://www.xmpan.com/Centos-6-Vault-Aliyun.repo

    yum clean all

    yum makecache

  • phpmyadmin启用外键约束执行

    如果一个表的某个字段是另一个表的外键,那么它们之间就存在外键约束关系内,当你删除(或修改)容这个表时,另一个表也会受到牵连,这时如果勾选“启用外键约束”,phpmyadmin就会自动帮你处理(比如说会自动把另一个表中有对应关系的记录删掉),如果没有勾选,则不会处理。
    当然,前提条件是你设置了外键,如果表与表之间都没有外键约束关系,那么是否勾选“启用外键约束”都是没区别的。