mirror of
https://github.com/okxlin/appstore.git
synced 2026-09-22 08:00:59 +00:00
Merge pull request #4208 from okxlin/pr/codex-claude-workstation
add: codex-claude-workstation (Codex + Claude AI workstation)
This commit is contained in:
@@ -0,0 +1,113 @@
|
||||
# Codex Claude Workstation
|
||||
|
||||
## 产品介绍
|
||||
|
||||
浏览器可访问的 Codex AI 编程工作站,集成 code-server (VS Code) 和丰富的开发工具链。
|
||||
|
||||
## 主要功能
|
||||
|
||||
- **code-server (VS Code)** — 浏览器内完整 VS Code 体验
|
||||
- **Codex CLI** — OpenAI Codex AI 编程助手
|
||||
- **Claude Code** — Anthropic Claude Code CLI
|
||||
- **开发工具链** — Go, Rust, Bun, Docker CLI, yq, gh, shellcheck 等 30+ 工具
|
||||
- **代理支持** — 通过 supervisord 按需启用 Clash.Meta/sing-box/Xray
|
||||
|
||||
## Introduction
|
||||
|
||||
Browser-accessible Codex AI development workstation with code-server (VS Code) and rich dev toolchain.
|
||||
|
||||
## Features
|
||||
|
||||
- **code-server (VS Code)** — Full VS Code experience in browser
|
||||
- **Codex CLI** — OpenAI Codex AI coding assistant
|
||||
- **Claude Code** — Anthropic Claude Code CLI
|
||||
- **Dev Toolchain** — Go, Rust, Bun, Docker CLI, yq, gh, shellcheck, 30+ tools
|
||||
- **Proxy Support** — On-demand Clash.Meta/sing-box/Xray via supervisord
|
||||
|
||||
## 安装说明
|
||||
|
||||
镜像由 `codex-claude-workstation-builder` 预先编译,发布在:
|
||||
|
||||
```
|
||||
ghcr.io/okxlin/codex-claude-workstation:latest
|
||||
```
|
||||
|
||||
1Panel 安装时自动拉取,无需手动构建。
|
||||
|
||||
## 参数填写指南
|
||||
|
||||
### 必填参数
|
||||
|
||||
**`PANEL_APP_PORT_HTTP`** — Web 访问端口
|
||||
- code-server 对外暴露的访问端口
|
||||
- 默认 `8080`,可改为任意未占用端口
|
||||
- 安装后通过 `http://你的IP:此端口` 访问
|
||||
|
||||
**`CODE_SERVER_PASSWORD`** — code-server 密码
|
||||
- 登录 code-server 时使用的密码
|
||||
- 默认 `change-me`,请务必修改
|
||||
|
||||
**`ROOT_PASSWORD`** — Root 用户密码
|
||||
- 容器 root 用户的密码(可通过 `su - root` 切换登录)
|
||||
- 默认 `codex2024`,建议修改为更强的密码
|
||||
|
||||
**`APP_DATA_DIR`** — 数据目录
|
||||
- 工作区文件存放的宿主机目录
|
||||
- 默认 `./data`,建议填写绝对路径如 `/data/codex-workstation
|
||||
|
||||
### 可选参数
|
||||
|
||||
**`DOCKER_SOCK_SRC`** — Docker 套接字路径
|
||||
- 挂载宿主机 Docker Socket 到容器内 `/var/run/docker.sock`
|
||||
- 默认 `/var/run/docker.sock`,留空则禁用 Docker CLI
|
||||
- 必须先通过 ROOT_PASSWORD 切换至 root 才可使用 Docker CLI
|
||||
|
||||
**`TZ`** — 时区
|
||||
- 默认 `Asia/Shanghai`
|
||||
- 可选,留空使用系统默认
|
||||
|
||||
### 不在安装表单中的参数
|
||||
|
||||
**`PROXY_ENABLED`** — 代理 (手动启用)
|
||||
- 默认不启动;内置 clash-meta / sing-box / xray 二进制
|
||||
- 通过 `supervisorctl start clash-meta|sing-box|xray` 按需启用
|
||||
- 代理配置文件放入 `/home/dev/proxy/`(持久化),如 `clash-meta.yaml` / `sing-box.json` / `xray.json`
|
||||
|
||||
## 访问说明
|
||||
|
||||
安装完成后通过分配的端口访问:
|
||||
|
||||
- `http://IP:端口` — code-server (VS Code),集成终端在 VS Code 内使用
|
||||
|
||||
## 首次登录
|
||||
|
||||
安装完成后进入容器执行 Codex 登录:
|
||||
|
||||
```bash
|
||||
docker exec -it ${CONTAINER_NAME} bash
|
||||
codex login --device-auth
|
||||
```
|
||||
|
||||
## 认证说明
|
||||
|
||||
code-server 密码认证(单层):
|
||||
|
||||
1. **code-server 密码** — VS Code 登录时使用的密码
|
||||
|
||||
## 数据持久化
|
||||
|
||||
| 数据 | 路径 | 持久化方式 |
|
||||
|------|------|-----------|
|
||||
| 工作区 | `/workspace` | 绑定挂载到数据目录 |
|
||||
| Codex 配置 | `/home/dev/.codex` | Named volume `codex-home` |
|
||||
| 代理配置 | `/home/dev/proxy/` | Named volume `codex-home` |
|
||||
| code-server 配置 | `/home/dev/.config/code-server/` | Named volume `codex-home` |
|
||||
| 本地二进制 | `/home/dev/.local/bin/` | Named volume `codex-home` |
|
||||
|
||||
## 注意事项
|
||||
|
||||
- 不支持 Chat Completions-only API(必须支持 OpenAI Responses API)
|
||||
- 首次安装后需在 code-server 终端执行 `codex login` 认证
|
||||
- 不默认启动 Codex App Server
|
||||
- 容器以 `dev` 用户运行(非 root),可通过 ROOT_PASSWORD 切换至 root
|
||||
- 代理默认不启动,按需通过 `supervisorctl start clash-meta|sing-box|xray` 启用
|
||||
@@ -0,0 +1,29 @@
|
||||
name: Codex Claude Workstation
|
||||
tags:
|
||||
- Tool
|
||||
title: Codex Claude Workstation
|
||||
description: 浏览器可访问的 Codex + Claude AI 编程工作站
|
||||
additionalProperties:
|
||||
key: codex-claude-workstation
|
||||
name: Codex Claude Workstation
|
||||
tags:
|
||||
- Tool
|
||||
type: tool
|
||||
website: https://github.com/openai/codex
|
||||
document: https://github.com/openai/codex
|
||||
architectures:
|
||||
- amd64
|
||||
github: https://github.com/okxlin/release-factory
|
||||
shortDescZh: 浏览器可访问的 Codex + Claude AI 编程工作站
|
||||
shortDescEn: Browser-accessible Codex + Claude AI workstation
|
||||
description:
|
||||
en: Browser-accessible Codex + Claude AI workstation with code-server (VS Code)
|
||||
zh: 浏览器可访问的 Codex + Claude AI 编程工作站,集成 code-server (VS Code)
|
||||
zh-Hant: 瀏覽器可訪問的 Codex + Claude AI 編程工作站,集成 code-server (VS Code)
|
||||
ja: ブラウザからアクセス可能な Codex + Claude AI 開発ワークステーション
|
||||
ko: 브라우저에서 접근 가능한 Codex + Claude AI 개발 워크스테이션
|
||||
ru: Доступная через браузер рабочая станция Codex + Claude AI
|
||||
ms: Stesen kerja pembangunan Codex + Claude AI yang boleh diakses melalui pelayar
|
||||
pt-br: Estação de trabalho Codex + Claude AI acessível pelo navegador
|
||||
crossVersionUpdate: false
|
||||
limit: 1
|
||||
@@ -0,0 +1,8 @@
|
||||
# codex-claude-workstation 1Panel environment variables
|
||||
PANEL_APP_PORT_HTTP=8080
|
||||
CODE_SERVER_PASSWORD=change-me
|
||||
ROOT_PASSWORD=codex2024
|
||||
DOCKER_SOCK_SRC=/var/run/docker.sock
|
||||
APP_DATA_DIR=./data
|
||||
CONTAINER_NAME=codex-claude-workstation
|
||||
TZ=Asia/Shanghai
|
||||
@@ -0,0 +1,101 @@
|
||||
additionalProperties:
|
||||
formFields:
|
||||
- envKey: PANEL_APP_PORT_HTTP
|
||||
type: number
|
||||
required: true
|
||||
default: 8080
|
||||
rule: paramPort
|
||||
labelZh: Web 访问端口
|
||||
labelEn: Web Port
|
||||
label:
|
||||
en: Web Port
|
||||
zh: Web 访问端口
|
||||
zh-Hant: Web 訪問端口
|
||||
ja: Web ポート
|
||||
ko: 웹 포트
|
||||
ru: Веб-порт
|
||||
ms: Port Web
|
||||
pt-br: Porta Web
|
||||
edit: true
|
||||
- envKey: CODE_SERVER_PASSWORD
|
||||
type: password
|
||||
required: true
|
||||
random: true
|
||||
default: change-me
|
||||
labelZh: code-server 密码
|
||||
labelEn: Code-server Password
|
||||
label:
|
||||
en: Code-server Password
|
||||
zh: code-server 密码
|
||||
zh-Hant: code-server 密碼
|
||||
ja: code-server パスワード
|
||||
ko: code-server 비밀번호
|
||||
ru: Пароль code-server
|
||||
ms: Kata Laluan code-server
|
||||
pt-br: Senha do code-server
|
||||
edit: true
|
||||
- envKey: ROOT_PASSWORD
|
||||
type: password
|
||||
required: false
|
||||
random: true
|
||||
default: codex2024
|
||||
labelZh: Root 密码
|
||||
labelEn: Root Password
|
||||
label:
|
||||
en: Root Password
|
||||
zh: Root 密码
|
||||
zh-Hant: Root 密碼
|
||||
ja: Root パスワード
|
||||
ko: Root 비밀번호
|
||||
ru: Пароль Root
|
||||
ms: Kata Laluan Root
|
||||
pt-br: Senha do Root
|
||||
edit: true
|
||||
- default: /var/run/docker.sock
|
||||
edit: true
|
||||
envKey: DOCKER_SOCK_SRC
|
||||
type: text
|
||||
required: false
|
||||
labelEn: Docker Socket Path (leave empty to disable)
|
||||
labelZh: Docker 套接字路径(留空禁用)
|
||||
label:
|
||||
en: Docker Socket Path (leave empty to disable)
|
||||
zh: Docker 套接字路径(留空禁用)
|
||||
zh-Hant: Docker 套接字路徑(留空禁用)
|
||||
ja: Docker ソケットパス(空欄で無効)
|
||||
ko: Docker 소켓 경로 (비우면 비활성화)
|
||||
ru: Путь к Docker-сокету (оставьте пустым для отключения)
|
||||
ms: Laluan soket Docker (kosongkan untuk lumpuhkan)
|
||||
pt-br: Caminho do socket Docker (deixe em branco para desabilitar)
|
||||
- envKey: APP_DATA_DIR
|
||||
type: text
|
||||
required: true
|
||||
default: ./data
|
||||
labelZh: 数据目录
|
||||
labelEn: Data Directory
|
||||
label:
|
||||
en: Data Directory
|
||||
zh: 数据目录
|
||||
zh-Hant: 數據目錄
|
||||
ja: データディレクトリ
|
||||
ko: 데이터 디렉토리
|
||||
ru: Каталог данных
|
||||
ms: Direktori Data
|
||||
pt-br: Diretório de Dados
|
||||
edit: true
|
||||
- envKey: TZ
|
||||
type: text
|
||||
required: false
|
||||
default: Asia/Shanghai
|
||||
labelZh: 时区
|
||||
labelEn: Timezone
|
||||
label:
|
||||
en: Timezone
|
||||
zh: 时区
|
||||
zh-Hant: 時區
|
||||
ja: タイムゾーン
|
||||
ko: 시간대
|
||||
ru: Часовой пояс
|
||||
ms: Zon Waktu
|
||||
pt-br: Fuso Horário
|
||||
edit: true
|
||||
@@ -0,0 +1,34 @@
|
||||
services:
|
||||
workstation:
|
||||
image: "ghcr.io/okxlin/codex-claude-workstation:latest"
|
||||
container_name: ${CONTAINER_NAME}
|
||||
hostname: workstation
|
||||
restart: always
|
||||
labels:
|
||||
createdBy: "Apps"
|
||||
environment:
|
||||
- TZ=${TZ:-Asia/Shanghai}
|
||||
- PASSWORD=${CODE_SERVER_PASSWORD:-change-me}
|
||||
- ROOT_PASSWORD=${ROOT_PASSWORD:-codex2024}
|
||||
volumes:
|
||||
- ${APP_DATA_DIR:-./data}/workspace:/workspace
|
||||
- codex-home:/home/dev
|
||||
- ${DOCKER_SOCK_SRC:-/var/run/docker.sock}:/var/run/docker.sock
|
||||
ports:
|
||||
- ${PANEL_APP_PORT_HTTP}:8080
|
||||
healthcheck:
|
||||
test: ["CMD", "/usr/local/bin/healthcheck.sh"]
|
||||
interval: 30s
|
||||
timeout: 5s
|
||||
retries: 3
|
||||
start_period: 15s
|
||||
networks:
|
||||
- 1panel-network
|
||||
|
||||
volumes:
|
||||
codex-home:
|
||||
name: codex-home
|
||||
|
||||
networks:
|
||||
1panel-network:
|
||||
external: true
|
||||
+22
@@ -0,0 +1,22 @@
|
||||
#!/bin/bash
|
||||
# init.sh — codex-claude-workstation 1Panel 初始化脚本
|
||||
set -eo pipefail
|
||||
|
||||
echo "Codex Claude Workstation installed successfully."
|
||||
echo ""
|
||||
echo "Access:"
|
||||
echo " http://<server-ip>:${PANEL_APP_PORT_HTTP}"
|
||||
echo " Login: code-server password"
|
||||
echo " Switch to root: su - root (password: ${ROOT_PASSWORD:-codex2024})"
|
||||
echo ""
|
||||
echo "AI Tools (run in code-server terminal):"
|
||||
echo " codex --help OpenAI Codex CLI"
|
||||
echo " claude --help Anthropic Claude Code"
|
||||
echo ""
|
||||
echo "Docker CLI (if DOCKER_SOCK_SRC set):"
|
||||
echo " su - root"
|
||||
echo " docker ps"
|
||||
echo ""
|
||||
echo "Proxy (manual enable):"
|
||||
echo " supervisorctl start clash-meta # or sing-box, xray"
|
||||
echo " Configs: ~/proxy/"
|
||||
@@ -0,0 +1,3 @@
|
||||
#!/bin/bash
|
||||
# uninstall.sh — codex-claude-workstation cleanup
|
||||
docker-compose down --volumes
|
||||
@@ -0,0 +1,4 @@
|
||||
#!/bin/bash
|
||||
# upgrade.sh — codex-claude-workstation upgrade placeholder
|
||||
set -eo pipefail
|
||||
echo "Upgrade placeholder: docker compose pull && docker compose up -d"
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 4.7 KiB |
Reference in New Issue
Block a user