如何搭建 Alist 私人网盘?超详细的保姆级教程

Alist 是一个开源的自托管文件管理系统,主要用于提供简单、方便的文件分享和访问功能。它可以将你本地或云端存储的文件和目录以网页形式展示,支持多种存储服务和协议,比如 Google Drive、Dropbox、OneDrive、阿里云 OSS 等。用户可以通过网页界面浏览、下载或分享这些文件。

Alist 的主要特点包括:

  1. 自托管:可以在自己的服务器上安装和运行,确保数据的安全和隐私。
  2. 多平台支持:支持多种存储服务和协议,可以将多个存储位置集中管理。
  3. 简单易用:提供直观的网页界面,易于浏览和管理文件。
  4. 分享功能:可以生成分享链接或设置访问权限,方便文件的分享和访问。
  5. 自定义:支持一定程度的界面和功能自定义,适应不同需求。

Alist 是一个适合需要灵活文件管理解决方案的用户,特别是对技术有一定了解并希望在自有环境中运行文件管理系统的人。

Alist 官方将其描述为”一个支持多种存储的文件列表程序”。但我觉得,把它理解为一个强大的在线云网盘更贴切。它的优势在哪里呢?

  1. 多种格式支持:可以即时浏览图片、视频、音频、PDF 等多种文件格式。
  2. 便捷访问:简单设置后,无需登录,游客即可直接访问资源。
  3. 功能丰富:除了浏览,还包括下载等多种实用功能。
  4. 高度可定制:支持自定义界面,可以打造专属于你的网盘风格。
  5. 多平台支持:支持挂载多种网盘和存储服务,如本地存储、Google Drive、OneDrive 等。
如何搭建 Alist 私人网盘?超详细的保姆级教程 - 科学上网 IYIO.NET

如果觉得上面搭建的 Alist 不错,自己也想手动搭建,那么请按照下面的步骤来进行,即可完成和我一样的效果。

搭建 Alist 的准备工作

在开始之前,我们需要准备以下资源:

  1. VPS 服务器:推荐使用 Ubuntu 或 Debian 系统,最低配置 1 核 1G 内存即可。(必需)
  2. 域名:虽然不是必需,但拥有一个域名可以让你的网盘更专业,访问更方便。(可选)
  3. 基本的 Linux 命令行知识:不需要很专业,但要能执行简单的命令。

Alist 搭建步骤详解

1. 安装 Docker

首先,我们需要在服务器上安装 Docker。为什么选择 Docker?因为它可以让我们的部署过程变得更简单、更安全。使用以下命令安装:

curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh

安装完成后,可以运行 docker --version 确认安装是否成功。

如何搭建 Alist 私人网盘?超详细的保姆级教程 - 科学上网 IYIO.NET docker 安装成功

2. 创建 Alist 项目目录

接下来,我们需要为 Alist 创建一个专门的目录:

mkdir /var/docker/alist -p && cd /var/docker/alist

3. 创建 Docker Compose 配置文件

在刚才创建的目录中,我们需要创建一个 docker-compose.yml 文件:

nano docker-compose.yml

将以下内容粘贴到文件中:

services:
    alist:
        image: 'xhofe/alist:latest'
        container_name: alist
        volumes:
            - '/etc/alist:/opt/alist/data'
        ports:
            - '5244:5244'
        environment:
            - PUID=0
            - PGID=0
            - UMASK=022
        restart: unless-stopped

保存并退出(按 Ctrl+X,然后按 Y,最后按 Enter)。

4. 启动 Alist

现在,我们可以启动 Alist 了:

docker compose up -d
如何搭建 Alist 私人网盘?超详细的保姆级教程 - 科学上网 IYIO.NET

使用 docker ps 命令查询是否运行成功;

如何搭建 Alist 私人网盘?超详细的保姆级教程 - 科学上网 IYIO.NET

5. 访问 Alist

打开浏览器,输入 http://你的服务器IP:5244 就可以看到 Alist 的界面了。

如何搭建 Alist 私人网盘?超详细的保姆级教程 - 科学上网 IYIO.NET

6. 获取初始登录密码

