Konfiguracja
Codex CLI na VPS-ie
Codex dobrze działa na małym serwerze z Linuksem. Najwięcej tarcia jest przy logowaniu i z sandboxem na Linuksie. Ten poradnik opisuje instalację, logowanie bez przeglądarki, podtrzymywanie sesji i dostęp do serwera z telefonu.
Krótka odpowiedź
Zainstaluj przez curl -fsSL https://chatgpt.com/codex/install.sh | sh (lub npm install -g @openai/codex). Następnie włącz logowanie kodem urządzenia w ustawieniach bezpieczeństwa ChatGPT i uruchom codex login --device-auth na serwerze. Uruchamiaj Codexa w tmux lub w demonie, żeby przetrwał Twoje połączenie SSH. Remote w aplikacji ChatGPT oficjalnie obsługuje tylko hosty z macOS i Windows. Do VPS-a z Linuksem dotrzesz wyłącznie przez taki host: aplikacja desktopowa ChatGPT na Macu lub PC, który nie zasypia, otwiera go jako projekt SSH. Aby łączyć się z VPS-em bezpośrednio z telefonu, użyj aplikacji SSH albo klienta, który rozmawia z serwerem, takiego jak Maude.
Serwer to dobre miejsce dla Codex CLI od OpenAI. Pracuje, gdy laptop jest zamknięty, przetrwa zerwane połączenie, a jeśli coś pójdzie nie tak, możesz postawić maszynę od nowa. Na świeżym VPS-ie z Linuksem ludzie potykają się o dwie rzeczy. Po pierwsze, zwykłe codex login czeka na przekierowanie z przeglądarki, które nigdy nie dotrze do serwera. Po drugie, sandbox wymaga pakietu, którego większość minimalnych obrazów nie zawiera. Ten poradnik rozwiązuje oba problemy, a potem opisuje podtrzymywanie sesji i sposoby dostępu do nich z telefonu.
Wymagania
- Serwer z Linuksem, x86-64 lub arm64. OpenAI publikuje pliki binarne dla obu, działa też macOS. Debian lub Ubuntu to najprostsza droga.
- Konto. Plan ChatGPT albo klucz API OpenAI. Według cennika Codexa od OpenAI Codex wchodzi w skład ChatGPT Free, Go, Plus, Pro, Business, Edu i Enterprise. Limity różnią się w zależności od planu, a lokalne użycie CLI dzieli pulę z czatami w chmurze. Użycie z kluczem API jest zamiast tego rozliczane według stawek API.
- Pamięć. CLI to skompilowany plik binarny i sam potrzebuje niewiele pamięci. RAM zużywają buildy i testy Twojego projektu. 2 GB wystarczą do lekkiej pracy, 4 GB to komfort. Dobór rozmiaru i aktualne ceny znajdziesz w poradniku zakupowym VPS.
- Użytkownik inny niż root. Utwórz go przed instalacją czegokolwiek (
adduser dev, potem skopiuj klucz SSH). Nasz poradnik Claude Code na VPS opisuje to i utwardzanie SSH; kroki są takie same dla Codexa.
Instalacja Codexa
Samodzielny instalator nie wymaga Node.js:
curl -fsSL https://chatgpt.com/codex/install.sh | sh
codex --version
Jeśli już zarządzasz narzędziami przez npm, to polecenie instaluje to samo CLI:
npm install -g @openai/codex
Uważaj na zakres: pakiet to @openai/codex. Pakiet codex bez zakresu w npm nie ma z tym nic wspólnego. Instaluj jako zwykły użytkownik, nie przez sudo. Obie metody są opisane w README openai/codex.
Wymaganie sandboxa na Linuksie
Na Linuksie Codex uruchamia generowane polecenia powłoki w sandboxie zbudowanym na bwrap (bubblewrap) i seccomp. Dokumentacja sandboxa od OpenAI każe najpierw zainstalować bubblewrap:
sudo apt install bubblewrap # Debian / Ubuntu
sudo dnf install bubblewrap # Fedora
Bez bwrap Codex korzysta z dołączonego programu pomocniczego, a ten wymaga nieuprzywilejowanych przestrzeni nazw użytkownika. Ubuntu 24.04 ogranicza je przez AppArmor. Udokumentowane rozwiązanie ładuje dodatkowy profil:
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
Dokumentacja podaje też bardziej toporną alternatywę, sudo sysctl -w kernel.apparmor_restrict_unprivileged_userns=0, która wyłącza to ograniczenie dla całej maszyny. Wybierz profil. Jeśli każde polecenie w sandboxie kończy się błędem przestrzeni nazw, przyczyna jest właśnie tutaj.
Logowanie kodem urządzenia
Uruchom zwykłe codex login na serwerze, a wygląda, jakby się zawiesiło. Dlaczego: uruchamia lokalny serwer callbacku na porcie 1455 i czeka, aż Twoja przeglądarka zostanie przekierowana na localhost. To localhost serwera, do którego Twój telefon ani laptop nie mają dostępu. Zamiast tego użyj logowania kodem urządzenia. Ma jedno wymaganie, o które potyka się niemal każdy:
- Włącz logowanie kodem urządzenia. Na koncie prywatnym zrób to w ustawieniach bezpieczeństwa ChatGPT. W workspace Business, Edu lub Enterprise włącza je administrator w uprawnieniach workspace'u. Dopóki nie jest włączone, logowanie urządzenia nie zadziała na Twoim koncie.
- Rozpocznij proces na serwerze:
codex login --device-auth - Dokończ go na dowolnym urządzeniu. Codex wypisuje link i jednorazowy kod. Otwórz link na telefonie lub laptopie, zaloguj się do ChatGPT i wpisz kod.
- Sprawdź, czy zadziałało:
Wypisuje aktywny tryb uwierzytelniania i kończy się kodem 0, gdy logowanie jest aktywne, co przydaje się w skryptach.codex login status
To z dokumentacji uwierzytelniania OpenAI. Podaje ona dwa rozwiązania zapasowe na wypadek, gdy kod urządzenia nie jest dostępny:
- Przekieruj port callbacku. Połącz się przez
ssh -L 1455:localhost:1455 user@your-server, uruchomcodex loginna serwerze i otwórz wypisany adres w lokalnej przeglądarce. Przekierowanie wraca wtedy przez tunel. - Skopiuj dane logowania. Zaloguj się na maszynie z przeglądarką, a potem
scp ~/.codex/auth.json user@your-server:~/.codex/auth.json.
Klucz API zamiast planu
printenv OPENAI_API_KEY | codex login --with-api-key
Przekazanie klucza przez stdin trzyma go z dala od historii powłoki. Płacisz za tokeny według cen API zamiast korzystać z planu ChatGPT. To dobre rozwiązanie dla współdzielonej maszyny lub CI, gdzie chcesz twardej granicy rozliczeń.
Domyślnie Codex przechowuje dane logowania w ~/.codex/auth.json. Ustawienie cli_auth_credentials_store może przenieść je do pęku kluczy systemu (file, keyring, auto lub ephemeral). Każdy z powłoką jako Twój użytkownik może korzystać z Twojego planu ChatGPT. Nie dawaj innym dostępu do powłoki na maszynie z agentem.
Utrzymanie w działaniu
Interaktywna sesja codex żyje i umiera razem z terminalem, który ją uruchomił. Zamknij połączenie SSH, a sesja się skończy. Są trzy sposoby, żeby to obejść.
tmux, klasyka:
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
Jeśli sesja jednak się skończy, codex resume --last podejmuje ostatnią rozmowę w tym katalogu, a codex resume otwiera listę do wyboru. Nasz poradnik o tmux, mosh i Tailscale zawiera konfigurację tmux przyjazną dla telefonu.
Uruchomienia nieinteraktywne. codex exec "…" wykonuje jedno zadanie bez TUI, a codex exec resume --last je kontynuuje. To pasuje do zadań cron i CI, ale nie ma tam nikogo, kto odpowie na prośby o zatwierdzenie, więc poniższe ustawienia sandboxa mają większe znaczenie.
Demon, który jest właścicielem sesji i przetrwa restarty. To właśnie porównuje poradnik o pracy 24/7: jednostki systemd, serwery Remote Control i aplikacje takie jak Maude, które uruchamiają na maszynie własny proces.
Zatwierdzanie i sandbox
Codex ma dwie osobne kontrolki: czego mogą dotykać polecenia (sandbox) i kiedy zatrzymuje się, by Cię zapytać (polityka zatwierdzania). Poniższe wartości pochodzą z dokumentacji zatwierdzania i bezpieczeństwa OpenAI oraz dokumentacji CLI:
| Ustawienie | Wartości | Co oznacza na serwerze |
|---|---|---|
--sandbox / -s | read-only, workspace-write, danger-full-access | workspace-write to wartość domyślna w repozytorium git. Edycje zostają w projekcie, a dostęp do sieci jest wyłączony, dopóki go nie włączysz. |
--ask-for-approval / -a | on-request, never | on-request pyta, gdy akcja wymaga więcej, niż pozwala sandbox. never w ogóle nie pyta. W config.toml approval_policy przyjmuje też granular; dawna wartość untrusted została wycofana. |
--yolo | (alias --dangerously-bypass-approvals-and-sandbox) | Bez sandboxa i bez pytań. OpenAI przeznacza go dla środowisk już zabezpieczonych z zewnątrz. |
--full-auto wciąż pojawia się w starszych poradnikach. To teraz przestarzała flaga zgodności, a dokumentacja każe zamiast niej używać --sandbox workspace-write. Żeby polecenia w sandboxie miały dostęp do sieci, na przykład żeby działało npm install, dodaj to do ~/.codex/config.toml:
sandbox_mode = "workspace-write"
approval_policy = "on-request"
[sandbox_workspace_write]
network_access = true
Uwaga o kontenerach: jeśli Twój „VPS” to w rzeczywistości kontener Docker lub LXC, który blokuje operacje na przestrzeniach nazw, dokumentacja sugeruje --sandbox danger-full-access. Rób to tylko wtedy, gdy sam kontener jest Twoim sandboxem. Kompromisy są takie same jak przy trybie bypass w Claude, opisanym w tekście bezpieczne uruchamianie agentów z pełnymi uprawnieniami.
Opcje dostępu z telefonu
| Opcja | Działa z VPS-em z Linuksem? | Mocna strona | Na co uważać |
|---|---|---|---|
| Codex Remote (aplikacja ChatGPT) | Oficjalnie nie. Hosty muszą mieć aplikację desktopową ChatGPT na macOS lub Windows; ta aplikacja może łączyć się z projektami SSH na Twoim VPS-ie. | Oficjalne, darmowe w ramach planu, natywny interfejs | Komputer-host musi pozostać aktywny i online |
| Aplikacja SSH + tmux | Tak | Darmowe, nic dodatkowego na serwerze | Pełnoekranowy TUI na klawiaturze telefonu, bez push |
| Maude | Tak (dowolny Linux lub macOS przez SSH) | Natywny interfejs czatu, zatwierdzanie w treści, push, także Claude Code i inne | Płatna aplikacja; nadal potrzebujesz własnego planu ChatGPT lub klucza |
Słowo o Linuksie bez interfejsu i Codex Remote. Dokumentacja CLI opisuje codex remote-control start i codex remote-control pair dla lokalnego app-servera. Przewodnik po połączeniach zdalnych nadal jednak mówi, że hosty uruchamiają aplikację desktopową na macOS lub Windows. Użytkownicy otworzyli zgłoszenia w tej sprawie: #31183 zgłasza, że hostów Linux bez interfejsu nie da się ponownie sparować z obecnymi klientami mobilnymi, a #35928 wskazuje na sprzeczność. Oba były otwarte, gdy sprawdzaliśmy. Jeśli ta ścieżka u Ciebie działa, to jest ona oficjalna. Po prostu nie opieraj jeszcze na niej swojego sposobu pracy.
Sterowanie z telefonu przez Maude
Maude to jeden ze sposobów na sterowanie tym VPS-em z telefonu bez TUI. Dodajesz serwer po adresie lub wklejonym poleceniem ssh, a aplikacja wdraża przez SSH własnego, małego demona. Ten demon instaluje Codexa w przetestowanej, przypiętej wersji, zweryfikowanej sumą kontrolną, więc pomijasz krok instalacji. Do Codexa logujesz się z telefonu kodem urządzenia ChatGPT lub kluczem API. Nadal musisz najpierw włączyć logowanie kodem urządzenia w ChatGPT. Sesje działają dalej na serwerze, gdy aplikacja jest zamknięta, prośby o zatwierdzenie pojawiają się w skrzynce i jako powiadomienia push z Zezwól/Odmów, a ten sam serwer może obok Codexa uruchamiać Claude Code, OpenCode, Grok Build i Antigravity. Szczegóły są na stronie agenta Codex.
Najczęściej zadawane pytania
Dlaczego codex login zawiesza się na moim serwerze?
codex login uruchamia serwer callbacku na localhost:1455 i czeka na przekierowanie z przeglądarki, którego przeglądarka na innym urządzeniu nie dostarczy do Twojego VPS-a. Użyj codex login --device-auth po włączeniu logowania kodem urządzenia w ustawieniach bezpieczeństwa ChatGPT. Ewentualnie przekieruj port przez ssh -L 1455:localhost:1455.Czy do uruchomienia Codexa potrzebuję Node.js?
curl -fsSL https://chatgpt.com/codex/install.sh | sh) i pliki binarne z wydań nie wymagają Node. Node jest potrzebny tylko wtedy, gdy wybierzesz drogę przez npm, npm install -g @openai/codex.Czy mogę użyć klucza API zamiast planu ChatGPT?
printenv OPENAI_API_KEY | codex login --with-api-key. Użycie jest wtedy rozliczane według stawek API OpenAI, a nie wliczane w pulę planu ChatGPT.Czy Codex Remote widzi mój VPS?
codex remote-control) jest udokumentowana, ale otwarte zgłoszenia na GitHubie mówią o problemach z parowaniem hostów Linux bez interfejsu, więc zanim na niej oprzesz pracę, sprawdź aktualną dokumentację.Jakiego trybu sandboxa użyć na VPS-ie?
workspace-write z zatwierdzaniem on-request i włącz network_access, jeśli Twoje buildy muszą pobierać pakiety. --yolo zostaw dla maszyn jednorazowych lub kontenerów, których izolacji ufasz.Co się zmieniło
- — Pierwsza publikacja. Instalacja, uwierzytelnianie, sandbox i Remote sprawdzone tego dnia w dokumentacji OpenAI i README openai/codex.