Select Page
不用電腦!用舊手機安裝 OpenClaw 打造遠端操控系統

不用電腦!用舊手機安裝 OpenClaw 打造遠端操控系統

如果你想使用 OpenClaw 這類 AI Agent 工具,大多需要一台電腦或伺服器來執行。

但現在,你甚至可以用「一支舊 Android 手機」來打造一個 隨身遠端 AI 控制節點

👉 沒錯,舊手機不再只是備用機,而是可以變成:

  • AI 控制終端
  • 遠端操作工具
  • 自動化任務節點

這篇文章會帶你一步步完成:

📌 在 Android 手機上透過 Termux 安裝 OpenClaw,並實現遠端操控能力


🎯 為什麼要用「舊 Android 手機 + OpenClaw」?

📸 使用場景示意

https://miro.medium.com/1%2AKAL2RMpqpGh-AmqsMPf2hA.jpeg

4

✅ 核心優勢

1️⃣ 硬體要求低(舊手機就能跑)

  • 不需要高效能 CPU / GPU
  • 2GB~4GB RAM 就能運作
  • 廢棄手機再利用

2️⃣ 可直接使用手機硬體能力

👉 不同於傳統 server,你可以用:

  • 📷 相機(影像輸入)
  • 🎤 麥克風(語音控制)
  • 📶 行動網路(隨時在線)

3️⃣ 隨身攜帶的 AI 控制中心

  • SSH 控制 GCP / VM
  • 呼叫 AI Agent workflow
  • 當 DevOps 控制台

4️⃣ 比舊電腦更省電、更穩定

  • 手機天生低功耗
  • 可長時間掛機

🧠 系統架構

Android 手機 -> Termux (Linux 環境) -> OpenClaw Agent -> Local AI / Server / GCP

👉 手機只是「控制層」,重運算仍在雲端


以下安裝方法 2 選 1 ,薪水推薦用 APK

🛠️ 安裝流程(APK)

🔗 官方下載

👉 來源:
https://github.com/mithun50/openclaw-termux/releases/


📱 Step 1:下載 APK

在 Releases 頁面找:

👉 通常名稱會像:

openclaw-android.apk

app-release.apk

下載到手機


🔐 Step 2:允許安裝未知來源

Android 需要開:

👉 設定 → 安全性
👉 允許「未知來源」


📲 Step 3:安裝 APK

直接點 APK:

👉 完成後會出現 App(OpenClaw)


⚙️ Step 4:準備 Backend(重點)

👉 APK 本身不會跑 AI

你需要一個 Gateway:

方法 A(最推薦)

👉 手機本機跑:

  • Termux
  • Ubuntu
  • OpenClaw

👉 流程:

APK → localhost:port

方法 B(更穩定)

👉 連 GCP:

APK → GCP VM(OpenClaw)

🔗 Step 5:連線 OpenClaw Gateway

打開 APK → 設定連線:

方式 1:自動配對

  • Setup Code

方式 2:手動輸入

Host: 你的IP
Port: 3000 / 8080(依你設定)
Token: Gateway Token

👉 官方說明支援:

  • manual host/port
  • token / TLS

🧪 Step 6:測試

成功後你可以:

  • 發送指令
  • 控制 AI agent
  • 看執行結果

🛠️ 安裝流程(完整實戰)

📱 Step 1:安裝 Termux

👉 使用:
Termux

⚠️ 注意:

  • 請從 F-Droid 安裝(不要用 Play 商店版本)

🔄 Step 2:更新環境

pkg update && pkg upgrade -y
pkg install git wget curl -y

📦 Step 3:安裝 OpenClaw

👉 官方 repo:
openclaw-termux

git clone https://github.com/mithun50/openclaw-termux.git
cd openclaw-termux
bash install.sh

⚙️ Step 4:啟動服務

bash start.sh

啟動後你會看到:

  • API endpoint
  • 控制介面 port

🌐 遠端操控方式

方法一:瀏覽器控制

👉 手機或電腦打開:

http://手機IP:PORT

方法二:API / AI Agent 控制

👉 你可以串:

  • LangChain
  • Local AI Agent
  • webhook

