前言

提到网盘程序,就是可以对接一些第三方的存储策略,比如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>
届ける言葉を今は育ててる
最后更新于 2023-01-09