首次登录需要密码,可以通过以下命令获取:

docker logs alist

在输出中找到 “初始密码” 那一行。默认用户名是 admin。

如何搭建 Alist 私人网盘?超详细的保姆级教程 - 科学上网 IYIO.NET

7. 登录成功

Alist 进阶配置

1. 修改默认用户名和密码

为了安全起见,登录后请立即修改默认的用户名和密码。点击底部的”管理”,然后在左侧菜单中找到”用户”选项。

如何搭建 Alist 私人网盘?超详细的保姆级教程 - 科学上网 IYIO.NET

2. 添加本地存储

Alist 支持多种存储方式,这里以添加本地存储为例,添加其它网盘存储的方法在 Alist 官方有很详尽的描述,详细的添加方法可以参考官方文档:https://alist.nn.ci/guide/drivers/

如何搭建 Alist 私人网盘?超详细的保姆级教程 - 科学上网 IYIO.NET

这里有个需要注意的地方,挂载路径和根文件夹路径的填写,当初在我没仔细查看文档的情况下,这个地方总是填写不正确,后来找到一位博主的Alist的部署并挂载本地存储博客,才成功的解决了该问题。

这里以首页仅仅添加一个视频的主文件夹为例:

如何搭建 Alist 私人网盘?超详细的保姆级教程 - 科学上网 IYIO.NET

首先,我们需要回到服务器,使用命令 cd /etc/alist 打开挂载的文件夹路径,使用命令 mkdir 视频 新建一个视频的文件夹(不建议用中文),最后通过 ls 命令,查看视频文件夹是否创建成功。

如何搭建 Alist 私人网盘?超详细的保姆级教程 - 科学上网 IYIO.NET

然后回到添加本地存储的设置界面,这里主要涉及到挂载路径根文件夹路径的填写,

如何搭建 Alist 私人网盘?超详细的保姆级教程 - 科学上网 IYIO.NET 挂载路径填写
如何搭建 Alist 私人网盘?超详细的保姆级教程 - 科学上网 IYIO.NET 根文件夹路径填写

按照以上步骤填写完成后,即可在首页显示视频文件夹。

Alist 上传文件

上传文件的方法也很简单,按照上面的步骤完成视频文件夹的创建后,我们打开主页点击视频文件夹,即可上传文件。

如何搭建 Alist 私人网盘?超详细的保姆级教程 - 科学上网 IYIO.NET

只需要将上传的内容拖动到下面的上传框中,即可完成文件的上传。

如何搭建 Alist 私人网盘?超详细的保姆级教程 - 科学上网 IYIO.NET
如何搭建 Alist 私人网盘?超详细的保姆级教程 - 科学上网 IYIO.NET
如何搭建 Alist 私人网盘?超详细的保姆级教程 - 科学上网 IYIO.NET

Alist 界面美化

如何搭建 Alist 私人网盘?超详细的保姆级教程 - 科学上网 IYIO.NET

以上界面可能过于简单,适合实用党。

回到后台主页,点击设置中的全局,这里我们主要修改的地方为:自定义头部和自定义内容。通过修改这两个设置项,即可完成简单的美化工作。

如何搭建 Alist 私人网盘?超详细的保姆级教程 - 科学上网 IYIO.NET

将下列代码各自粘贴到设置项中,即可完成和体验网址一样的美化后的界面

自定义头部

<!-- Font6,自定义底部使用和看板娘使用的图标和字体文件-->
<link type="text/css" rel="stylesheet" href="https://npm.elemecdn.com/font6pro@6.3.0/css/fontawesome.min.css" media="all" />
<link href="https://npm.elemecdn.com/font6pro@6.3.0/css/all.min.css" rel="stylesheet" />

<!--音乐播放器所用的文件-->
<!-- require APlayer -->
<link rel="stylesheet" href="https://npm.elemecdn.com/aplayer@1.10.1/dist/APlayer.min.css" />
<script src="https://npm.elemecdn.com/aplayer@1.10.1/dist/APlayer.min.js"></script>
<!-- require MetingJS -->
<script src="https://npm.elemecdn.com/meting2@0.0.1/js/Meting.min.js"></script>

