Ubuntu 22.04 安装 copyparty 1.20.26 指南
Ubuntu 22.04 从零安装 copyparty 1.20.26 实测:sfx 单文件与 pip 双方案、首个共享目录与多账户配置、curl 上传下载 MD5 校验闭环、ffmpeg/Pillow 可选依赖、systemd 专用账户托管与排障实录。
Ubuntu 22.04 安装 copyparty 1.20.26 指南
目标:在一台 Ubuntu 22.04 服务器上从零安装 copyparty 1.20.26(Python 单文件媒体/文件服务器),完成首个共享目录的创建、多账户权限配置、上传下载闭环验证,并以 systemd 托管为常驻服务。本文所有命令与输出均在真实服务器上执行实测,版本信息检索日期为 2026-10-26。关于项目的定位与同类工具对比,参见《copyparty 1.20.26 介绍与选型指南》。
一、环境准备与版本确认
1.1 系统环境
实测环境:
- 操作系统:Ubuntu 22.04(x86_64);
- Python:3.10.12(Ubuntu 22.04 自带,无需额外安装);
- 网络:服务器可访问公网(GitHub 下载不稳定时可用 HTTP 代理)。
确认 Python 版本:
python3 --version
实测输出:
Python 3.10.12
1.2 版本确认
copyparty 官方发布渠道为 GitHub Releases 与 PyPI,检索日期 2026-10-26 时最新稳定版本为 1.20.26(PyPI 发布于 2026-10-14)。官方提供三种安装形态,本文覆盖其中两种:
- 方案 A:
copyparty-sfx.py单文件自解压脚本——项目主打形态,仅依赖 Python 标准库即可启动,媒体功能按需补依赖; - 方案 B:
pip install copyparty标准安装——适合纳入 Python 依赖管理; - (另有 zipapp 形态,官方说明性能略差于 sfx,本文不展开。)
二、方案 A:单文件 sfx 安装(推荐)
2.1 创建目录并下载
sudo mkdir -p /opt/copyparty /srv/party
cd /opt/copyparty
sudo curl -fSL --max-time 120 -o copyparty-sfx.py \
https://github.com/9001/copyparty/releases/download/v1.20.26/copyparty-sfx.py
ls -la copyparty-sfx.py
md5sum copyparty-sfx.py
实测输出:
-rw-r--r-- 1 root root 1206486 Oct 26 08:00 copyparty-sfx.py
a7a5084273b7c3b9539d7334c77f1998 copyparty-sfx.py
两次独立下载的 MD5 均为 a7a5084273b7c3b9539d7334c77f1998,可留作校验基准。若 GitHub 直连失败(实测曾出现 curl: (56) Connection reset by peer),加代理重试:
sudo curl -fSL --max-time 120 -x http://<proxy-host>:<proxy-port> -o copyparty-sfx.py \
https://github.com/9001/copyparty/releases/download/v1.20.26/copyparty-sfx.py
2.2 创建测试数据并启动
先放一个测试文件,随后启动服务,把 /srv/party 共享为 /files,管理员账户 admin:
echo 'hello copyparty' | sudo tee /srv/party/hello.txt
cd /opt/copyparty
sudo python3 copyparty-sfx.py -v /srv/party:/files -a admin:q1w2e3r4 -p 3923
实测启动输出(截取关键行):
LOG 08:01:46 copyparty 1.20.26 stand-alone loaded to /root/.cache/pe-copyparty.0.2767.0
LOG 08:01:46 dependencies: OK ['sqlite'] NG ['pillow', 'vips', 'pillow-webp', 'ffmpeg', 'ffprobe', 'bwrap', 'mutagen', 'argon2', 'pyzmq', 'pillow-heif', 'pillow-avif', 'rawpy', 'libraw']
LOG 08:01:46 URL: http://0.0.0.0:3923/
LOG 08:01:46 * volume cfg: [
LOG 08:01:46 * [r]: 0 args, 1 flags, 1 discs:
LOG 08:01:46 * /r [ 785.7 GiB total, 591.7 GiB free ] << /srv/party
LOG 08:01:46 * ]
LOG 08:01:46 this is the account root and I kindly ask you to change my password
LOG 08:01:46 [copyparty webdav-ftp-tftp-smb-client] now serving @ http://0.0.0.0:3923/
LOG 08:01:46 --db-loc: C.db = /root/.cache/pe-copyparty.0.2767.0/copyparty.db (auto-detected)
LOG 08:01:46 [db] created file-db: 1 volumes, 1 threads
几个要点:
dependencies行列出可选依赖检测:OK 的是 sqlite(核心搜索库,已内置可用),NG 的是 Pillow/ffmpeg 等媒体依赖——不装也能跑基础文件服务,装上后解锁缩略图与转码(见第四节);- sfx 版首次运行会把内嵌依赖解压到
~/.cache/pe-copyparty.<版本>目录(README 明确说明该机制); - 未配置账户密码时会有
account root的默认账户提示,实测建议显式-a配置账户。
浏览器打开 http://<服务器IP>:3923/files/ 即可看到文件列表;点击右上角 o 可用 admin / q1w2e3r4 登录。
2.3 命令行上传下载验证
服务器本地用 curl 验证上传与下载闭环(无需打开浏览器):
# 生成一个 2MB 测试文件
dd if=/dev/urandom of=/tmp/sample.bin bs=1M count=2 2>/dev/null
# admin 登录并上传到 /files
curl -s -T /tmp/sample.bin "http://127.0.0.1:3923/files/sample.bin?pw=q1w2e3r4" -o /dev/null -w '%{http_code}\n'
实测输出(201 Created 表示写入成功):
201
下载回来做 MD5 校验:
curl -s "http://127.0.0.1:3923/files/sample.bin" -o /tmp/dl.bin
md5sum /tmp/sample.bin /tmp/dl.bin
实测输出(两端一致,文件完整性无损):
4b6c9630322bf4d21cbb56f41afb720b /tmp/sample.bin
4b6c9630322bf4d21cbb56f41afb720b /tmp/dl.bin
2.4 磁盘路径与写权限注意事项
copyparty 启动时会检测挂载点是否为真实磁盘。若共享目录落在 overlay 型文件系统上,会看到类似日志并自动移除写权限(实测回显):
write-access was removed because not mapped to actual HDD (overlay)
把共享目录放在常规磁盘路径(如 /srv、/data)即可避免。
三、方案 B:pip 安装
3.1 pip 安装
Ubuntu 22.04 需先有 pip(若无则 sudo apt-get install -y python3-pip),然后用户级安装:
python3 -m pip install --user copyparty
实测输出(版本随发布渠道更新,2026-10-26 拉到的即为 1.20.26):
Successfully installed Pillow-12.3.0 copyparty-1.20.26
值得注意:pip 安装会顺带装上 Pillow(pip 包的推荐依赖),因此媒体图片缩略图天然可用;sfx 单文件版则不带 Pillow,需要手动补。
3.2 命令与附加工具
export PATH=$PATH:/root/.local/bin
copyparty --version
ls /root/.local/bin/
实测输出:
copyparty v1.20.26
copyparty partyfuse u2c
copyparty:服务端主命令,参数与 sfx 完全一致;partyfuse:把服务端目录通过 FUSE 挂载到本地文件系统;u2c:命令行上传器(浏览器同款分块续传协议)。
两种方案功能完全等价,选一种即可;本文后续章节以方案 A 的路径为准,pip 用户的启动命令把 python3 copyparty-sfx.py 换成 copyparty 即可。
四、可选依赖:解锁媒体功能
4.1 ffmpeg(视频缩略图 + 音频转码)
sudo apt-get install -y ffmpeg
ffmpeg -version 2>/dev/null | head -1
实测输出:
ffmpeg version 4.4.2-0ubuntu0.22.04.1
4.2 Pillow(图片缩略图,sfx 版需手动补装)
python3 -m pip install --user Pillow
python3 -c 'import PIL; print("pillow", PIL.__version__)'
实测输出:
pillow 12.3.0
4.3 重启后复核依赖检测
重启 copyparty(Ctrl-C 后重新执行 2.2 的命令),启动日志中的 dependencies 行变为:
LOG 08:07:20 dependencies: OK ['sqlite', 'pillow', 'pillow-webp', 'ffmpeg', 'ffprobe', 'pillow-avif'] NG ['vips', 'bwrap', 'mutagen', 'argon2', 'pyzmq', 'pillow-heif', 'rawpy', 'libraw']
LOG 08:07:20 decoder preference: pil, ff
剩余 NG 项均为进阶能力(如 mutagen 读音频标签、pillow-heif 读 HEIC、argon2 哈希加速),缺省不影响核心功能。实测依赖缺失时的降级行为:
- 无 mutagen 时读音频标签:
LOG ... mtag WARN: could not load Mutagen, trying FFprobe instead(自动改用 FFprobe); - 无 Pillow 时请求图片缩略图:服务端返回 SVG 占位图而非报错。
五、systemd 托管
5.1 创建专用账户与配置
生产环境建议用专用低权限账户运行,配置文件放 /etc/copyparty:
sudo useradd -r -s /usr/sbin/nologin copyparty
sudo mkdir -p /etc/copyparty /var/log/copyparty
sudo tee /etc/copyparty/cpp.conf > /dev/null <<'EOF'
[global]
name: fileserver
[accounts]
admin: q1w2e3r4
[/files]
/srv/party
accs:
r: *
rwmda: admin
flags:
e2dsa: True
EOF
sudo chown -R copyparty:copyparty /srv/party /var/log/copyparty /etc/copyparty
配置含义:admin 拥有 /files 的读写移动删除与管理权(rwmda),其他所有人(*)只读;e2dsa 表示启动时建立文件索引。
5.2 编写 service 单元
sudo tee /etc/systemd/system/copyparty.service > /dev/null <<'EOF'
[Unit]
Description=copyparty file server
After=network-online.target
Wants=network-online.target
[Service]
Type=simple
User=copyparty
Group=copyparty
ExecStart=/usr/bin/python3 /opt/copyparty/copyparty-sfx.py -c /etc/copyparty/cpp.conf
Restart=on-failure
RestartSec=5
[Install]
WantedBy=multi-user.target
EOF
sudo systemctl daemon-reload
sudo systemctl enable --now copyparty
实测输出:
Synchronizing state of copyparty.service with SysV service script with /lib/systemd/systemd-sysv-install.
Created symlink /etc/systemd/system/multi-user.target.wants/copyparty.service → /etc/systemd/system/copyparty.service.
5.3 状态与功能验证
systemctl status copyparty --no-pager -n 5
实测输出(内存占用约 39MB):
● copyparty.service - copyparty file server
Loaded: loaded (/etc/systemd/system/copyparty.service; enabled; preset: enabled)
Active: active (running) since Sun 2026-10-26 08:09:41 UTC; 2min 10s ago
Main PID: 2625 (python3)
Tasks: 3 (limit: 4551)
Memory: 39.0M
CPU: 2.438s
CGroup: /system.slice/copyparty.service
└─2625 /usr/bin/python3 /opt/copyparty/copyparty-sfx.py -c /etc/copyparty/cpp.conf
journalctl 查看服务日志:
journalctl -u copyparty --no-pager -n 3 -o cat
实测输出:
LOG 08:10:26 [copyparty webdav-ftp-tftp-smb-client] now serving @ http://0.0.0.0:3923/
LOG 08:10:41 [admin] logged in from 127.0.0.1
LOG 08:10:44 GET(/) - "" | 3923 "curl/7.81.0"
最终功能确认:
curl -s http://127.0.0.1:3923/files/hello.txt
curl -s -o /dev/null -w '%{http_code}\n' http://127.0.0.1:3923/files/
实测输出:
hello systemd
200
服务已随系统自启动,重启服务器后无需人工干预。日常管理命令:systemctl status|restart|stop copyparty,日志走 journalctl -u copyparty。
六、排障实录
实测过程中遇到的典型报错与处理:
- 多个账户使用相同密码,启动直接报错退出。日志回显:
处理:给每个账户设置不同密码。批量建账户时尤其容易踩坑。
LOG 08:03:12 CRIT: accounts [admin] and [uploader] have the same password; this is not supported - 账户未在任何卷定义中出现(不致命,但启动时告警):
处理:在对应卷的
LOG 08:03:12 CRIT: account [uploader] is not mentioned in any volume definitionsaccs:中引用该账户(哪怕只给只读权限),或确认其只需要匿名级访问。 - 共享目录在 overlay 型文件系统上,写权限被自动移除:
处理:把共享目录放到真实磁盘路径。
write-access was removed because not mapped to actual HDD (overlay) - 可选依赖缺失导致的静默降级:无 Pillow 时图片缩略图返回 SVG 占位图、无 mutagen 时自动改用 FFprobe 读音频标签。表现为"功能不生效但不报错",先查启动日志的
dependencies: OK/NG行。 - GitHub 下载单文件偶发
Connection reset by peer:直连不稳定时换代理,或改用 PyPI 渠道pip install copyparty。
至此,copyparty 已在 Ubuntu 22.04 上完成从安装、首个共享到 systemd 常驻的完整闭环。下一篇《copyparty 1.20.26 配置参数详解》将逐项拆解 -a 账户、-v 卷挂载与权限语法、媒体与事件钩子等配置。