方法三:SSH 進手機

pkg install openssh
sshd

⚡ 進階玩法

🔥 架構升級

👉 也可以這樣玩:

手機(OpenClaw)-> 控制指令 -> GCP VM(AI模型)-> 回傳結果


🤖 實際應用

  • 📊 自動抓資料 → 分析 → 回報
  • 🧠 控制 Ollama AI 模型
  • 🏠 智慧家居控制中心
  • 📡 遠端監控節點

⚠️ 注意事項(實戰會踩雷)

❌ Android 限制

  • 背景程序可能被殺掉
    👉 建議:
    • 關閉省電模式
    • 設定常駐

❌ Port 問題

👉 常見:

  • 8080 被占用
lsof -i :8080

❌ 效能限制

👉 不適合:

  • 重 AI 推論
  • Docker

❌ 手機連不到內網

👉 用:

  • Tailscale
  • ZeroTier

❌ 以為 APK = 完整系統

👉 錯

👉 APK 只是 UI


❌ Port 連不到

👉 要開:

ufw allow 3000

❌ Gateway 沒啟動

openclaw gateway

🧠 舊手機 vs 舊電腦

項目舊手機舊電腦
功耗⭐⭐⭐⭐
攜帶性⭐⭐⭐⭐
穩定性⭐⭐⭐⭐⭐
擴充性⭐⭐⭐⭐

👉 結論:

📌 手機適合「控制節點」,電腦適合「運算節點」

參考資訊

官方網站

https://github.com/mithun50/openclaw-termux

下載最新版本

https://github.com/mithun50/openclaw-termux/releases

雲端現代化:如何將 WordPress 部署至 Cloud Run、Cloud SQL 與 Cloud Storage

在管理多個 WordPress 專案時,傳統 VM 加架構往往面臨擴展性與維護成本的挑戰。透過 Google Cloud Run (Serverless)Cloud SQL (代管資料庫)Cloud Storage (雲端儲存) 的組合,我們可以建立一個自動縮放、安全且高效率的網站環境。

一、 架構預覽

  • 計算節點:Google Cloud Run (Docker 容器化運行)。
  • 資料庫:Google Cloud SQL (MySQL 8.0)。
  • 靜態檔案:Google Cloud Storage (GCS)。
  • 流量分配:Google Cloud Load Balancing (HTTPS 負載平衡器)。

二、 準備 Docker 鏡像與環境排除

在打包之前,請務必設定 .dockerignore 以優化鏡像體積並保護敏感資訊

my-wp-site/
├── Dockerfile           # 自動化打包腳本
├── wp-config.php        # 修改為讀取環境變數的版本
├── .dockerignore        # 排除不需要打包的檔案 (如 .git, local backups)
└── wp-content/
    ├── plugins/         # 放置您自定義的外掛
    └── themes/          # 放置您自定義的主題

建立 標準化 Dockerfile 範本

# 使用官方 PHP-Apache 映像檔,穩定且相容性高
FROM wordpress:php8.2-apache

# 1. 設定環境變數 (Cloud Run 預設監聽 8080,但官方 WP 鏡像預設是 80)
# 這裡我們讓 Apache 監聽 Cloud Run 指定的 PORT
RUN sed -i 's/Listen 80/Listen ${PORT}/g' /etc/apache2/ports.conf
RUN sed -i 's/:80/:${PORT}/g' /etc/apache2/sites-available/000-default.conf

# 2. 安裝必要的系統套件 (如有需要自訂 PHP 擴展可在這加)
RUN apt-get update && apt-get install -y \
    libpng-dev \
    libjpeg-dev \
    && docker-php-ext-configure gd --with-jpeg \
    && docker-php-ext-install gd

# 3. 複製現有的自定義檔案進入容器
# 建議只複製 plugins 和 themes,核心檔案由官方鏡像提供
COPY ./wp-content/plugins/ /var/www/html/wp-content/plugins/
COPY ./wp-content/themes/ /var/www/html/wp-content/themes/
COPY ./wp-config.php /var/www/html/wp-config.php

# 4. 設定正確的檔案權限 (對 WordPress 運行至關重要)
RUN chown -R www-data:www-data /var/www/html

