Marco Nie you are the company you keep... 2025-01-17T17:14:00+08:00 Typecho https://blog.niekun.net/feed/atom/ <![CDATA[honkit 使用教程及部署github page]]> https://blog.niekun.net/archives/3021.html 2025-01-17T17:14:00+08:00 2025-01-17T17:14:00+08:00 admin https://niekun.net 1. 什么是 Honkit?

Honkit 是一个现代化的静态书籍生成工具,它是基于旧版 GitBook 开发的,支持 Markdown 文件的编写和多种输出格式,如 HTML 和 PDF。

2. 初始化 Honkit 项目

2.1 创建 Honkit 项目

  1. 创建项目目录

    mkdir my-honkit-project
    cd my-honkit-project
  2. 初始化 Honkit 项目

    npx honkit init

    这会生成以下两个文件:

    • README.md:书籍的主页面。
    • SUMMARY.md:目录结构的定义。
  3. 安装 Honkit

    npm install honkit --save-dev

3. 本地构建书籍

3.1 运行开发服务器

在项目目录中运行以下命令启动本地预览:

npx honkit serve

默认情况下,书籍会在 http://localhost:4000 上运行。

3.2 生成静态文件

当书籍准备好后,运行以下命令生成静态 HTML 文件:

npx honkit build

生成的文件会存储在 _book 目录中。


4. 生成 PDF 文件

Honkit 支持将书籍生成 PDF 文件,但需要预先安装 Calibre 电子书管理软件。

4.1 安装 Calibre

  1. 下载 Calibre

  2. 确保 Calibre 路径正确

    • 检查环境变量

      • 通常,Calibre 安装会自动将路径添加到系统的环境变量 PATH 中。
      • 如果未自动添加,手动将 Calibre 的安装目录路径添加到 PATH 环境变量中。
    • 例如,Windows 系统下,路径可能为:

      C:\Program Files\Calibre2
    • Linux 和 macOS 用户可通过以下命令验证:

      which ebook-convert

      如果返回路径为空,说明需要手动添加。

  3. 重新打开终端
    添加路径后,确保关闭并重新打开终端。

4.2 生成 PDF

运行以下命令生成 PDF 文件:

npx honkit pdf . output.pdf
  • . 表示当前目录。
  • output.pdf 是生成的 PDF 文件名。

5. 部署到 GitHub Pages

5.1 创建 GitHub 仓库

  1. 前往 GitHub 创建一个新仓库(例如 my-honkit-book)。
  2. 将本地项目与远程仓库关联:

    git init
    git remote add origin https://github.com/<username>/my-honkit-book.git
    git add .
    git commit -m "Initial commit"
    git branch -M main
    git push -u origin main

5.2 配置 GitHub Actions 自动部署

  1. 创建 GitHub Actions 配置文件
    在项目的根目录下创建 .github/workflows/deploy.yml 文件,内容如下:

    name: Deploy Honkit to GitHub Pages
    
    on:
      push:
        branches:
          - main
    
    jobs:
      build:
        runs-on: ubuntu-latest
    
        steps:
        - name: Checkout Code
          uses: actions/checkout@v3
    
        - name: Setup Node.js
          uses: actions/setup-node@v3
          with:
            node-version: '18'
    
        - name: Install Dependencies
          run: npm install
    
        - name: Build Honkit
          run: npx honkit build
    
        - name: Deploy to GitHub Pages
          uses: peaceiris/actions-gh-pages@v3
          with:
            github_token: ${{ secrets.GITHUB_TOKEN }}
            publish_dir: ./_book
  2. 提交配置文件
    提交并推送配置文件到 GitHub:

    git add .github/workflows/deploy.yml
    git commit -m "Add GitHub Actions for deployment"
    git push origin main
  3. 启用 GitHub Pages

    • 进入仓库的 Settings > Pages
    • Source 下选择 gh-pages 分支,点击保存。

6. 绑定自定义域名

6.1 配置 GitHub Pages

  1. 进入仓库的 Settings > Pages
  2. Custom domain 中输入您的自定义域名(例如 www.example.com)。
  3. 点击 Save。GitHub 会自动生成一个 CNAME 文件。

