2025-12-17 11:00:46
AIChat是一款多合一的LLM CLI工具,具有Shell助手、CMD和REPL模式、RAG、AI工具和代理等功能。
Linux安装:
wget https://github.com/sigoden/aichat/releases/download/v0.30.0/aichat-v0.30.0-x86_64-unknown-linux-musl.tar.gz tar -xzvf aichat-v0.30.0-x86_64-unknown-linux-musl.tar.gz mv aichat /usr/local/bin
初次运行:
aichat
按照提示配置AI厂商和KEY:
> No config file, create a new one? Yes > Platform: openai > API Key: *** ✨ Saved config file to '/home/imlala/.config/aichat/aichat.yaml'
查看配置文件和其他信息:
aichat --info
aichat的-e模式,效果:
更多玩法见:https://github.com/sigoden/aichat/wiki
2025-12-16 19:04:54
记录下排查与解决过程。起因:一台日本VPS(Debian12)用脚本测试能解锁DMMTV,但是搭建了代理用浏览器访问却解不了。。
一开始走弯路了,有点怀疑是解锁脚本测试的不准确,但是我还是更愿意相信是自己环境的问题,毕竟解锁脚本经过多人使用出错的概览不大,然后又以为是DMM用了WebRTC,给浏览器装了个关闭WebRTC的扩展还是不行。。
后来我发现这个VPS是双栈网络,有IPv6地址,然后又跑了一遍解锁脚本测试发现IPv6是不能解锁的,我就猜测是不是访问DMMTV的时候流量走了IPv6?我试着把IPv6关闭后,确实就能解锁了,到这里就能够确定是IPv6的问题了,但是我还是想保留IPv6,平时还是会用到IPv6的,直接关掉有点太鲁莽了。
我知道Linux系统中有一个gai.conf的配置文件,它可以控制系统如何选择地址,尤其是当系统同时支持IPv4和IPv6时,它决定了应用优先使用IPv4还是IPv6,我试着编辑gai.conf:
nano /etc/gai.conf
取消如下内容的注释,以启用IPv4优先:
precedence ::ffff:0:0/96 100
但是这并不能解决我的问题,虽然在VPS内curl还有ping等工具确实优先使用IPv4了,但作为代理服务器,我用浏览器访问DMMTV还是不能解锁。。。百思不得其解,突然想到会不会是代理节点的问题?我使用的是Remnawave面板,这台VPS安装的是Docker运行的Remnanode,使用的网络模式是host:
services:
remnanode:
container_name: remnanode
hostname: remnanode
image: remnawave/node:latest
restart: always
network_mode: host
env_file:
- .env
host网络默认应该也是没有启用IPv6支持的,但我记不太清楚,所以特地验证了一下,确实是没有启用IPv6:
docker network inspect host
我不知道这里的IPv6启用与否是否真的会影响到容器内的程序,所以我想看看容器的日志,我先用这个命令查看:
docker compose logs -f
发现看不到真正有用的日志,因为Remnanode实际上是用的Xray-core内核,它这个容器相当于是套了一层supervisor,最外层看不到Xray-core内核的日志,所以通过下面的命令我终于看到Xray-core内核的日志了:
docker exec -it remnanode tail -n +1 -f /var/log/supervisor/xray.out.log
按道理来说应该挂载一个volume,把这个log保存到宿主机的,当时配置的时候疏忽了,这日志一看就知道问题所在了,Xray-core一直在用IPv6去连接DMMTV。。。接着去搜Xray-core的文档,发现这段话:
可以通过修改 “domainStrategy”: “UseIPv6″来控制对应用户的访问方式 实测优先级要高于系统本身的 gai.config
难怪我之前配置gai.conf不起作用,现在就明朗了= =在Remnawave面板,修改配置文件,在出站配置domainStrategy:
"settings": {
"domainStrategy": "UseIPv4"
}
如图所示:
再次测试,DMMTV就能够正常解锁了= =
2025-12-09 06:10:37
MoonTVPlus是基于MoonTV v100二次开发的增强版影视聚合播放器。它在原版基础上新增了外部播放器支持、视频超分、弹幕系统、评论抓取等实用功能,提供更强大的观影体验。
相对原版新增内容:
🎮 外部播放器跳转:支持 PotPlayer、VLC、MPV、MX Player、nPlayer、IINA 等多种外部播放器
✨ 视频超分 (Anime4K):使用 WebGPU 技术实现实时视频画质增强(支持 1.5x/2x/3x/4x 超分)
💬 弹幕系统:完整的弹幕搜索、匹配、加载功能,支持弹幕设置持久化、弹幕屏蔽
📝 豆瓣评论抓取:自动抓取并展示豆瓣电影短评,支持分页加载
🪒自定义去广告:你可以自定义你的去广告代码,实现更强力的去广告功能
安装Docker:
apt -y update apt -y install curl curl -fsSL https://get.docker.com -o get-docker.sh sh get-docker.sh
创建目录新建compose文件:
mkdir /opt/moontvplus && cd /opt/moontvplus && nano docker-compose.yml
写入如下内容,需要修改的地方写了注释:
services:
moontv-core:
image: ghcr.io/mtvpls/moontvplus:latest
container_name: moontv-core
restart: on-failure
ports:
- '10300:3000'
environment:
- USERNAME=admin
- PASSWORD=yourpasswd # 设置moontvplus管理员密码
- NEXT_PUBLIC_STORAGE_TYPE=kvrocks
- KVROCKS_URL=redis://moontv-kvrocks:6666
depends_on:
- moontv-kvrocks
moontv-kvrocks:
image: apache/kvrocks
container_name: moontv-kvrocks
restart: unless-stopped
volumes:
- kvrocks-data:/var/lib/kvrocks
danmu-api:
image: logvar/danmu-api:latest
container_name: danmu-api
restart: unless-stopped
ports:
- "9321:9321"
environment:
- TOKEN=89641937 # 设置访问token
- ADMIN_TOKEN=19378964 # 设置管理员访问token
volumes:
- ./.chche:/app/.cache
volumes:
kvrocks-data:
启动:
docker compose up -d
配置Ferron反向代理:
nano /etc/ferron.kdl
写入如下内容:
moontvplus.example.com {
proxy "http://127.0.0.1:10300/"
}
重载Ferron:
systemctl reload ferron
弹幕配置,弹幕API地址填写:http://danmu-api:9321,弹幕APIToken填写你设置的TOKEN=值(默认89641937)
配置订阅(视频源),这里推荐这个项目LunaTV-config。将这个URL填写上去保存即可。
效果:
如果你不想公开danmu-api服务器,可以删掉端口映射的配置,改为如下内容:
...
danmu-api:
image: logvar/danmu-api:latest
container_name: danmu-api
restart: unless-stopped
ports:
- "9321:9321"
expose:
- "9321"
environment:
- TOKEN=89641937 # 设置访问token
- ADMIN_TOKEN=19378964 # 设置管理员访问token
volumes:
- ./.chche:/app/.cache
...
2025-12-08 13:18:44
Ferron是一个用Rust编写的高性能Web服务器。Ferron特点(摘自项目页面):
High performance – built with Rust’s async capabilities for optimal speed.
Memory-safe – built with Rust, which is a programming language offering memory safety.
Extensibility – modular architecture for easy customization.
Secure – focus on robust security practices and safe concurrency.
我安装用了一段时间,觉得各方面非常不错,所以特地写篇入门的文章,顺便也算是推荐一下吧。目前我已经把多台服务器的NGINX换成这个了。初次用Ferron给人最大的感觉就是配置起来特别简单,有点Caddy那味,甚至比Caddy还简单。
除了配置简单以外,很多特性或者说功能都是开箱即用的,比如HTTP3、PROXY Protocol、WebSocket、GRPC反代、FastCGI、自动申请TLS证书等等。废话就不多说了,下面一起来体验一下。
安装Ferron,这里我的系统是Debian 13,使用官方的存储库来安装:
apt update apt install curl gnupg2 ca-certificates lsb-release debian-archive-keyring curl https://deb.ferron.sh/signing.pgp | gpg --dearmor | tee /usr/share/keyrings/ferron-keyring.gpg >/dev/null echo "deb [signed-by=/usr/share/keyrings/ferron-keyring.gpg] https://deb.ferron.sh $(lsb_release -cs) main" | tee /etc/apt/sources.list.d/ferron.list apt update apt install ferron
管理Ferron服务:
systemctl stop ferron systemctl restart ferron systemctl reload ferron
重要的目录和文件:
/var/log/ferron/access.log # 访问日志 /var/log/ferron/error.log # 错误日志 /var/www/ferron # Ferron的网站根目录 /etc/ferron.kdl # Ferron的主配置文件
默认使用的用户和主目录:
ferron:x:1000:1000::/var/lib/ferron:/usr/sbin/nologin
编辑主配置文件:
nano /etc/ferron.kdl
在主配置文件添加如下内容可以包含(include)其他配置文件:
include "/var/lib/ferron/*.kdl"
在主配置文件添加如下内容以支持HTTP3、PROXY Protocol(默认未启用)、自动申请TLS证书功能:
* {
protocols "h1" "h2" "h3"
protocol_proxy #false
auto_tls
auto_tls_contact "[email protected]"
auto_tls_cache "/var/lib/ferron/letsencrypt-cache"
auto_tls_letsencrypt_production
auto_tls_challenge "http-01"
}
现在简单说一下最常见的用例:反向代理。在主配置文件或者包含(include)一个新的配置文件写入如下内容:
example.com {
proxy "http://127.0.0.1:3000/"
}
这就完成了一个反向代理的配置,并且Ferron直接就支持WebSocket,不需要额外的配置。我们需要注意的是Ferron默认会将请求发送到后端服务器之前重写“Host”标头,并在“X-Forwarded-Host”标头中保留原始的“Host”标头值。然而,有些Web应用程序可能无法在这种配置下正常工作,这可能会导致主机头不匹配以及其他问题。在这种情况下,你可以将“Host”标头设置为原始值(保留完整的“Host”标头):
example.com {
proxy "http://127.0.0.1:3000/"
proxy_request_header_replace "Host" "{header:Host}"
}
Ferron还支持多域名(virtual host)、IP(virtual host):
example.com,www.example.com {
...
}
"192.168.1.1" {
...
}
自动重定向,将不带“www”的URL重定向到带“www”的URL:
example.com {
wwwredirect #true
}
每当配置文件发生更改,只需要Reload即可使Ferron使用新的配置:
systemctl reload ferron
除了反代,Ferron还支持通过FastCGI运行PHP程序,例如这里我要配置一个Laravel:
example.com {
root "/var/www/laravel/public"
rewrite "^/(.*)" "/index.php/$1" file=#false directory=#false last=#true
fcgi_php "unix:///run/php/php8.4-fpm.sock"
}
这里要特别注意,Debian系统默认的Unix套接字(php8.4-fpm.sock)所有者和组是www-data,我们需要将其修改为ferron,编辑如下配置文件:
nano /etc/php/8.4/fpm/pool.d/www.conf
找到如下内容将其修改为ferron:
listen.owner = ferron listen.group = ferron
重启PHP-FPM:
systemctl restart php8.4-fpm.service
重载Ferron:
systemctl reload ferron
完整的配置和文档请参考官方网站:https://ferron.sh/docs
2025-12-03 06:33:05
PigeonPod是一款可以将YouTube的任意频道、播放列表转换成播客的程序,支持自托管。开始部署前,你需要创建一个YouTube Data API v3的API key。创建步骤可参考这里。
安装Docker和NGINX:
apt -y update apt -y install curl nginx python3-certbot-nginx curl -fsSL https://get.docker.com -o get-docker.sh sh get-docker.sh
创建目录新建compose文件:
mkdir /opt/pigeon-pod && cd /opt/pigeon-pod && nano docker-compose.yml
写入如下内容(将pigeonpod.example.com替换成你的域名):
services:
pigeon-pod:
image: ghcr.io/aizhimou/pigeon-pod:latest
restart: unless-stopped
container_name: pigeon-pod
ports:
- '127.0.0.1:8834:8080'
environment:
- 'PIGEON_BASE_URL=https://pigeonpod.example.com'
- 'PIGEON_AUDIO_FILE_PATH=/data/audio/'
- 'PIGEON_COVER_FILE_PATH=/data/cover/'
- 'SPRING_DATASOURCE_URL=jdbc:sqlite:/data/pigeon-pod.db' # set to your database path
volumes:
- data:/data
volumes:
data:
启动:
docker compose up -d
配置NGINX反向代理:
nano /etc/nginx/sites-available/pigeonpod
写入如下内容(将pigeonpod.example.com替换成你的域名):
server {
listen 80;
server_name pigeonpod.example.com;
client_max_body_size 0;
location / {
proxy_pass http://127.0.0.1:8834;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
启用站点:
ln -s /etc/nginx/sites-available/pigeonpod /etc/nginx/sites-enabled/pigeonpod
签发SSL证书:
certbot --nginx --email [email protected] --agree-tos --no-eff-email
访问pigeonpod.example.com,默认的管理员账号:root,密码:Root@123
登录进去,添加你刚创建的YouTube Data API Key:
效果:
2025-12-02 10:29:06
我第一眼看到这个名字还以为是锐速,卧槽文艺复兴了??说起来还挺怀念那段时间的,那段时间是折腾小鸡最快乐的时候,现在已经电子阳痿了。。完全提不起兴趣,今年黑5,总共消费0元= =
找了台灵车落地鸡试了一下,没想到药效出乎意料的好,本来晚高峰只能跑0.几MBps的鸡,吃上这个后能跑150MBps了,白天能跑150MBps的,现在能跑650MBps了。。
LotSpeed作者一共提供了3个版本,我全部都试了一遍,发现zeta-tcp版本的效果最好,所以这里我就只记录下zeta-tcp版本的配置步骤。
系统我使用的是Debian13,先更新系统、重启,确保系统当前运行的内核是最新版:
apt update apt full-upgrade
安装需要用到的软件包:
apt install build-essential git apt install linux-headers-$(uname -r)
克隆项目存储库、编译lotspeed内核模块:
git clone -b zeta-tcp https://github.com/uk0/lotspeed.git cd lotspeed make
安装lotspeed内核模块:
cp lotspeed.ko /lib/modules/$(uname -r)/kernel/net/ipv4/ depmod -a
加载lotspeed内核模块:
modprobe lotspeed
确保加载成功:
lsmod | grep lotspeed
[可选]配置开机自动加载lotspeed内核模块:
echo "lotspeed" >> /etc/modules-load.d/lotspeed.conf
这个开机自动加载配不配其实不重要,因为只要你后续把拥塞控制算法设置成lotspeed,系统就会自动加载lotspeed内核模块。配置这个的效果就是即便你的系统拥塞控制算法不是lotspeed,系统也自动加载lotspeed内核模块。换句话说就是无论你用不用这个模块,系统都先给你加载起来。
设置拥塞控制算法为lotspeed:
nano /etc/sysctl.d/10-lotspeed.conf
写入如下内容:
net.ipv4.tcp_congestion_control = lotspeed net.ipv4.tcp_no_metrics_save = 1
使其生效:
sysctl --system
查看拥塞控制算法是否生效:
sysctl net.ipv4.tcp_congestion_control
这样就配置好了,注意不要随意更新系统内核,如果内核更新了,你就需要重新编译一遍,作者要是能搞个dkms出来就好了。