# 5. 設定預設環境變數 (可在部署時被 gcloud 指令覆蓋)
ENV PORT=8080
ENV DB_HOST=127.0.0.1
ENV DB_USER=root
ENV DB_PASSWORD=password

# 暴露埠號
EXPOSE 8080

1. 建立 .dockerignore

Plaintext

.git
.gitignore
.dockerignore
Dockerfile
*.sql
*.zip
.vscode/
wp-config-sample.php

2. 打包與推送鏡像

PowerShell

# 編譯鏡像
docker build -t asia-east1-docker.pkg.dev/[PROJECT_ID]/wp-repo/[docker_name]:latest .

# 推送到 Artifact Registry
docker push asia-east1-docker.pkg.dev/[PROJECT_ID]/wp-repo/[docker_name]:latest

三、 資料庫遷移與設定

1. 匯入 SQL 腳本

.sql 檔案上傳至 Google Cloud Storage (GCS) 後執行匯入

注意:請確保 SQL 檔案中不含 CREATE DATABASEUSE 語句,以免匯入失敗或指向錯誤的資料庫。

PowerShell

gcloud sql import sql [INSTANCE_NAME] gs://[BUCKET_NAME]/[docker_name].sql --database=[docker_name]_db

2. 設定 wp-config.php 智慧判斷

為了同時支援本地開發與雲端環境,建議在 wp-config.php 加入連線判斷邏輯

PHP

// 偵測是否在 Cloud Run 環境 (透過 Unix Socket 連線)
if (getenv('INSTANCE_CONNECTION_NAME')) {
    define( 'DB_HOST', ':/cloudsql/' . getenv('INSTANCE_CONNECTION_NAME') );
} else {
    define( 'DB_HOST', getenv('DB_HOST') ?: '127.0.0.1' );
}

// 負載平衡器 HTTPS 辨識
if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] === 'https') {
    $_SERVER['HTTPS'] = 'on';
}

四、 部署至 Cloud Run

部署時需指定 Cloud SQL 連線名稱,這會自動建立加密隧道

PowerShell

