
OracleクラウドにFileBrowserをデプロイし、CloudflareでSSL Terminationと保護を行う — すべて無料。
トラフィックの流れ:ブラウザー → Cloudflare (HTTPS :443) → OCI VM (HTTP :80) → Nginx → FileBrowser (:8080)。オリジンIPは外部に公開されず、すべてのTLSはCloudflareが処理する。
事前準備 Link to heading
| 必要なもの | 備考 |
|---|---|
| OCIアカウント | 無料ティア、本人確認済み、支払方法の登録が必要 |
| Cloudflareアカウント | cloudflare.com の無料プラン |
| ドメイン | CloudflareでActive状態(ネームサーバー設定済み) |
| SSHキーペア | VM作成前にローカルで用意しておくこと |
技術スタック Link to heading
| レイヤー | コンポーネント | 役割 |
|---|---|---|
| コンピュート | VM.Standard.E2.1.Micro |
永久無料 x86-64 VM、1 OCPU / 1 GB RAM |
| OS | Ubuntu 24.04 LTS | ホストOS |
| ファイアウォール | OCI Security List + ufw |
二重のインバウンドフィルタリング |
| リバースプロキシ | Nginx | ポート80 → FileBrowserへ転送、実IPを復元 |
| アプリ | FileBrowser | Webベースのファイルマネージャー(localhost:8080で動作) |
| エッジ / CDN | Cloudflare(無料) | SSL Termination、オレンジプロキシ、オリジンIPを隠す |
| プロセス管理 | systemd | 再起動後もFileBrowserを自動起動 |
制限事項 Link to heading
VM.Standard.E2.1.Micro はOCIのx86-64永久無料シェイプ。
- 1 OCPU(AMD)· 1 GB RAM · 固定スペック、スケールアップ不可
- OSのアイドル時使用量は約350 MB — Nginx + FileBrowserに使えるのは約650 MB
- ブロックストレージ200 GB、月間アウトバウンド10 TB
- Cloudflare無料プランはリクエストあたり 100 MB のアップロード上限あり — 大きなファイルはSCP/SFTPで転送
- すべてのDNSレコードをオレンジプロキシに保つこと
ステップ1 — 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 ← ステップ6でCFのIP範囲に置き換える
Protocol: TCP
Dest port: 80
Port 22はデフォルトリストですでに開放されているはず。
ステップ2 — サーバーのセットアップ 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
ステップ3 — 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
ステップ4 — 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
ステップ5 — CloudflareのDNSとSSL設定 Link to heading
- DNS → Records → Add record:タイプ
A、名前files(任意のサブドメインでOK)、値 = OCIパブリックIP、プロキシ = Proxied(オレンジ色のクラウド) - SSL/TLS → Overview → モード:Full(Full Strictではない — オリジンはHTTPのみ)
- SSL/TLS → Edge Certificates → Always Use HTTPS を有効化
ステップ6 — オリジンをCloudflare IPのみに制限 Link to heading
ポート80のオープンルールをCIDR単位のルールに置き換える:
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 インバウンドルールも、Cloudflareの各CIDRに対応したルールに置き換えること。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 にアクセスする。
💡 ステップ5で設定したサブドメインに置き換えること。
メンテナンス Link to heading
スワップファイル — 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制限を回避する。