AWS EC2上にCloudflare OSをセルフホスト構築して試してみた

Cloudflareが公開している「Cloudflare OS」を、AWS EC2上のUbuntu環境に構築して実際に動かしてみました。

目的は、単純なAIチャットを構築することではありません。将来的に、社員が自然言語で業務の困り事などを相談し、AIが業務内容をヒアリングし、改善案を整理し、必要に応じて小さな業務アプリや提案資料を生成できる「社内AI業務基盤」「組織のOS」としてCloudflare OSを使えるかを評価することです。

今回はまず、AWS EC2上でPoC環境として構築しました。

Cloudflareとは:Webサイトやアプリケーション向けに、高速化(CDN)・セキュリティ(WAF/DDoS対策)・ネットワーク基盤などを提供する世界的なクラウドサービスです。

Cloudflare OSとは:2026年8月にCloudflareがオープンソースとして公開した企業向けAIワークスペースです。AIエージェントを利用して文書作成、アプリ開発、業務自動化を行いながら、社内システムと安全に連携できます。

PART 01

環境構築

AWS EC2上のUbuntuにCloudflare OSを構築し、nginx経由で社内PCからアクセスできる状態まで確認します。

1. 検証環境

AWS EC2
Ubuntu Server 24.04 LTS


vCPU : 2
Memory : 8GB
Node.js : v24.19.0
pnpm : 11.17.0

Cloudflare OS
Wrangler 4.120.0
workerd
nginx

Cloudflare OSの package.json では、pnpm 11.17.0が指定されていました。

"packageManager": "pnpm@11.17.0+..."

最初は4GBメモリのインスタンス(t3.medium)で試しましたが、workerプロセスでCPU 100%となりHTTP応答が返らない状態になりました。その後、新しい8GB環境(t3.large)でゼロから構築したところ正常起動しました。

ただし、メモリ容量だけが原因だったとは断定できません。今回はこのまま8GBをPoCの基準としています。

2. EC2の準備

sudo apt update
sudo apt upgrade -y
sudo apt install -y \
  git \
  curl \
  build-essential

OSアップデート後に *** System restart required *** が表示された場合は、一度再起動します。

sudo reboot

3. Cloudflare OSをGitHubからclone

git clone https://github.com/cloudflare/cloudflare-os.git
cd cloudflare-os

主なディレクトリ構成は以下のとおりでした。

AGENTS.md
CONTRIBUTING.md
LICENSE
README.md
docs
package.json
packages
plans
pnpm-lock.yaml
pnpm-workspace.yaml
run-dev-server.js
scripts
test-setup
tsconfig.json
vite.config.ts
wrangler.jsonc

4. Node.js 24をインストール

curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/master/install.sh | bash
source ~/.bashrc

nvm install 24
nvm use 24
nvm alias default 24

node -v

今回の環境では以下になりました。

v24.19.0

5. pnpm 11.17.0を設定

corepack enable
corepack prepare pnpm@11.17.0 --activate

pnpm -v
11.17.0

6. 依存パッケージをインストール

cd ~/cloudflare-os
pnpm install

今回の環境では27個のworkspace projectが処理され、677パッケージがインストールされました。

Scope: all 27 workspace projects
Packages: +677
...
Done in 20.6s using pnpm v11.17.0

7. Cloudflare OSを起動

pnpm run-local

初回はworkshop frontendや各種Gatekeeperなど、かなり多くのビルド処理が実行されます。

最終的に以下まで到達すれば起動成功です。

⎔ Starting local server...
[wrangler:info] Ready on http://localhost:8787

8. 起動確認

別のSSHセッションから確認します。

ss -ltnp | grep 8787

今回の環境では 127.0.0.1:8787workerd が待ち受けていました。

9. 社内PCから直接アクセスできるようにする ※AWSとVPN接続できる前提です

pnpm run-local ではCloudflare OSは 127.0.0.1:8787 にbindされます。そのため、別PCから直接 http://EC2-IP:8787 へアクセスすることはできません。

