记录一些小东西。
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
参考:
- Let’s Encrypt 使用教程,免费的SSL证书,让你的网站拥抱 HTTPS
- 使用Let’s Encrypt 安装配置免费SSL 证书教程
- Let’s Encrypt:使用 Certbot 获取免费 SSL 证书
- 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给的回复:
- 将
KaTeX
文件下载并放入static
文件夹 - 在
Hugo
主题中添加对KaTeX
的引用,一般为layouts/partials/header.html
<link rel="stylesheet" href="/path/to/katex.min.css">
<script src="/path/to/katex.min.js"></script>
关于为什么要放在header
里而不是诸如baseof
或index
中,其实都是可以的,只要保证在渲染文章时引用了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