gcloud run deploy [docker_name] `
  --image asia-east1-docker.pkg.dev/[PROJECT_ID]/wp-repo/[docker_name]:latest `
  --region asia-east1 `
  --allow-unauthenticated `
  --add-cloudsql-instances [PROJECT_ID]:asia-east1:[INSTANCE_NAME] `
  --set-env-vars="INSTANCE_CONNECTION_NAME=[PROJECT_ID]:asia-east1:[INSTANCE_NAME],DB_NAME=[docker_name]_db,DB_USER=root,DB_PASSWORD=[PASSWORD]"

五、 設定負載平衡器 (GCLB) 與自訂網域

為了使用自有的網域(如 blog.rain.tips),建議使用 HTTPS 負載平衡器

  1. 建立 Serverless NEG:讓負載平衡器找到 Cloud Run 。
  2. 設定前端 IP:保留一個靜態全域 IP。
  3. Google 管理憑證:在前端設定中新增網域,Google 會自動處理 SSL 簽發與續期 。
  4. DNS 設定:將您的網域 A 紀錄 指向負載平衡器的靜態 IP 。

六、 故障排除 (Troubleshooting)

  • Error establishing a database connection
    • 檢查 Cloud Run 服務帳戶是否擁有 「Cloud SQL Client」 角色 。
    • 確認 DB_HOST 在雲端環境是否正確指向 :/cloudsql/...
  • 503 Service Unavailable
    • 確認 Cloud Run 服務已設定為 「允許未經驗證的叫用」
    • 檢查負載平衡器的憑證是否已變為綠色的 Active 狀態 。
  • IPv6 連線問題
    • 若使用 Nginx 反向代理遇到 Network is unreachable,請強制 Nginx 優先使用 IPv4 或修改系統 /etc/hosts

參考資料

PHP-FPM 被 OOM Killer 殺掉?完整排查與修復實戰紀錄(Ubuntu 16GB RAM 環境)

最近我的伺服器突然出現網站 502 錯誤,檢查後發現 php8.2-fpm 服務竟然被系統強制終止。透過一系列排查,最終確認是 Linux OOM Killer(Out Of Memory) 觸發導致。

這篇文章整理完整排查過程與解決方案,提供給遇到相同問題的人參考。


📌 問題現象

使用 systemctl status php8.2-fpm 發現:

Active: failed (Result: oom-kill)

進一步檢查 kernel log:

Out of memory: Killed process 7057 (php-fpm8.2)
anon-rss:283560kB
shmem-rss:119848kB

代表:

  • 系統記憶體耗盡
  • Linux 啟動 OOM Killer
  • 強制殺掉 php-fpm worker

🔍 進一步分析

查看當時 PHP worker 記憶體使用情況:

ps -o pid,rss,etime,cmd -C php-fpm8.2 --sort=-rss | head -n 20

當時結果顯示:

RSS 約 250MB ~ 325MB/每個 worker

而之前狀態顯示:

Processes active: 80
idle: 0

🔥 問題核心

如果每個 worker 約 300MB:

300MB × 80 = 24GB

但機器只有:

15GB RAM
0GB Swap

👉 記憶體一定會爆。


🧠 伺服器環境

Memory: 15GiB
Swap: 0

這代表:

  • 沒有 swap 作為緩衝
  • 一旦瞬間記憶體尖峰,直接 OOM

🛠 解決方案


✅ 1️⃣ 建立 8GB Swap(防止再次 OOM)

sudo fallocate -l 8G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab

確認:

swapon --show
free -h

結果:

Swap: 8.0GiB

建議調整 swappiness

echo 'vm.swappiness=10' | sudo tee /etc/sysctl.d/99-swappiness.conf
sudo sysctl -p /etc/sysctl.d/99-swappiness.conf

✅ 2️⃣ 調整 PHP-FPM 設定(關鍵)

編輯:

/etc/php/8.2/fpm/pool.d/www.conf

修改為:

pm = dynamic
pm.max_children = 25
pm.start_servers = 6
pm.min_spare_servers = 4
pm.max_spare_servers = 10
pm.max_requests = 500

為什麼設 25?

假設每個 worker 約 150MB:

150MB × 25 ≈ 3.7GB

在 15GB RAM 環境下非常安全。


✅ 3️⃣ 開啟 Slow Log(抓出慢請求)

www.conf 加入:

request_slowlog_timeout = 10s
slowlog = /var/log/php8.2-fpm/www-slow.log
request_terminate_timeout = 60s

建立目錄:

sudo mkdir -p /var/log/php8.2-fpm
sudo chown -R www-data:www-data /var/log/php8.2-fpm
sudo systemctl restart php8.2-fpm

查看慢請求:

sudo tail -f /var/log/php8.2-fpm/www-slow.log

📊 調整後效果

重啟後查看:

ps -o pid,rss,etime,cmd -C php-fpm8.2 --sort=-rss | head -n 20

結果:

RSS 約 100MB ~ 170MB
ELAPSED 僅 20 秒左右

✔ 不再出現 300MB 以上肥 worker
✔ 不再出現 active 80
✔ 系統穩定運作


🎯 問題總結

本次 OOM 原因:

  1. pm.max_children 設定過高
  2. 每個 worker 記憶體使用偏高
  3. 沒有 swap 緩衝
  4. 慢請求導致 worker 堆積

最終解法:

  • 限制 max_children
  • 建立 swap
  • 開 slowlog 抓慢請求
  • 設定 max_requests 避免 memory leak

🚀 建議最佳實務

設定建議
Swap一定要有(至少 4GB)
max_children用 RAM / worker RSS 計算
max_requests300~1000
slowlog必開
request_terminate_timeout必設

📌 結論

OOM Killer 不是錯誤,它是保護機制。

真正的問題通常是:

  • PHP-FPM 設定不合理
  • 慢請求堆積
  • 記憶體容量與負載不匹配

只要正確限制 worker 數量並建立 swap,伺服器穩定度會大幅提升。


如果你也遇到 php-fpm 被 OOM kill 的問題,希望這篇實戰紀錄能幫助你快速排查與解決。

相關資訊