今回はCloudflare OS本体を変更せず、nginxをリバースプロキシとして前段に配置しました。

社内PC
    ↓
HTTP :8080
    ↓
nginx
    ↓
127.0.0.1:8787
    ↓
Cloudflare OS

10. nginxをインストール

sudo apt install -y nginx

8080ポートでアクセスできる様に、設定ファイルを作成します。

sudo tee /etc/nginx/sites-available/cloudflare-os >/dev/null <<'EOF'
server {
    listen 8080;
    listen [::]:8080;

    server_name _;

    location / {
        proxy_pass http://127.0.0.1:8787;

        proxy_http_version 1.1;
        proxy_set_header Host localhost;
        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;

        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";

        proxy_read_timeout 3600;
        proxy_send_timeout 3600;
    }
}
EOF

有効化します。

sudo ln -sf \
  /etc/nginx/sites-available/cloudflare-os \
  /etc/nginx/sites-enabled/cloudflare-os

sudo rm -f /etc/nginx/sites-enabled/default

sudo nginx -t
sudo systemctl restart nginx

11. nginxの待ち受け確認

ss -ltnp | grep -E '8080|8787'

今回の環境では以下の状態になりました。

127.0.0.1:8787  workerd
0.0.0.0:8080    nginx
[::]:8080       nginx

nginx経由でも確認します。

curl -I http://127.0.0.1:8080/
HTTP/1.1 200 OK
Server: nginx
Content-Type: text/html; charset=utf-8

12. AWS Security Group

今回は社内LANからのみ8080へアクセスできるようにしました。

Protocol : TCP
Port     : 8080
Source   : 社内ネットワークIP/24

その後、社内PCから以下へアクセスできることを確認しました。

http://10.0.2.167:8080

PART 02

アプリ検証

Cloudflare OSの画面を確認し、業務相談から文書・Gadget・Slidesの生成までを試します。

13. Cloudflare OS初期セットアップ

ブラウザからアクセスすると初期セットアップ画面が表示されます。

今回確認できた項目は以下です。

  • アカウント表示名、写真の設定
  • AIのモデルプロバイダの設定
  • クラウドサービスとの連携設定

モデルプロバイダは、最近のものが揃っています。設定を一旦すべてスキップしても、Cloudflare OSのホーム画面には入ることができました。

動作検証用としてGPT 5.6 Terraを選択し、OpenAI APIキーを入力設定しています。Geminiも選択できますので、個人検証ならGemini API無料枠で済みそうです。

Amazon Bedrockには対応していないこと、また選択肢内にOllamaがありましたのでローカルLLMが使えそうでした。

14. 主な画面

今回確認できた主なメニューは以下です。

Home
Workspaces
Blueprints
Outputs
Explore

15. Workspaceで業務相談をテスト

まず、次のような業務相談を入力しました。

毎月、基幹システムから売上実績を確認してExcelへ転記しています。

Cloudflare OSのAIはすぐ自動化案を回答せず、転記項目、件数、作業時間、困っている点、CSV / Excel出力可否、Excelの利用目的などをこちらに確認してきました。

内部処理が全て英文ですが、追加情報を収集しながら段階的に要件を整理しているように見えました。

単なる質問回答ではなく、業務ヒアリングの入口として利用できそうでした。

16. 文書生成

回答と共に、業務改善を依頼すると、Workspace内に編集可能なドキュメントが生成されました。

売上実績のExcel転記業務:改善方法整理

内容としては、現状業務、課題、改善方針、具体的改善施策、優先度などが整理されています。

この段階で「AIチャット → 成果物としての文書」まで作成できることを確認しました。

17. Gadget生成をテスト

次に、文書ではなく操作可能なアプリを作るよう指示しました。

改善提案書ではなく、この業務を効率化する操作可能なアプリをWorkspace内に作成してください。
  CSVをアップロードすると、顧客名・担当営業・部門・売上金額を一覧表示し、担当別・部門別に集計できるアプリにしてください。
  Excel出力ボタンも付けてください