6.2 配置 DNS 记录

登录您的域名注册商控制台,添加以下 DNS 记录:

  • 绑定子域名(例如 www.example.com):
    添加 CNAME 记录

    www  CNAME  <username>.github.io
注意:将 <username> 替换为您的 GitHub 用户名。

6.3 启用 HTTPS

  1. 返回 GitHub 仓库的 Settings > Pages
  2. 勾选 Enforce HTTPS,以启用 HTTPS 访问。

自定义域名每次推送后消失的解决方法

当每次推送代码后,自定义域名设置消失,通常是由于 CNAME 文件被覆盖或删除。GitHub Pages 需要根目录的 CNAME 文件来保存自定义域名信息。如果该文件丢失或被覆盖,GitHub 就无法识别您的自定义域名。


解决方法

手动将 CNAME 文件添加到源码目录

  1. 创建 CNAME 文件
    在项目根目录(如 main 分支)下创建一个 CNAME 文件,并在文件中输入您的自定义域名,例如:

    www.example.com
  2. 提交更改
    提交并推送 CNAME 文件到远程仓库:

    git add CNAME
    git commit -m "Add CNAME file"
    git push origin main
  3. 验证
    每次部署后,CNAME 文件会自动被包含在 gh-pages 分支中,不会被覆盖。

验证步骤

  1. 检查 CNAME 文件

    • 进入 GitHub 仓库的 gh-pages 分支,确认根目录下有 CNAME 文件。
    • 文件内容应为您的自定义域名,例如:

      www.example.com
  2. 检查 GitHub Pages 设置

    • 转到 Settings > Pages
    • 确认自定义域名已正确显示,并启用 HTTPS
  3. 测试访问
    使用您的自定义域名访问页面,确认是否能够正确加载。

7. 常见问题及解决方法

问题 1:npx honkit pdf 报错 Command failed: ebook-convert not found

原因
Calibre 未正确安装,或 ebook-convert 工具未添加到系统的 PATH 环境变量中。

解决方法

  1. 确保 Calibre 已安装,并重新确认安装路径:

    • Windows 默认路径:C:\Program Files\Calibre2
    • macOS/Linux 使用 which ebook-convert 检查路径。
  2. 手动将 Calibre 的安装路径添加到系统环境变量中:

    • Windows

      • 打开“环境变量”设置,找到 PATH
      • 添加 C:\Program Files\Calibre2
    • Linux/macOS

      • 编辑 ~/.bashrc~/.zshrc 文件,添加以下内容:

        export PATH="/path/to/calibre:$PATH"

        替换 /path/to/calibre 为 Calibre 的实际路径。

      • 保存后运行 source ~/.bashrcsource ~/.zshrc 使更改生效。
  3. 重新运行 npx honkit pdf

问题 2:GitHub Actions 部署失败,提示 Permission denied

原因
GitHub Actions 无法向 gh-pages 分支推送更改,通常是因为缺少权限。

解决方法

  1. 确保 GitHub 仓库的 Settings > Actions > General 中已启用 Read and write permissions

    • 打开 Workflow permissions,选择 Read and write permissions
    • 勾选 Allow GitHub Actions to create and approve pull requests
  2. 确认 GitHub Actions 配置文件中使用的是 github_token

    with:
      github_token: ${{ secrets.GITHUB_TOKEN }}

问题 3:GitHub Pages 部署成功,但自定义域名未生效

原因
DNS 记录配置错误或未生效。

解决方法

  1. 登录域名管理平台,检查 DNS 配置:

    • 确认 A 记录或 CNAME 记录配置正确。
    • 等待 DNS 记录生效(可能需要 5-48 小时)。
  2. 检查仓库根目录下是否有 CNAME 文件,内容是否正确(应与自定义域名一致)。
  3. 验证 DNS 配置是否正确:

  4. 启用 HTTPS:

    • 进入 Settings > Pages,勾选 Enforce HTTPS

问题 4:生成的书籍内容显示错乱或样式缺失

原因

  • Markdown 文件中格式不正确。
  • SUMMARY.md 的目录结构未正确链接。

