Skip to content

其他

FileBrowser(文件管理器)

Warning

存在漏洞,禁止外网使用

Note

用户名: admin 密码: 日志中 注意FB_PASSWORD 需要使用hash 后的

docker run -d \
  --name filebrowser \
  -v /path/to/your/files:/srv \
  -v filebrowser.db:/database/filebrowser.db \
  -p 8080:80 \
  filebrowser/filebrowser
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

启用这个用户:

sudo smbpasswd -e shingi

Windows 访问共享目录时,就使用:

用户名:shingi 密码:你刚才设置的 Samba 密码

  • 配置共享目录

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

  • 检查配置

testparm

如果没有明显错误,再重启 Samba:

sudo systemctl restart smbd

并设置开机启动:

sudo systemctl enable smbd

  • Windows 访问

Win + R 输入:\\192.168.1.100\share

  • 将磁盘挂载到windows

在网络上右键,选择映射网络驱动器 \\192.168.1.100\share


SquirrelSql(数据库客户端)

下载👉

toasty

windows 通知

安装文档

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(音视频处理)

项目地址

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

mp4 转 wav

ffmpeg -i input.mp4 -vn -acodec pcm_s16le -ar 44100 -ac 2 -y output.wav

mp4 格式转化

ffmpeg -i zp.mp4 \
  -c:v libx264 \
  -preset medium \
  -crf 23 \
  -c:a copy \
  -movflags +faststart \
  zp-h264.mp4

音频拼接

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管理

项目地址

  • 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
    

TLS 证书自动申请

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

申请通配符证书

Tip

必须使用 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
  • 创建腾讯云 API 子账号和密钥 为该用户配置 DNSPod API 权限

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