<style>
  /* 去除通知栏 右上角 X */
  .notify-render .hope-close-button {
    display: none;
  }
  /*去掉底部*/
  .footer {
    display: none !important;
  }

  /* 此选项两处CSS 在v3.31.0中已优化 滚动显示 和 右下角设置网格模式尺寸大小 */
  /* 文字超长自动换行 */
  /*.name-box .name {
    white-space: unset !important;
    overflow: unset !important;
    }*/
  /* 缩略图图片变大 代码中的160px 自己改 现在是注释状态若需要自行解除注释 */
  /*.obj-box > div {
    grid-template-columns: repeat(auto-fill, minmax(160px, 1fr))
    }
    .obj-box > div .item-thumbnail{
    height: 100px;
    }*/

  /*白天背景图*/
  .hope-ui-light {
    background-image: url("https://img.uuzi.net/background-alist.webp") !important;
    background-repeat: no-repeat;
    background-size: cover;
    background-attachment: fixed;
    background-position-x: center;
  }
  /*夜间背景图*/
  .hope-ui-dark {
    background-image: url("https://img.uuzi.net/background-alist-dark.webp") !important;
    background-repeat: no-repeat;
    background-size: cover;
    background-attachment: fixed;
    background-position-x: center;
  }

  /*主列表白天模式透明*/
  .obj-box.hope-stack.hope-c-dhzjXW.hope-c-PJLV.hope-c-PJLV-igScBhH-css {
    background-color: rgba(255, 255, 255, 0.5) !important;

  }
  /*主列表夜间模式透明*/
  .obj-box.hope-stack.hope-c-dhzjXW.hope-c-PJLV.hope-c-PJLV-iigjoxS-css {
    background-color: rgb(0 0 0 / 50%) !important;
  }
  /*readme白天模式透明*/
  .hope-c-PJLV.hope-c-PJLV-ikSuVsl-css {
    background-color: rgba(255, 255, 255, 0.5) !important;
  }
  /*readme夜间模式透明*/
  .hope-c-PJLV.hope-c-PJLV-iiuDLME-css {
    background-color: rgb(0 0 0 / 50%) !important;
  }


  /*顶部右上角切换按钮透明*/
  .hope-ui-light .hope-c-ivMHWx-hZistB-cv.hope-icon-button {
    background-color: rgba(255, 255, 255, 0.5) !important;
  }
  .hope-ui-dark .hope-c-ivMHWx-hZistB-cv.hope-icon-button {
    background-color: rgb(0 0 0 / 50%) !important;
  }

 .hope-c-PJLV-iiHckfM-css{
    min-height: 20vh!important;
  }

  /*右下角侧边栏按钮透明 第一个是白天 第二个是夜间*/
  .hope-ui-light .hope-c-PJLV-ijgzmFG-css {
    background-color: rgba(255, 255, 255, 0.5) !important;
  }
  .hope-ui-dark .hope-c-PJLV-ijgzmFG-css {
    background-color: rgb(0 0 0 / 50%) !important;
  }
  /*白天模式代码块透明*/
  .hope-ui-light pre {
    background-color: rgba(255, 255, 255, 0.1) !important;
  }
  /*夜间模式代码块透明*/
  .hope-ui-dark pre {
    background-color: rgba(255, 255, 255, 0) !important;
  }


  /*左侧侧边栏目录*/
  /*白天模式*/
  .hope-ui-light .hope-c-PJLV-ieGWMbI-css {
    background: rgba(255, 255, 255, 0.5) !important;
  }
  /*夜间模式*/
  .hope-ui-dark .hope-c-PJLV-ieGWMbI-css {
    background-color: rgb(0 0 0 / 50%) !important;
  }
  /* 返回顶部 */
  .hope-c-PJLV-ihVEsOa-css {
    background: rgba(255, 255, 255, 0.5) !important;
  }
  .hope-ui-dark .hope-c-PJLV-ihVEsOa-css {
    background-color: rgb(0 0 0 / 50%) !important;
  }


  /*顶部*/
  #root > .header {
    background: rgba(255, 255, 255, 0);
  }
  /*导航条*/
  /*白天模式*/
  .hope-ui-light .body > .nav {
    background-color: rgba(255, 255, 255, 0.5);
    border-radius: var(--hope-radii-xl);
  }
  /*夜间模式*/
  .hope-ui-dark .body > .nav {
    background-color: rgb(0 0 0 / 50%);
    border-radius: var(--hope-radii-xl);
  }
  /*隐藏导航条遮罩*/
  .body > .nav::after {
    display: none;
  }


  /*底部CSS,.App .table这三个一起的*/
  dibu {
    border-top: 0px;
    position: absolute;
    bottom: 0;
    width: 100%;
    margin: 0px;
    padding: 0px;
  }

  /*全局字体*/
  * {
  }
  * {
    font-weight: bold;
  }
  body {
    font-family: LXGW WenKai;
  }

  /*以下为评论系统专用*/
  /*适配大小契合度*/
  .newValine {
    width: min(96%, 940px);
    flex-direction: column;
    row-gap: var(--hope-space-2);
    border-radius: var(--hope-radii-xl);
    padding: var(--hope-space-2);
    box-shadow: var(--hope-shadows-lg);
  }

  /*渐变背景CSS*/
  #canvas-basic {
    position: fixed;
    display: block;
    width: 100%;
    height: 100%;
    top: 0;
    right: 0;
    bottom: 0;
    left: 0;
    z-index: -999;
  }


  /* 以下为音乐播放器额外配置 */
  /* 如果你想要音乐播放器不是很靠底部可以自己设置一下数值 0是靠最底部 */
  .aplayer .aplayer-body,
  .aplayer.aplayer-withlist {
    bottom: 0rem !important;
  }
  /*音乐播放器进一步进行隐藏*/
  /* 需要就加不需要就不用加 */
  .aplayer.aplayer-fixed.aplayer-narrow .aplayer-body {
    left: -66px !important;
  }
  .aplayer.aplayer-fixed.aplayer-narrow .aplayer-body:hover {
    left: 0 !important;
  }
