使用Docker安装OneIndex,以及Caddy反向代理并支持HTTPS

前言

之前有对比过国内的网盘,都不让人放心,正在使用的坚果云其他都好,就是容量略小。自己随着学习、生活不断积累的文件也越来越大,遂有使用 Onedrive 的想法。虽然已经有通过网上的方法申请到了 5T 的教育版 Onedrive,但是不太稳定,不适合存放个人比较重要的文件。碰巧在前几天看到1900也有同样的需求,就一起合租了 Office 365 家庭版,中意的是里面的 Onedrive 1 T 空间和 Office 套件。

将坚果云的文件迁移到 Onedrive 之后,我就马上折腾起了 OneIndex。自己瞎折腾了几天,总算弄出个所以然来。写此博文做个记录。

OneIndex 是采用 PHP 语言开发,能够直接列出 OneDrive 目录,文件直链下载 ,不占用服务器空间,不走服务器流量。

安装环境:Ubuntu Server 16.04 LTS(使用 Github 学生包获得的亚马逊云教育版75刀优惠,可免费使用 EC2 主机 t2.micro 微型实例一年)。其他系统的步骤应该也是差不多,代码会有所不同,可以借助谷歌搜索我给的小标题,找到相应的代码,比如 Docker 安装。

本文的方法使用到了 Docker 和 Caddy,如果你不了解,可以前去谷歌搜索一下,了解个大概。主要是使用 Docker 来安装运行 OneIndex,使用 Caddy 来实现 HTTPS 访问。

安装 Docker

apt update # 检查源更新
sudo apt install docker.io # 安装docker
docker # 检查是否安装成功,若成功则输出关于 docker 的命令提示

运行 OneIndex

docker run -d --name oneindex \
    -p 8080:80 --restart=always \
    -v ~/oneindex/config:/var/www/html/config \
    -v ~/oneindex/cache:/var/www/html/cache \
    -e REFRESH_TOKEN='0 * * * *' \
    -e REFRESH_CACHE='*/10 * * * *' \
    setzero/oneindex
运行效果:打开你的 IP:8080 即可看到 OneIndex 的安装页面。

现在对上述命令进行解释:
  1. --name your-image-nameyour-image-name 这里跟着的是 Docker 镜像的名称,可以自己拟定。
  2. -p your-port:80port 是 OneIndex 的运行端口,可以自行拟定。
  3. REFRESH_TOKEN刷新一次token的crontab表达式,默认值0 * * * *,即每小时
  4. REFRESH_CACHE刷新一次cache的crontab表达式,默认值*/10 * * * *,即每10分钟
  5. setzero/oneindex,是作者提供的 Docker 镜像,你也可以自己按下列代码搭建。
注意:以下三行代码是自己搭建 Docker 镜像,为拓展部分,请物混淆。
git clone https://github.com/donwa/oneindex.git # 从作者的 Github 上下载 OneIndex
cd oneindex # 进入 OneIndex 目录
docker build -t oneindex . # 生成 Docker 镜像,注意最后的空格和点
到这一步,已经可以通过 IP 加端口号来访问 OneIndex 了。下面再介绍为 OneIndex 绑定域名,使用 Caddy 让 OneIndex 支持 HTTPS。

绑定域名

请到到你的 DNS 服务商那增添一个 A 记录解析,将其解析到你的 VPS IP 中。

image

安装 Caddy

sudo curl https://getcaddy.com | bash -s personal # 安装Caddy
which caddy # 检查caddy是否安装成功,若成功则输出/usr/local/bin/caddy

创建 Caddy 所需的文件夹

Caddy 的使用需要配置 Caddyfile,且需要一个文件夹放置 ssl 证书。以下代码功能是创建 Caddy 运行所需的文件夹。

注:Caddy 是使用 Go 语言编写的,可单文件运行。所以可以直接在网站目录上直接输入 caddy 命令运行,不用特别地用下列命令去创建文件夹。但是为了需要 Caddy 能够开机自启动,所以才需要如此。
sudo mkdir /etc/caddy                      # 在指定目录创建 caddy 文件夹
sudo touch /etc/caddy/Caddyfile            # 创建 Caddyfile 文件,用于稍后的配置
sudo chown -R root:www-data /etc/caddy     # 文件夹权限设置
sudo mkdir /etc/ssl/caddy                  # 创建文件夹,存放 ssl 证书
sudo chown -R www-data:root /etc/ssl/caddy # 文件夹权限设置
sudo chmod 0770 /etc/ssl/caddy             # 文件夹权限设置

设置 Caddy 令其开启自启动

sudo curl -s https://raw.githubusercontent.com/mholt/caddy/master/dist/init/linux-systemd/caddy.service -o /etc/systemd/system/caddy.service   # 从 Github 下载 systemd 配置文件
sudo systemctl daemon-reload         # 重新加载 systemd 配置
sudo systemctl enable caddy.service  # 设置 Caddy 服务自启动
sudo systemctl status caddy.service  # 查看 Caddy 状态,现在应该是 not run 状态

Caddyfile 配置

echo "your-site.com {
 gzip
 tls your@mail.com
 proxy / http://127.0.0.1:8080
}" > /etc/caddy/Caddyfile       # 请修改代码后全选复制,这个不要一行一行地复制粘贴
以上代码的作用是将引号中的内容写入到 Caddyfile 中。现在来讲 Caddyfile 的内容:
  1. your-site.com,是你的域名,在前面的 DNS 解析中设置好的(需提前设置好,解析全球生效需要一定时间)。
  2. your@mail.com,这里填写你的邮箱,Cadyy 会自动向 Let`s Encrypt 申请并自动续订 SSL 证书。
  3. proxy / http://127.0.0.1:8080,这里是反向代理设置,8080 是之前设置的端口号。
配置完 Caddyfile 之后,再执行以下命令。
sudo systemctl restart caddy.service # 重启 Caddy 服务
那么,现在访问你的域名,应该就可以实现 HTTPS 访问了。接下来,就请按 OneIndex 的教程来设置了。
参考:
  1. donwa/oneindex: Onedrive Directory Index
  2. 利用 Caddy 轻松实现反向代理/镜像(支持自签SSL证书) - 网络资源 - 如有乐享
  3. Caddy - 方便够用的 HTTPS server 新手教程 - 作业部落 Cmd Markdown 编辑阅读器

此博客中的热门博文

Blogger 国内访问心得

为 Blogger 自定义域博客启用 HTTPS & 支持国内访问技巧

关于 Anki 媒体文件无法删除问题