Skip to content

其他

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

  1. 创建 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 通知

轻量级音乐服务器

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

内网穿透

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 导出来。

  1. 让整个 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_PROXYHTTPS_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;
}

创建并设置目录权限

  1. 创建证书验证目录:
sudo mkdir -p /var/www/certbot
  1. 设置权限:
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