miniserve 簡單美觀的檔案伺服器

PrivateRookie發表於2019-07-10

如果想建立一個簡單靜態檔案或目錄伺服器,通常可以用 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 簡單美觀的檔案伺服器

本作品採用《CC 協議》,轉載必須註明作者和本文連結
多少事,從來急。天地轉,光陰迫。

相關文章