
在 Oracle 云上部署个人文件管理器,通过 Cloudflare 进行 SSL 终止与源站保护,完全免费。
流量流向:浏览器 → Cloudflare (HTTPS :443) → OCI VM (HTTP :80) → Nginx → FileBrowser (:8080)。源站 IP 永远不会对外公开;所有 TLS 由 Cloudflare 处理。
事先准备 Link to heading
| 需求 | 说明 |
|---|---|
| OCI 账号 | 免费方案,已完成身份验证,并绑定付款方式 |
| Cloudflare 账号 | 创建免费账号 |
| 域名 | 已在 Cloudflare 启用(域名服务器指向Cloudflare,状态显示Active) |
| SSH 密钥对 | 在创建 VM 前于本机准备好 |
技术栈 Link to heading
| 层级 | 组件 | 角色 |
|---|---|---|
| 计算 | VM.Standard.E2.1.Micro |
永久免费 x86-64 VM,1 OCPU / 1 GB RAM |
| 操作系统 | Ubuntu 24.04 LTS | 宿主操作系统 |
| 防火墙 | OCI Security List + ufw |
双层入站流量过滤 |
| 反向代理 | Nginx | 转发 port 80 → FileBrowser,还原真实 IP |
| 应用程序 | FileBrowser | 文件管理器,运行于 localhost:8080 |
| 边缘 / CDN | Cloudflare(免费) | SSL 终止、橙色代理、隐藏源站 IP |
| 进程管理 | systemd | 确保 FileBrowser 在重启后持续运行 |
限制 Link to heading
VM.Standard.E2.1.Micro 是 OCI 的 x86-64 永久免费机型。
- 1 OCPU(AMD)· 1 GB RAM · 固定规格,无法扩展
- 操作系统空闲约占用 ~350 MB — 剩余 ~650 MB 供 Nginx + FileBrowser 使用
- 200 GB 存储空间,每月 10 TB 出站流量
- Cloudflare 免费账号每次请求上传上限为 100 MB — 较大的文件请使用 SCP/SFTP
- 所有 DNS 记录需保持橙色代理状态
步骤一 — 创建 OCI VM Link to heading
在 OCI 控制台:Compute → Instances → Create instance
- 镜像:Canonical Ubuntu 24.04(x86_64)
- 机型:Specialty and previous generation →
VM.Standard.E2.1.Micro - 网络:默认 VCN、公共子网、启用公共 IPv4
- SSH 密钥:粘贴你的公钥
💡 实例启动后,记下公共 IP。
在 Security List 开放 port 80(OCI 的网络防火墙在 VM 外侧 — 单靠 ufw 设定不了):
Networking → VCN → Security Lists → Default → Add Ingress Rule:
Source CIDR: 0.0.0.0/0 ← 于步骤六改为 CF 的 IP 范围
Protocol: TCP
Dest port: 80
Port 22 应已在默认列表中开放。
步骤二 — 服务器设置 Link to heading
ssh -i ~/.ssh/your_key ubuntu@<OCI-PUBLIC-IP>
sudo apt update && sudo apt upgrade -y
sudo apt install -y nginx curl ufw
配置 ufw — 一定要先允许 SSH,否则会把自己锁在外面:
sudo ufw allow OpenSSH
sudo ufw allow 80/tcp
sudo ufw --force enable
sudo ufw status verbose
步骤三 — 安装 FileBrowser Link to heading
curl -fsSL https://raw.githubusercontent.com/filebrowser/get/master/get.sh | bash
sudo mkdir -p /etc/filebrowser /srv/filebrowser
filebrowser config init --database /etc/filebrowser/filebrowser.db
filebrowser config set \
--database /etc/filebrowser/filebrowser.db \
--root /srv/filebrowser \
--address 127.0.0.1 \
--port 8080 \
--baseurl /
filebrowser users add admin YOUR_SECURE_PASSWORD \
--database /etc/filebrowser/filebrowser.db \
--perm.admin
创建 systemd 服务,路径为 /etc/systemd/system/filebrowser.service:
[Unit]
Description=FileBrowser
After=network.target
[Service]
User=www-data
ExecStart=/usr/local/bin/filebrowser --database /etc/filebrowser/filebrowser.db
Restart=on-failure
RestartSec=5s
[Install]
WantedBy=multi-user.target
sudo chown -R www-data:www-data /etc/filebrowser /srv/filebrowser
sudo systemctl daemon-reload
sudo systemctl enable --now filebrowser
步骤四 — 配置 Nginx Link to heading
创建 /etc/nginx/sites-available/filebrowser:
server {
listen 80;
server_name files.yourdomain.com;
# 从 Cloudflare 还原真实访客 IP
set_real_ip_from 173.245.48.0/20;
set_real_ip_from 103.21.244.0/22;
set_real_ip_from 103.22.200.0/22;
set_real_ip_from 103.31.4.0/22;
set_real_ip_from 141.101.64.0/18;
set_real_ip_from 108.162.192.0/18;
set_real_ip_from 190.93.240.0/20;
set_real_ip_from 188.114.96.0/20;
set_real_ip_from 197.234.240.0/22;
set_real_ip_from 198.41.128.0/17;
set_real_ip_from 162.158.0.0/15;
set_real_ip_from 104.16.0.0/13;
set_real_ip_from 104.24.0.0/14;
set_real_ip_from 172.64.0.0/13;
set_real_ip_from 131.0.72.0/22;
set_real_ip_from 2400:cb00::/32;
set_real_ip_from 2606:4700::/32;
set_real_ip_from 2803:f800::/32;
set_real_ip_from 2405:b500::/32;
set_real_ip_from 2405:8100::/32;
set_real_ip_from 2a06:98c0::/29;
set_real_ip_from 2c0f:f248::/32;
real_ip_header CF-Connecting-IP;
location / {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
client_max_body_size 0; # Cloudflare 免费版上限为 100 MB
proxy_read_timeout 300s;
proxy_send_timeout 300s;
}
}
sudo ln -s /etc/nginx/sites-available/filebrowser /etc/nginx/sites-enabled/
sudo nginx -t && sudo systemctl enable --now nginx
步骤五 — Cloudflare DNS 与 SSL Link to heading
- DNS → Records → Add record:类型
A,名称files(任意子域名),值 = OCI 公共 IP,代理状态 = Proxied(橙色云朵) - SSL/TLS → Overview → 模式:Full(非 Full Strict — 源站仅支持 HTTP)
- SSL/TLS → Edge Certificates → 启用 Always Use HTTPS
步骤六 — 将源站限定为 Cloudflare IP Link to heading
替换原本开放的 port 80 规则:
sudo ufw delete allow 80/tcp
for cidr in \
173.245.48.0/20 103.21.244.0/22 103.22.200.0/22 \
103.31.4.0/22 141.101.64.0/18 108.162.192.0/18 \
190.93.240.0/20 188.114.96.0/20 197.234.240.0/22 \
198.41.128.0/17 162.158.0.0/15 104.16.0.0/13 \
104.24.0.0/14 172.64.0.0/13 131.0.72.0/22; do
sudo ufw allow from $cidr to any port 80 proto tcp
done
sudo ufw status numbered
同时在 OCI Security List 中,替换原本的 0.0.0.0/0 入站规则。在 OCI 网络层被拦截的请求,不会到达 VM。
验证 Link to heading
sudo systemctl status filebrowser nginx # 两者均应为 active
free -h # 确认内存未满载
curl -s http://127.0.0.1:8080 | head -3 # FileBrowser 在本地响应
curl --max-time 5 http://<OCI-IP> # 应超时 — 源站已锁定
接着在浏览器访问 https://files.yourdomain.com。
💡 替换为步骤五中设置的子域名。
运维 Link to heading
Swap 文件 — 考虑到 1 GB RAM 的上限,建议创建:
sudo fallocate -l 512M /swapfile && sudo chmod 600 /swapfile
sudo mkswap /swapfile && sudo swapon /swapfile
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
更新 FileBrowser: 重新运行安装脚本,接着执行 sudo systemctl restart filebrowser。
更新 Cloudflare IP 范围: 定期查看 https://www.cloudflare.com/ips-v4,并重新运行上面的 ufw 循环。
大文件传输: 通过 SCP 或 SFTP 直接传至 /srv/filebrowser,绕过 Cloudflare 100 MB 的限制。