|
上一篇写了 SSH 登录服务器和安装1Panel 面板。 装好面板之后,服务器就不只是一个“能连上的机器”了,后面就可以开始放一些真正有用的小服务了。 这一篇先写一个比较轻量、但我觉得很实用的东西:WebDAV。 简单来说,WebDAV可以理解成一个可以通过网络访问的文件目录。它不一定适合当完整网盘来用,但很适合做一些小型配置文件的同步。 比如多个设备之间同步软件设置、同步一些本地配置、保存小文件,都会比较方便。 这篇主要包括:
- 从零构建一个 WebDAV Docker 镜像
- 在 1Panel 上部署这个 Docker 服务
- 给 WebDAV 开启反向代理和 HTTPS
- 同步配置的实际用途
一、为什么要自己搭 WebDAV 其实 WebDAV 不一定要自己从零搭。 如果只是想要一个“能同步文件”的东西,也可以直接使用一些现成工具,比如: AList Nextcloud 但问题是服务器本身的硬盘容量不会特别大,当网盘用不够,因此尝试这个轻量化的方案。
二、准备 Dockerfile 先准备一个 Dockerfile,用Apache httpd 开启 WebDAV 模块。 这里注意,下面的域名、用户名、密码都只是示例,实际使用时换成自己的。 FROM httpd:2.4 RUN sed -i \
-e 's/^#LoadModuledav_module/LoadModule dav_module/' \
-e 's/^#LoadModuledav_fs_module/LoadModule dav_fs_module/' \
-e 's/^#LoadModuleauth_digest_module/LoadModule auth_digest_module/' \
-e 's/^#LoadModuleauth_basic_module/LoadModule auth_basic_module/' \
-e 's/^#LoadModuleauthn_file_module/LoadModule authn_file_module/' \
/usr/local/apache2/conf/httpd.conf RUN mkdir -p/usr/local/apache2/var /var/lib/dav/data \
&& printf '%s\n' \
'ServerName webdav.example.com' \
'' \
'DavLockDB "/usr/local/apache2/var/DavLock"' \
'' \
'Alias /dav "/var/lib/dav/data"' \
'' \
'<Directory "/var/lib/dav/data">' \
' Dav On' \
' Options Indexes FollowSymLinks' \
' IndexOptions Charset=utf-8' \
'' \
' AuthType Basic' \
' AuthName "WebDAV"' \
' AuthUserFile"/user.passwd"' \
'' \
' Require valid-user' \
'</Directory>' \
> /usr/local/apache2/conf/extra/webdav.conf \
&& echo 'Includeconf/extra/webdav.conf' >> /usr/local/apache2/conf/httpd.conf 这里简单解释一下: dav_module 和dav_fs_module 是 WebDAV 相关模块。 auth_basic_module 和authn_file_module 用来做用户名密码验证。 /var/lib/dav/data是实际存放文件的目录。 /dav 是 WebDAV 的访问路径。 也就是说,之后访问的地址大概会是: 当然,这里的webdav.example.com 要换成自己的域名。 三、准备用户名和密码文件 上面的配置里有一行: AuthUserFile"/user.passwd" 这说明 WebDAV 登录时会读取/user.passwd 这个文件。 我们可以用 htpasswd生成用户名和密码。 比如用户名是webdav_user,可以执行: docker run --rmhttpd:2.4 htpasswd -Bbn webdav_user "这里换成你的强密码" > user.passwd 生成之后,会得到一个 user.passwd文件。 这个文件后面需要挂载到容器里面。 这里建议密码尽量复杂一点,不要使用常用密码。因为WebDAV 后面是要暴露到公网的,弱密码风险比较高。
四、准备 docker-compose.yml 接下来写一个docker-compose.yml。 比如可以这样: version:"3.8"
services: webdav: build: . image: mydav container_name: mydav restart: unless-stopped ports: - "127.0.0.1:18080:80" volumes: - /home/ubuntu/webdav:/var/lib/dav/data -/home/ubuntu/webdav-lock:/var/lib/dav/lock -/opt/1panel/apps/webdav/user.passwd:/user.passwd:ro
这里有几个地方需要注意。 第一,/home/ubuntu/webdav 是实际存放 WebDAV 文件的目录。 第二,/opt/1panel/apps/webdav/user.passwd是刚刚生成的密码文件。 第三,端口这里写的是: 127.0.0.1:18088:80 意思是只把服务暴露在服务器本机的18088 端口上,而不是直接暴露到公网。 之后我们会通过 1Panel的反向代理访问它。 这样做的好处是:外部用户不能直接访问服务器IP:18088,只能通过配置好的域名和 HTTPS入口访问。 五、在 1Panel 中部署 Docker 服务 接下来进入 1Panel。 可以在“容器”或者“应用 /编排”相关的位置,新建一个 Compose 项目。 大概流程是:
- 创建一个项目目录
- 上传或写入 Dockerfile
- 上传或写入 docker-compose.yml
- 上传 user.passwd 文件
- 创建 data 目录
- 启动 Compose 项目
如果一切正常,服务启动后,可以在容器列表里看到webdav 容器。
六、在 1Panel 中开启反向代理 接下来进入 1Panel 的“网站”功能。 如果还没有安装OpenResty,需要先按提示安装。 然后新建网站,类型选择“反向代理”。 填写你的主域名: webdav.example.com 和代理地址: 创建之后,再给这个网站申请 HTTPS 证书。 证书申请成功后,建议开启强制 HTTPS。 七、WebDAV 可以用来同步什么 WebDAV最大的用途是同步“小而重要”的配置。 1. 同步 Netcatty 的设置 上一篇写 SSH 的时候用到了Netcatty。 如果多台电脑都在用 SSH客户端,那么主机列表、终端配置、连接设置这些东西就有同步需求。 这时 WebDAV就可以作为一个配置同步后端。 2. 同步 CC Switch 的配置 如果使用 CC Switch管理一些模型服务商和本地设置,也会有多设备同步的需求。
3. 同步梯子的本地设置 还有一些本地代理工具、订阅转换工具、规则配置,也可能会有跨设备同步需求。 这类东西一般不大,但手动复制很烦。 这样换电脑、重装系统,或者多设备共用时,就不用到处找配置文件了。 到这里,一个简单的 WebDAV服务就搭好了。 这次的思路大概是: 先用 Dockerfile 构建一个Apache WebDAV 镜像 再用 1Panel 部署 Docker 服务 然后通过 1Panel 反向代理绑定域名和HTTPS 最后把它作为小型配置同步空间使用 它不一定适合当完整网盘,但是很适合做“配置同步中转站”。 比如 SSH 客户端配置、CC Switch配置、本地代理工具配置、一些小脚本和规则文件,都可以放在这里同步。 服务器折腾到这里,就已经不只是“开了一台机器”了,而是开始变成一个自己的小型基础设施。 后面如果继续写的话,可以再折腾一点更实际的东西,比如部署Vaultwarden、搭个人网站、做文件管理,或者给这些服务统一配置 HTTPS 和反向代理。
来自群组: 泥潭療養院 |