【补充】在Windows系统本地部署 Alist网盘 并用 nginx 动态转发

发布时间 2023-08-28 20:15:14作者: Chimengmeng

【引言】

  • 在我们平时都会因为想要共享系统本地的文件而发愁
  • 同时也会因为分享文件的不便利性,苦恼不已。
  • 偶然间我发现一个神奇的思路。
    • Alist
      • 一个文件列表程序,支持多个存储,并支持Web浏览和webdav,由gin和Solidjs提供支持。
      • 重点:免费!
    • Nginx
      • 一个支持动态转发端口的神奇程序
      • 重点:免费!
  • 二者结合会迸发出什么样的火花呢?

【一】Alist介绍

【1】官方介绍

### What's this

A file list program that supports multiple storage, and supports web browsing and webdav, powered by gin and Solidjs.
  • 一个文件列表程序,支持多个存储,并支持Web浏览和webdav,由gin和Solidjs提供支持。

【2】支持的网盘列表

Support storage
 Local storage
Crypt
Aliyundrive Open
aliyundrive
OneDrive /APP/ Sharepoint (global, cn,de,us)
189cloud (Personal, Family)
GoogleDrive
123pan/Share
Alist
邮票
自来水龙
PikPak / share
S3
UPYUN Storage Service
 WebDAV
 Teambition(China,International)
mediatrack
139yun (Personal, Family)
Wopan
MoPan
YandexDisk
BaiduNetdisk / share
Quark
Thunder
Lanzou
Aliyundrive share
Google photo
Mega.nz
Baidu photo
TeraBox
AList v2/v3
 SMB
alias
115
Seafile
 Cloudreve
Trainbit
UrlTree
 IPFS
UC Clouddrive
Dropbox
Tencent weiyun
#Discussion
  • 支持的网盘有:本地电脑磁盘、FTP、SFTP、WebDAV、SMB、对象存储、115、123、百度、阿里云、MEGA、谷歌云盘、谷歌相册、移动、天翼、onedrive、pikpak(这个网盘大家可以了解一下?)、迅雷、夸克、蓝奏云、迅雷、Cloudreve等等。
  • 从上面的列表来看,我们可以发现,它支持的种类还是很丰富的,几乎容纳了市面上所有的网盘

【3】小结

  • 简单的来说就是他可以作为一种网盘的集合体,将市面上几乎所有的网盘揉到一起,做一个映射,让我们能通过Alist一个网盘挂载我们的所有网盘

【二】NGINX介绍

【1】什么是 nginx

  • Nginx 是高性能的 HTTP 和反向代理的web服务器,处理高并发能力是十分强大的,能经受高负 载的考验,有报告表明能支持高达 50,000 个并发连接数。
  • 其特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。

【2】nginx 可以做哪些事

(1)Nginx 作为 web 服务器

  • Nginx 可以作为静态页面的 web 服务器,同时还支持 CGI 协议的动态语言,比如 perl、php 等。
  • 但是不支持 java。Java 程序只能通过与 tomcat 配合完成。
  • Nginx 专为性能优化而开发, 性能是其最重要的考量,实现上非常注重效率 ,能经受高负载的考验,有报告表明能支持高 达 50,000 个并发连接数。

(2)正向代理

  • Nginx 不仅可以做反向代理,实现负载均衡。还能用作正向代理来进行上网等功能。
  • 正向代理:如果把局域网外的 Internet 想象成一个巨大的资源库,则局域网中的客户端要访 问 Internet,则需要通过代理服务器来访问,这种代理服务就称为正向代理。

(3)反向代理

  • 反向代理,其实客户端对代理是无感知的,因为客户端不需要任何配置就可以访问。
  • 我们只 需要将请求发送到反向代理服务器,由反向代理服务器去选择目标服务器获取数据后,在返 回给客户端,此时反向代理服务器和目标服务器对外就是一个服务器,暴露的是代理服务器 地址,隐藏了真实服务器 IP 地址。

