记录一些小东西。

2.18: 使用Let’s Encrypt获得免费的SSL证书

“连接是安全的”

Step 1: 安装certbot

apt install certbot

Step 2: 获取证书

certbot certonly --standalone -d omnibbfb.top

胜利结算页面

Saving debug log to /var/log/letsencrypt/letsencrypt.log
Requesting a certificate for omnibbfb.top

Successfully received certificate.
Certificate is saved at: /etc/letsencrypt/live/omnibbfb.top/fullchain.pem
Key is saved at:         /etc/letsencrypt/live/omnibbfb.top/privkey.pem
This certificate expires on 2024-05-18.
These files will be updated when the certificate renews.
Certbot has set up a scheduled task to automatically renew this certificate in the background.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
If you like Certbot, please consider supporting our work by:
 * Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
 * Donating to EFF:                    https://eff.org/donate-le
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Step 3: 修改nginx配置文件

server {
    listen 443 ssl;

    server_name omnibbfb.top www.omnibbfb.top;

    root /var/www/omnibbfb.top/public;

    index index.html;

    ssl_certificate /etc/letsencrypt/live/omnibbfb.top/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/omnibbfb.top/privkey.pem;
}

server {
    listen 80;

    server_name omnibbfb,top;

    location / {
        rewrite ^(.*)$  https://$host$1 permanent;
    }
}

Step 4: 自动更新证书

touch certbot-auto-renew-cron
vim certbot-auto-renew-cron
15 2 * */2 * certbot renew --pre-hook "service nginx stop" --post-hook "service nginx start"
crontab certbot-auto-renew-cron

参考:

  1. Let’s Encrypt 使用教程,免费的SSL证书,让你的网站拥抱 HTTPS
  2. 使用Let’s Encrypt 安装配置免费SSL 证书教程
  3. Let’s Encrypt:使用 Certbot 获取免费 SSL 证书
  4. nginx: [warn] the “ssl” directive is deprecated的解决方法

4.10: 一键更新博客脚本

“面向GPT编程的船新力作”

要实现的效果很简单,就是用Python实现一些shell指令。

本地操作如使用Hugo创建静态网页文件使用subprocess库即可,大致为

subprocess.run(command, shell=True)

服务器操作如使用rsync进行文件上传则需要使用pexpect库,大致为

# 启动子进程
child = pexpect.spawn(command)
# 等待服务器返回密码提示符
child.expect('password:')
# 发送密码
child.sendline(password)
# 等待任务结束
child.expect(['%', '#', pexpect.TIMEOUT, pexpect.EOF])
# 关闭子进程
child.close()

一个问题

其实只需要注意到,使用IDE(如Pycharm)运行shell命令时默认的工作目录是脚本所在的目录,所以需要先

os.chdir(path)

过程中可以使用print(child.before.decode())查看shell中返回的内容,不然可能shell中的报错看不见。

也可以直接看这个,GPT的回答和这篇文章差不多。

最后用起来就是有一种“一下子就完成”的快感。😊

4.11: LaTeX支持:KaTeX

“$\LaTeX$”

起初是按照GPT给的回复:

  1. KaTeX文件下载并放入static文件夹
  2. Hugo主题中添加对KaTeX的引用,一般为layouts/partials/header.html
<link rel="stylesheet" href="/path/to/katex.min.css">
<script src="/path/to/katex.min.js"></script>

关于为什么要放在header里而不是诸如baseofindex中,其实都是可以的,只要保证在渲染文章时引用了KaTeX即可。

但是这样做并没有成功。

之后采取了第二种方法,参考这里

即将引用KaTeX的逻辑另外写成一个文件放入layouts/partials/KaTeX.html,然后同样在header中引用。

这俩逻辑上是一样的其实,不同之处在于这个KaTeX.html我是直接复制的另一个主题Texify3中的对应文件,大概是一开始我的引用逻辑没有写对。

另外也可以使用MathJax,这部分不再展开。

后记

发现一个问题,试了一下确有其事,后续随缘填坑。

4.15: 本地大模型部署

我使用的是M1 Mac air 16GB。

安装Ollama

官网直接下载安装包。之后在命令行运行指令

ollama run model_name:version

其中version参数一般为模型的参数量,大小视电脑的内存而定,比如7B、13B、70B的模型分别需要8G,16G,64G的内存。也可以不带version参数,此时会自动选择合适大小的模型。

下载完成后就可以在命令行和大模型进行交互了。

Open-WebUI

我们自然不希望在命令行中进行交互,因此可以使用一些现成的前段页面,比如Open-WebUI

为此需要先下载Docker,方法也是去官网直接下载安装包。注意只有在打开Docker应用的时候才能在命令行运行Docker指令。

之后在命令行运行指令

docker run -d -p 3000:8080 --add-host=host.docker.internal:host-gateway -v open-webui:/app/backend/data --name open-webui --restart always ghcr.io/open-webui/open-webui:main

即可,其会在本地打开一个网页http://localhost:3000。

之后可能会更新使用体验。。。

参考: 部署本地大模型和知识库,最简单的方法

4.26: 本地大模型+Obsidian

关于之前部署的本地大模型我的评价是:图一乐。原罪就是能力不太行(7B还要什么自行车)。搞这个的初衷是想摆脱网络因素,因为突然有两天3.5的网站一直上不去,就萌生了这个想法。后来是通过one-api+淘宝代理的方式解决了,而且不需要翻墙,支持多设备,对我来说完全足够了,价格也可以接受。(我不确定这个东西能不能拿出来说,毕竟和翻墙相关,不过可以参考“Docker+Nginx实现端口复用”那篇,其实就是干这个事情,里面的another_service换成one-api的相关配置就好了)

现在又重新回到本地大模型这个话题是因为之前在微信上看到Obsidian - 本地AI助手,就是说让Obsidian(一款笔记软件)调用本地大模型接口。以及我的AI笔记系统中谈到的RAG能力,就是现在本地大模型可以把Obsidian里的笔记作为知识库,相当于针对自己这个个体做了微调,这太诱人了!

问题是上面这篇文章应该使用的是Win,导致set OLLAMA_ORIGINS=app://obisidian.md*那里执行不了,可以参考obsidian-copilot/local_copilot.md

还有一个问题是Ollama默认监听11434端口,直接开启服务器模式会显示address already in use,而且就算使用kill指令Ollama还是会自动开启进程。解决方式是关掉Ollama应用,然后使用brew

brew install ollama
brew services stop ollama

之后可以正常开启服务器模式。

对于Linux系统可以参考Issue

Obsidian相关设置参考obsidian-copilot/local_copilot.md

查看Ollama日志参考Issue