</style>

自定义内容

<div>
        <center>
            <div class="newValine" id="vcomments">
                <h2 style="color: #2c3e50; border-bottom: 2px solid #3498db; padding-bottom: 10px; margin-bottom: 20px;">网盘资源使用说明</h2>
    
    <p style="margin-bottom: 15px;font-size: 0.9rem;">仅用于个人分享文件,任何人可查看、下载,请勿滥用。</p>
    
    <div style="font-size: 0.9rem;border-left: 4px solid #e74c3c; padding: 10px; margin-bottom: 15px;">
        <strong>警告:</strong>滥用一经发现,会立即封禁IP,永不解封。
    </div>
    
    <div style="font-size: 0.9rem;border-left: 4px solid #2ecc71; padding: 10px; margin-bottom: 15px;">
        <strong>注意:</strong>国内部分地区可能因网络波动而出现速度缓慢或无法加载等情况,请耐心等待。
    </div>
    
    <p style="font-size: 0.9rem;margin-bottom: 15px;">如需密码,关注微信公众号:"兔哥博客",回复关键字获取。</p>
</div>
        </center>
        <br />
<br />
        <center class="dibu">
            <div style="font-size: 14px; font-weight: bold;">
                <span class="nav-item">
                    <a class="nav-link" href="xxxxxxxxxx"
                        target="_blank">
                        <i class="fab fa-qq" style="color:#000" aria-hidden="true">
                        </i>
                        QQ |
                    </a>
                </span>
                <span class="nav-item">
                    <a class="nav-link" href="mailto:xxxxx@foxmail.com" target="_blank">
                        <i class="fa-duotone fa-envelope-open" style="color:#000" aria-hidden="true">
                        </i>
                        邮箱 |
                    </a>
                </span>
                <span class="nav-item">
                    <a class="nav-link" href="https://uuzi.net" target="_blank">
                        <i class="fas fa-edit" style="color:#000" aria-hidden="true">
                        </i>
                        博客 |
                    </a>
                </span>
                <span class="nav-item">
                    <a class="nav-link" href="xxxxxxxx" target="_blank">
                        <i class="fas fa-comment-lines" style="color:#000;" aria-hidden="true">
                        </i>
                        留言 |
                    </a>
                </span>
                <span class="nav-item">
                    <a class="nav-link" href="xxxxxxx" target="_blank">
                        <i class="fa fa-cloud-download" style="color:#000;" aria-hidden="true">
                        </i>
                        云盘 |
                    </a>
                </span>
                <!--后台入口-->
                <span class="nav-item">
                    <a class="nav-link" href="/@manage" target="_blank">
                        <i class="fa-solid fa-folder-gear" style="color:#000;" aria-hidden="true">
                        </i>
                        管理 |
                    </a>
                </span>
                <!--版权,请尊重作者-->
                <span class="nav-item">
                    <a class="nav-link" href="https://github.com/Xhofe/alist" target="_blank">
                        <i class="fa-solid fa-copyright" style="color:#000;" aria-hidden="true">
                        </i>
                        Alist
                    </a>
                </span>
                <br />
