<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Self-Hosted-Runner-사설-인프라-연동 on K-Life Hack | Systems Architecture &amp; DevOps</title><link>https://klifehack.com/en/tags/self-hosted-runner-%EC%82%AC%EC%84%A4-%EC%9D%B8%ED%94%84%EB%9D%BC-%EC%97%B0%EB%8F%99/</link><description>Recent content in Self-Hosted-Runner-사설-인프라-연동 on K-Life Hack | Systems Architecture &amp; DevOps</description><generator>Hugo -- gohugo.io</generator><language>en</language><lastBuildDate>Mon, 05 Oct 2026 10:12:35 +0900</lastBuildDate><atom:link href="https://klifehack.com/en/tags/self-hosted-runner-%EC%82%AC%EC%84%A4-%EC%9D%B8%ED%94%84%EB%9D%BC-%EC%97%B0%EB%8F%99/index.xml" rel="self" type="application/rss+xml"/><item><title>Integration Design for Self-Hosted Execution Environments in the OpenAI Agents API</title><link>https://klifehack.com/en/p/openai-agents-api-self-hosted-integration/</link><pubDate>Mon, 05 Oct 2026 10:12:35 +0900</pubDate><guid>https://klifehack.com/en/p/openai-agents-api-self-hosted-integration/</guid><description>&lt;p&gt;In enterprise infrastructure design, establishing security perimeters when granting code execution privileges to LLM agents is an extremely challenging problem. Managed sandbox environments provided in the public cloud (such as &lt;code&gt;openai_hosted&lt;/code&gt;) are suitable for rapid prototyping, but cannot meet requirements for accessing resources within internal private VPCs or satisfying strict data governance rules. Furthermore, transferring highly sensitive source code or internal data to external container environments is generally restricted by compliance constraints.&lt;/p&gt;&#10;&lt;p&gt;Against this background, the OpenAI Agents API (released in public beta in September 2026) provides a &amp;ldquo;self-hosted&amp;rdquo; (&lt;code&gt;self_hosted&lt;/code&gt;) execution environment model that delegates control plane orchestration functions to OpenAI while executing actual code execution and filesystem operations on self-managed infrastructure. This article explains the architectural design for safely and stably building this self-hosted environment, deployment procedures for &lt;code&gt;codex exec-server&lt;/code&gt;, and network/security design for production operations.&lt;/p&gt;&#10;&lt;hr&gt;&#10;&lt;h2 id="1-self-hosted-architecture-connection-model"&gt;1. Self-Hosted Architecture Connection Model&#10;&lt;/h2&gt;&lt;p&gt;The core of the self-hosted execution environment lies in the &amp;ldquo;Outbound-only Connection&amp;rdquo; model between OpenAI&amp;rsquo;s control plane and the agent execution nodes running within internal infrastructure.&lt;/p&gt;&#10;&lt;p&gt;The &lt;code&gt;codex exec-server&lt;/code&gt; daemon deployed inside internal infrastructure establishes an outbound WebSocket connection (HTTPS/WSS) to OpenAI&amp;rsquo;s servers without opening any external inbound ports. This makes it possible to securely receive tasks and return execution results without modifying firewall inbound rules.&lt;/p&gt;&#10;&lt;pre tabindex="0"&gt;&lt;code&gt;┌────────────────────────────────────────────────────────────────────────┐&#10;│ OpenAI Control Plane (Cloud) │&#10;│ - Session Orchestration │&#10;│ - Context Window Compaction │&#10;└──────────────────────────────────┬─────────────────────────────────────┘&#10; ▲&#10; │ Outbound WSS (Port 443)&#10; │ (wss://codex-cloud-environments.chatgpt.com)&#10;┌──────────────────────────────────┴─────────────────────────────────────┐&#10;│ Customer Private VPC / On-Premise │&#10;│ ┌──────────────────────────────────────────────────────────────────┐ │&#10;│ │ codex exec-server Daemon │ │&#10;│ │ - Runs under restricted &amp;#39;codex-runner&amp;#39; user │ │&#10;│ │ - Executes local shell, python, and filesystem mutations │ │&#10;│ │ - Isolated from Master Application API Keys │ │&#10;│ └──────────────────────────────────────────────────────────────────┘ │&#10;└────────────────────────────────────────────────────────────────────────┘&#10;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id="credential-isolation-design"&gt;Credential Isolation Design&#10;&lt;/h3&gt;&lt;p&gt;To ensure security, API key permissions are strictly isolated.&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;b&gt;Master Application Key:&lt;/b&gt; Retained by the application server to perform session creation and lifecycle management (requires &lt;code&gt;api.agents.read&lt;/code&gt;, &lt;code&gt;api.agents.write&lt;/code&gt;, and &lt;code&gt;api.responses.write&lt;/code&gt; scopes). This key is never exposed inside the execution environment.&lt;/li&gt;&#10;&lt;li&gt;&lt;b&gt;Environment Scope Key (CODEX_API_KEY):&lt;/b&gt; An extremely restricted key used solely by &lt;code&gt;codex exec-server&lt;/code&gt; to communicate with OpenAI&amp;rsquo;s control plane. This key is not granted permissions for agent operations or model inference execution.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;hr&gt;&#10;&lt;h2 id="2-codex-exec-server-deployment-procedures"&gt;2. &lt;code&gt;codex exec-server&lt;/code&gt; Deployment Procedures&#10;&lt;/h2&gt;&lt;p&gt;Construct the execution daemon as a system service on a self-managed Linux server (assuming an Ubuntu 24.04 LTS environment).&lt;/p&gt;&#10;&lt;h3 id="step-1-installing-dependency-packages-and-creating-a-dedicated-user"&gt;Step 1: Installing Dependency Packages and Creating a Dedicated User&#10;&lt;/h3&gt;&lt;p&gt;For security reasons, the daemon must run under a dedicated user other than root.&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# Set up Node.js LTS environment&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo apt-get install -y nodejs&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# Create codex-runner user&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo useradd -m -s /bin/bash codex-runner&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# Install codex daemon as a global package&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo npm install -g @openai/codex@alpha&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="step-2-creating-the-systemd-service-definition"&gt;Step 2: Creating the systemd Service Definition&#10;&lt;/h3&gt;&lt;p&gt;To ensure process persistence and automatic restart upon abnormal termination, create &lt;code&gt;/etc/systemd/system/codex-exec-server.service&lt;/code&gt; as follows.&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-ini" data-lang="ini"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;[Unit]&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a6e22e"&gt;Description&lt;/span&gt;&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;Codex Execution Server Daemon&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a6e22e"&gt;After&lt;/span&gt;&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;network.target&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;[Service]&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a6e22e"&gt;Type&lt;/span&gt;&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;simple&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a6e22e"&gt;User&lt;/span&gt;&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;codex-runner&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a6e22e"&gt;Group&lt;/span&gt;&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;codex-runner&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a6e22e"&gt;WorkingDirectory&lt;/span&gt;&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;/home/codex-runner&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a6e22e"&gt;Environment&lt;/span&gt;&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;NODE_ENV=production&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a6e22e"&gt;Environment&lt;/span&gt;&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;CODEX_API_KEY=sk-proj-env-restricted-token-here&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a6e22e"&gt;ExecStart&lt;/span&gt;&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;/usr/bin/codex exec-server \&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#e6db74"&gt; --remote &amp;#34;https://api.openai.com/v1&amp;#34; \&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#e6db74"&gt; --environment-id &amp;#34;env_your_registered_environment_id&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a6e22e"&gt;Restart&lt;/span&gt;&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;always&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a6e22e"&gt;RestartSec&lt;/span&gt;&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;5&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a6e22e"&gt;LimitNOFILE&lt;/span&gt;&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;65536&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;[Install]&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a6e22e"&gt;WantedBy&lt;/span&gt;&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;multi-user.target&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a6e22e"&gt;```bash&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a6e22e"&gt;bash&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# Enabling and starting the service&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a6e22e"&gt;sudo systemctl daemon-reload&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a6e22e"&gt;sudo systemctl enable codex-exec-server&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a6e22e"&gt;sudo systemctl start codex-exec-server&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;&#10;&lt;h2 id="3-python-sdkによるセッション初期化の実装"&gt;3. Python SDKによるセッション初期化の実装&#10;&lt;/h2&gt;&lt;p&gt;セルフホスト環境が起動したら、アプリケーション側からその環境を指定してセッションを開始します。以下は、ストリーミングモードでタスクを実行するPythonの実装例です。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;python&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;import&lt;/span&gt; os&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;from&lt;/span&gt; openai &lt;span style="color:#f92672"&gt;import&lt;/span&gt; OpenAI&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# Load master application key from environment variable&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;api_key &lt;span style="color:#f92672"&gt;=&lt;/span&gt; os&lt;span style="color:#f92672"&gt;.&lt;/span&gt;getenv(&lt;span style="color:#e6db74"&gt;&amp;#34;OPENAI_API_KEY&amp;#34;&lt;/span&gt;)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;with&lt;/span&gt; OpenAI(api_key&lt;span style="color:#f92672"&gt;=&lt;/span&gt;api_key) &lt;span style="color:#66d9ef"&gt;as&lt;/span&gt; client:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#75715e"&gt;# Initialize session specifying the self-hosted environment ID&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;with&lt;/span&gt; client&lt;span style="color:#f92672"&gt;.&lt;/span&gt;beta&lt;span style="color:#f92672"&gt;.&lt;/span&gt;agents&lt;span style="color:#f92672"&gt;.&lt;/span&gt;sessions&lt;span style="color:#f92672"&gt;.&lt;/span&gt;create(&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; agent&lt;span style="color:#f92672"&gt;=&lt;/span&gt;{&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;model&amp;#34;&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#34;gpt-6-astra&amp;#34;&lt;/span&gt;,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;instructions&amp;#34;&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#34;Write clean Python code, execute it locally, and return the output.&amp;#34;&lt;/span&gt;,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; },&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; environment&lt;span style="color:#f92672"&gt;=&lt;/span&gt;{&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;type&amp;#34;&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#34;self_hosted&amp;#34;&lt;/span&gt;,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;id&amp;#34;&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#34;env_your_registered_environment_id&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; },&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; input&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;Generate a report of the local system disk usage and list the top 3 directories.&amp;#34;&lt;/span&gt;,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; stream&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#66d9ef"&gt;True&lt;/span&gt;,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ) &lt;span style="color:#66d9ef"&gt;as&lt;/span&gt; events:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;for&lt;/span&gt; event &lt;span style="color:#f92672"&gt;in&lt;/span&gt; events:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#75715e"&gt;# Process event stream in real time&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; event_data &lt;span style="color:#f92672"&gt;=&lt;/span&gt; event&lt;span style="color:#f92672"&gt;.&lt;/span&gt;to_json(indent&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;2&lt;/span&gt;)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; print(event_data, flush&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#66d9ef"&gt;True&lt;/span&gt;)&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;&#10;&lt;h2 id="4-ライフサイクルダイナミクスとトラフィック制御"&gt;4. ライフサイクルダイナミクスとトラフィック制御&#10;&lt;/h2&gt;&lt;p&gt;セルフホスト環境におけるエージェントセッションのライフサイクル管理は、コンテナのローリングアップデートやスケーリング時に特有の課題をもたらします。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;b&gt;セッションの固定性（Session Affinity）:&lt;/b&gt; エージェントのセッションは特定の実行環境ID（&lt;code&gt;environment_id&lt;/code&gt;）に関連付けられます。実行ノードのメンテナンスやコンテナの入れ替え（Replacement）を行う際、稼働中のセッションが存在する場合にノードを即座に破棄すると、実行中のタスクが異常終了します。&lt;/li&gt;&#10;&lt;li&gt;&lt;b&gt;無停止スケーリング（Zero-Downtime Scaling）:&lt;/b&gt; 新しいバージョンの実行イメージをデプロイする際は、古いノードへの新規セッション割り当てを停止（Drain）し、既存のセッションが完了するかタイムアウト（デフォルトで1時間の無操作による自動クリーンアップ）に達した後に、古いノードを安全にシャットダウンするローリングアップデート戦略を採用する必要があります。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;hr&gt;&#10;&lt;h2 id="5-troubleshooting"&gt;5. Troubleshooting&#10;&lt;/h2&gt;&lt;p&gt;セルフホスト環境の構築および運用時に直面しやすい代表的な障害要因と、その解決策を以下に示します。&lt;/p&gt;&#10;&lt;h3 id="1-websocket接続の切断と再確立handshake-failures"&gt;1. WebSocket接続の切断と再確立（Handshake Failures）&#10;&lt;/h3&gt;&lt;ul&gt;&#10;&lt;li&gt;&lt;b&gt;事象:&lt;/b&gt; &lt;code&gt;codex exec-server&lt;/code&gt;のログに &lt;code&gt;Connection closed transitionally (code: 1006)&lt;/code&gt; が頻発する。&lt;/li&gt;&#10;&lt;li&gt;&lt;b&gt;原因:&lt;/b&gt; 社内プロキシや次世代ファイアウォール（NGFW）によるSSL/TLSインスペクションが有効な場合、&lt;code&gt;wss://codex-cloud-environments.chatgpt.com&lt;/code&gt;へのWebSocketハンドシェイクが拒否されることがあります。&lt;/li&gt;&#10;&lt;li&gt;&lt;b&gt;対策:&lt;/b&gt; プロキシサーバー側で、上記ドメインに対するSSL復号化のバイパス設定（SSL Decryption Bypass）を適用してください。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h3 id="2-セットアップコマンドの異常終了setup-command-failures"&gt;2. セットアップコマンドの異常終了（Setup Command Failures）&#10;&lt;/h3&gt;&lt;ul&gt;&#10;&lt;li&gt;&lt;b&gt;事象:&lt;/b&gt; セッション作成時に &lt;code&gt;environment.failed&lt;/code&gt; イベントが発生し、タスクが実行されない。&lt;/li&gt;&#10;&lt;li&gt;&lt;b&gt;原因:&lt;/b&gt; 環境テンプレートで定義された &lt;code&gt;setup_commands&lt;/code&gt; が非ゼロの終了コード（$? != 0）を返すと、環境のプロビジョニングフェーズで即座にエラーとなり、セッションが停止します。&lt;/li&gt;&#10;&lt;li&gt;&lt;b&gt;対策:&lt;/b&gt; 各コマンドの末尾に適切なエラーハンドリングを施すか、冪等性を担保したスクリプト構成に修正してください（例: &lt;code&gt;mkdir -p&lt;/code&gt; の使用、パッケージインストールの &lt;code&gt;-y&lt;/code&gt; フラグ付与）。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h3 id="3-権限分離の不備による特権昇格リスク"&gt;3. 権限分離の不備による特権昇格リスク&#10;&lt;/h3&gt;&lt;ul&gt;&#10;&lt;li&gt;&lt;b&gt;事象:&lt;/b&gt; エージェントがホストOS上のシステムファイルを改ざん、または不要なパッケージをシステム全体にインストールしてしまう。&lt;/li&gt;&#10;&lt;li&gt;&lt;b&gt;原因:&lt;/b&gt; &lt;code&gt;codex exec-server&lt;/code&gt;を &lt;code&gt;root&lt;/code&gt; ユーザーで起動している、または &lt;code&gt;sudo&lt;/code&gt; 権限が制限なしで付与されている。&lt;/li&gt;&#10;&lt;li&gt;&lt;b&gt;対策:&lt;/b&gt; 必ず前述の &lt;code&gt;codex-runner&lt;/code&gt; のような非特権ユーザーを作成し、実行ディレクトリ（&lt;code&gt;/workspace&lt;/code&gt;に相当するローカルパス）以外の書き込み権限を剥奪してください。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;hr&gt;&#10;&lt;h2 id="6-operational-verification"&gt;6. Operational Verification&#10;&lt;/h2&gt;&lt;p&gt;デプロイ完了後、実行ノードの健全性を確認するための検証コマンドと期待される出力プロトコルログです。&lt;/p&gt;&#10;&lt;h3 id="サービス稼働状態の確認"&gt;サービス稼働状態の確認&#10;&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;console&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$ systemctl status codex-exec-server&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;● codex-exec-server.service - Codex Execution Server Daemon&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Loaded: loaded (/etc/systemd/system/codex-exec-server.service; enabled; preset: enabled)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Active: active (running) since Mon 2026-10-05 10:00:00 UTC; 15min ago&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Main PID: 12345 (node)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Tasks: 11 (limit: 4915)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Memory: 45.2M&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;CPU: 120ms&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;CGroup: /system.slice/codex-exec-server.service&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;└─12345 /usr/bin/node /usr/bin/codex exec-server --remote https://api.openai.com/v1 --environment-id env_your_registered_environment_id&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Oct 05 10:00:00 node-01 codex[12345]: [info] Initializing Codex Execution Server...&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Oct 05 10:00:01 node-01 codex[12345]: [info] Connecting to remote control plane: wss://codex-cloud-environments.chatgpt.com&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Oct 05 10:00:02 node-01 codex[12345]: [info] WebSocket connection established successfully. Listening for tasks...&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="ネットワーク接続状態の確認"&gt;ネットワーク接続状態の確認&#10;&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;console&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$ ss -tulpn | grep node&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;# Confirm no inbound listening ports exist (Operates on outbound-only, so empty output is normal)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$ ss -tapn | grep -E &amp;#34;(openai|chatgpt)&amp;#34;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;ESTAB 0 0 192.168.1.50:54321 104.18.2.10:443 users:((&amp;#34;node&amp;#34;,pid=12345,fd=19))&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;# Confirm ESTABLISHED connection exists to OpenAI control plane (port 443)&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="コントロールプレーンへの疎通確認"&gt;コントロールプレーンへの疎通確認&#10;&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;http&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$ curl -I -H &amp;#34;OpenAI-Beta: agents=v1&amp;#34; https://api.openai.com/v1/agents/environments&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;HTTP/2 200&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;server: cloudflare&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;date: Mon, 05 Oct 2026 10:05:00 GMT&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;content-type: application/json; charset=utf-8&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;&#10;&lt;h2 id="7-operational-notes"&gt;7. Operational Notes&#10;&lt;/h2&gt;&lt;p&gt;セルフホスト型実行環境を本番運用に投入するにあたり、以下の運用ポリシーを策定することを推奨します。&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;&lt;b&gt;リソース制限（cgroups）の適用:&lt;/b&gt; エージェントによる無限ループやメモリリークからホストOSを保護するため、systemdサービス定義内で &lt;code&gt;CPUQuota=50%&lt;/code&gt; や &lt;code&gt;MemoryLimit=2G&lt;/code&gt; などのリソース制限を明示的に設定してください。&lt;/li&gt;&#10;&lt;li&gt;&lt;b&gt;データ保存期間の管理:&lt;/b&gt; セルフホスト環境であっても、コントロールプレーンを通過するセッションの会話履歴や実行ログはOpenAI側に一時的に保持されます。現時点でZero Data Retention（ZDR）はサポートされていないため、個人情報（PII）や極秘データの取り扱いには十分な注意が必要です。&lt;/li&gt;&#10;&lt;li&gt;&lt;b&gt;定期的なデーモンの更新:&lt;/b&gt; &lt;code&gt;codex exec-server&lt;/code&gt; はパブリックベータ期間中、頻繁にアップデートが提供されます。パッケージの脆弱性対応およびプロトコル仕様変更に追従するため、週次のメンテナンスウィンドウで &lt;code&gt;@openai/codex&lt;/code&gt; のバージョン更新を確認するパイプラインを構築してください。&lt;/li&gt;&#10;&lt;/ol&gt;&#10;</description></item></channel></rss>