前言
提到网盘程序,就是可以对接一些第三方的存储策略,比如Onedrive、S3、COS、OSS等等,从而可以让你自己利用这些空间的程序,首先肯定是大名鼎鼎的Cloudreve了,我们的白嫖云网盘就是基于此项目构建的。
但是今天说到的是网盘列表程序,网盘列表程序的主要目的是分享,而非私人存储,可能一些朋友听说过Oneindex,曾在2020年的时候很热门,因为其体积小、可以对接Onedrive,但这个项目由于微软API失效,开发者未能及时维护而石沉大海,现在在一些第三方开发者的努力之下维护云函数版本
而今天我们说的是一个在21年初起来的项目,叫Alist,Cloudreve可以对接的存储策略有下面这些
而Alist,可能需要你慢慢看了...
接下来该谈谈Alist的部署了,给一个demo,也就是我自己的网盘列表站Yi Disk (rerizon.cn)
给出Alist的项目地址 Github,首先要说明的是,Alist并非PHP程序或是其他超文本语言程序,Alist使用的技术栈是Golang+react的前后端模式。所以想要部署Alist,至少需要一台VPS或具有独立系统的服务器,而非一台虚拟主机。
Alist提供了一键安装脚本,具体说明在官方文档-安装,这里我们主要讲述自由度更高的手动安装
Step1 下载运行
首先我们要到Alist项目地址的releases页去下载编译好的版本
Alist提供了多种平台的版本,包括但不限于Linux X86、ARM、Windows、Mips,这里我们选择Linux-amd64版本,要是VPS部署的有宝塔,可以直接在宝塔离线下载或是下载后上传,我这里选择直接使用wget下载到服务器并解压
wget https://github.com/Xhofe/alist/releases/download/v2.4.3/alist-linux-amd64.tar.gz #将alist下载到服务器
tar -zxvf alist-linux-amd64.tar.gz #解压
chmod +x alist-linux-amd64 #给二进制文件赋予执行权限
./alist-linux-amd64 #执行二进制文件
这样二进制文件就跑起来了,但是我建议你运行起来后就Ctrl + C 终止掉,这一步只是为了生成默认配置文件模板供我们更改,可能你不是很希望程序运行在5244端口上,所以我们还需要更改配置文件。
注意:假如你使用sqllite,这一步应该把程序运行生成的默认密码 Initial Password保存下来!
Step2 配置文件
在第一步运行起来程序后,运行目录就会自动生成配置文件夹“data”,里面有两个文件一个文件夹:Temp是缓存,无需理会,config.json就是程序运行的配置文件,data.db是默认使用sqlite3的数据库文件。
这里我给出两个模板
使用Sqllite的模板:
{
"force": false,
"address": "0.0.0.0",
"port": 6767, #自定义的端口号
"assets": "https://npm.elemecdn.com/alist-web@$version/dist", #前端静态资源
"database": {
"type": "sqlite3",
"db_file": "data/data.db"
}, #sqlite3配置
"scheme": {
"https": false,
"cert_file": "",
"key_file": ""
},
"cache": {
"expiration": 60,
"cleanup_interval": 120
},
"temp_dir": "data/temp" #缓存目录
}
下面再给一个使用mysql的配置:
{
"force": false,
"address": "0.0.0.0",
"port": 6767, #自定义的端口号
"assets": "https://npm.elemecdn.com/alist-web@$version/dist", #前端静态资源
"database": {
"type": "mysql",
"host": "localhost", #mysql主机地址
"port": 3306, #mysql端口号
"user": "demo", #mysql用户名
"password": "demopassword", #mysql密码
"name": "alist", #mysql数据库名
"table_prefix": "x_", #mysql表前缀
"ssl_mode": ""
},
"scheme": {
"https": false,
"cert_file": "",
"key_file": ""
},
"cache": {
"expiration": 60,
"cleanup_interval": 120
},
"temp_dir": "data/temp" #缓存目录
}
port是端口号,assets是前端静态资源,详情见官方文档-配置文件
可以使用vim更改,也可以改完上传,有宝塔当然就用宝塔内置的编辑器。
更改完之后就可以./alist-linux-amd64运行了,mysql第一次会生成默认密码,sqllite如果第一步忘记密码的可以删除data.db来重新运行。
确保你的端口在防火墙开放之后,运行程序,一切顺利的话,你就可以使用 ip:端口 去访问了
Step3 进程守护
当然我们是在ssh中运行的alist程序,ssh窗口关闭后程序就会结束运行,我们需要使用进程守护。
常见的进程守护有两个:systemd和supervisor,我这里使用并且推荐systemd,因为systemd是系统级别的,可以使用模板,并且开机自启不需要依赖
systemd的配置文件路径为 /usr/lib/systemd/system 配置文件名字为 :alist(实例).service
这里给一个实例配置文件:
[Unit]
Description=alist
After=network.target
[Service]
Type=simple
WorkingDirectory=/home/ubuntu/alist-linux-amd64 #这里是alist二进制文件的绝对路径
ExecStart=/home/ubuntu/alist-linux-amd64 -conf data/config.json #这里是配置文件的相对路径
Restart=on-failure
[Install]
WantedBy=multi-user.target
修改完配置文件之后,将其命名为alist.service后存放在/usr/lib/systemd/system/目录下
systemctl daemon-reload #刷新列表
systemctl enable alist #开机启动
systemctl status alist #状态
systemctl start alist #开启
systemctl restart alist #重启
systemctl stop alist #停止
启动之后,在URL后加上/@manage/即可进入后台,具体设置项可以参考官方文档,这里主讲部署
番外-可选:反向代理
由于golang的中间件可能经不起高负载,并且我们需要使用自己的域名,所以我们需要使用其他中间件比如nginx、apache去反向代理alist。
比如nginx在网站的server字段中加入
location / {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_pass http://127.0.0.1:6767; #这一步更改自己端口号
}
apache:
<VirtualHost *:80>
ServerName myapp.example.com
ServerAdmin webmaster@example.com
DocumentRoot /www/myapp/public
# 以下为关键部分
AllowEncodedSlashes NoDecode
ProxyPass "/" "http://127.0.0.1:6767/" nocanon #端口号
</VirtualHost>