すると、Cloudflare OSは操作可能なGadgetを生成しました。

適当なCSVデータを作り、CSVをアップロードすると、ちゃんと動き集計が行われました。ダッシュボード風ですね。

社員の自然言語
    ↓
AI
    ↓
Gadget生成
    ↓
業務用ミニアプリ

今回の検証で特に興味深かったポイントです。

18. Workspace Slidesをテスト

次に「Explore」メニュー内にあった、「Workspace Slides」を使いました。

例えば「すしざんまいのマグロ初競りとか、遠洋マグロ漁師の凄さについて、めちゃくちゃカッコいいプレゼンスライド5枚で作って!」と無茶ぶりをしたところ……

サンプルのスライドが一気に、指定したテーマについて良い感じにストーリーを立てた、編集可能なスライドが生成されました。

19. 顧客向けITインフラ提案資料も生成

さらに、従業員200名・2拠点・Windows Server・Active Directory・ファイルサーバー・基幹システム・VPN・UTMを持つ企業向けに「ITインフラ刷新提案資料」を生成させました。

10枚構成で以下のような内容が作成されました。

  1. 表紙
  2. 現状環境と課題
  3. 提案方針
  4. システム全体構成図
  5. ネットワーク・セキュリティ
  6. サーバー・バックアップ
  7. 障害時復旧フロー
  8. 導入ステップ
  9. Before / After
  10. 次回確認事項

構成図についても、本社、支店、UTM / Firewall、VPN、オンプレ基盤、Microsoft 365、クラウドバックアップ / DRなどを線で接続した図が自動生成されました。

顧客提案書の叩き台作成用途には十分可能性がありそうです。

20. SlidesのPDF Exportでエラー

Workspace Slides自体は動作しましたが、PDFエクスポート時に以下のエラーが発生しました。

Failed to launch local browser via miniflare loopback

Failed to launch the browser process!

chrome:
error while loading shared libraries:
libatk-1.0.so.0:
cannot open shared object file

Cloudflare OSのスライド生成処理ではなく、Ubuntu上でheadless Chromeを起動するための共有ライブラリ不足でした。

対策として以下のパッケージを導入します。

sudo apt update

sudo apt install -y \
  libatk1.0-0t64 \
  libatk-bridge2.0-0t64 \
  libgtk-3-0t64 \
  libnss3 \
  libxss1 \
  libasound2t64 \
  libgbm1 \
  libxshmfence1 \
  libcups2t64 \
  libxcomposite1 \
  libxdamage1 \
  libxrandr2 \
  libpangocairo-1.0-0 \
  libpango-1.0-0 \
  libdrm2 \
  libxkbcommon0 \
  fonts-liberation

不足ライブラリは次のコマンドでも確認できます。

ldd ~/.cache/.wrangler/chrome/linux-*/chrome-linux64/chrome \
  | grep "not found"

21. Blueprints(AIワークスペースのテンプレート機能)

Blueprintは、Gadgetや用途別Workspaceのテンプレートに近い概念です。

例えばWorkspace Slidesのように、決められた用途を持つ作業環境として利用できます。将来的には、顧客提案資料、月次売上分析、障害報告、BCP確認、営業案件レビューといった自社向けBlueprintを用意することで、社員が毎回ゼロからAIへ説明する必要を減らせそうです。

22. Context & Skills

Cloudflare OSには Context & Skills という仕組みがあります。

コンセントアイコンでGatekeepersの設定画面が開き、Contextを有効化(CONNECTED)するとメニューに追加されました。

管理画面では Collection を作成し、その中に Markdown ファイルを登録できます。

Context
= AIが参照するMarkdownベースの知識

Skills
= AIへ与えるMarkdownベースの作業指示

例えばContextには、自社サービス、製品情報、社内ルール、提案事例、業務知識などを持たせます。