解决方法

  1. 确认 Markdown 文件的格式是否符合规范。
  2. 检查 SUMMARY.md 中的链接是否与文件路径一致:

    * [章节标题](path/to/file.md)
  3. 清理并重新构建书籍:

    npx honkit build

问题 5:自定义 PDF 样式未生效

原因
未指定自定义样式文件或样式文件路径错误。

解决方法

  1. 创建一个 CSS 样式文件(如 custom.css),自定义 PDF 的排版样式。
  2. 使用以下命令生成 PDF 并指定样式文件:

    npx honkit pdf --css custom.css . output.pdf

    8. 支持与反馈

如果您遇到未列出的问题或有其他疑问,请参考以下支持途径:

完成这些步骤后,您可以成功使用 Honkit 创建、部署和管理文档,解决常见问题,并生成符合您需求的 HTML 和 PDF 文档!

]]>
<![CDATA[docker compose 配置自动更新]]> https://blog.niekun.net/archives/docker-compose.html 2024-08-18T21:42:00+08:00 2024-08-18T21:42:00+08:00 admin https://niekun.net docker compose 配置文件可以很方便的配置和运行 docker 容器,手动更新容器的方法是在 yml 目录下运行以下命令:

docker compose pull && docker compose up -d

可以通过在 compose 文件中设置 watchtower 来定期自动拉取最新镜像并启动容器,同时可以配置删除旧镜像和容器。

在 docker-compose.yml 文件中增加以下内容:

version: '3'
services:

  ...

  watchtower:
    image: containrrr/watchtower
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    command: --interval 3600 --cleanup --remove-volumes
    environment:
      - WATCHTOWER_CLEANUP=true
      - WATCHTOWER_REMOVE_VOLUMES=true

以下是主要的配置说明:

  • --interval 参数设置为 3600。这意味着 Watchtower 将每 3600 秒(即每小时)检查一次更新。
  • --cleanupWATCHTOWER_CLEANUP=true 确保在更新后清理旧的镜像。
  • --remove-volumesWATCHTOWER_REMOVE_VOLUMES=true 确保删除与旧容器关联的匿名卷。

使用这个配置,Watchtower 将:

  • 每小时检查一次你的容器是否有更新
  • 如果发现更新,它会停止旧容器,启动新容器
  • 删除旧的容器和相关的匿名卷
  • 删除旧的镜像

这个配置应该能满足大多数用例的需求,既能保持你的容器相对最新,又不会过于频繁地进行检查和更新操作。

需要注意的是:

  • Watchtower 只会删除它更新的容器的旧版本。它不会删除系统中的其他未使用的容器或镜像。
  • 它只删除匿名卷,不会删除命名卷。
  • 如果你想删除所有未使用的镜像(不仅仅是 Watchtower 更新的),你可能需要定期运行 docker image prune 命令。
]]>
<![CDATA[通过浏览器访问服务器指定文件内容]]> https://blog.niekun.net/archives/3014.html 2024-08-14T15:58:01+08:00 2024-08-14T15:58:01+08:00 admin https://niekun.net 通过 nginx 可以反代服务器指定文件,然后就可以在网页中查看文件内容。

核心就是通过 alias 关联文件路径。

配置文件如下:

location /test.log {
    alias /home/script/igd/app.log;

    default_type text/plain;
    add_header Content-Type "text/plain; charset=utf-8";
    charset utf-8;

    # 确保不会缓存内容
    add_header Cache-Control "no-cache, no-store, must-revalidate";
    add_header Pragma "no-cache";
    add_header Expires "0";
}

location 路径替换为需要的路径。alias 设置文件实际路径。

]]>
<![CDATA[将路径加入系统 path]]> https://blog.niekun.net/archives/path.html 2024-08-10T11:06:00+08:00 2024-08-10T11:06:00+08:00 admin https://niekun.net 将路径加入系统 path 可以方便的在终端调用目录中的可执行文件或脚本。windows 和 macOS 设置方法不同,下面分别介绍。

windows

参考之前的文章:https://blog.niekun.net/archives/413.html

macos

确定您的 shell 类型。打开终端,运行以下命令:

