因为不想为了手机和电脑互传文件这种小事就扫🐴登录某个辣鸡 APP,而自己折腾出来的一个在线剪贴板。
- 支持传输纯文本和一键复制
- 支持传输文件(选择文件 / 拖拽 / Ctrl+V 粘贴截图),对于图像可以显示缩略图
- 使用 WebSocket 实现实时通知
- 前端使用 Vue 2 和 Vuetify 构建
- 后端使用
Swoole 或Node.js (Koa) 构建(两种服务端实现任选一种即可)
Tip
我在 https://try-clipboard.akarin.dev/ 部署了一个公用实例,你可以自由体验使用。
一些设定和限制:
- 历史记录上限 50 条,文本长度限制为 4096,文件大小限制为 64 MB,文件过期时间一小时。
- 提交的内容是公开的,所以请不要上传隐私信息(你可能需要使用右上角的“房间”功能)。
- 请不要通过刷屏、垃圾广告等方式恶意影响其他人正常使用。如果出现了恶意的使用行为,我可能会选择关停公用实例。
据说 pkg 可以把 Node.js 应用打包成可执行文件,但是目前的 5.x 版还不支持 ES Modules,所以先🕊️了(
使用 caxa 和 GitHub Actions 打包成了可以在 Windows amd64 和 Linux amd64 使用的可执行文件,可以在这里下载。
caxa 的打包原理相当于将 Node.js 的可执行文件和所有代码一起做成了一个自解压压缩包,执行时会解压到临时文件夹,并且在退出时不会自动清空。
配置文件是按照以下顺序尝试读取的:
- 和可执行文件放在同一目录的
config.json
- 在命令行中指定:
cloud-clipboard /path/to/config.json
需要安装 Node.js。
# 构建前端资源,只需要执行一次
# 也可以直接从 Actions 下载构建好的压缩包(static),解压到 server-node/static
cd client
npm install
npm run build
# 运行服务端
cd ../server-node
npm install
node main.js
配置文件是按照以下顺序尝试读取的:
- 和
main.js
放在同一目录的config.json
- 在命令行中指定:
node main.js /path/to/config.json
服务端默认会监听本机所有网卡的 IP 地址(也可以自己设定),并在终端中显示前端界面所在的网址,使用浏览器打开即可使用。
docker image build -t myclip .
docker container run -d -p 9501:9501 myclip
Tip
Docker Hub 上的镜像是由他人打包的,仅为方便使用而在这里给出,版本可能会滞后于 repo 内的源代码。
如果你在使用时遇到了问题,请先确认这是本项目本身(而不是某个 Docker 镜像)的问题。
Warning
csmayi/lan-clip 打包的版本无法使用反向代理,在我修复之后并没有同步更新,目前不建议使用。
docker pull ***:latest
docker container run -d -p 9501:9501 ***
将 ***
替换为镜像名称:
- chenqiyux/lan-clip amd64
- shuaigekda123/myclip amd64/arm64
@xfangfang 使用 C 实现了一个服务端(目前只实现了部分功能)。如果你有在其他平台上运行的需求,可以尝试使用。
https://github.com/xfangfang/cloud-clipboard/tree/c/server-c
已不再维护,以下内容仅作为存档。
需要安装了 Swoole 扩展的 PHP 运行环境。
- Linux:参见 Swoole 文档的安装说明
- Windows:使用官方在百毒网盘上提供的 Cygwin 整合包(或者从这里下载我自己搬运的 4.5.0 RC1 版本),
也可以在 WSL(Windows Subsystem for Linux) 中安装运行环境
可能是由于 WSL 的缺陷,在 WSL 下多次刷新页面后开始有概率出现错误导致服务端挂掉:
WARNING swReactorEpoll_set(:178): reactor#0->set(fd=15|type=0|events=5) failed, Error: No such file or directory 段错误 (核心已转储)
Cygwin 整合包下暂未发现类似的问题。
在命令行中输入 php --ri swoole
,可以输出配置信息就代表准备完成了~
实际上也不能叫安装,毕竟下载之后就可以直接用了
- 前往 Release 下载最新的
cloud-clipboard.phar
。 - 在同一目录新建配置文件
config.json
(可以参见下面的说明),一定要根据实际修改 IP 地址! php cloud-clipboard.phar
- 打开
http://192.168.1.136:9501
(需要替换为在配置文件中实际设定的地址和端口)即可使用~
cd client
npm install
npm run build
cd ../server
composer install --no-dev
# 从源代码直接运行
php main.php
# 生成 Phar
cd ..
php build-phar.php
//
开头的部分是注释,并不需要写入配置文件中,否则会导致读取失败。
{
"server": {
// 监听的 IP 地址,省略或设为 null 则会监听所有网卡的IP地址
"host": [
"127.0.0.1",
"::1"
],
"port": 9501, // 端口号,falsy 值表示不监听
"uds": "/var/run/cloud-clipboard.sock", // UNIX domain socket 路径,可以后接“:666”设定权限(默认666),falsy 值表示不监听
"prefix": "", // 部署时的URL前缀,例如想要在 http://localhost/prefix/ 访问,则将这一项设为 /prefix
"key": "localhost-key.pem", // HTTPS 私钥路径
"cert": "localhost.pem", // HTTPS 证书路径
"history": 10, // 消息历史记录的数量
"auth": false // 是否在连接时要求使用密码认证,falsy 值表示不使用
},
"text": {
"limit": 4096 // 文本的长度限制
},
"file": {
"expire": 3600, // 上传文件的有效期,超过有效期后自动删除,单位为秒
"chunk": 1048576, // 上传文件的分片大小,不能超过 5 MB,单位为 byte
"limit": 104857600 // 上传文件的大小限制,单位为 byte
}
}
HTTPS 的说明:
如果同时设定了私钥和证书路径,则会使用 HTTPS 协议访问前端界面,未设定则会使用 HTTP 协议。 自用的话,可以使用 mkcert 自行生成证书,并将根证书添加到系统/浏览器的信任列表中。 如果使用了 Nginx 等软件的反向代理,且这些软件已经提供了 HTTPS 连接,则无需在这里设定。
“密码认证”的说明:
如果启用“密码认证”,只有输入正确的密码才能连接到服务端并查看剪贴板内容。 可以将
server.auth
字段设为true
(随机生成六位密码)或字符串(自定义密码)来启用这个功能,启动服务端后终端会以Authorization code: ******
的格式输出当前使用的密码。