Skillには、特定業務を実施する際の手順や判断基準を定義できます。例えば提案資料作成であれば、現状確認、課題整理、評価項目、未確認事項の整理、提案書作成の流れなどを記載できます。

試しに、上記のコレクションと.mdを作成してみます。入力フォーマットは情報が無い為、それっぽいものを入力しました。

23. Context & Skillの参照状況は現時点では評価保留

エージェントへのチャットを行うと、何かのCollectionは読み取っている様子が見受けられました。

直接聞いてみると、先程作成したCollectionを読み取っている事がわかりました。賢いですね。

しかしCollection中にある.mdファイルに設定したContext・Skillsを反映された回答なのかは断定できませんでした。この点は今後さらに検証したいポイントです。

24. /compactで会話コンテキストを圧縮できる

Cloudflare OSのチャット入力欄では、/compact というスラッシュコマンドを利用できました。検証時点で公式ドキュメントにはこのコマンドについての情報が見つかりません。

試しにWorkspace SlidesやGadget作成を行った後に /compact を実行したところ、過去のチャット履歴が単純に削除されるのではなく、AIが会話内容を要約した新しいコンテキストへ置き換わる動作を確認できました。

Goal
Constraints & Preferences
Progress
Key Decisions
Next Steps
Critical Context

圧縮後のコンテキストには、ユーザーの目的、設計方針、作成済み成果物、未完了タスク、次回実施事項などが整理されていました。

例えばSlides作成時には生成済みスライド構成やデザイン方針、Gadget作成時には生成済みファイルや実装済み機能、今後の検証項目などが要約として出力されました。

そのため /compact は単なる履歴削除機能ではなく、過去のやり取りを構造化した要約へ置き換える機能と考えられます。

現状では詳細な動作までは確認できていませんが、長時間のやり取りや大規模なWorkspaceを扱う際に、会話の要点を整理しながら作業を継続するための仕組みとして活用できそうでした。

25. 現時点の評価

Cloudflare OSを触る前は「社内向けChatGPTやAmazonQのようなもの」を想像していました。

実際に使ってみると、少し違います。

自然言語
↓
Workspace
↓
文書
↓
Slides
↓
Gadget

までAIが成果物を作る点が特徴的です。

特に、自然言語から操作可能なGadgetを生成できた点は非常に興味深いものでした。

単なるAIチャットではなく、AIと一緒に業務用の小さなアプリや成果物を作る環境と捉えた方が近そうです。

26. 今後試したいこと

今回まだ検証できていない重要項目があります。

対応しているかは分かりませんが、次のフェーズではPostgreSQLなど社内データとの接続を試したいと考えています。

PostgreSQL
↓
Cloudflare OS
↓
Gadget

さらに、Python + Chromium / PlaywrightによるRPA連携も検証候補です。

Cloudflare OS
↓
Task
↓
Python
↓
Chromium / Playwright
↓
基幹システム

想定している役割分担は以下です。

参照
→ PostgreSQL

更新
→ ブラウザRPA

AI
→ Task選択・パラメータ生成

実行
→ 決定論的なPython処理

27. まとめ

AWS EC2 + Ubuntu上で、Cloudflare OSのrun-local環境をビルド・動作させることができました。

今回確認できた範囲だけでも、チャット → 文書 → Gadget → Slides という一連のAIワークスペース機能はかなり興味深いです。

一方で、Early Accessらしい不安定さ、PDF生成時のLinux依存関係、Skill利用状況の分かりにくさ、本番運用方法、社内認証・権限管理、外部システム接続など、まだ確認すべき点も多く残っています。

現時点では、完成済みの社内AI SaaSというより、自社専用「Company OS」を作るための開発基盤として見るのが適切そうです。

少なくともPoCを続ける価値は十分ありそうです。


※ 本記事は2026年8月時点PoC環境での検証結果です。Cloudflare OSは開発途上のため、今後仕様や構築方法が変更される可能性があります。