V哥的開發主力機改放 VM 伺服器:Oracle APEX 環境安裝、專案原始碼、Claude Code 對話轉移、備份、筆電遠端接續。整理日期 2026-10-08。
claude)。可搬的是對話內容與專案,不是桌面版介面。~/.claude/projects/**/*.jsonl),用 rsync 搬到 VM 後,CLI 用 claude --resume 接續。/remote-control,從 Mac 桌面版、claude.ai/code 或手機接上同一個對話。| 項目 | 說明 | V哥的值 |
|---|---|---|
| V哥 Mac 的使用者名稱 | 用來組出舊路徑,如 /Users/<mac使用者>/<專案> | ________ |
| VM 的使用者名稱與 IP | 如 vge@10.0.0.20 | ________ |
| VM 上專案根目錄 | 如 /home/vge/projects | ________ |
| APEX、ORDS、資料庫版本 | 舊環境查 apex_release、ords --version、v$version | ________ |
| Workspace、Schema、應用程式 ID 清單 | 決定要匯出哪些內容 | ________ |
| 資料庫形式與資料量 | Free/XE/EE、容器或實體安裝;資料量決定搬移方式 | ________ |
| APEX 原始碼是否已進 git | 未進 git 的先匯出成檔案 | ________ |
| Claude 帳號方案 | Pro/Max/Team/Enterprise(Remote Control 需要) | ________ |
下文以 MAC_USER、VM_USER、VM_IP、PROJ(專案名稱)作為占位符,請替換成實際值。
V哥的專案以 Oracle APEX 為主,環境是一整組元件。下表為建議版本與順序,版本號請依 V哥現有環境對齊(先在舊環境查:select * from apex_release;、ords --version、select banner from v$version;)。
| 順序 | 元件 | 用途 | 備註 |
|---|---|---|---|
| 1 | 基礎工具、Java | ORDS 與 SQLcl 需要 JDK | JDK 17 或 21(依 ORDS 版本需求) |
| 2 | Oracle Database | APEX 的資料庫 | Free 23ai / XE / EE 或 Docker/Podman 容器,依授權與現況 |
| 3 | Oracle APEX | 低程式碼開發環境 | 安裝到資料庫內(PDB),版本與舊環境一致或明確升級 |
| 4 | ORDS | APEX 的 Web 入口(REST) | standalone 模式,或放到 Tomcat |
| 5 | SQLcl | 命令列、匯出匯入、版本控管 | Claude Code 也能透過它操作資料庫 |
| 6 | git、tmux、Claude Code | 原始碼與 AI 協作 | 見下方 |
sudo dnf -y update
sudo dnf -y install git tmux rsync curl wget unzip tar vim jq
sudo dnf -y install java-17-openjdk-devel # 或 JDK 21,依 ORDS 版本需求
java -version
# 以 Oracle Database Free 23ai 為例(版本請依現況調整)
sudo dnf -y install oracle-database-preinstall-23ai
# 下載 oracle-database-free-23ai RPM 後安裝
sudo dnf -y install ./oracle-database-free-23ai-*.rpm
sudo /etc/init.d/oracle-free-23ai configure # 設定 SYS/SYSTEM/PDB 管理者密碼
sudo systemctl enable --now oracle-free-23ai
# 下載 APEX 壓縮檔並解壓,例如 /opt/apex
cd /opt/apex
sql sys@localhost:1521/FREEPDB1 as sysdba
SQL> @apexins.sql SYSAUX SYSAUX TEMP /i/
SQL> @apxchpwd.sql -- 設定 APEX ADMIN 密碼
SQL> alter user APEX_PUBLIC_USER identified by "<密碼>" account unlock;
靜態檔案(/i/)路徑要讓 ORDS 找得到,下一步設定。
# Oracle Linux 可由官方 repo 安裝(若 repo 找不到,改用下載 zip)
sudo dnf -y install ords
# 互動式安裝,指向 PDB 與 APEX 靜態檔案
sudo -u oracle ords --config /etc/ords/config install
# 啟動
sudo -u oracle ords --config /etc/ords/config serve
預設埠 8080。要長期執行請改為 systemd 服務,正式環境建議前面加 Nginx/HAProxy 與 HTTPS。防火牆只開必要埠:
sudo firewall-cmd --permanent --add-port=8080/tcp
sudo firewall-cmd --reload
sudo dnf -y install sqlcl # 若 repo 沒有,改下載 zip 解壓,並把 bin 加入 PATH
sql -V
curl -fsSL https://claude.ai/install.sh | bash
claude --version
claude doctor
claude # 第一次登入,輸入 /login,用 V哥的 claude.ai 帳號
# 在 Mac 上:建立金鑰並放到 VM(之後免密碼登入)
ssh-keygen -t ed25519
ssh-copy-id VM_USER@VM_IP
git clone / git push 私有儲存庫。# 整個 ~/.claude 打包(含所有專案對話、設定、外掛)
tar czf ~/Documents/claude-backup-$(date +%Y%m%d).tgz -C ~ .claude
# 桌面版對話索引另存(小檔案,Linux 用不到,僅供存檔)
tar czf ~/Documents/claude-desktop-sessions-$(date +%Y%m%d).tgz \
-C ~/Library/Application\ Support/Claude claude-code-sessions
不要整包搬 ~/Library/Application Support/Claude/,裡面多數是桌面版快取與沙盒映像,體積可達數 GB 且 Linux 用不到。備份檔含對話內容與可能貼過的金鑰,請存放在加密或權限受限的位置。
APEX 專案的「原始碼」分散在資料庫裡,不是單純的檔案資料夾。要搬的東西如下:
| 內容 | 匯出方式 | 匯入 / 存放 |
|---|---|---|
| APEX 應用程式(頁面、區域、動態動作等) | SQLcl apex export,建議 -split 拆成多檔以利 git | SQLcl 執行 @f<ID>.sql 匯入 |
| Workspace、使用者、Workspace 檔案 | apex export -workspaceid 或 APEX 後台匯出 | 匯入同名 Workspace |
| 資料庫物件(表、檢視、套件、觸發器) | SQLcl ddl 或 lb(Liquibase) | 在 VM 資料庫執行 SQL 腳本 |
| 資料表資料 | Data Pump(expdp)或 SQLcl unload | impdp 匯入 VM 資料庫 |
| 靜態檔案(JS/CSS/圖片) | 隨 APEX 匯出,或原始檔放在 git | 匯入應用程式,或由 ORDS 提供 |
| REST 模組(ORDS) | SQLcl ords export 或 APEX 匯出 REST 服務 | 在 VM 匯入 |
設定檔、.env、連線設定、wallet | 手動整理,不進 git | scp 傳輸並限制權限 |
# 連線舊資料庫
sql user/pass@old_host:1521/OLDPDB
-- 匯出單一應用程式並拆檔(適合 git)
SQL> apex export -applicationid 100 -split -dir /path/to/repo/apex/f100
-- 匯出所有應用程式
SQL> apex export -workspaceid 123456789 -expType APPLICATION_SOURCE -dir /path/to/repo/apex
-- 匯出資料庫物件 DDL
SQL> ddl -dir /path/to/repo/db
# 舊環境匯出
expdp system@OLDPDB schemas=APP_SCHEMA directory=DATA_PUMP_DIR dumpfile=app.dmp logfile=exp.log
# 把 dmp 傳到 VM 的 DATA_PUMP_DIR 目錄
scp app.dmp VM_USER@VM_IP:/opt/oracle/admin/dpdump/
# VM 匯入
impdp system@FREEPDB1 schemas=APP_SCHEMA directory=DATA_PUMP_DIR dumpfile=app.dmp logfile=imp.log
repo/
├── apex/f100/ # apex export -split 的輸出
├── db/ # 表、套件、觸發器 DDL
├── ords/ # REST 模組
├── static/ # JS / CSS / 圖片
└── README.md
# 在 VM 上
mkdir -p ~/projects && cd ~/projects
git clone git@github.com:<org>/PROJ.git
.env 不要進 git。APEX 匯出檔可能含 Workspace 的設定值與連線字串,推到遠端前先檢查。對話資料夾名稱 = 專案工作目錄路徑,把 / 及部分符號換成 -。
| Mac 舊資料夾名稱 | VM 新資料夾名稱 |
|---|---|
-Users-MAC_USER-PROJ | -home-VM_USER-projects-PROJ |
claude,看 ~/.claude/projects/ 自動產生的資料夾名稱,再把舊對話搬進同名資料夾。# 在 V哥的 Mac 上
ssh VM_USER@VM_IP 'mkdir -p ~/.claude/projects/-home-VM_USER-projects-PROJ'
rsync -av ~/.claude/projects/-Users-MAC_USER-PROJ/ \
VM_USER@VM_IP:~/.claude/projects/-home-VM_USER-projects-PROJ/
# 全域設定、輸入歷史、外掛、檔案快照
rsync -av ~/.claude/settings.json ~/.claude/history.jsonl ~/.claude/CLAUDE.md \
VM_USER@VM_IP:~/.claude/ 2>/dev/null
rsync -av ~/.claude/plugins/ VM_USER@VM_IP:~/.claude/plugins/
rsync -av ~/.claude/file-history/ VM_USER@VM_IP:~/.claude/file-history/
settings.json 若含 Mac 專用路徑或 hook,搬過去要檢查修改。plugins/ 內若有 macOS 專用二進位檔,可能無法在 Linux 使用,必要時在 VM 重新安裝。cd ~/projects/PROJ && claude --resume
看到舊對話清單即成功。對話中若提到舊的絕對路徑(/Users/MAC_USER/...),可在第一句話告訴 Claude「專案現在在 ~/projects/PROJ」。
ANTHROPIC_BASE_URL 或走閘道,否則 Remote Control 不可用。| 方式 | 用途 | 說明 |
|---|---|---|
| A. SSH + tmux最穩 | 主力操作入口 | 保證看到舊對話;斷線後 tmux 裡的 Claude 繼續跑 |
| B. Remote Control建議搭配 | 用桌面版/網頁/手機接同一個對話 | Claude 仍在 VM 執行,畫面在筆電或手機 |
| C. 桌面版 SSH 環境 | 新對話 | 文件未說明是否列出遠端既有舊對話,不要依賴 |
# 在筆電上
ssh VM_USER@VM_IP
tmux new -As claude
cd ~/projects/PROJ
claude --resume # 選舊對話
# 進入對話後輸入:
/remote-control # 或 /rc
接著在 Mac 桌面版、claude.ai/code 或手機 Claude app 開啟該 session(顯示電腦圖示與綠點即在線)。斷線後回到終端機:tmux attach -t claude。
| 項目 | 是否與 Mac 本機相同 |
|---|---|
| 對話內容與上下文(Claude 記得之前聊的) | 相同 |
| 檔案讀寫、git、指令執行 | 相同(但發生在 VM) |
| 入口 | 不同:要先在 VM 啟動對話,再從 Mac/網頁/手機接上,不會自動列出全部舊對話 |
終端機專用指令(/plugin、/resume) | 遠端畫面不能用,要在 VM 端操作 |
| Mac 桌面版側邊欄的舊對話 | 仍是 Mac 本機的獨立紀錄,與 VM 上的不同步 |
ANTHROPIC_BASE_URL、LLM 閘道不支援。claude 程序結束連線就斷;伺服器模式約 4 小時內可還原。claude doctor 與 claude remote-control --verbose,確認 OL9 可運作。claude --resume 確認舊對話出現。/remote-control,用 Mac 桌面版或 claude.ai/code 接上,檢查歷史訊息是否完整、能否送出新訊息。/feedback 向官方回報。~/.claude/,保留 7 到 30 天,並複製到另一台機器或物件儲存。# VM 上的每日備份範例(crontab -e)
30 2 * * * tar czf /backup/claude-$(date +\%Y\%m\%d).tgz -C $HOME .claude \
&& find /backup -name 'claude-*.tgz' -mtime +30 -delete