博客

  • 使用 Immich CLI 上传照片和视频

    要求

    在使用 Immich CLI 之前,请确保您的环境满足以下条件:

    • Node.js 20 或更高版本
    • npm(Node.js 包管理器)

    安装 Immich CLI

    全局安装

    使用 npm 进行全局安装 Immich CLI:

    npm i -g @immich/cli

    卸载旧版本

    如果您之前安装过旧版 CLI,建议先卸载以避免冲突:

    npm uninstall -g immich

    快速入门

    在使用 Immich CLI 之前,您需要先进行身份验证,并连接到您的 Immich 服务器。

    1. 认证登录

    您需要使用 API 密钥向 Immich 服务器进行身份验证。
    执行以下命令,将 [服务器地址] 和 [API 密钥] 替换为实际值:

    immich login [服务器地址] [API 密钥]

    示例:

    immich login http://192.168.1.216:2283/api HFEJ38DNSDUEG

    认证成功后:

    • CLI 会自动将您的凭据存储在 auth.yml 配置文件中。
    • 默认情况下,该文件位于 ~/.config/ 目录下。
    • 如果需要自定义存储目录,可以使用 -d 选项或 IMMICH_CONFIG_DIR 环境变量。

    安全提示:

    • 为确保账户安全,在使用完 CLI 后,建议执行 immich logout 注销,或手动删除 auth.yml 文件。

    2. 上传文件到 Immich 服务器

    上传单个或多个文件

    如果要上传单个文件或多个文件,可以直接指定文件路径:

    immich upload file1.jpg file2.jpg

    上传整个目录(默认不包含子文件夹)

    如果要上传目录中的所有文件(不包括子目录),可执行:

    immich upload directory/

    上传包含子文件夹的目录

    如果目录中包含多个子文件夹,并希望上传所有内容,请使用 --recursive 选项:

    immich upload --recursive directory/

    3. 预览上传内容

    如果不确定哪些文件会被上传,或者希望在执行前进行确认,可以使用 --dry-run 选项进行模拟运行:

    immich upload --dry-run --recursive directory/

    此命令不会实际上传文件,只会显示哪些文件将被上传。

    4. 提高上传性能

    跳过哈希计算

    默认情况下,Immich 在上传文件前会计算哈希值,以避免重复上传。
    如果您确定文件是唯一的,并希望加快上传速度,可以使用 --skip-hash 选项跳过哈希计算:

    immich upload --skip-hash --recursive directory/

    注意:

    • Immich 服务器仍会进行哈希处理以执行重复数据删除,因此这个选项仅影响客户端性能。
    • 如果您的带宽充足,跳过哈希计算可以加快上传速度。

    5. 自动管理相册

    Immich CLI 支持自动创建相册,并根据文件夹名称或自定义名称进行管理。

    根据文件夹名称自动创建相册

    使用 --album 选项,Immich 会根据文件夹名称自动创建相册,并将对应文件上传到相册中:

    immich upload --album --recursive directory/

    上传文件到指定相册

    如果希望将所有文件上传到一个特定相册,可以使用 --album-name 选项:

    immich upload --album-name "My Summer Holiday" --recursive directory/

    6. 过滤上传文件

    有时,您可能需要跳过某些文件或目录,Immich 提供了 --ignore 选项来实现文件过滤。

    跳过特定文件或文件夹

    例如,如果您想跳过 Raw 文件夹下的所有内容,可以执行:

    immich upload --ignore **/Raw/** --recursive directory/

    排除多个文件类型

    可以使用多个 --ignore 规则,匹配不同的文件类型,例如排除 .tif 文件:

    immich upload --ignore **/Raw/** **/*.tif --recursive directory/

    7. 包含隐藏文件

    默认情况下,Immich 不会上传隐藏文件(文件名以 . 开头)。
    如果希望上传隐藏文件,可以使用 --include-hidden 选项:

    immich upload --include-hidden --recursive directory/

    获取 API 密钥

    使用 Immich CLI 之前,您需要一个 API 密钥,该密钥可以在 Web 界面的 用户设置面板 中获取。

    获取 API 密钥的步骤:

    1. 进入 Immich Web 管理界面
    2. 在 用户设置 页面中找到 API Key 选项
    3. 生成新的 API 密钥并复制,用于 CLI 登录
  • WordPress限制文章修订版本数量

    1. 为什么要限制文章修订版本?

    WordPress 默认会在每次保存或更新文章时创建一个修订版本。这在编辑过程中可以提供历史记录,方便回滚到之前的版本。然而,如果不加限制,数据库会累积大量的修订版本,可能会影响网站性能。因此,限制修订版本的数量可以减少数据库冗余,提高查询效率。

    2. 通过 wp-config.php 限制修订版本数量

    WordPress 允许通过 wp-config.php 文件限制文章的修订版本数量。

    步骤

    1. 打开 WordPress 安装目录 通过 FTP 或 SSH 访问 WordPress 站点的根目录。
    2. 编辑 wp-config.php 文件 使用文本编辑器打开 wp-config.php 文件。
    3. 添加以下代码 在 wp-config.php 文件中
    // Enable WordPress article revisions, limited to 3
    define( 'WP_POST_REVISIONS', 3 );
    1. 保存并上传 保存修改后的 wp-config.php 文件,并上传回服务器。

    3. 其他可选设置

    • 完全禁用修订版本 如果不想存储任何修订版本,可以使用以下代码:
    // Disable WordPress article revisions
    define( 'WP_POST_REVISIONS', false );

    这将禁止 WordPress 存储任何修订版本,仅保留自动保存的版本。

    • 完全启用修订版本 如果想存储每个修订版本,可以使用以下代码:
    // Enable WordPress article version revision
    define( 'WP_POST_REVISIONS', true );

    这将启用 WordPress 存储存储每个修订版本

    • 设置更高或更低的限制 如果需要更改存储的修订版本数量,只需修改 WP_POST_REVISIONS 的值。例如,存储 5 个修订版本:
    // Enable WordPress article revisions, limited to 5
    define( 'WP_POST_REVISIONS', 5 );
  • Windows 11如何彻底关闭 Shift 切换中英文输入

    关闭 Windows 11 中 Shift 键切换中英文输入的功能,主要是为了提高输入效率、减少误操作和干扰。许多用户在使用过程中可能会不小心按到 Shift 键,从而导致语言切换,这种情况往往会打断输入流程。通过关闭 Shift 键切换,可以避免这一问题,并且让用户可以根据自己的需求自定义输入法切换方式,提升工作或学习的效率。

    1. 打开“设置”:
      • 按下 Win + I 组合键,或者点击“开始”菜单,然后点击“设置”图标。
    2. 进入“时间和语言”:
      • 在“设置”窗口中,点击“时间和语言”。
    3. 选择“语言和区域”:
      • 在“时间和语言”菜单中,点击“语言和区域”。
    4. 选择“中文(简体,中国)”:
      • 在语言列表中找到“中文(简体,中国)”然后点击它。
    5. 点击“语言选项”:
      • 在中文(简体,中国)的选项下面,点击“语言选项”。
    6. 点击“微软拼音”的“键盘选项”:
      • 在键盘选项里,找到“微软拼音”选项,然后点击“键盘选项”。
    7. 点击“按键”:
      • 在微软拼音的键盘选项里面,点击“按键”选项。
    8. 取消 Shift 选项:
      • 在按键选项里面,找到与shift切换相关的选项,取消相关选项,然后点击确定。
  • Ollama 安全加固措施

    Ollama 安全加固措施

    为了保护在公网上运行的 Ollama 服务并限制访问,可以采取以下措施:

    方法一:通过防火墙限制

    Linux系统 使用 ufw 防火墙

    1. 检查 Ollama 默认监听的端口(通常是 11434)。
    2. 配置 ufw 只允许指定 IP 访问 11434 端口:
    # 允许指定 IP 访问 11434 端口
    ufw allow from <指定IP> to any port 11434 proto tcp
    
    # 拒绝其他所有 IP 访问 11434 端口
    ufw deny in to any port 11434 proto tcp

    将 <指定IP> 替换为允许访问的 IP 地址(如 192.168.1.100)。完成后,重新加载防火墙规则:

    ufw reload

    确保 ufw 已启用:

    ufw enable

    Windows 系统(使用 Windows 防火墙)

    1. 打开“Windows Defender 防火墙” -> “高级设置”。
    2. 创建一个新的“入站规则”,选择端口 11434,协议为 TCP。
    3. 在“范围”选项中,指定允许访问的远程 IP 地址。
    4. 保存并应用规则,其他未指定的 IP 将被阻止。

    方法二:修改 Ollama 监听地址(配合防火墙)

    默认情况下,Ollama 可能监听 0.0.0.0(所有接口)。你可以将其改为仅监听本地接口(127.0.0.1),然后通过反向代理(如 Nginx)控制访问。

    设置环境变量 OLLAMA_HOST:

    Linux:

    在 /etc/systemd/system/ollama.service 中添加:

    Environment="OLLAMA_HOST=127.0.0.1:11434"

    然后重启ollama服务

    systemctl daemon-reload
    systemctl restart ollama

    Windows:

    在系统环境变量中添加 OLLAMA_HOST=127.0.0.1:11434,然后重启 Ollama 服务。

    通过配置Nginx反向代理,在代理层限制 IP:

    server {
        listen 80;
        location / {
            proxy_pass http://127.0.0.1:11434;
            allow <指定IP>;  # 替换为允许的 IP
            deny all;        # 拒绝其他 IP
        }
    }

    重启 Nginx:

    systemctl restart nginx

    方法三:使用 VPN 或内网访问

    将 Ollama 部署在本地网络中,通过 VPN连接到服务器,避免直接暴露在公网上。仅允许 VPN 内的 IP 访问服务。

  • Debian 12 上使用 Fail2Ban 来增强 SSH 的安全性

    使用 Fail2Ban 来增强 SSH 安全性是一个非常有效的选择,特别是针对暴力破解攻击。Fail2Ban 可以监控系统日志并自动封禁恶意 IP 地址,减少暴力破解的尝试。以下是配置 Fail2Ban 的步骤:

    1. 安装 Fail2Ban

    Debian 12 默认软件仓库中包含 Fail2Ban,可以通过以下命令安装:

    apt update
    apt install fail2ban

    安装完成后,Fail2Ban 会自动启动。你可以使用以下命令检查其状态:

    systemctl status fail2ban

    2. 配置 Fail2Ban

    Fail2Ban 的配置文件位于 /etc/fail2ban/ 目录下。默认的全局配置文件是 /etc/fail2ban/jail.conf,但建议不要直接修改该文件,而是创建一个本地配置文件 /etc/fail2ban/jail.local 或者在 /etc/fail2ban/jail.d/ 目录下添加自定义配置。

    创建本地配置文件

    首先,复制默认配置文件并编辑:

    cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
    nano /etc/fail2ban/jail.local

    配置 SSH 防护

    在 jail.local 文件中,找到 [sshd] 部分,或者添加以下内容:

    [sshd]
    enabled  = true
    port     = 22
    filter   = sshd
    logpath  = /var/log/auth.log
    maxretry = 5
    bantime  = 3600
    findtime = 600

    说明:

    • enabled = true:启用 SSH 防护。
    • port = 22:SSH 默认端口(如果更改过端口,请相应调整)。
    • filter = sshd:使用内置的 SSH 过滤器。
    • logpath = /var/log/auth.log:Debian 12 中 SSH 日志的默认路径。
    • maxretry = 5:如果超过 5 次登录失败,IP 将被封禁。
    • bantime = 3600:封禁时间为 1 小时(单位:秒,视情况调整)。
    • findtime = 600:统计失败登录尝试的时间窗口为 10 分钟。

    完成后保存并退出编辑器。

    3. 启动并测试 Fail2Ban

    配置完成后,重启 Fail2Ban 以应用配置:

    systemctl restart fail2ban

    检查 Fail2Ban 是否正常运行:

    fail2ban-client status

    查看 SSH 防护的具体状态:

    fail2ban-client status sshd

    4. 监控和解禁

    你可以随时查看被封禁的 IP 地址,并手动解禁:

    查看被封禁的 IP

    fail2ban-client get sshd banip

    手动解禁某个 IP(如果误封)

    fail2ban-client unban 目标IP

    注意事项

    • 确保 SSH 服务(sshd)已启用并正常运行。
    • 如果使用了非标准日志路径,需要调整 logpath。
    • 定期检查日志文件 /var/log/fail2ban.log,确保规则已生效。
  • LLM 的双重含义

    什么是LLM?它为什么有不同的意思?

    你可能在不同的场合听到过“LLM”这个词,但它的意思可能让你有点混淆。其实,LLM在不同的领域有不同的含义,今天我们就来聊聊它到底是什么意思,为什么它会有这么多不同的解释。

    LLM:法学硕士

    首先,LLM 在法学界是非常常见的缩写,它代表的是“法学硕士”(Master of Laws)。如果你知道有些人去大学读法律,学完之后可能拿到一个叫做“法学硕士”的学位,这个学位就叫做LLM。它是专门给那些已经获得法学本科学位的人,进一步深造的学位。

    举个例子:你读完法律本科后,决定继续学习法律,专攻某一方面的知识,比如国际法、商法等,这时候你就可以去申请法学硕士(LLM)学位。这种学位通常在一些国家很有用,能够帮助你在法律界获得更好的职位。

    所以,在法学领域,LLM 就是法学硕士的意思。

    LLM:大语言模型

    在人工智能(AI)领域,LLM有着完全不同的含义。在AI里,LLM代表的是“大语言模型”(Large Language Model)。这是一种专门用来处理语言的人工智能技术。它能够读懂和生成自然语言,比如你和智能助手对话,智能助手能理解你的问题并给出回答,这背后就可能是一个大语言模型在工作。

    这些大语言模型是通过大量的数据训练出来的,比如从互联网上抓取各种文章、书籍、对话记录等内容,它们学会了语言的规则和结构。所以,当你输入一句话,它就能根据学到的知识给你一个合适的回答。比如,像GPT-3和GPT-4就是知名的大语言模型。

    简单来说,LLM 在AI领域是指用来做语言处理的强大程序,它可以帮助人们更好地理解、生成和使用语言。

    为什么LLM有两种不同的意思?

    那为什么“LLM”这个词会有两种完全不同的意思呢?其实这就是因为不同的领域使用这个缩写的时候,它们有各自的传统和需求。

    1. 法学界的历史 在法学界,LLM 作为法学硕士学位的缩写已经存在很久了,很多国家的法学院都习惯使用这个缩写。因此,当我们提到“LLM”时,大家首先会想到的是法学硕士。
    2. AI技术的快速发展 在人工智能领域,随着技术的发展,新的术语和缩写不断涌现。LLM 这个缩写被用来代表“大语言模型”,是因为这种技术需要处理大量的语言数据,而“LLM”也正好符合这个概念。

    由于两者的应用场景完全不同,虽然它们用的是同一个缩写,但人们根据讨论的上下文可以很容易区分是指哪个意思。

    如何避免混淆?

    虽然LLM在法学和AI领域有不同的含义,但只要你理解了它们各自的背景,基本上就不容易混淆了。这里有几个简单的方法帮助你区分它们:

    • 如果你在讨论法律、律师、法学教育等话题,LLM指的肯定是“法学硕士”。比如,你听到有人说“他刚刚拿到LLM学位”,那肯定是在说他获得了法学硕士学位。
    • 如果你在谈论人工智能、机器学习、语言处理等技术话题,LLM指的就是“大语言模型”。比如,当有人提到“这个AI是基于LLM构建的”,那肯定是在说它是使用了大语言模型来处理语言。