(4)负载均衡

  • 增加服务器的数量,然后将请求分发到各个服务器上,将原先请求集中到单个服务器上的 情况改为将请求分发到多个服务器上,将负载分发到不同的服务器,也就是我们所说的负 载均衡

  • 客户端发送多个请求到服务器,服务器处理请求,有一些可能要与数据库进行交互,服 务器处理完毕后,再将结果返回给客户端。

【三】Alist安装

  • 资金充裕的大佬们可以选择氪金,让你更强!
    • 预算有限的建议自己亲手装个试试 QWQ

【1】Windows系统

(1)下载

  • 下载后的文件长这样

  • 我们将文件解压

  • 没错,你没看错,他真的只有一个运行程序,其他一概没有!

  • 但是你运行以后就会产生很多东西了!

(2)安装运行

# Unzip the downloaded file to get the executable file:
unzip alist-xxxx.zip
# Run the program
.\alist.exe server

# Obtain administrator information The following two different versions, the new version also has random generation and manual settings
# Versions lower than v3.25.0
.\alist.exe admin

# higher than v3.25.0 version
# Randomly generate a password
.\alist.exe admin random
# Manually set a password `NEW_PASSWORD` refers to the password you need to set
.\alist.exe admin set NEW_PASSWORD
  • 他官方文档是这么写的

  • 我们已经下载到本地并有了 alist.exe 程序

  • 那那我们只要切换到当前目录下执行

.\alist.exe server
  • 就可以启动 alist 程序了
  • 如果启动程序报错如下
    • 这显示是端口冲突了,我们改一个端口即可

  • 补充

    • 如果启动不起来的话就修改自己的端口
    • 默认端口是 5244
  • 修改默认端口

    • 位置在 AlistNew\data\config.json

    {
      "force": false,
      "site_url": "",
      "cdn": "",
      "jwt_secret": "9kyqa3RzsOSmJqsJ",
      "token_expires_in": 48,
      "database": {
        "type": "sqlite3",
        "host": "",
        "port": 0,
        "user": "",
        "password": "",
        "name": "",
        "db_file": "data\\data.db",
        "table_prefix": "x_",
        "ssl_mode": ""
      },
      "scheme": {
        "address": "0.0.0.0",
         # 默认端口在这里,默认是 5244 我这里改成了 6969
        "http_port": 6969,
        "https_port": -1,
        "force_https": false,
        "cert_file": "",
        "key_file": "",
        "unix_file": "",
        "unix_file_perm": ""
      },
      "temp_dir": "data\\temp",
      "bleve_dir": "data\\bleve",
      "log": {
        "enable": true,
        "name": "data\\log\\log.log",
        "max_size": 50,
        "max_backups": 30,
        "max_age": 28,
        "compress": false
      },
      "delayed_start": 0,
      "max_connections": 0,
      "tls_insecure_skip_verify": true
    }
    

修改并保存后重新启动 alist 程序

.\alist.exe server

允许访问即可

F:\桌面\alist-windows-amd64>.\alist.exe server INFO[2023-08-28 17:40:42] reading config file: data\config.json        
INFO[2023-08-28 17:40:42] load config from env with prefix: ALIST_     
INFO[2023-08-28 17:40:42] init logrus...
INFO[2023-08-28 17:40:42] start HTTP server @ 0.0.0.0:6969
INFO[2023-08-28 17:40:42] qbittorrent not ready.

  • 如果这时我们点击登录他会提示我们

(3)创建管理员用户

# Obtain administrator information The following two different versions, the new version also has random generation and manual settings
# Versions lower than v3.25.0
.\alist.exe admin

# higher than v3.25.0 version
# Randomly generate a password
.\alist.exe admin random
# Manually set a password `NEW_PASSWORD` refers to the password you need to set
.\alist.exe admin set NEW_PASSWORD
  • 因为我们下的是最新版 , 高于 3.25.0 版本,所以我们执行下面的命令

    • 注意这里,我们生成用户名和密码的时候要保持,前台程序正常运行

    • 意思是卡主的这个界面,别关!重新开一个 CMD 窗口 !

