Alist是一款支持多种存储(比如本地存储、阿里云盘、OneDrive、Google Drive)的目录文件列表程序,支持 web 浏览与webdav,且易于拓展. 后端基于gin,前端使用react
AList 从一开始就设计为易于安装,几乎一键开启.但是直接使用官方编译好的程序文件有时候不太满足自己的需求,这时候就需要自己修改源码然后编译安装了.我的需求是删掉"Aliyun Video Previewer"的默认预览,我将用Debian 11演示
编译前的准备工作
1.Golang
wget https://go.dev/dl/go1.21.0.linux-amd64.tar.gz
tar -zxvf go1.21.0.linux-amd64.tar.gz -C /usr/local/
配置 ${PATH} 包含 Go 的 bin 目录的环境变量 /usr/loca/go/bin:
echo "export PATH=/usr/local/go/bin:${PATH}" | tee /etc/profile.d/go.sh
source /etc/profile.d/go.sh
查看版本
go version
2.nodejs
apt-get install xz-utils -y
wget https://nodejs.org/dist/v18.18.1/node-v18.18.1-linux-x64.tar.xz
tar -xvf node-v18.18.1-linux-x64.tar.xz -C /usr/local/
配置环境变量
cat << EOF >> /etc/profile
export NODE_HOME=/usr/local/node-v18.18.1-linux-x64
export PATH=/usr/local/node-v18.18.1-linux-x64/bin:$PATH
EOF
source /etc/profile
查看版本
node -v
查看npm环境
npm -v
3.pnpm(performant npm)
npm install -g pnpm
4.gcc、git
apt install build-essential git -y
拉取源代码
clone alist前端代码
git clone --recurse-submodules https://github.com/alist-org/alist-web.git
clone alist后端代码
git clone https://github.com/alist-org/alist.git
现在,前后端拉取/克隆好了,但是我们拉取/克隆下来的前端里面只有一个默认的英文语言文件
我们还需要下载一个带中文的语言文件 链接
apt install unzip -y
unzip zh-CN.zip -d alist-web/src/lang/
这样语言文件就放进去了,继续输入命令: cd alist-web/ chmod +x ./scripts/i18n.mjs node ./scripts/i18n.mjs
执行完毕语言里面会出现一个 entry.ts 的文件,这样我们就可以用了
编译前端
请确保当前在alist-web目录里
1.修改源码 (如果你没有修改源码的需求请忽略这一步)
vim src/pages/home/previews/index.ts
找到Aliyun Video Previewer,如:
删掉Aliyun Video Previewer {}这部分的内容,并保持格式,如
:wq
保存退出
2.开始编译
pnpm install
pnpm build
需要等待几分钟 编译好后,会看到一个叫 “dist” 的文件夹,我们待会需要把dist/移动到后端代码目录里去
编译后端
进入后端代码目录
cd ~/alist
删除原来的dist
rm -rf ./public/dist
把刚才的alist-web/dist目录移动到public去
mv ~/alist-web/dist ./public
开始编译
创建一个 install.sh
文件
vim compile.sh
写入以下内容:
appName="alist"
builtAt="$(date +'%F %T %z')"
goVersion=$(go version | sed 's/go version //')
gitAuthor=$(git show -s --format='format:%aN <%ae>' HEAD)
gitCommit=$(git log --pretty=format:"%h" -1)
version=$(git describe --long --tags --dirty --always)
webVersion=$(wget -qO- -t1 -T2 "https://api.github.com/repos/alist-org/alist-web/releases/latest" | grep "tag_name" | head -n 1 | awk -F ":" '{print $2}' | sed 's/\"//g;s/,//g;s/ //g')
ldflags="\
-w -s \
-X 'github.com/alist-org/alist/v3/internal/conf.BuiltAt=$builtAt' \
-X 'github.com/alist-org/alist/v3/internal/conf.GoVersion=$goVersion' \
-X 'github.com/alist-org/alist/v3/internal/conf.GitAuthor=$gitAuthor' \
-X 'github.com/alist-org/alist/v3/internal/conf.GitCommit=$gitCommit' \
-X 'github.com/alist-org/alist/v3/internal/conf.Version=$version' \
-X 'github.com/alist-org/alist/v3/internal/conf.WebVersion=$webVersion' \
"
go build -ldflags="$ldflags" .
:wq
保存退出
执行编译
bash compile.sh
大概需要1-2分钟
编译成功后,可以看到新增了一个alist二进制文件
至此,我们已经成功编译好了Alist!
运行
mkdir /alist && cd /alist
cp ~/alist/alist .
chmod +x alist
配置守护进程
cat << EOF > /etc/systemd/system/alist.service
[Unit]
Description=alist
After=network.target
[Service]
Type=simple
WorkingDirectory=/alist
ExecStart=/alist/alist server
Restart=on-failure
[Install]
WantedBy=multi-user.target
EOF
相关命令:
systemctl daemon-reload
systemctl enable --now alist
systemctl status alist
systemctl restart alist
systemctl stop alist
设置密码
./alist admin set your_password
重启服务
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;
}