echo $SHELL

这通常会返回 /bin/zsh/bin/bash

根据您的 shell 类型,编辑相应的配置文件:

对于 Zsh(最新的 macOS 默认使用):编辑 ~/.zshrc
对于 Bash:编辑 ~/.bash_profile~/.bashrc

使用文本编辑器打开相应的文件。例如,对于 zsh:

vim ~/.zshrc

在文件末尾添加以下行(替换为您的实际脚本目录路径):

export PATH="/path/script:$PATH"

保存并关闭文件。使更改生效,可以重新加载配置文件或重启终端。要重新加载,运行:

source ~/.zshrc  # 如果使用 Zsh
source ~/.bash_profile  # 如果使用 Bash

验证 PATH 更新:

echo $PATH

您应该能看到您的脚本目录已被添加。现在,您应该能够直接运行脚本,而不需要指定完整路径:

test.sh

注意事项:

  • 确保您的脚本有正确的执行权限(chmod +x script_name.sh)。
  • 如果脚本名称与系统命令冲突,考虑重命名脚本或使用唯一前缀
]]>
<![CDATA[macOS 下使用 automator 给视频文件添加快捷压缩动作]]> https://blog.niekun.net/archives/macOS-automator.html 2024-08-01T14:42:36+08:00 2024-08-01T14:42:36+08:00 admin https://niekun.net 最近学习到了一条可以大幅度压缩视频体积且观感上视频质量没有很大损失的 ffmpeg 命令:

ffmpeg -i input.mov -c:v libx264 -crf 30 -r 24 -movflags faststart -c:a aac -b:a 128k -preset superfast out.mp4

但是每次在命令行执行这么复杂的命令还是很不方便的,可以使用 macOS 自带的 automator 自动化工具制作一个简单的右键菜单动作,方便的对视频文件快速压缩。

打开 automator 新建一个 quick action,添加一个 run sheel script:
image.png

脚本内容如下:

for f in "$@"
do
    /opt/homebrew/bin/ffmpeg -i "$f" -c:v libx264 -crf 30 -r 24 -movflags faststart -c:a aac -b:a 128k -preset superfast "${f%.*}_compressed.mp4"
done

# 播放声音
afplay /System/Library/Sounds/Blow.aiff

# 显示对话框
osascript -e 'tell app "System Events" to display dialog "视频压缩已完成" with title "通知" buttons {"OK"} default button "OK"'

保存后,在视频文件右键菜单的 action 栏就可以看到我们添加的动作了:
image.png

点击执行动作,完成后会有提示信息。

]]>
<![CDATA[使用虚拟环境 env 开发 python]]> https://blog.niekun.net/archives/env-python.html 2024-07-01T10:17:13+08:00 2024-07-01T10:17:13+08:00 admin https://niekun.net 使用虚拟环境进行Python开发有助于隔离项目的依赖,避免不同项目之间的库版本冲突。以下是如何创建和使用虚拟环境的详细步骤。

Python 3.3 及以上版本自带 venv 模块,可以直接使用。

使用 venv 创建虚拟环境

创建虚拟环境

在你的项目目录下,运行以下命令来创建一个虚拟环境,这将在项目目录下创建一个名为 myenv 的文件夹,其中包含虚拟环境的所有文件:

python -m venv myenv

激活虚拟环境

Windows:

myenv\Scripts\activate

macOS 和 Linux:

source myenv/bin/activate

安装依赖

在虚拟环境中,你可以使用 pip 来安装项目所需的库:

pip install requests

安装的库将只会影响当前虚拟环境,而不会影响系统的 Python 环境或其他项目。

冻结依赖

为了确保你的项目依赖可以在其他环境中重现,你可以使用以下命令将当前环境的依赖写入 requirements.txt 文件:

pip freeze > requirements.txt

requirements.txt 文件将包含所有当前环境中的安装包及其版本信息。

使用 requirements.txt 安装依赖

在新的环境中,你可以使用 requirements.txt 文件来安装所需的所有依赖:

pip install -r requirements.txt

退出虚拟环境

当你完成工作时,可以通过以下命令退出虚拟环境:

deactivate

