miniserve 简单美观的文件服务器

如果想建立一个简单静态文件或目录服务器,通常可以用 Python 实现,而且非常简单

# Python 2
python -m SimpleHTTPServer <port>

# Python 3
python3 -m http.server <port>

一般情况下,这就够用了,但如果这样的服务器在浏览器提供的界面有些简陋,而且不提供认证服务。更复杂
的实现方法是使用 Nginx,但 Nginx 的配置相对繁琐,这里推荐一个使用 Rust 基于 Actix
框架实现静态文件或文件夹服务器 miniserve,demo如下

miniserve.png

除了更加漂亮的界面和基本用户认证外 miniserve 还支持如下功能

  • 将当前文件夹压缩后下载
  • 界面上传文件(可配置)
  • 支持监听多网卡
  • 自动更改 MIME
  • 超级快(powered by Rust and Actix)

下载

发行版界面找到操作系统对应的版本,文件很小,最大的 osx 也仅有 3.2MB。

Linux

sudo curl -L https://github.com/svenstaro/miniserve/releases/download/v0.4.1/miniserve-linux-x86_64 -o /usr/local/bin/miniserve
sudo chmod +x /usr/local/bin/miniserve

OSX

sudo curl -L https://github.com/svenstaro/miniserve/releases/download/v0.4.1/miniserve-osx-x86_64 -o /usr/local/bin/miniserve
sudo chmod +x /usr/local/bin/miniserve

Windows

windows 下载好 exe 文件可直接运行

Cargo

如果电脑上安装了 Rust 和 Cargo,也可以通过 Cargo 安装,但由于 miniserve
仅支持 nightly channel,所以你得先切换到 nightly channel

rustup toolchain add nightly
rustup default nightly

cargo install miniserve

Docker

miniserve 在 docker hub 上的镜像名为 svenstaro/miniserve

docker pull svenstaro/miniserve

使用

全部参数如下

miniserve --help
miniserve 0.4.1
Sven-Hendrik Haase <svenstaro@gmail.com>, Boastful Squirrel <boastful.squirrel@gmail.com>
For when you really just want to serve some files over HTTP right now!

USAGE:
    miniserve [FLAGS] [OPTIONS] [--] [PATH]

FLAGS:
    -u, --upload-files       Enable file uploading
    -h, --help               Prints help information
    -P, --no-symlinks        Do not follow symbolic links
    -o, --overwrite-files    Enable overriding existing files during file upload
        --random-route       Generate a random 6-hexdigit route
    -V, --version            Prints version information
    -v, --verbose            Be verbose, includes emitting access logs

OPTIONS:
    -a, --auth <auth>                    Set authentication (username:password)
    -c, --color-scheme <color_scheme>    Default color scheme [default: Squirrel]  [possible values:
                                         Archlinux, Zenburn, Monokai, Squirrel]
    -i, --if <interfaces>...             Interface to listen on
    -p, --port <port>                    Port to use [default: 8080]

ARGS:
    <PATH>    Which path to serve

服务某个文件夹

miniserve some_dir

服务单个文件

miniserve file

启用用户认证

--auth user:passwd 可以提供简单用户认证服务

miniserve --auth joe:123 some_dir

在根目录后添加随机6位URL

miniserve -i 192.168.0.1 --random-route some_dir
# 服务器URL为 http://192.168.0.1/c78b6

绑定多张网卡

miniserve -i 192.168.0.1 -i 10.13.37.10 -i ::1 some_dir

使用容器

# 后台运行
docker run -d --name miniserve -p 8080:8080 --rm svenstaro/miniserve some_dir

# 前台运行
docker run --it --name miniserve -p 8080:8080 --rm svenstaro/miniserve some_dir

知乎专栏:miniserve 简单美观的文件服务器 - PrivateRookie的文章 - 知乎

Github 博客:miniserve 简单美观的文件服务器

多少事,从来急。天地转,光阴迫。

PrivateRookie
讨论数量: 2
$ rustup add toolchain nightly
error: Found argument 'add' which wasn't expected, or isn't valid in this context

USAGE:
    rustup.exe [FLAGS] <SUBCOMMAND>

For more information try --help
$ rustup toolchain install nightly
info: syncing channel updates for 'nightly-x86_64-pc-windows-msvc'

  nightly-x86_64-pc-windows-msvc unchanged - rustc 1.38.0-nightly (0b680cfce 2019-07-09)

info: checking for self-updates
1周前 评论
1 PrivateRookie: 抱歉,应该是 toolchain add 1周前
chongyi

不错的项目,学习 actix 是很好的

1周前 评论

请勿发布不友善或者负能量的内容。与人为善,比聪明更重要!