# 这条命令会随机生成 密码 
# 格式是 .\alist.exe 用户名 随机密码

.\alist.exe admin random
# 这条命令允许我们自定义密码
# 格式是 :.\alist.exe 用户名 set 自定义密码

.\alist.exe admin set NEW_PASSWORD
  • 生成超级管理员成功
F:\桌面\alist-windows-amd64>.\alist.exe admin set 1314521
INFO[2023-08-28 17:49:55] reading config file: data\config.json        
INFO[2023-08-28 17:49:55] load config from env with prefix: ALIST_     
INFO[2023-08-28 17:49:55] init logrus...
INFO[2023-08-28 17:49:55] admin user has been updated:
INFO[2023-08-28 17:49:55] username: admin
INFO[2023-08-28 17:49:55] password: 1314521

F:\桌面\alist-windows-amd64>
  • 回到登录页面登录

  • 登陆成功

(4)守护进程

  • 因为这种方式需要我们在本目录下启动 alist 程序,一旦程序窗口结束,代表这 alist 程序也就结束了
  • 那我们挂载在网页上的,当然也就会随之崩溃了

** 方法一**

  1. 从以下位置下载最新版本nssmhttps://nssm.cc/download在新窗口中打开.
  2. 解压缩存档并转到 的目录。nssm.exe
  3. 按住Shift并右键单击空白区域,然后松开并按S或在此处选择“Powershell”,您现在应该看到一个名为“Windows PowerShell”的蓝色窗口。
  4. 类型。.\nssm.exe install alist
  5. 为“路径”选择路径,例如 ;键入“参数”。alist.exe``D:\alist\alist.exe``server
  6. 您可以在“详细信息”选项卡中自定义“显示名称”,“描述”和“启动类型”。
  7. 转到“I / O”选项卡,然后为“输出(标准输出)”和“输出(标准输出)”选择一个文件,例如。文件本身 () 可能不存在,但文件夹 () 必须存在。D:\alist\stdout.log``stdout.log``D:\alist
  8. 点击“安装服务”。

您现在可以从 services.msc 或任务管理器启动该服务。

方法二

  • 使用 .VBS脚本启动和停止,分别创建两个脚本start.vbs和stop.vbs
  • 只需双击即可在与Alist启动程序相同级别的文件夹中启动它,不用担心没有响应,只需转到浏览器即可访问它
  • 两个启动脚本

开始.vbs

Dim ws
Set ws = Wscript.CreateObject("Wscript.Shell")
ws.run "alist.exe server",vbhide
Wscript.quit

停止.vbs

Dim ws
Set ws = Wscript.CreateObject("Wscript.Shell")
ws.run "taskkill /f /im alist.exe",0
Wscript.quit

  • 双击运行,开始.vbs
    • 程序启动并在后台自动运行
  • 双击运行,停止.vbs
    • 程序关闭并自动杀死后台进程

(5)映射本地文件

  • 它本身支持的网盘还是很多的,我这里演示的是本地挂载

  • 点击管理,进入到管理后台

  • 选择存储
    • 添加存储
      • 驱动选择:本地存储

  • 我们参照上述官方文档本地存储的参数进行配置

  • #根文件夹路径

    • 要装入的文件夹的路径。例如:

    • Linux:/root

    • 窗户:C:

  • 挂载路径就是自己自定义的这个文件的名称,例如

  • 点击添加
    • 选择做侧边栏的主页

  • 我们可以看到,本地文件已经被挂载成功了

  • 并且通过右上角的视图,可以切换视图

    • 这图片视频都可以显示,还可以下载上传(管理员权限)
  • 游客需要开通额外的权限,

    • 在后台管理的用户界面
  • 至此,alist就完整的安装完了

  • 更多精彩操作就需要自己探索了

【2】macOS系统

  • 作者是穷鬼,买不起,Mac,自己研究吧,根据官方文档

【3】Linux系统

【四】NGINX安装

【1】下载

  • 我这里选择下载最新版本的,从上面的入口进去

  • 下载Window版本的 1.24.0 稳定版本

