Debian 编译安装 Alist v3 - 定制需求

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;
    }
All is well
使用 Hugo 构建
主题 StackJimmy 设计