从日常使用微信文件传输助手来看,传输助手并非点对点传输,所有信息在传输中都将被中转存储在公用服务器上,传输信息的安全性难以得到保障。本文将基于 fiora 开源项目,以目的为导向重写项目,自制文件传输助手,从而实现数据(信息、图片、文件)的安全传输与存储。
本文入选 1024博客专家TOP 50 榜单,在这里诚挚的感谢大家一直以来对我的支持与帮助!
一、环境准备
fiora是基于node.js和react全栈开发的聊天室。要运行 Fiora, 你需要 Node.js(v10 LTS版本, 例如10.6.3) 开发环境和 MongoDB 数据库。
- 安装 Node.js
- 官网 http://nodejs.cn/download/
- 更推荐使用 nvm 安装 Node.js
- 安装 nvm https://github.com/nvm-sh/nvm#install--update-script
- 通过 nvm 安装 Node.js https://github.com/nvm-sh/nvm#usage
- 安装 MongoDB(直接在宝塔面板安装MongoDB)
安装Nodejs
#Debian/Ubuntu系统
curl -sL https://deb.nodesource.com/setup_10.x | bash -
apt install -y git nodejs
#CentOS系统
curl -sL https://rpm.nodesource.com/setup_10.x | bash -
yum install nodejs git -y
二、配置项目
fiora是基于node.js和react全栈开发的聊天室。从功能角度上而言与文件传输助手相区别,因此需要重写项目。
重写项目下载地址:http://file.dxj.im/transfer-master.zip
如果使用的是原版开源代码,注意禁止注册功能:
修改 config/server.ts, 将 disableRegister 选项设置为 true,重启服务器生效。
可以参考的配置文档:
三、项目部署
#拉取源码
#安装依赖,这里不能用npm,需要用yarn来安装
npm i -g yarn
yarn
#构建
npm run build
#转移产物
npm run move-dist
#注册一个账号
npx ts-node bin/register.ts --username [新用户名] --password [用户密码]
#启动
npm start
运行后打开ip:9200,登陆账号:
可以看SSH客户端运行日志,获取自己的userId。
接下来再将自己的账号设置成管理员,先使用Ctrl+C断开运行。
export Administrator=5f4299a05c4596d1d658025f Port=9200
nohup npm start &
注意:在当shell中提示了nohup成功后,还需要按终端上键盘任意键退回到shell输入命令窗口,然后通过在shell中输入exit来退出终端;如果在nohup执行成功后直接点关闭程序按钮关闭终端的话,这时候会断掉该命令所对应的session,导致nohup对应的进程被通知需要一起shutdown,起不到关掉终端后调用程序继续后台运行的作用。
此时就可以访问ip:9200。此时可以通过nginx域名反代的形式部署域名。
站点配置——配置文件:
location / {
proxy_pass http://127.0.0.1:9200;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header X-Forward-Proto http;
proxy_set_header X-Nginx-Proxy true;
proxy_http_version 1.1;
proxy_redirect off;
}
四、设置开机自启:
以宝塔面板为例:
#先给node做个软连接,不然后面会启动失败
ln -sf $(which node) /usr/bin/node
#新建systemd配置文件,将以下代码一起复制到SSH运行
cat > /etc/systemd/system/fiora.service <<EOF
[Unit]
Description=fiora
After=network.target
Wants=network.target
[Service]
Type=simple
PIDFile=/var/run/fiora.pid
ExecStart=$(command -v npm) start
WorkingDirectory=/www/wwwroot/i.dxj.im
Environment=NODE_ENV=production Administrator=$Administrator Port=$Port
User=www
Restart=on-failure
RestartSec=42s
[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload
systemctl start fiora
systemctl enable fiora
五、展示效果
在管理员账户没有登陆的时候:
管理员账户登陆后:
移动端:
六、后期维护:记录的删除
# 进入数据库
mongo
# 查询数据库列表
show databases
# 进入数据库
use fiora
# 查询数据表列表
show collections
# 查询数据表内容
db.messages.find()
#删除数据表内信息
db.messages.deleteMany({to: "5f429aa7c0d0e3e0f2d7e499" });
删除第二聊天室的内容,也就是编号为5f429aa7c0d0e3e0f2d7e499的聊天室
此时,只剩下第一聊天室的信息了
至此,本文也就进入尾声了。希望本文能够起到抛砖引玉之效,也欢迎大家的批评交流。
如果您有任何疑问或者好的建议,期待你的留言、评论与关注!