CodeRunner
✍️CodeRunner 是一个安全的云端Python代码执行平台,允许用户上传、管理和远程执行Python代码片段。
Install / Use
/learn @qfpqhyl/CodeRunnerREADME
CodeRunner - 远程Python代码执行平台
CodeRunner是一个基于FastAPI(后端)和React + Ant Design(前端)构建的远程Python代码执行平台。它提供了用户认证、多层级用户权限、AI代码生成、安全的Python代码执行、代码库管理、API密钥管理、环境管理、社区互动功能以及全面的系统日志记录。
🖼️ 应用预览
在线演示
- 演示地址: https://code.qfpqhyl.cloudns.org/
- 默认账号: admin / admin123 (请在登录后修改密码)
应用界面截图

界面特色功能:
- 🎨 现代化中文界面,基于Ant Design设计语言
- 💻 实时代码编辑器,支持语法高亮和自动补全
- 📊 用户仪表板,显示执行统计和配额使用情况
- 🤖 AI代码生成助手,支持多种AI模型
- 📚 个人代码库管理,支持标签和分类
- 🔧 环境管理,支持多conda环境隔离
- 📈 系统管理面板,全面的用户和日志管理
- 🧑🤝🧑 社区互动:帖子、评论、点赞、收藏、关注
✨ 主要特性
🔐 用户系统
- JWT令牌认证,30分钟过期
- Argon2密码哈希加密
- 管理员/用户角色分离
- 多层级用户权限系统
👥 用户等级系统
- Level 1 (免费): 10次/日执行,20次/日API调用,30s超时,128MB内存,5个保存代码,2个API密钥
- Level 2 (基础): 50次/日执行,100次/日API调用,60s超时,256MB内存,20个保存代码,5个API密钥
- Level 3 (高级): 200次/日执行,500次/日API调用,120s超时,512MB内存,100个保存代码,10个API密钥
- Level 4 (企业): 无限执行,无限API调用,300s超时,1024MB内存,无限保存代码和API密钥
🚀 代码执行
- 安全的临时文件执行,自动清理
- 基于用户级别的超时和资源限制
- 每日执行配额和API调用配额
- 执行历史记录和内存使用跟踪
- 所有操作的系统日志记录,包含IP跟踪
🤖 AI集成
- 多AI提供商支持(Qwen、OpenAI、Claude、自定义OpenAI兼容API)
- 用户可配置的AI模型和API密钥管理
- 可自定义参数的代码生成(temperature、max_tokens)
- 活跃AI配置管理
📚 代码库
- 个人代码片段存储和标签管理
- 公开/私有代码分享
- API访问保存的代码以供外部执行
- 搜索和组织功能
🔧 系统管理
- 全面的系统日志过滤
- 管理员用户管理
- 执行监控和统计
- API密钥使用跟踪
🛠️ 技术栈
后端技术
- FastAPI - 高性能异步Web框架
- SQLAlchemy - 强大的Python ORM
- SQLite - 轻量级关系型数据库
- JWT - 无状态用户认证
- Pydantic - 数据验证和序列化
- OpenAI SDK - AI模型集成
前端技术
- React 18 - 现代化前端框架
- Ant Design 5 - 企业级UI组件库
- React Router - 单页应用路由管理
- Axios - HTTP请求客户端
AI集成
- 通义千问 - 阿里云大语言模型
- OpenAI - GPT系列模型支持
- Claude - Anthropic AI模型
- 自定义配置 - 支持任意OpenAI兼容的API
📁 项目结构
CodeRunner/
├── backend/ # FastAPI 后端服务
│ ├── main.py # 应用入口(聚合路由)
│ ├── models/ # 数据层与Pydantic模型
│ │ ├── database.py # SQLAlchemy ORM 模型与DB初始化
│ │ ├── models.py # Pydantic 数据模型
│ │ └── user_levels.py # 用户等级配置
│ ├── routers/ # 模块化路由
│ │ ├── auth.py # 认证
│ │ ├── users.py # 管理员用户管理
│ │ ├── execution.py # 代码执行
│ │ ├── code_library.py # 代码库
│ │ ├── api_keys.py # API 密钥
│ │ ├── external_api.py # 对外 API(API Key)
│ │ ├── environments.py # 环境/包管理
│ │ ├── ai.py # AI 配置与代码生成
│ │ ├── admin.py # 管理与数据库备份
│ │ ├── profile.py # 用户资料与统计
│ │ ├── community.py # 帖子/评论/关注等社区功能
│ │ └── misc.py # 根与杂项端点
│ ├── services/
│ │ └── auth.py # 认证服务(JWT、密码哈希等)
│ ├── utils/
│ │ └── utils.py # 系统日志与请求信息
│ ├── Dockerfile
│ └── requirements.txt # Python 依赖
├── frontend/ # React 前端应用
│ ├── public/ # 静态资源
│ ├── src/
│ │ ├── components/ # 可复用组件(含部署教程与后端配置面板)
│ │ ├── pages/ # 主要页面(代码库、环境、社区、配置等)
│ │ ├── services/api.js # Axios 封装与后端地址管理
│ │ └── App.js # 应用主组件
│ ├── Dockerfile
│ ├── nginx.conf
│ └── package.json # Node.js 依赖与脚本
├── docker-compose.yml # 本地一键编排(前后端)
├── README.md # 项目文档
└── .gitignore # Git 忽略文件
🚀 快速部署
🌐 在线演示
- 演示地址: https://code.qfpqhyl.cloudns.org/
- 体验账号: admin / admin123 (请在登录后修改密码)
📋 快速部署选项
选项A:Docker Compose 本地一键启动(推荐)
git clone <your-repo-url>
cd CodeRunner
docker compose up -d --build
- 后端 API:
http://localhost:8000 - 前端应用:
http://localhost:3000
提示:当前后端代码默认不从环境变量读取数据库与密钥配置,见下文“环境变量与后端配置”。
选项B:HTTPS 隧道配置(公网访问)
使用 Cloudflare Tunnel 为后端服务创建公网 HTTPS 访问地址:
# 第一步:安装 cloudflared
mkdir -p ~/cf && cd ~/cf && \
wget -qO cloudflared.deb https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64.deb && \
sudo dpkg -i cloudflared.deb && rm cloudflared.deb
# 第二步:启动隧道并获取公网地址
cd ~/cf && \
nohup cloudflared tunnel --url http://localhost:8000 > tunnel.log 2>&1 && \
sleep 8 && \
grep -oP 'https://[^\s]+\.trycloudflare\.com' tunnel.log || tail -20 tunnel.log
🌐 访问配置
部署完成后,您可以:
- 本地访问:http://localhost:8000
- 公网访问:使用上述命令生成的 HTTPS 地址
- API 文档:http://localhost:8000/docs 或 https://your-tunnel.com/docs
📝 前端配置
- 默认后端地址为
http://localhost:8000,可在登录页右侧“后端服务配置”面板中设置并测试,也可通过localStorage的backendUrl动态切换。 - 如需修改默认值,可编辑
frontend/src/services/api.js中的getBackendUrl()返回值。 - 开发模式:
cd frontend
npm install
npm start # http://localhost:3000
- 生产构建:
cd frontend
npm install
npm run build
📊 基础运维
# 查看服务状态
docker ps
# 查看后端日志
docker logs coderunner_backend -f
# 查看隧道状态
ps aux | grep cloudflared
# 备份数据库
docker exec coderunner_backend cp /app/data/coderunner.db /app/data/backup_$(date +%Y%m%d_%H%M%S).db
🚀 本地开发
💻 开发环境搭建
后端开发
cd backend
python -m venv venv
source venv/bin/activate # Linux/Mac
# venv\Scripts\activate # Windows
pip install -r requirements.txt
python main.py # 启动后端服务 http://localhost:8000
前端开发
cd frontend
npm install
npm start # 启动前端服务 http://localhost:3000
🔑 默认账号
- 用户名: admin
- 密码: admin123
⚠️ 重要: 首次登录后请立即修改默认密码
🌐 本地访问地址
- 前端应用: http://localhost:3000
- 后端API: http://localhost:8000
- API文档: http://localhost:8000/docs
- API文档(备用): http://localhost:8000/redoc
📋 系统要求
- Python 3.11+
- Node.js 18+
- Docker & Docker Compose (可选)
- SQLite (默认数据库)
📊 数据库模式
- User: 用户信息与资料字段(头像、简介、位置、网站、GitHub、公司等)
- CodeExecution: 代码执行记录(时长、内存、是否API调用、关联代码库)
- CodeLibrary: 代码库(标题、描述、语言、公开状态、标签、环境等)
- APIKey: API密钥(启用状态、使用次数、最近使用、过期时间)
- AIConfig: AI配置(提供商、模型、密钥、Base URL、启用状态)
- UserEnvironment: 用户自定义环境(名称、Python版本、说明、公开/启用、最后使用等)
- SystemLog: 系统日志(动作、资源类型/ID、详情、IP、UA、状态)
- Post: 帖子(内容、标签、统计、置顶、公开等)
- PostLike/PostFavorite: 帖子点赞/收藏
- Comment/CommentLike: 评论与点赞
- PostCodeShare: 帖子内共享代码的关联关系
- Follow: 关注关系(粉丝/关注)
🛠️ 管理命令
Docker管理脚本
./docker-manager.sh start # 启动服务
./docker-manager.sh status # 检查状态
./docker-manager.sh logs backend -f # 查看日志
./docker-manager.sh stop # 停止服务
前端开发
npm install # 安装依赖
npm start # 启动开发服务器
npm test # 运行测试
npm run build # 构建生产版本
📡 API端点
认证
POST /register- 用户注册POST /login- 用户登录(返回JWT令牌)GET /users/me- 获取当前用户信息GET /users- 列出所有用户(仅管理员)POST /change-password- 修改密码POST /admin/users/{user_id}/change-password- 管理员修改密码
代码执行
POST /execute- 执行Python代码(带用户限制)GET /executions- 获取用户执行历史GET /admin/executions- 获取所有执行记录(仅管理员)GET /user-stats- 获取用户统计和限制
AI功能
POST /ai-configs- 创建AI配置GET /ai-configs- 获取AI配置PUT /ai-configs/{id}- 更新AI配置DELETE /ai-configs/{id}- 删除AI配置POST /ai/generate-code- 使用AI生成代码
代码库
POST /code-library- 保存代码到库GET /code-library- 获取代码库(分页)GET /code-library/{id}- 获取特定代码PUT /code-library/{id}- 更新代码DELETE /code-library/{id}- 删除代码
API密钥
POST /api-keys- 创建API密钥GET /api-keys- 获取API密钥(不包含值)PUT /api-keys/{id}/toggle- 启用/禁用API密钥DELETE /api-keys/{id}- 删除API密钥
外部API
POST /api/v1/execute- 通过API密钥执行代码GET /api/v1/codes- 通过API密钥获取代码库GET /api/v1/codes/{id}- 通过API密钥获取特定代码
环境管理
GET /environments/available- 获取可用环境列表GET /environments/{env_name}/info- 获取环境信息GET /environments/{env_name}/packages- 获取已安装包POST /environments/{env_name}/packages/install- 安装包DELETE /environments/{env_name}/packages/{package_name}- 卸载包PUT /environments/{env_name}/packages/{package_name}/upgrade- 升级包
用户资料与统计
GET /profile/PUT /profile- 获取/更新资料POST /profile/avatar- 上传头像GET /profile/enhanced-stats- 获取增强统计
社区功能
POST /community/posts/GET /community/posts- 创建/获取帖子(支持分页/筛选)GET /community/posts/{post_id}- 获取帖子详情POST /community/posts/{post_id}/like/DELETE /community/posts/{post_id}/like- 点赞/取消点赞POST /community/posts/{post_id}/favorite/DELETE /community/posts/{post_id}/favorite- 收藏/取消收藏POST /community/comments/PUT /community/comments/{id}/DELETE /community/comments/{id}- 评论增删改POST /community/follow/DELETE /community/follow- 关注/取消关注GET /community/users/{user_id}/followers/GET /community/users/{user_id}/stats/GET /community/users/{user_id}/code-library- 粉丝/公开统计/公开代码库
系统管理(仅管理员)
GET /admin/logs/GET /admin/logs/stats/GET /admin/logs/actions/GET /admin/logs/resource-typesPOST /admin/database/export/POST /admin/database/import/GET /admin/database/info- 数据库备份/导入与信息
🔒 安全说明
- 默认管理员用户: username="admin", password="admin123"(首次登录后修改)
- 代码执行使用临时文件,执行后自动清理
- JWT令牌30分钟后过期(可通过
ACCESS_TOKEN_EXPIRE_MINUTES配置) - API密钥具有使用跟踪和可选过期日期
- 所有系统操作都记录IP地址和用户代理
- 数据库文件(coderunner.db)已从git中排除
🌍 环境变量
SECRET_KEY: JWT签名密钥(生产环境中请更改)DATABASE_URL: SQLite数据库连接字符串(默认: sqlite:///./data/coderunner.db)NODE_ENV: React环境(development/production)
说明:当前后端源码默认不从环境变量读取上述配置。请直接在
backend/services/auth.py:12设置SECRET_KEY,在backend/models/database.py:6设置SQLALCHEMY_DATABASE_URL。容器环境中的变量仅用于后续扩展或外部镜像,基于本仓库构建的镜像以源码配置为准。
🐳 Docker配置
项目使用分阶段 Docker 构建与非 root 运行:
- 后端:
continuumio/miniconda3基础镜像,Conda 环境runner(Python 3.11),以非 root 用户运行,uvicorn main:app暴露8000 - 前端:
node:18-alpine构建产
