Cài đặt
Chạy Codex CLI trên VPS
Codex chạy tốt trên một máy chủ Linux nhỏ. Phần lớn rắc rối nằm ở khâu đăng nhập và sandbox trên Linux. Hướng dẫn này đi qua cách cài đặt, đăng nhập không cần trình duyệt, giữ phiên luôn chạy và cách truy cập máy chủ từ điện thoại.
Trả lời nhanh
Cài bằng curl -fsSL https://chatgpt.com/codex/install.sh | sh (hoặc npm install -g @openai/codex). Tiếp theo, bật đăng nhập bằng mã thiết bị trong cài đặt bảo mật ChatGPT và chạy codex login --device-auth trên máy chủ. Chạy Codex trong tmux hoặc một daemon để nó sống lâu hơn kết nối SSH. Remote trong ứng dụng ChatGPT chính thức chỉ hỗ trợ máy chủ chạy macOS và Windows. VPS Linux chỉ có thể được truy cập thông qua một trong hai loại máy đó: ứng dụng ChatGPT desktop trên một máy Mac hoặc PC luôn thức mở VPS dưới dạng dự án SSH. Để truy cập VPS trực tiếp từ điện thoại, hãy dùng một ứng dụng SSH hoặc một client giao tiếp với máy chủ, như Maude.
Máy chủ là một nơi tốt cho Codex CLI của OpenAI. Nó vẫn làm việc khi laptop đã gập, sống sót qua những lần rớt kết nối, và nếu một lần chạy hỏng việc thì bạn có thể dựng lại máy. Có hai thứ hay làm người dùng vấp trên một VPS Linux mới. Thứ nhất, codex login thuần chờ một lần chuyển hướng từ trình duyệt mà không bao giờ tới được máy chủ. Thứ hai, sandbox cần một gói mà hầu hết image tối giản không có sẵn. Hướng dẫn này xử lý cả hai, rồi trình bày cách giữ phiên luôn chạy và các cách truy cập chúng từ điện thoại.
Yêu cầu
- Một máy chủ Linux, x86-64 hoặc arm64. OpenAI phát hành binary cho cả hai, và macOS cũng dùng được. Debian hoặc Ubuntu là lựa chọn dễ nhất.
- Một tài khoản. Hoặc gói ChatGPT, hoặc OpenAI API key. Trang giá Codex của OpenAI cho biết Codex có trong ChatGPT Free, Go, Plus, Pro, Business, Edu và Enterprise. Hạn mức khác nhau tùy gói, và việc dùng CLI cục bộ chia chung hạn mức với các cuộc chat trên cloud. Dùng API key thì được tính phí theo giá API.
- Bộ nhớ. CLI là một binary đã biên dịch và bản thân nó cần rất ít bộ nhớ. Build và chạy test của dự án mới là thứ ngốn RAM. 2 GB đủ cho việc nhẹ và 4 GB là thoải mái. Xem hướng dẫn chọn mua VPS để biết cấu hình và giá hiện tại.
- Một user không phải root. Tạo user này trước khi cài bất cứ thứ gì (
adduser dev, rồi chép khóa SSH sang). Hướng dẫn Claude Code trên VPS của chúng tôi đi qua bước đó và phần tăng cường bảo mật SSH; các bước với Codex cũng y như vậy.
Cài Codex
Trình cài đặt độc lập không cần Node.js:
curl -fsSL https://chatgpt.com/codex/install.sh | sh
codex --version
Nếu bạn vẫn quản lý công cụ bằng npm, lệnh này cài cùng một CLI:
npm install -g @openai/codex
Để ý scope: gói là @openai/codex. Gói codex không có scope trên npm là một gói không liên quan. Cài bằng user thường, không dùng sudo. Cả hai cách đều có trong README của openai/codex.
Điều kiện tiên quyết cho sandbox trên Linux
Trên Linux, Codex chạy các lệnh shell nó tạo ra bên trong một sandbox dựa trên bwrap (bubblewrap) và seccomp. Tài liệu về sandbox của OpenAI dặn cài bubblewrap trước:
sudo apt install bubblewrap # Debian / Ubuntu
sudo dnf install bubblewrap # Fedora
Không có bwrap, Codex chuyển sang dùng một helper đi kèm, và helper đó cần unprivileged user namespace. Ubuntu 24.04 giới hạn chúng thông qua AppArmor. Cách khắc phục theo tài liệu là nạp thêm một profile:
sudo apt install apparmor-profiles apparmor-utils
sudo install -m 0644 /usr/share/apparmor/extra-profiles/bwrap-userns-restrict /etc/apparmor.d/bwrap-userns-restrict
sudo apparmor_parser -r /etc/apparmor.d/bwrap-userns-restrict
Tài liệu cũng đưa ra một cách mạnh tay hơn, sudo sysctl -w kernel.apparmor_restrict_unprivileged_userns=0, tắt giới hạn này cho toàn bộ máy. Nên ưu tiên dùng profile. Nếu bạn thấy mọi lệnh chạy trong sandbox đều lỗi với một thông báo về namespace, thì đây là lý do.
Đăng nhập bằng mã thiết bị
Chạy codex login thuần trên máy chủ và nó có vẻ bị treo. Lý do: nó khởi động một callback server cục bộ ở cổng 1455 và chờ trình duyệt của bạn được chuyển hướng về localhost. Đó là localhost của máy chủ, nơi điện thoại hay laptop của bạn không tới được. Hãy dùng đăng nhập bằng mã thiết bị. Cách này có một điều kiện tiên quyết mà gần như ai cũng vấp phải:
- Bật đăng nhập bằng mã thiết bị. Với tài khoản cá nhân, bật trong cài đặt bảo mật của ChatGPT. Với workspace Business, Edu hoặc Enterprise, quản trị viên bật nó trong phần quyền của workspace. Khi chưa bật, luồng mã thiết bị sẽ không chạy với tài khoản của bạn.
- Khởi chạy luồng trên máy chủ:
codex login --device-auth - Hoàn tất trên một thiết bị bất kỳ. Codex in ra một đường link và một mã dùng một lần. Mở link trên điện thoại hoặc laptop, đăng nhập ChatGPT và nhập mã.
- Kiểm tra đã thành công:
Lệnh này in ra chế độ xác thực đang dùng và thoát với mã 0 khi bạn đã đăng nhập, nên rất tiện để dùng trong script.codex login status
Các bước trên lấy từ tài liệu xác thực của OpenAI. Tài liệu đưa ra hai phương án dự phòng khi không dùng được mã thiết bị:
- Chuyển tiếp cổng callback. Kết nối bằng
ssh -L 1455:localhost:1455 user@your-server, chạycodex logintrên máy chủ và mở địa chỉ được in ra trong trình duyệt trên máy bạn. Lúc đó lần chuyển hướng sẽ đi ngược về qua đường hầm. - Sao chép thông tin đăng nhập. Đăng nhập trên một máy có trình duyệt, rồi
scp ~/.codex/auth.json user@your-server:~/.codex/auth.json.
Dùng API key thay thế
printenv OPENAI_API_KEY | codex login --with-api-key
Truyền key qua stdin giúp nó không nằm trong lịch sử shell. Bạn trả tiền theo token với giá API thay vì dùng hạn mức của gói ChatGPT. Cách này hợp với một máy dùng chung hoặc máy CI, nơi bạn muốn giới hạn chi phí rõ ràng.
Mặc định, Codex lưu thông tin đăng nhập trong ~/.codex/auth.json. Cài đặt cli_auth_credentials_store có thể chuyển chúng sang keyring của hệ điều hành (file, keyring, auto hoặc ephemeral). Bất kỳ ai có shell dưới user của bạn đều dùng được gói ChatGPT của bạn. Đừng cấp quyền shell trên máy chạy agent cho người khác.
Giữ cho nó luôn chạy
Một phiên codex tương tác sống chết cùng terminal đã khởi chạy nó. Đóng kết nối SSH là phiên kết thúc. Bạn có ba cách để tránh điều đó.
tmux, cách kinh điển:
sudo apt install tmux
tmux new -A -s codex # create or re-attach
cd ~/src/my-app && codex
# detach: Ctrl-b then d; later: tmux attach -t codex
Nếu phiên có kết thúc, codex resume --last tiếp tục cuộc trò chuyện gần nhất trong thư mục đó, còn codex resume mở một bộ chọn. Hướng dẫn tmux, mosh và Tailscale của chúng tôi có một cấu hình tmux thân thiện với điện thoại.
Chạy không tương tác. codex exec "…" chạy một tác vụ mà không cần TUI, và codex exec resume --last làm tiếp tác vụ đó. Cách này hợp với cron job và CI, nhưng không có ai ở đó để trả lời yêu cầu phê duyệt, nên các cài đặt sandbox bên dưới càng quan trọng hơn.
Một daemon sở hữu các phiên và sống sót qua các lần khởi động lại. Đó là những gì hướng dẫn 24/7 so sánh: systemd unit, server Remote Control, và các ứng dụng như Maude chạy tiến trình riêng trên máy.
Phê duyệt và sandbox
Codex có hai cơ chế kiểm soát riêng biệt: các lệnh được động tới những gì (sandbox) và khi nào nó dừng lại hỏi bạn (chính sách phê duyệt). Các giá trị bên dưới lấy từ tài liệu về phê duyệt và bảo mật của OpenAI và phần tham khảo CLI:
| Cài đặt | Giá trị | Ý nghĩa trên máy chủ |
|---|---|---|
--sandbox / -s | read-only, workspace-write, danger-full-access | workspace-write là mặc định trong một git repo. Các thay đổi chỉ nằm trong dự án, và truy cập mạng bị tắt trừ khi bạn bật. |
--ask-for-approval / -a | on-request, never | on-request hỏi khi một thao tác cần nhiều hơn mức sandbox cho phép. never hoàn toàn không hỏi. Trong config.toml, approval_policy còn nhận giá trị granular; giá trị cũ untrusted đã bị loại bỏ. |
--yolo | (bí danh của --dangerously-bypass-approvals-and-sandbox) | Không sandbox và không hỏi. OpenAI chỉ dành nó cho các môi trường đã được bảo vệ chặt từ bên ngoài. |
--full-auto vẫn xuất hiện trong các hướng dẫn cũ. Giờ đây nó là một cờ tương thích đã lỗi thời, và phần tham khảo khuyên dùng --sandbox workspace-write thay thế. Để các lệnh trong sandbox truy cập được mạng, chẳng hạn để npm install chạy được, hãy thêm đoạn này vào ~/.codex/config.toml:
sandbox_mode = "workspace-write"
approval_policy = "on-request"
[sandbox_workspace_write]
network_access = true
Một lưu ý về container: nếu "VPS" của bạn thực ra là một container Docker hoặc LXC chặn các thao tác namespace, tài liệu gợi ý dùng --sandbox danger-full-access. Chỉ làm vậy nếu chính container là sandbox của bạn. Sự đánh đổi giống với chế độ bypass của Claude, được trình bày trong chạy agent với toàn quyền một cách an toàn.
Các cách truy cập từ điện thoại
| Lựa chọn | Dùng được với VPS Linux? | Điểm mạnh | Cần lưu ý |
|---|---|---|---|
| Codex Remote (ứng dụng ChatGPT) | Không chính thức. Máy chủ phải chạy ứng dụng ChatGPT desktop trên macOS hoặc Windows; ứng dụng đó có thể mở các dự án SSH trên VPS của bạn. | Chính thức, miễn phí kèm gói của bạn, giao diện native | Máy tính chủ phải luôn thức và trực tuyến |
| Ứng dụng SSH + tmux | Có | Miễn phí, không cần thêm gì trên máy chủ | TUI toàn màn hình với bàn phím điện thoại, không có thông báo đẩy |
| Maude | Có (mọi máy Linux hoặc macOS qua SSH) | Giao diện chat native, phê duyệt ngay trong luồng, thông báo đẩy, kèm cả Claude Code và các agent khác | Ứng dụng trả phí; bạn vẫn cần gói ChatGPT hoặc key của riêng mình |
Đôi lời về Linux headless và Codex Remote. Phần tham khảo CLI có mô tả codex remote-control start và codex remote-control pair cho app-server cục bộ. Tuy vậy, hướng dẫn Remote connections vẫn ghi rằng máy chủ chạy ứng dụng desktop trên macOS hoặc Windows. Người dùng đã mở issue về chỗ vênh này: #31183 báo rằng máy chủ Linux headless không ghép nối lại được từ các client di động hiện tại, và #35928 chỉ ra sự mâu thuẫn. Cả hai vẫn đang mở khi chúng tôi kiểm tra. Nếu cách đó chạy được với bạn, đó là cách chính thức. Chỉ là đừng vội xây quy trình làm việc dựa trên nó.
Điều khiển từ điện thoại với Maude
Maude là một cách để điều khiển VPS đó từ điện thoại mà không cần TUI. Bạn thêm máy chủ bằng địa chỉ hoặc bằng cách dán một lệnh ssh, và ứng dụng tự triển khai một daemon nhỏ qua SSH. Daemon đó cài Codex ở một phiên bản đã kiểm thử, được ghim và xác minh bằng checksum, nên bạn bỏ qua được bước cài đặt. Bạn đăng nhập Codex từ điện thoại bằng mã thiết bị ChatGPT hoặc API key. Bạn vẫn phải bật đăng nhập bằng mã thiết bị trong ChatGPT trước. Các phiên vẫn chạy trên máy chủ khi ứng dụng đã đóng, yêu cầu phê duyệt hiện trong hộp thư và qua thông báo đẩy có nút Cho phép/Từ chối, và cùng máy chủ đó có thể chạy Claude Code, OpenCode, Grok Build và Antigravity bên cạnh Codex. Chi tiết có trên trang agent Codex.
Câu hỏi thường gặp
Vì sao codex login bị treo trên máy chủ của tôi?
codex login thuần khởi động một callback server ở localhost:1455 và chờ một lần chuyển hướng từ trình duyệt, điều mà trình duyệt trên thiết bị khác không thể chuyển tới VPS của bạn. Hãy dùng codex login --device-auth sau khi bật đăng nhập bằng mã thiết bị trong cài đặt bảo mật ChatGPT. Hoặc chuyển tiếp cổng bằng ssh -L 1455:localhost:1455.Tôi có cần Node.js để chạy Codex không?
curl -fsSL https://chatgpt.com/codex/install.sh | sh) và các binary phát hành đều không cần Node. Bạn chỉ cần Node nếu chọn cài qua npm, npm install -g @openai/codex.Tôi có thể dùng API key thay cho gói ChatGPT không?
printenv OPENAI_API_KEY | codex login --with-api-key. Khi đó mức dùng được tính phí theo giá OpenAI API thay vì trừ vào hạn mức của gói ChatGPT.Codex Remote có thấy VPS của tôi không?
codex remote-control) được mô tả trong tài liệu, nhưng các issue GitHub đang mở báo cáo lỗi khi ghép nối máy chủ Linux headless, nên hãy kiểm tra tài liệu hiện hành trước khi dựa vào nó.Nên dùng chế độ sandbox nào trên VPS?
workspace-write kèm phê duyệt on-request, và bật network_access nếu quá trình build cần tải gói. Chỉ dùng --yolo cho máy dùng xong bỏ hoặc container mà bạn tin vào khả năng cách ly của nó.Những gì đã thay đổi
- — Đăng lần đầu. Các chi tiết về cài đặt, xác thực, sandbox và Remote được đối chiếu với tài liệu của OpenAI và README của openai/codex vào ngày này.