【2】解压运行

  • 解压下载好的压缩包

  • 文件说明
    • conf:存在Nginx配置文件的目录
    • docs:存放Nginx文档的目录
    • html:存放静态html文件的目录
    • logs:存放Nginx日志的目录
    • temp:存放临时文件的目录

【3】安装部署

1、下载完成后,解压缩,运行cmd,使用命令进行操作,不要直接双击nginx.exe,不要直接双击nginx.exe,不要直接双击nginx.exe

  • 一定要在dos窗口启动,不要直接双击nginx.exe,这样会导致修改配置后重启、停止nginx无效,需要手动关闭任务管理器内的所有nginx进程,再启动才可以

2、使用命令到达nginx的解压缩后的目录

cd F:\桌面\NGINX\nginx-1.24.0

3、启动nginx服务,启动时会一闪而过是正常的

start nginx

4、查看任务进程是否存在,dos或打开任务管理器都行

tasklist /fi "imagename eq nginx.exe"
F:\桌面\alist-windows-amd64>tasklist /fi "imagename eq nginx.exe"

映像名称                       PID 会话名              会话#       内存使用 
========================= ======== ================ =========== ============
nginx.exe                    22508 Console                    1      6,208 K
nginx.exe                    11556 Console                    1      7,140 K
  • 启动后会一闪而过,这是正常的,可以看一下任务是否启动确认,或打开任务管理器在进程中看不到nginx.exe的进程(双击nginx.exe时会显示在这里),需要打开详细信息里面能看到隐藏的nginx.exe进程。

  • 如果都没有可能是启动报错了查看一下日志,在nginx目录中的logs文件夹下error.log是日志文件

  • 常见的错误:
  • (1)端口号被占用
  • (2)nginx文件夹路径含中文
  • 其他错误就详细看log中的描述
  • 如果端口被占用,可以修改配置文件
    • F:\桌面\NGINX\nginx-1.24.0\conf\nginx.conf

#user  nobody;
worker_processes  1;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include       mime.types;
    default_type  application/octet-stream;

    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';

    #access_log  logs/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    server {
        # 默认是 80 ,我改成了自定义的 8800
        listen       8800;
        server_name  localhost;

        location / {
            root   html;
            index  index.html index.htm;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
}
  • 访问成功的页面

【五】NGINX转发端口

【1】引言

  • 因为我们的 Alist 目前部署在我们本地的机器上,只能内网访问,外网无法访问到,因此,我们需要利用nginx做端口的动态转发,让外面的人能够访问内部的东西

【2】修改nginx配置文件

  • F:\桌面\NGINX\nginx-1.24.0\conf\nginx.conf

#user  nobody;
worker_processes  1;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include       mime.types;
    default_type  application/octet-stream;

    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';

    #access_log  logs/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    server {
        # 默认是 80 ,我改成了自定义的 8800
        listen       8800;
        server_name  localhost;

        location / {
            # 增加一个新的端口转发地址
            proxy_pass  http://127.0.0.1:6969/;
            root   html;
            index  index.html index.htm;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
}
  • 修改完成后保存,使用以下命令检查一下配置文件是否正确,后面是nginx.conf文件的路径,successful就说明正确了
nginx -t -c /nginx-1.24.0/conf/nginx.conf
F:\桌面\NGINX\nginx-1.24.0>nginx -t -c /nginx-1.24.0/conf/nginx.conf
nginx: the configuration file F:\桌面\NGINX\nginx-1.24.0\conf\nginx.conf syntax is ok
nginx: configuration file F:\桌面\NGINX\nginx-1.24.0\conf\nginx.conf test is successful
  • 如果程序没启动就直接start nginx启动,如果已经启动了就使用以下命令重新加载配置文件并重启
nginx -s reload
  • 关闭nginx服务使用以下命令,同样也是一闪而过是正常的,看一下是否进程已消失即可快速停止
nginx -s stop
  • 完整有序的关闭
nginx -s quit

【3】最终效果

  • 我们可以通过外网访问内网实现文件共享