部署miniserve服务
背景
目前有大量的项目是通过 Github Release 进行应用分发的,比如 Powershell Core 和一些新兴的命令行工具(bat,tokei 等)。
不过在国内的服务器中通过 Github Release 下载文件的速度和稳定性通常得不到保障。这时候我一般会选择在 PC 上开代理将文件下载到本地,然后通过 FileZilla 工具将文件上传到服务器上。
FileZilla(sftp)工具实际上是进行了 ssh 连接,要求在本地机器上拥有 ssh 私钥,在非个人设备上难以做到。
其实在服务器上部署一个文件上传服务可以有效解决这个需求。
于是我在前段时间在服务器上部署了一个 miniserve 服务,用于处理类似的文件上传下载需求。
miniserve
miniserve 是一个通过 http 服务托管文件和目录的工具,使用 Rust 实现,拥有很多开箱即用的特性(web 页面,上传文件,下载目录(以 zip 或 tar.gz 格式打包),用户名密码认证等)。
部署 miniserve
启动 miniserve 服务
使用如下的命令启动 miniserve 服务。
miniserve -a $USER:$PASSWD -D -u -U -p $PORT -z -W --route-prefix=_files -t miniserve .
各个参数的含义分别为:
- -a 设置访问用户名与密码
- -D 将目录展示到文件之上
- -u 允许上传文件
- -U 允许创建子目录
- -p 指定端口
- -z 支持将整个目录通过 zip 下载
- -W 在页面下方显示 wget 命令
- –route-prefix 指定路径前缀
- t 指定页面 title
启动服务后,可以通过localhost:$PORT
访问 miniserve 的 web 页面。或者直接通过 wget 等工具直接进行文件上传或者下载。
配置 Nginx
不建议直接将 miniserve 服务直接通过 0.0.0.0 暴露到公网,毕竟上传或下载的文件总是会有一些私密性的,使用 https 是很有必要的。 miniserve 工具实际上是支持 tls 的,不过为一个单独的服务申请并配置证书总感觉有点浪费。 可以将 miniserve 服务通过配置了 https 的 nginx 进行端口转发。
server {
server_name www.duyixian.cn;
rewrite ^/(.*)$ https://www.duyixian.cn:443/$1 permanent;
}
server{
listen 443;
server_name www.duyixian.cn wx.duyixian.cn;
ssl on;
ssl_certificate /cert/www.duyixian.cn_bundle.crt;
ssl_certificate_key /cert/www.duyixian.cn.key;
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
ssl_prefer_server_ciphers on;
error_page 404 /404.html;
location /miniserve/ {proxy_pass http://127.0.0.1:8080/miniserve/; }
location /dffd245af1 {proxy_pass http://127.0.0.1:8588; } # 处理css
}
一个小坑
miniserve 提供的网页引用了一个 css 文件,这个 css 实际上是内嵌在二进制文件里的,在每次运行的时候会随机生成一个名字。使用 nginx 转发 miniserve 服务的时候需要额外处理一下。
总结
miniserve 是一个相当实用的工具。除了作为文件服务器之外,还可以用来托管静态网站,甚至是单页应用(使用miniserve --spa --index index.html
指定入口页面)。
也要感谢 rust 语言提供的开发效率提升和良好的生态,让广大的开发者可以使用 rust 改善传统的命令行工具。
相关文章
- linux 配置java变量_linux部署java环境
- Hexo部署到Coding
- SVN服务器部署「建议收藏」
- AX9000 Docker 部署指南
- 搭建jenkins实现自动化部署微服务_自动化部署平台搭建
- 服务器部署逻辑[通俗易懂]
- 部署PKI 和证书服务
- python安装uwsgi_微服务怎么部署到服务器的
- 谁再说不会 K8S 高可用部署,就把这个给他甩过去!
- linux运行jar包的命令_linux部署jar包的几种方式
- 二进制部署k8s教程17 - 最后总结
- 云原生之使用docker部署httpd服务
- Django项目在Linux服务器上部署和躺过的坑
- Groovy实现热部署
- 在KubeFATE中定制化部署联邦学习组件的深入分析
- war包部署后,提示File “/struts-tags” not found详解程序员
- 极速部署:支持Redis的虚拟主机服务(支持redis的虚拟主机)
- SVN在Linux上的配置与部署(svn配置linux)
- Docker 容器化部署Redis服务(dockerredis)
- Linux系统下网站快速部署实战篇(linux网站部署)
- “微信客服”企业部署应对攻略,客户在哪服务就在哪
- 如何使用Linux部署网站(linux部署网站吗)
- 部署SQL Server服务高效部署实现数据优势(sqlserver的服务)
- Redis单机部署:架设一站式解决方案(redis单机部署)
- 简易指南在虚拟机上部署Redis(虚拟机上部署redis)
- 一键部署用脚本快速启动Redis集群(脚本启动redis集群)
- 本地环境快速部署Redis服务(本地如何安转redis)
- 云端部署Redis集群,支撑数据存储需求(云服务部署redis集群)
- 如何部署Yii框架与Redis服务的结合(yii框架部署redis)
- 使用Tikv部署Redis极速提升服务能力(tikv部署redis)
- 多实例部署简单步骤构建多个redis服务(多实例启动redis)
- Redis集群模式从搭建到部署(redis集群模式的搭建)
- 研究制定Redis集群化部署策略(redis集群化策略)
- 器如何在服务器上部署Redis(redis配服务)
- Redis部署指南快速打造安全稳定的服务环境(redis部署流程)
- 的部署Redis集群搭建仅一台机器上的实践体验(redis集群单数台)