使用虚拟环境进行Python开发可以有效地隔离项目依赖,避免版本冲突。通过创建和激活虚拟环境、安装依赖、冻结依赖并在新环境中重新安装依赖,可以确保你的项目在不同环境中具有一致的运行表现。

]]>
<![CDATA[服务器装 warp 解锁 chatgpt]]> https://blog.niekun.net/archives/Linux-warp.html 2024-06-27T15:12:00+08:00 2024-06-27T15:12:00+08:00 admin https://niekun.net 最近在使用 chatgpt 中发现 ios 端无法登录 app,网页端正常使用。提示信息为:

Something went wrong. You may be connected to a disallowed ISP If youare using VPN, try disabling it. Otherwise try a different Wi-Fi network or data connection。

经过查询发现是我的 vps 服务商只提供网页端 chatgpt 解锁,不支持 app 端。由于 chatgpt 服务也是通过 cloudflare 的 cdn 服务,所以通过将流量转发到 warp 来访问就可以解决问题。

首先需要在服务端安装官方的 warp 命令行工具:warp-cli。

官方教程:https://developers.cloudflare.com/warp-client/get-started/linux/

官方手动添加包仓库教程:https://pkg.cloudflareclient.com/#ubuntu

安装

在命令行输入以下指令来安装第三方仓库并安装包:

# Add cloudflare gpg key
curl -fsSL https://pkg.cloudflareclient.com/pubkey.gpg | sudo gpg --yes --dearmor --output /usr/share/keyrings/cloudflare-warp-archive-keyring.gpg

# Add this repo to your apt repositories
echo "deb [signed-by=/usr/share/keyrings/cloudflare-warp-archive-keyring.gpg] https://pkg.cloudflareclient.com/ $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/cloudflare-client.list

# Install
sudo apt-get update && sudo apt-get install cloudflare-warp

配置

安装好后需要注册一个新账户:

warp-cli registration new

查看当前账户信息:

warp-cli registration show

更换新的 license:

warp-cli registration license xxxxx-xxxxxx-xxxxxx

然后需要设置代理模式,可选有:warp, doh, warp+doh, dot, warp+dot, proxy, tunnel_only。

我只想要它提供一个 socks5 代理端口即可,所以设置为 proxy 模式,它会在本地 40000 端口监听:

warp-cli mode proxy

启动 warp:

warp-cli connect

此时 warp 会在本地 40000 端口建立一个 sock5 代理,只需要将需要转发的流量转发到此端口即可走 warp。并且 warp 会自动配置为 Always On 模式,开机自动运行代理。

查看 warp 当前配置:

# warp-cli settings
Merged configuration:
(derived)       Always On: true
(default)       Switch Locked: false
(user set)      Mode: WarpProxy on port 40000
(Not set)       WARP tunnel protocol: Wireguard
(default)       Disabled for Wifi: false
(default)       Disabled for Ethernet: false
(Not set)       Resolve via: cloudflare-dns.com @ [162.159.36.1, 2606:4700:4700::1111]
(Not set)       qlog logging: Disabled
(default)       Onboarding: true
(API defaults)  Exclude mode, with hosts/ips:
  10.0.0.0/8
  100.64.0.0/10
  169.254.0.0/16
  172.16.0.0/12
  192.0.0.0/24
  192.168.0.0/16
  224.0.0.0/24
  240.0.0.0/4
  239.255.255.250/32
  255.255.255.255/32
  fe80::/10
  fd00::/8
  ff01::/16
  ff02::/16
  ff03::/16
  ff04::/16
  ff05::/16
  fc00::/7

(default)       Fallback domains:
  intranet
  internal
  private
  localdomain
  domain
  lan
  home
  host
  corp
  local
  localhost
  home.arpa
  invalid
  test
(Not set)       Daemon Teams Auth: false
(default)       Disable Auto Fallback: false
(Not set)       Allow Updates: true

查看代理是否生效:

export ALL_PROXY=socks5://127.0.0.1:40000
curl ifconfig.me

代理工具转发流量

服务端的配置文件需要添加和修改的地方如下:

{
    "outbounds": [
        ...
        {
            "protocol": "socks",
            "settings": {
                "address": "127.0.0.1",
                "port": 40000
            },
            "tag":"socks_out"
        }
    ],
    "router": {
        "domainStrategy": "AsIs",
        "rule": [
            ...
            {
                "tag": "socks_out",
                "geoDomain": [
                    {
                        "code": "openai",
                        "filePath": "geosite.dat"
                    }
                ],
                "domainMatcher": "mph"
            }
        ]
    },
    "inbounds": [
        {
            "protocol": "vmess",
            ...
            "sniffing": {
                "enabled": true,
                "destOverride": [
                    "http",
                    "tls"
                ]
            },
            ...

注意需要安装扩展版的 geosite.dat 才有 openai 的条目:https://github.com/Loyalsoldier/v2ray-rules-dat

通过访问以下网址测试是否已经解锁 ios app 端:https://ios.chat.openai.com/public-api/mobile/server_status/v1

以上就是解决 chatgpt 无法访问的方法。

]]>
<![CDATA[蜗杆基础知识]]> https://blog.niekun.net/archives/2999.html 2024-06-24T09:51:49+08:00 2024-06-24T09:51:49+08:00 admin https://niekun.net http://www.qsjsj.com/zhinan/ptyzwgcdfljjgff.html
https://domm.muzing.top/chapter_11#pu-tong-yuan-zhu-wo-gan-chuan-dong-de-ji-ben-can-shu-ji-qi-xuan-ze
https://m.cadhome.net/news/proejc/716.html
http://www.qsjsj.com/zhinan/AJMDWGJYHYZWGCSJSGS.html
http://www.lyfy.net/wheel/ptcwstyle.htm

]]>
<![CDATA[屏蔽 quic 流量]]> https://blog.niekun.net/archives/openwrt-quic.html 2024-06-01T15:53:42+08:00 2024-06-01T15:53:42+08:00 admin https://niekun.net 最近在使用一些服务的时候发现流量没有正确的按照设定的规则走,发现部分网站已经优先支持 quic 也就是 http3 协议了,而这种协议目前一些客户端无法正确解析。解决方法就是将 quic 流量屏蔽掉,让那些网站强制走 http 或 http2 即可。

quic 协议走的是 udp 层,一般是 443 或 80 端口。

openwrt 或其他 linux 系统上使用 nftables 设置规则即可:

新建路由表
nft add table ip tabletest

# 局域网流量屏蔽
# 局域网流量目标地址是外部地址时传输路径为 prerouting -> forward -> postrouting hooks
nft add chain ip tabletest prerouting { type nat hook prerouting priority 0 \; policy accept \; }
nft add rule ip tabletest prerouting udp dport { 80, 443 } drop

# 本机网关流量屏蔽
# 本机网关流量目标地址时外部地址时传输路径为 本机 -> output -> postrouting hooks
nft add chain ip tabletest output { type nat hook output priority 0 \; policy accept \; }
nft add rule ip tabletest output udp dport { 80, 443 } drop

在 Chrome 中禁用 HTTP/3:

  • 打开 Chrome 浏览器
  • 在地址栏输入 chrome://flags 并按回车。
  • 在搜索框中输入 quic。
  • 将 Experimental QUIC protocol 设置为 Disabled。
  • 重启浏览器。

在 Firefox 中禁用 HTTP/3:

  • 打开 Firefox 浏览器。
  • 在地址栏输入 about:config 并按回车。
  • 接受风险提示。
  • 搜索 network.http.http3.enabled。
    -将其值设置为 false。
]]>
<![CDATA[修改 pip 为国内源]]> https://blog.niekun.net/archives/pip.html 2024-05-30T20:02:55+08:00 2024-05-30T20:02:55+08:00 admin https://niekun.net 一键替换命令:

# 清华源
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple

# 阿里源
pip config set global.index-url https://mirrors.aliyun.com/pypi/simple/

# 腾讯源
pip config set global.index-url http://mirrors.cloud.tencent.com/pypi/simple

# 豆瓣源
pip config set global.index-url http://pypi.douban.com/simple/

# 换回默认源
pip config unset global.index-url
]]>