<br />

Alist 其它设置

Alist 功能非常多,包括设置界面 LOGO,标题,设置文件夹的隐藏和密码等等功能,由于篇幅有限,且比较简单,这些功能等待大家自行探索。

关于如何使用域名访问,需要先将域名解析到 IP,然后可以通过安装 nginxproxymanager 来方便的管理证书:

什么是 NPM(nginxproxymanager) ?

Nginx Proxy Manager(NPM)是一个基于Nginx的开源项目,它提供了一个直观的Web界面,用于简化和管理Nginx反向代理服务器的配置。通过这个管理器,用户可以轻松地设置和管理多个网站的代理,实现将外部流量路由到不同的Web服务器或应用程序。

主要功能包括:

  • 反向代理: 允许你将外部请求路由到内部服务器,实现负载均衡和应用程序的隐藏。
  • SSL证书管理: 支持自动获取和更新SSL证书,确保通过HTTPS安全访问。
  • 简单的Web界面: 提供了用户友好的Web界面,使得配置和管理Nginx代理变得更加直观和便捷。
  • 多站点支持: 允许你一次性管理多个站点的代理设置,方便集中管理。

安装前提条件,系统已安装docker以及docker compose

为了方便,将docker项目统一安装到 /root/docker/npm/ 目录下,在root身份下,输入以下代码:

mkdir -p /root/docker/npm/
cd /root/docker/npm/
nano docker-compose.yml

将以下代码粘贴到 docker-compose 文件中:

version: '3.8'
services:
  app:
    image: 'jc21/nginx-proxy-manager:latest'
    restart: unless-stopped
    ports:
      - '80:80'
      - '81:81'
      - '443:443'
    volumes:
      - ./data:/data
      - ./letsencrypt:/etc/letsencrypt

之后按 ctrl+x,然后按 y 保存即可。然后在当前目录下执行如下代码部署:

docker-compose up -d

输入 docker ps 查看是否部署成功,若出现类似如下,即部署成功:

root@uuzi:~/docker/npm# docker ps
CONTAINER ID   IMAGE                             COMMAND   CREATED          STATUS          PORTS                                                                                  NAMES
e56a12acaa1e   jc21/nginx-proxy-manager:latest   "/init"   20 seconds ago   Up 20 seconds   0.0.0.0:80-81->80-81/tcp, :::80-81->80-81/tcp, 0.0.0.0:443->443/tcp, :::443->443/tcp   npm-app-1

浏览器中输入 http://ip:81 (ip替换为你vps的ip)回车,出现如图即部署成功

如何搭建 Alist 私人网盘?超详细的保姆级教程 - 科学上网 IYIO.NET

登陆默认邮箱和密码:

  • Email:admin@example.com
  • Password:changeme

登陆成功后需要更改账号和密码,记住之后便可以以可视化的web界面管理反向代理服务。

总结

Alist 是一个功能强大、简单易用的网盘解决方案。通过本教程,你应该已经掌握了从零开始搭建 Alist 的全过程。相比 Nextcloud,Alist 更加轻量级,配置更简单,而且支持多种存储服务的集成。