built-my-personal-200GB-cloud-storage-for-free

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

  1. DNS → Records → Add record:タイプ A、名前 files(任意のサブドメインでOK)、値 = OCIパブリックIP、プロキシ = Proxied(オレンジ色のクラウド)
  2. SSL/TLS → Overview → モード:Full(Full Strictではない — オリジンはHTTPのみ)
  3. 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制限を回避する。