Debian 编译安装 Alist v3 - 定制需求
Debian 编译安装 Alist v3 - 定制需求
SitaoAlist是一款支持多种存储(比如本地存储、阿里云盘、OneDrive、Google Drive)的目录文件列表程序,支持 web 浏览与webdav,且易于拓展. 后端基于gin,前端使用react
AList 从一开始就设计为易于安装,几乎一键开启.但是直接使用官方编译好的程序文件有时候不太满足自己的需求,这时候就需要自己修改源码然后编译安装了.我的需求是删掉”Aliyun Video Previewer”的默认预览,我将用Debian 11演示
编译前的准备工作
1.Golang
1 | wget https://go.dev/dl/go1.21.0.linux-amd64.tar.gz |
配置 ${PATH} 包含 Go 的 bin 目录的环境变量 /usr/loca/go/bin:
1 | echo "export PATH=/usr/local/go/bin:${PATH}" | tee /etc/profile.d/go.sh |
查看版本
1 | go version |
2.nodejs
1 | apt-get install xz-utils -y |
配置环境变量
1 | cat << EOF >> /etc/profile |
查看版本
1 | node -v |
查看npm环境
1 | npm -v |
3.pnpm(performant npm)
1 | npm install -g pnpm |
4.gcc、git
1 | apt install build-essential git -y |
clone alist前端代码
1 | git clone --recurse-submodules https://github.com/alist-org/alist-web.git |
clone alist后端代码
1 | git clone https://github.com/alist-org/alist.git |
前后端拉取/克隆好了,但是我们拉取/克隆下来的前端里面只有一个默认的英文语言文件,我们还需要下载一个带中文的语言文件: zh-CN.zip
1 | apt install unzip -y |
这样语言文件就放进去了,继续输入命令:
cd alist-web/
chmod +x ./scripts/i18n.mjs
node ./scripts/i18n.mjs
执行完毕语言里面会出现一个 entry.ts 的文件,这样我们就可以用了
编译前端
确保当前在alist-web目录里
1.修改源码**(如果你没有修改源码的需求请忽略这一步)**
1 | vim src/pages/home/previews/index.ts |
找到Aliyun Video Previewer,如:
删掉Aliyun Video Previewer {}这部分的内容,并保持格式,如:wq
保存退出
2.开始编译
1 | pnpm install |
需要等待几分钟
编译好后,会看到一个叫 “dist” 的文件夹,我们待会需要把dist/移动到后端代码目录里去
编译后端
进入后端代码目录
1 | cd ~/alist |
删除原来的dist
1 | rm -rf ./public/dist |
把刚才的alist-web/dist目录移动到public去
1 | mv ~/alist-web/dist ./public |
开始编译
创建一个install.sh文件
1 | vim compile.sh |
写入以下内容:
1 | appName="alist" |
:wq
保存退出
执行编译
1 | bash compile.sh |
大概需要1-2分钟
编译成功后,可以看到新增了一个alist二进制文件
至此,我们已经成功编译好了Alist!
运行
1 | mkdir /alist && cd /alist |
守护进程
1 | cat << EOF > /etc/systemd/system/alist.service |
相关命令:
1 | systemctl enable alist |
设置密码
1 | ./alist admin set your_password |
重启服务
1 | systemctl restart alist |
最后附上nginx反向代理配置文件
server {
listen 80;
server_name 你的域名;
charset utf-8;
location / {
rewrite (.*) https://你的域名$1 permanent;
}
}
server {
charset utf-8;
listen 443 ssl;
server_name 你的域名;
#access_log /alist/access_log;
location / {
proxy_pass http://127.0.0.1:5244;
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 X-Forwarded-Proto $scheme;
}
ssl_certificate 你的域名证书路径.crt;
ssl_certificate_key 你的域名证书路径.key;
ssl_stapling on;
ssl_stapling_verify on;
resolver 8.8.8.8 8.8.4.4 valid=300s;
resolver_timeout 5s;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers "ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA:DES-CBC3-SHA:HIGH:!aNULL:!eNULL:!EXPORT:!DES:!MD5:!PSK:!RC4";
ssl_prefer_server_ciphers on;
}