其他
FileBrowser
Warning
存在漏洞,禁止外网使用
简洁的单文件文件管理器
docker run -d \ --name filebrowser \ -v /path/to/your/files:/srv \ -v filebrowser.db:/database/filebrowser.db \ -p 8080:80 \ filebrowser/filebrowser
用户名: admin 密码: 日志中
Note
注意FB_PASSWORD 需要使用hash 后的
version: '3.8'
services:
filebrowser:
image: filebrowser/filebrowser:latest
container_name: filebrowser
restart: always
# 端口映射:宿主机端口:容器端口
ports:
- "8080:80"
# 挂载配置
volumes:
# 1. 数据目录挂载 (修改这里的 /path/to/your/files 为您实际的文件存储路径)
# 前端上传的文件将保存在这里
- /path/to/your/files:/srv
# 2. 数据库挂载 (使用命名卷,数据由 Docker 管理,更安全)
- fb_database:/database
# 初始化配置 (首次启动时生效)
environment:
- FB_USERNAME=admin # 初始用户名
- FB_PASSWORD=$2a$10$/PTgnzyBaN0oEcU/rKIu1eye9vB4gsqUtsPAcB27o9EwKKXPlfn9C # 初始密码 (请修改为强密码)
- FB_BASEURL=/ # 如果需要反向代理子路径,可修改此项,否则保持 /
# 定义命名卷
volumes:
fb_database:
driver: local
# 可选:如果您想指定这个卷在宿主机上的具体位置,可以取消下面注释并修改路径
# driver_opts:
# type: none
# o: bind
# device: /opt/docker/volumes/filebrowser_db
Samba
Samba 是一款开源的网络文件共享软件套件,它实现了 SMB/CIFS(Server Message Block / Common Internet File System)协议,能够在 Linux/Unix 与 Windows 等不同操作系统之间实现文件和打印机的跨平台共享
apt-get install acl attr samba winbind libpam-winbind libnss-winbind krb5-config krb5-user dnsutils python3-setproctitle
sudo systemctl status smbd
sudo mkdir -p /data/share
sudo chown -R $USER:$USER /data/share
echo "Hello Samba" > /data/share/test.txt
- 创建 Samba 用户
这里有个容易踩坑的地方:
Samba 用户必须先是 Linux 系统用户。
假设你的 Linux 用户叫 shingi:
sudo smbpasswd -a shingi
然后输入一个 Samba 密码。
启用这个用户:
sudo smbpasswd -e shingi
以后 Windows 访问共享目录时,就使用:
用户名:shingi 密码:你刚才设置的 Samba 密码 4. 配置共享目录
编辑:
sudo vim /etc/samba/smb.conf
在文件最后添加:
[share] path = /data/share browseable = yes read only = no writable = yes valid users = shingi create mask = 0664 directory mask = 0775
这里:
[share]
就是 Windows 看到的共享名称。
所以最终访问地址就是:
\192.168.1.100\share 5. 检查配置
这个非常建议做:
testparm
如果没有明显错误,再重启 Samba:
sudo systemctl restart smbd
并设置开机启动:
sudo systemctl enable smbd 6. Windows 访问
在 Windows 按:
Win + R
输入:
\192.168.1.100\share
SquirrelSql
toasty
windows 通知
navidrome
轻量级音乐服务器
https://www.navidrome.org/docs/installation/docker/
services:
navidrome:
image: deluan/navidrome:latest
user: 1000:1000 # should be owner of volumes
ports:
- "4533:4533"
restart: unless-stopped
environment:
# Optional: put your config options customization here. Examples:
# ND_LOGLEVEL: debug
volumes:
- "/path/to/data:/data"
- "/path/to/your/music/folder:/music:ro"
CoreDNS
域名解析服务
- 安装
https://github.com/coredns/coredns/releases/tag/v1.13.2
[Unit]
Description=CoreDNS DNS Server
After=network.target
[Service]
Type=simple
ExecStart=/home/shingi/packages/coredns -dns.port=1053
Restart=on-failure
RestartSec=5s
User=root
WorkingDirectory=/home/shingi/packages
[Install]
WantedBy=multi-user.target
- Corefile 示例
--conf Corefile
- 使用 hosts 插件 配置 A 记录
如果你只是本地或者小型局域网环境,最简单的方法是用 hosts 插件:
Corefile 示例
假设你要配置 mydomain.local → 192.168.1.50:
.:1053 {
hosts {
192.168.1.50 mydomain.local
fallthrough
}
forward . 8.8.8.8
log
}
.:1053 → DNS 监听所有域名 (.) 在 1053 端口
hosts { ... } → 配置静态 A 记录
fallthrough → 如果 hosts 中没有匹配,就转发给上游 DNS
forward . 8.8.8.8 → 上游 DNS(Google)
log → 记录访问日志,方便调试
- 使用zone 文件配置 A 记录
如果你想做完整 DNS 服务,可以用 file 插件 + zone 文件:
创建 zone 文件 /etc/coredns/db.mydomain.local:
$TTL 3600
@ IN SOA ns1.mydomain.local. admin.mydomain.local. (
2025122301 ; serial
3600 ; refresh
1800 ; retry
604800 ; expire
86400 ; minimum
)
@ IN NS ns1.mydomain.local.
ns1 IN A 192.168.1.50
www IN A 192.168.1.50
@ 表示根域
NS → 域名服务器
A → 主机记录
Corefile 配置:
mydomain.local:1053 {
file /etc/coredns/db.mydomain.local
log
}
- 测试 A 记录
dig @dnsip -p 1053 mydomain.local
ffmpeg
音视频处理的 “瑞士军刀”
https://www.gyan.dev/ffmpeg/builds/
ffmpeg -i 1771995134795.mp3 output.wav
ffmpeg -i 1771995134795.mp3 -ar 16000 -ac 1 C:\Users\wjn\yx\hello-xiaoxin\test.wav
-i input.mp3: 你的原始文件。 -ar 16000: 关键参数,将采样率强制设置为 16000 Hz。 -ac 1: 通常语音模型也需要单声道,建议加上此参数以防万一(如果不需要单声道可去掉)。 output_16k.wav: 输出的新文件名。
下载m3u8 文件
npm install --global ffmpeg-progressbar-cli
ffmpeg-bar -i ./ts_segments/index.m3u8 -c copy final_video.mp4
ffmpeg -i input.mp4 -c:v libx264 -c:a aac -f hls -hls_time 10 -hls_list_size 0 output.m3u8
mp3 转 wav
ffmpeg -i wakeup_words_short.mp3 -acodec pcm_s16le -ar 16000 -ac 1 fixed.wav
音频拼接
ffmpeg -i input1.wav -i input2.wav -filter_complex "[0:0][1:0]concat=n=2:v=0:a=1[out]" -map "[out]" output.wav
Q&A
- invalid start code ... in RIFF header
文件格式不对,需要转为真正的wav
ffmpeg -i config/assets/wakeup_words_short.wav 查看文件真实格式
frp
内网穿透
# The default value is 127.0.0.1. Change it to 0.0.0.0 when you want to access it from a public network.
webServer.addr = "0.0.0.0"
webServer.port = 7500
# dashboard's username and password are both optional
webServer.user = "admin"
webServer.password = "admin"
webServer.port = 7500
# dashboard's username and password are both optional
webServer.user = "admin"
webServer.password = "admin"
webServer.tls.certFile = "server.crt"
webServer.tls.keyFile = "server.key"
- Systemd frpc.service
[Unit]
Description=Frp Server
After=network.target
[Service]
Type=simple
ExecStart=/opt/frp_0.65.0_linux_amd64/frps -c frps.toml
Restart=on-failure
RestartSec=5s
User=frp
WorkingDirectory=/opt/frp_0.65.0_linux_amd64
[Install]
WantedBy=multi-user.target
- docker build
Note
注意使用docker 网络需要指定宿主机的ip
docker build -f .\dockerfiles\Dockerfile-for-frpc -t 192.168.3.12:5005/frpc:v0.66.0 .
docker run --rm -v ./frpc.toml:/frpc.toml 192.168.3.12:5005/frpc:v0.66.0 -c /frpc.toml
frpc:
image: 192.168.3.12:5005/frpc:v0.66.0
container_name: frpc
volumes:
- ./frpc.toml:/frpc.toml
command: ["-c", "/frpc.toml"]
restart: unless-stopped
serverAddr = "xxxx"
serverPort = 7000
[[proxies]]
name = "20-mysql"
type = "tcp"
localIP = "localhost"
localPort = 3306
remotePort = 22214
-
Q&A
-
login to server failed: EOF
查看frps中是否配置tcp_mux = false 若配置 frpc
inotify-tools
监控nginx配置
#!/bin/bash
NGINX_DIR="/etc/nginx"
LOG_FILE="/var/log/nginx_git_watch.log"
cd $NGINX_DIR || exit 1
inotifywait -m -r \
-e modify,create,delete,move \
--exclude '\.swp$|\.tmp$|\.log$|~$' \
$NGINX_DIR |
while read path action file; do
echo "$(date) - $action - $path$file" >> $LOG_FILE
# 防止频繁提交(1 秒内合并)
sleep 1
# 有变更才提交
if ! git diff --quiet; then
git add .
git commit -m "Auto update nginx config: $action $file"
git push origin main
fi
done
Mihomo 无头代理
mkdir -p ~/.config/mihomo
cd ~/.config/mihomo
# 下载对应版本的 mihomo
# 解压后:
chmod +x mihomo
sudo mv mihomo /usr/local/bin/mihomo
mihomo -v
mihomo -d ~/.config/mihomo
准备 config.yaml
如果你已经在另一台有桌面的电脑上使用 Clash Verge,这是最方便的:
在 Clash Verge 中导入你的订阅,然后找到当前配置文件,将 YAML 导出来。
- 让整个 Shell 使用代理
如果你的 mixed-port 是 7890:
export http_proxy="http://127.0.0.1:7890" export https_proxy="http://127.0.0.1:7890" export all_proxy="socks5://127.0.0.1:7890" export NO_PROXY="localhost,127.0.0.1,192.168.3.140,10.96.0.0/12,10.244.0.0/16,.svc,.cluster.local"
然后:
curl https://ipinfo.io
也可以写进:
~/.bashrc
例如:
export http_proxy="http://127.0.0.1:7890" export https_proxy="http://127.0.0.1:7890" export all_proxy="socks5://127.0.0.1:7890"
执行:
source ~/.bashrc
这样 curl、很多 Python 工具、部分 Git/包管理工具就会自动使用代理。
web
https://github.com/Zephyruso/zashboard?utm_source=chatgpt.com
- docker 代理
创建 Docker 配置目录:
sudo mkdir -p /etc/systemd/system/docker.service.d
创建:
sudo nano /etc/systemd/system/docker.service.d/proxy.conf
填:
[Service] Environment="HTTP_PROXY=http://127.0.0.1:7890" Environment="HTTPS_PROXY=http://127.0.0.1:7890" Environment="NO_PROXY=localhost,127.0.0.1"
然后:
sudo systemctl daemon-reload sudo systemctl restart docker
检查 Docker 是否拿到了代理:
sudo systemctl show --property=Environment docker
应该能看到:
HTTP_PROXY=http://127.0.0.1:7890 HTTPS_PROXY=http://127.0.0.1:7890
然后:
sudo docker pull ghcr.io/zephyruso/zashboard:latest
- k8s 代理
**根本原因是终端 `export` 的代理变量对 systemd 服务无效**,需要为 containerd 单独配置 systemd 代理。你在终端里 `export` 的代理变量,只有当前 shell 及其子进程(如 `curl`、`wget`)能读到;而 `kubeadm init` 拉镜像时,实际是通过 CRI 接口调用 **containerd** 去拉取,containerd 是 systemd 管理的服务,启动时根本拿不到你终端里的环境变量。
### 修复步骤
**1. 为 containerd 配置代理**
```bash
sudo tee /etc/systemd/system/containerd.service.d/proxy.conf <<'EOF'
[Service]
Environment="HTTP_PROXY=http://127.0.0.1:7890"
Environment="HTTPS_PROXY=http://127.0.0.1:7890"
Environment="NO_PROXY=localhost,127.0.0.1,192.168.3.140,10.96.0.0/12,10.244.0.0/16,.svc,.cluster.local"
Environment="no_proxy=localhost,127.0.0.1,192.168.3.140,10.96.0.0/12,10.244.0.0/16,.svc,.cluster.local"
EOF
2. 重载并重启 containerd
sudo systemctl daemon-reload
sudo systemctl restart containerd
3. 验证代理是否生效
sudo systemctl show containerd --property Environment
应该能看到 HTTP_PROXY、HTTPS_PROXY 已经加载进去了。
4. 再次执行 kubeadm init
sudo kubeadm init --kubernetes-version=v1.36.4
TLS 证书自动申请
::: tip
-
Certbot automatically connects to Let’s Encrypt to obtain the certificate
-
Certbot will only download the certificate and private key.
-
The files are saved in:
/example.com/fullchain.pem (certificate) /etc/letsencrypt/live/example.com/privkey.pem (private key)
:::
certbot
sudo apt update
sudo apt install python3 python3-dev python3-venv libaugeas-dev gcc
- set up a virtual environment
sudo python3 -m venv /opt/certbot/
sudo /opt/certbot/bin/pip install --upgrade pip
- Install Certbot
sudo /opt/certbot/bin/pip install certbot certbot-nginx
- Prepare the Certbot command
sudo ln -s /opt/certbot/bin/certbot /usr/bin/certbot
- run
自动配置nginx
sudo certbot --nginx -d example.com
certbot certonly --standalone
只申请证书
不占用80端口
sudo certbot certonly --webroot -w /var/www/html -d example.com
配置 Nginx
80端口下的代理需要添加 在 Nginx 配置文件中添加以下内容:
location /.well-known/acme-challenge/ {
root /var/www/certbot;
}
创建并设置目录权限
- 创建证书验证目录:
sudo mkdir -p /var/www/certbot
- 设置权限:
sudo chown -R www-data:www-data /var/www/certbot
申请通配符证书
Warnning
必须使用 DNS-01 验证,HTTP 验证不支持通配符
sudo certbot certonly \
--manual \
--preferred-challenges dns \
-d "*.catpd.cn" \
-d "catpd.cn"
域名解析中添加 _acme-challenge value 为 日志中输出的
校验
dig TXT _acme-challenge.catpd.cn
Nacos
- 生成密钥 openssl rand -base64 32
nacos.core.auth.enabled=true
- 认证测试
curl 'http://localhost:8848/nacos/v1/cs/ops/derby?sql=select+st.tablename+from+sys.systables+st'
curl -X GET "http://wjn:123@192.168.3.12:8848/nacos/v1/cs/configs?dataId=common-config.yml&group=DEFAULT_GROUP&tenant=park"
Rustdesk
TCP: 21115, 21116, 21117, 21118, 21119 UDP: 21116
Start-Process -FilePath "C:\Users\wjn\Downloads\rustdesk-1.4.5-x86_64.exe" -ArgumentList "/S" -Wait
- 1️⃣ 静默安装 RustDesk $installer = "C:\Users\wjn\Downloads\rustdesk-1.4.5-x86_64.exe" $installDir = "D:\RustDesk"
Start-Process -FilePath $installer -ArgumentList "/S /D=$installDir" -Wait
-
2️⃣ 配置自建服务器 $configFile = "$installDir\config\rustdesk.toml"
-
如果配置目录不存在,先创建 if (-not (Test-Path "$installDir\config")) { New-Item -ItemType Directory -Path "$installDir\config" | Out-Null }
-
写入服务器配置 @" [network] id_server = "192.168.3.12:21115" relay_server = "192.168.3.12:21116" "@ | Set-Content -Path $configFile -Encoding UTF8
$configPath = "$env:APPDATA\RustDesk\rustdesk.toml"
-
如果目录不存在,创建它 if (-not (Test-Path "$env:APPDATA\RustDesk")) { New-Item -ItemType Directory -Path "$env:APPDATA\RustDesk" | Out-Null }
-
写入服务器地址 @" [network] id_server = "192.168.3.12:21115" relay_server = "relay.yourserver.com:21116" "@ | Set-Content -Path $configPath -Encoding UTF8
services: hbbs: container_name: hbbs image: rustdesk/rustdesk-server:latest command: hbbs volumes: - ./data:/root network_mode: "host"
depends_on:
- hbbr
restart: unless-stopped
hbbr: container_name: hbbr image: rustdesk/rustdesk-server:latest command: hbbr volumes: - ./data:/root network_mode: "host" restart: unless-stopped
- 内网穿透
本地地址: 192.168.3.12:5005/apache/rocketmq:5.4.0 直接docker pull docker.catpd.cn/apache/rocketmq:5.4.0
- nginx 配置
server {
#SSL 默认访问端口号为 443
listen 443 ssl;
#请填写绑定证书的域名
server_name docker.catpd.cn;
#请填写证书文件的相对路径或绝对路径
ssl_certificate /etc/letsencrypt/live/catpd.cn/fullchain.pem; # managed by Certbot
#请填写私钥文件的相对路径或绝对路径
ssl_certificate_key /etc/letsencrypt/live/catpd.cn/privkey.pem; # managed by Certbot
ssl_session_timeout 5m;
#请按照以下协议配置
ssl_protocols TLSv1.2 TLSv1.3;
#请按照以下套件配置,配置加密套件,写法遵循 openssl 标准。
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
ssl_prefer_server_ciphers on;
location /.well-known/acme-challenge/ {
root /var/www/certbot;
}
location / {
proxy_pass http://127.0.0.1:5000;
proxy_set_header Host $host;
}
}
- frp 配置
[[proxies]]
name = "12-dockerhub"
type = "tcp"
localIP = "localhost"
localPort = 5005
remotePort = 5000