1.目的
1.特点:去中心化的应用下载平台;去中心化的软件更新机制;去中心化apk管理平台,使用ipns作为发布密令。为Android应用软件开发做好铺垫。
2.成果
管理后台界面,界面长得丑了点,功能已经完成。
用户扫描后的效果
2.食用方式
git地址:https://github.com/bill080307/ipfs_apk.git
在ubuntu18上运行
git clone https://github.com/bill080307/ipfs_apk.git
cd ipfs_apk/api
# 根据自己的情况填写配置
vim config.json
# 安装
./install.sh
3.配置说明
目录结构
ipfs_apk/
├── admin # 后台管理界面的前端VUE项目
├── api
│ ├── admin-api.py # 后台API主程序
│ ├── config.json # 后台API服务配置
│ ├── install.sh # 安装脚本
│ ├── ipfsapk.conf # 后台网页显示 Nginx配置
│ ├── ipfsapk.service # 后台API服务配置文件
│ └── requirements.txt # 后台API程序依赖库
├── LICENSE
├── README.md
└── webui # 前台下载界面的前端VUE项目
15 directories, 36 files
config.json
{
"projectName": "VideoShare", # 项目名称
"service": { # 后台服务绑定端口和参数
"host": "127.0.0.1",
"port": 5050,
"workers": 1
},
"ipfsApi": "/ip4/172.16.7.1/tcp/5001", # ipfs-api
"ipfsGW": "http://172.16.0.60:8082/ipfs/:hash", # ipfs-gateway
"localStorage": "/data/", # 本地储存路径,用于共享储存,Filestore
"StorageSubPath": "apk", # 本地储存子路径
"redisCacheServer": [ # redis服务缓存地址,使用多个,必须配置一个,有效数据以第一个为准,配合ipns缓冲器使用:https://blog.csdn.net/weixin_43668031/article/details/100174147
{"host": "172.16.0.60", "port": 6379}
],
"uiTemplate": "QmQBQP2V8qo3VGXs8pZA685wB3gkbcmcdcEv2UwcUAJPWq" # 前端模板地址,即webui编译后的前端上传至ipfs的结果,运行`./install.sh ui`自动替换
}
ipfsapk.conf
server {
listen 81;
server_name _;
# 后端程序所放目录,如修改,需要同步修改在install.sh中
root /var/www/ipfsapk/;
index index.html;
location / {
try_files $uri $uri/ =404;
}
# 后端API程序的代理设置,修改路径需要同步修改到admin前端项目,修改后台服务绑定端口和参数需要在这里同步修改
location /api/ {
proxy_set_header Host $http_host;
proxy_pass http://127.0.0.1:5050/;
}
}
ipfsapk.service
[Unit]
Description=ipfsapkapi
[Service]
# 后台API程序运行路径,运行`./install.sh api` 自动替换
ExecStart=PYTHON3_SCRIPT
Restart=always
User=root
Group=root
[Install]
WantedBy=multi-user.target
4.安装命令说明
install.sh
子命令
./install.sh ui
编译下载界面,上传到ipfs空间上,自动将前端的hash替换到config.json模板中
./install.sh admin
编译后台界面,放置到nginx目录
./install.sh api
注册ipfsapk服务,根据config.json服务ip和端口启动api服务,默认为127.0.0.1:5050,反向代理至nginx里,默认为为后台前端的/api/路径。
注册的服务名为ipfsapk
可以通过systemctl status ipfsapk.service
查看服务状态
可以通过systemctl start ipfsapk.service
开启服务状态
可以通过systemctl stop ipfsapk.service
关闭服务状态
./install.sh
以上项目全部运行
5.未完善的地方
1.ipns的发布还没有完善,ipns的发布需要比较长的时间,打算在python中再拉起一个线程运行,无需返回结果。
2.目前配置第一个redis服务器来缓存ipfs的hash结果,配合之前做的ipns加速器,完成应用调试之类的任务完全没问题。
3.关于apk的update方法,缓存请求较慢,并且会获取到旧值,有待解决。
4.apk存放在本地路径(共享挂载路径)要求在ipfs节点上也挂载在ipfspath同级目录下,使用Filestore来上传到ipfs空间上,这样可以节省很多磁盘资源。
5.adminUI仅有功能,不够美观。
6.上图中二维码均为样例,无实际意义。发布应用后在下载界面的二维码的作用是:截图发朋友圈可以长按来获取应用。
7.至少需要一个可以使用的ipfs的网关地址,以给用户提供下载服务。