Docker-compose搭建PairDrop——跨设备传输方案

### 一、简单的跨设备传输方案PairDrop

PairDrop适用于所有平台的本地网络上的文件共享。

  • 一种可行的类似 AirDrop 的多平台解决方案。
    • 通过点对点连接将图像、文档或文本发送到同一本地网络上的设备。

  • 互联网传输
    • 加入临时公共房间,通过网络轻松传输文件。
  • Web 应用程序
    • 适用于所有配备现代网络浏览器的设备。
  • 二、Docker部署

    一起搭建 STUN/TURN 服务器

    1. docker-compose.yml配置
    services:
      pairdrop:
        image: "lscr.io/linuxserver/pairdrop:latest"
        container_name: pairdrop
        restart: unless-stopped
        environment:
          - PUID=1000  
          - PGID=1000  
          - WS_FALLBACK=true  
          - RATE_LIMIT=true  
          - DEBUG_MODE=false  
          - TZ=Asia/Shanghai  
          - RTC_CONFIG_FILE=/config/rtc_config.json
        depends_on:
          - coturn
        volumes:
          - ./rtc_config.json:/config/rtc_config.json:ro
        ports:
          - "60000:3000"
    1. rtc_config.json配置文件
    {
      "sdpSemantics": "unified-plan",
      "iceServers": [
        {
          "urls": "stun:公网ip:3478"
        },
        {
          "urls": "turns:公网ip:5349",
          "username": "pairdrop",
          "credential": "securepassword"
        }
      ]
    }
    1. coturn搭建,docker-compose.yml配置

       coturn:
          image: instrumentisto/coturn
          container_name: coturn
          restart: unless-stopped
          network_mode: "host"
          environment:
            - REALM=pairdrop
            - USERNAME=pd用户名
            - PASSWORD=password密码
          volumes:
            - ./rtc_config.json:/config/rtc_config.json:ro
            - ./turnserver.conf:/etc/coturn/turnserver.conf
            - ./turn_server_cert.pem:/etc/coturn/turn_server_cert.pem
            - ./turn_server_pkey.pem:/etc/coturn/turn_server_pkey.pem
      
    2. turnserver.conf配置

      # 监听所有网卡
      listening-ip=0.0.0.0
      

      这里加上公网 IP

      external-ip=公网 IP

      TURN 端口

      listening-port=3478 tls-listening-port=5349

      认证域

      realm=pairdrop

      用户认证

      user=pd:password 用户名密码 lt-cred-mech

      允许的 TURN 端口范围

      min-port=49152 max-port=65535

      证书

      cert=/etc/coturn/turn_server_cert.pem pkey=/etc/coturn/turn_server_pkey.pem

      启用指纹,防止中间人攻击启用 fingerprint

      fingerprint

      允许长时间连接

      stale-nonce

      CLI 密码

      cli-password=yourpassword

    3. 其它

      1. 添加自定义TLS 证书

        1. openssl req -x509 -newkey rsa:4096 -keyout turn_server_pkey.pem -out turn_server_cert.pem -days 365 -nodes

        2. 挂载到 Coturn 容器

          volumes:
            - ./turnserver.conf:/etc/coturn/turnserver.conf
            - ./turn_server_cert.pem:/etc/coturn/turn_server_cert.pem
            - ./turn_server_pkey.pem:/etc/coturn/turn_server_pkey.pem
      2. 防火墙

        # 允许 STUN/TURN 端口
        sudo iptables -A INPUT -p udp --dport 3478 -j ACCEPT
        sudo iptables -A INPUT -p tcp --dport 3478 -j ACCEPT
        

        允许 TURN 分配 UDP 端口

        sudo iptables -A INPUT -p udp --dport 49152:65535 -j ACCEPT

        如果使用 ufw 防火墙:

        sudo ufw allow 3478/udp sudo ufw allow 49152:65535/udp

      3. 可能有挂载文件权限问题

        chmod 644 ./rtc_config.json  # 让所有者可写,其他用户可读
        chown 1000:1000 ./rtc_config.json  # 让 PUID=1000 的用户拥有该文件
      4. 如果系统用apt install coturn -y安装过Coturn,检查 Coturn 是否被多个进程启动,彻底清理Coturn

        ps aux | grep turnserver
        killall turnserver
        systemctl restart coturn
        rm -f /var/run/turnserver.pid
        禁用 Coturn 开机启动
        systemctl disable coturn  
        卸载 Coturn
        systemctl stop coturn
        apt remove --purge coturn -y
        清理残留数据
        rm -rf /var/lib/turn
        rm -rf /var/log/turnserver.log
        rm -rf /etc/coturn
        确认 Coturn 已完全删除
        which turnserver