当前位置: 首页 > news >正文

Suna 开源 AI Agent 安装配置过程全解析(输出与交互详解)

温馨提示:

本次笔记记录的比较详尽,请结合目录查看,谢谢! 

 

一、完整配置过程一览

 

(一)交互配置部分

Microsoft Windows [Version 10.0.27871.1000]
(c) Microsoft Corporation. All rights reserved.(suna-py3.12) F:\PythonProjects\suna>python setup.py '--admin'███████╗██╗   ██╗███╗   ██╗ █████╗ ██╔════╝██║   ██║████╗  ██║██╔══██╗███████╗██║   ██║██╔██╗ ██║███████║╚════██║██║   ██║██║╚██╗██║██╔══██║███████║╚██████╔╝██║ ╚████║██║  ██║╚══════╝ ╚═════╝ ╚═╝  ╚═══╝╚═╝  ╚═╝Setup WizardThis wizard will guide you through setting up Suna, an open-source generalist AI agent.Step 1/8: Checking requirements
==================================================✅  git is installed
✅  docker is installed
✅  python3 is installed
✅  poetry is installed
✅  pip3 is installed
✅  node is installed
✅  npm is installed
✅  Docker is running
✅  Suna repository detectedStep 2/8: Collecting Supabase information
==================================================ℹ️  You'll need to create a Supabase project before continuing
ℹ️  Visit https://supabase.com/dashboard/projects to create one
ℹ️  After creating your project, visit the project settings -> Data API and you'll need to get the following information:
ℹ️  1. Supabase Project URL (e.g., https://abcdefg.supabase.co)
ℹ️  2. Supabase anon key
ℹ️  3. Supabase service role key
Press Enter to continue once you've created your Supabase project...
Enter your Supabase Project URL (e.g., https://abcdefg.supabase.co): https://[脱敏].supabase.co
Enter your Supabase anon key: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.[脱敏]
Enter your Supabase service role key: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.[脱敏]
Step 3/8: Collecting Daytona information
==================================================ℹ️  You'll need to create a Daytona account before continuing
ℹ️  Visit https://app.daytona.io/ to create one
ℹ️  Then, generate an API key from 'Keys' menu
ℹ️  After that, go to Images (https://app.daytona.io/dashboard/images)
ℹ️  Click '+ Create Image'
ℹ️  Enter 'kortix/suna:0.1.3' as the image name
ℹ️  Set '/usr/bin/supervisord -n -c /etc/supervisor/conf.d/supervisord.conf' as the Entrypoint
Press Enter to continue once you've completed these steps...
Enter your Daytona API key: dtn_[脱敏]Step 4/8: Collecting LLM API keys
==================================================ℹ️  You need at least one LLM provider API key to use Suna
ℹ️  Available LLM providers: OpenAI, Anthropic, OpenRouterSelect LLM providers to configure:
[1] OpenAI                                                                                                                                                                                                                                                                                                      
[2] Anthropic                                                                                                                                                                                                                                                                                                   
[3] OpenRouter (access to multiple models)                                                                                                                                                                                                                                                                      
Enter numbers separated by commas (e.g., 1,2,3)Select providers (required, at least one): 3
ℹ️
Configuring OPENROUTER
Enter your OpenRouter API key: sk-or-v1-5405[脱敏]Recommended OpenRouter models:
[1] openrouter/google/gemini-2.5-pro-preview                                                                                                                                                                                                                                                                    
[2] openrouter/deepseek/deepseek-chat-v3-0324:free                                                                                                                                                                                                                                                              
[3] openrouter/openai/gpt-4o-2024-11-20                                                                                                                                                                                                                                                                         
Select default model (1-3) or press Enter for gemini-2.5-flash: 2
✅  Using openrouter/deepseek/deepseek-chat-v3-0324:free as the default modelStep 5/8: Collecting search and web scraping API keys
==================================================ℹ️  You'll need to obtain API keys for search and web scraping
ℹ️  Visit https://tavily.com/ to get a Tavily API key
ℹ️  Visit https://firecrawl.dev/ to get a Firecrawl API key
Enter your Tavily API key: tvly-dev-[脱敏]
Enter your Firecrawl API key: fc-[脱敏]
Are you self-hosting Firecrawl? (y/n): nStep 6/8: Collecting RapidAPI key
==================================================ℹ️  To enable API services like LinkedIn, and others, you'll need a RapidAPI key
ℹ️  Each service requires individual activation in your RapidAPI account:
ℹ️  1. Locate the service's `base_url` in its corresponding file (e.g., https://linkedin-data-scraper.p.rapidapi.com in backend/agent/tools/data_providers/LinkedinProvider.py)
ℹ️  2. Visit that specific API on the RapidAPI marketplace
ℹ️  3. Subscribe to th`e service (many offer free tiers with limited requests)
ℹ️  4. Once subscribed, the service will be available to your agent through the API Services tool
ℹ️  A RapidAPI key is optional for API services like LinkedIn
ℹ️  Visit https://rapidapi.com/ to get your API key if needed
ℹ️  You can leave this blank and add it later if desired
Enter your RapidAPI key (optional, press Enter to skip): 9361[脱敏]Step 7/8: Setting up Supabase
==================================================ℹ️  Setting up Supabase database...
✅  Extracted project reference 'gcnijvljsutcxwgcedjz' from your Supabase URL
ℹ️  Changing to backend directory: F:\PythonProjects\suna\backend
ℹ️  Logging into Supabase CLI...
Hello from Supabase! Press Enter to open browser and login automatically.Here is your login link in case browser did not open https://supabase.com/dashboard/cli/login?session_id=[脱敏]Enter your verification code: 714c8ac1
Token cli_AI\love@AI_[脱敏] created successfully.You are now logged in. Happy coding!                                                                                                                                                                                                                                                                            
ℹ️  Linking to Supabase project gcnijvljsutcxwgcedjz...
Enter your database password (or leave blank to skip): 
Connecting to remote database...
NOTICE (42P06): schema "supabase_migrations" already exists, skipping
NOTICE (42P07): relation "schema_migrations" already exists, skipping
NOTICE (42701): column "statements" of relation "schema_migrations" already exists, skipping
NOTICE (42701): column "name" of relation "schema_migrations" already exists, skipping
NOTICE (42P06): schema "supabase_migrations" already exists, skipping
NOTICE (42P07): relation "seed_files" already exists, skipping
Finished supabase link.
ℹ️  Pushing database migrations...
Connecting to remote database...
Remote database is up to date.
✅  Supabase database setup completed
⚠️  IMPORTANT: You need to manually expose the 'basejump' schema in Supabase
ℹ️  Go to the Supabase web platform -> choose your project -> Project Settings -> Data API
ℹ️  In the 'Exposed Schema' section, add 'basejump' if not already there
Press Enter once you've completed this step...Step 8/8: Installing dependencies
==================================================ℹ️  Installing required dependencies...
ℹ️  Installing frontend dependencies...up to date in 1s292 packages are looking for fundingrun `npm fund` for details
✅  Frontend dependencies installed successfully
ℹ️  Locking dependencies...
Resolving dependencies... (0.3s)
ℹ️  Installing backend dependencies...
Installing dependencies from lock fileNo dependencies to install or updateInstalling the current project: suna (1.0)
✅  Backend dependencies installed successfully
ℹ️  Configuring environment files...
✅  Backend .env file created at backend\.env
ℹ️  Redis host is set to: redis
ℹ️  RabbitMQ host is set to: rabbitmq
✅  Frontend .env.local file created at frontend\.env.local
ℹ️  Backend URL is set to: http://localhost:8000/apiStep 8/8: Starting Suna
==================================================ℹ️  You can start Suna using either Docker Compose or by manually starting the frontend, backend and worker.How would you like to start Suna?
[1] Docker Compose (recommended, starts all services)                                                                                                                                                                                                                                                           
[2] Manual startup (requires Redis, RabbitMQ & separate terminals)                                                                                                                                                                                                                                              Enter your choice (1 or 2): 1

 

(二) Docker构建部分

Enter your choice (1 or 2): 1
ℹ️  Starting Suna with Docker Compose...
ℹ️  Building images locally...
Compose can now delegate builds to bake for better performance.To do so, set COMPOSE_BAKE=true.
[+] Building 9.7s (34/34) FINISHED                                                                   docker:desktop-linux=> [worker internal] load build definition from Dockerfile                                                          0.0s=> => transferring dockerfile: 1.63kB                                                                               0.0s=> [backend internal] load metadata for docker.io/library/python:3.11-slim                                          3.5s=> [worker internal] load .dockerignore                                                                             0.0s=> => transferring context: 2B                                                                                      0.0s=> [backend 1/7] FROM docker.io/library/python:3.11-slim@sha256:7a3ed1226224bcc1fe5443262363d42f48cf832a540c1836ba  0.1s=> => resolve docker.io/library/python:3.11-slim@sha256:7a3ed1226224bcc1fe5443262363d42f48cf832a540c1836ba8ccbeaad  0.0s=> [worker internal] load build context                                                                             0.0s=> => transferring context: 378.92kB                                                                                0.0s=> CACHED [backend 2/7] WORKDIR /app                                                                                0.0s=> CACHED [backend 3/7] RUN apt-get update && apt-get install -y --no-install-recommends     build-essential     c  0.0s=> CACHED [backend 4/7] RUN useradd -m -u 1000 appuser &&     mkdir -p /app/logs &&     chown -R appuser:appuser /  0.0s=> CACHED [worker 5/7] COPY --chown=appuser:appuser requirements.txt .                                              0.0s=> CACHED [worker 6/7] RUN pip install --no-cache-dir -r requirements.txt gunicorn                                  0.0s=> [worker 7/7] COPY --chown=appuser:appuser . .                                                                    0.1s=> [worker] exporting to image                                                                                      0.3s=> => exporting layers                                                                                              0.1s=> => exporting manifest sha256:f44b1916aecdf7e601a9ebe772fdfe3f7b9c7824a60dd66c28dae291bf1e1dfc                    0.0s=> => exporting config sha256:9728c8d6b6125caaaf2dc116bb98542b504f2ead2d6ec1e1e0365ce2ec736fd7                      0.0s=> => exporting attestation manifest sha256:625d7f6d1f95f8dcef025221b4c09acdd09fe36ad90701933437661e19d97201        0.0s=> => exporting manifest list sha256:81fcf132ef0709746e6bfa863a33accf01331c92b576bfd81d666490f4d3629c               0.0s=> => naming to docker.io/library/suna-worker:latest                                                                0.0s=> => unpacking to docker.io/library/suna-worker:latest                                                             0.0s=> [worker] resolving provenance for metadata file                                                                  0.0s=> [backend internal] load build definition from Dockerfile                                                         0.0s=> => transferring dockerfile: 1.63kB                                                                               0.0s => [backend internal] load .dockerignore                                                                            0.0s=> => transferring context: 2B                                                                                      0.0s => [backend internal] load build context                                                                            0.0s => => transferring context: 11.49kB                                                                                 0.0s => CACHED [backend 5/7] COPY --chown=appuser:appuser requirements.txt .                                             0.0s => CACHED [backend 6/7] RUN pip install --no-cache-dir -r requirements.txt gunicorn                                 0.0s => CACHED [backend 7/7] COPY --chown=appuser:appuser . .                                                            0.0s => [backend] exporting to image                                                                                     0.1s => => exporting layers                                                                                              0.0s => => exporting manifest sha256:84b8dfb58ef3e2223d9441cb66cba3a2f46e04d849e043c2c41c66150c578d20                    0.0s => => exporting config sha256:659b5f6ba415fe441c3a58fa4502040282f09489265e6f2af680396a9f54018a                      0.0s => => exporting attestation manifest sha256:b83b5d5b810a4d156c94afa49352013e57d2022d27297fbfdbfff0465b246500        0.0s => => exporting manifest list sha256:bcbac3552d0db9f463be4c2af24974c5226b7012b005e213d64566115e05f307               0.0s => => naming to docker.io/library/suna-backend:latest                                                               0.0s=> => unpacking to docker.io/library/suna-backend:latest                                                            0.0s => [backend] resolving provenance for metadata file                                                                 0.0s => [frontend internal] load build definition from Dockerfile                                                        0.0s=> => transferring dockerfile: 704B                                                                                 0.0s => [frontend internal] load metadata for docker.io/library/node:20-slim                                             1.0s => [frontend internal] load .dockerignore                                                                           0.0s=> => transferring context: 2B                                                                                      0.0s => [frontend 1/7] FROM docker.io/library/node:20-slim@sha256:cb4abfbba7dfaa78e21ddf2a72a592e5f9ed36ccf98bdc8ad3ff9  0.0s => => resolve docker.io/library/node:20-slim@sha256:cb4abfbba7dfaa78e21ddf2a72a592e5f9ed36ccf98bdc8ad3ff945673d288  0.0s => [frontend internal] load build context                                                                           3.4s => => transferring context: 8.63MB                                                                                  3.0s=> CACHED [frontend 2/7] WORKDIR /app                                                                               0.0s=> CACHED [frontend 3/7] COPY package*.json ./                                                                      0.0s => CACHED [frontend 4/7] RUN apt-get update && apt-get install -y --no-install-recommends     python3     make      0.0s => CACHED [frontend 5/7] RUN npm install                                                                            0.0s => CACHED [frontend 6/7] COPY . .                                                                                   0.0s => CACHED [frontend 7/7] RUN npm run build                                                                          0.0s => [frontend] exporting to image                                                                                    0.1s => => exporting layers                                                                                              0.0s => => exporting manifest sha256:e11438b808ea84b58c682c717acb770ec86e91bf2e4f729e753f9cc62f6197ca                    0.0s => => exporting config sha256:fa45c13e02f6722025f58e1327de347b959d3584c798434d26001d798c8f1e4f                      0.0s => => exporting attestation manifest sha256:755f47d4e868607bee4a872f9ebb036f7742efb00a8bd2f7591a217ab68730ea        0.0s => => exporting manifest list sha256:28b09bc843d2be1a680b5bccff6631c24ade20993a40cd3a934db8729cd8240c               0.0s=> => naming to docker.io/library/suna-frontend:latest                                                              0.0s => => unpacking to docker.io/library/suna-frontend:latest                                                           0.0s => [frontend] resolving provenance for metadata file                                                                0.0s 
[+] Running 8/8✔ backend                    Built                                                                                  0.0s ✔ frontend                   Built                                                                                  0.0s ✔ worker                     Built                                                                                  0.0s ✔ Container suna-rabbitmq-1  Healthy                                                                               15.1s ✔ Container suna-redis-1     Healthy                                                                               15.1s ✔ Container suna-worker-1    Started                                                                               14.6s ✔ Container suna-backend-1   Started                                                                               15.7s ✔ Container suna-frontend-1  Started                                                                               16.2s 
ℹ️  Waiting for services to start...✨ Suna Setup Complete! ✨ℹ️  Suna is configured to use openrouter/deepseek/deepseek-chat-v3-0324:free as the default LLM model
ℹ️  Your Suna instance is now running!
ℹ️  Access it at: http://localhost:3000
ℹ️  Create an account using Supabase authentication to start using SunaUseful Docker commands:docker compose ps         - Check the status of Suna servicesdocker compose logs       - View logs from all servicesdocker compose logs -f    - Follow logs from all servicesdocker compose down       - Stop Suna servicesdocker compose up -d      - Start Suna services (after they've been stopped)

 

二、配置过程完整解析

 

 (一)环境信息

Microsoft Windows [Version 10.0.27871.1000]
(c) Microsoft Corporation. All rights reserved.(suna-py3.12) F:\PythonProjects\suna>python setup.py '--admin'

代码输出对照

  • 1、系统版本Microsoft Windows [Version 10.0.27871.1000]
    • 说明:Windows 10 预览版(Build 27871),需确保 Docker Desktop 启用 WSL 2 后端。
  • 2、虚拟环境(suna-py3.12)
    • 说明:通过poetry创建的 Python 3.12 隔离环境,避免依赖冲突。
  • 3、执行命令python setup.py '--admin'
    • 说明:启动管理员模式安装脚本,允许修改系统配置文件。
python setup.py '--admin'

(二)Step 1/8:检查依赖项

 

代码输出原文
Step 1/8: Checking requirements
==================================================✅  git is installed          # 版本控制工具,用于克隆和更新Suna代码仓库
✅  docker is installed       # 容器化平台,用于部署Suna微服务(如Redis、RabbitMQ)
✅  python3 is installed      # 主运行环境,需>=3.10版本支持最新语法特性
✅  poetry is installed       # Python依赖管理工具,替代传统pip+requirements.txt
✅  pip3 is installed         # Python包安装工具,用于安装基础依赖
✅  node is installed         # JavaScript运行环境,用于构建前端React应用
✅  npm is installed          # Node包管理器,用于安装前端依赖
✅  Docker is running         # 检查Docker守护进程是否启动(必须状态)
✅  Suna repository detected  # 确认当前目录包含Suna项目文件结构

用户操作

按回车键继续

# 操作:确认所有依赖检查均显示✅后,按回车键继续
# 注意:若某项显示❌,需安装对应工具后重新运行脚本

 

(三)Step 2/8:收集 Supabase 信息

 

代码输出原文

Step 2/8: Collecting Supabase information
==================================================ℹ️  You'll need to create a Supabase project before continuing  # 提示需先在Supabase官网创建项目
ℹ️  Visit https://supabase.com/dashboard/projects to create one  # 项目创建入口链接
ℹ️  After creating your project, visit the project settings -> Data API  # 指引获取API密钥的路径
ℹ️  and you'll need to get the following information:  # 列出需要收集的3项关键信息
ℹ️  1. Supabase Project URL (e.g., https://abcdefg.supabase.co)  # 项目唯一访问端点
ℹ️  2. Supabase anon key (public, read-only access)  # 前端公开密钥(只读权限)
ℹ️  3. Supabase service role key (private, full access)  # 后端服务密钥(完全权限)
Press Enter to continue once you've created your Supabase project...  # 等待用户确认项目已创建
用户输入内容

# 操作:按回车键确认已创建Supabase项目
Press Enter to continue once you've created your Supabase project...# 输入:Supabase项目URL(格式:https://{project_id}.supabase.co)
# 来源:Supabase项目Dashboard页面顶部的"Project URL"字段
# 用途:作为数据库连接的基础URL
Enter your Supabase Project URL (e.g., https://abcdefg.supabase.co): https://[脱敏].supabase.co  # 输入:Supabase匿名密钥(JWT格式,用于前端只读访问)
# 来源:Supabase项目Settings > API > Project API keys > anon (public)
# 权限:仅允许SELECT操作,防止前端代码直接修改数据库
Enter your Supabase anon key: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.[脱敏]  # 输入:Supabase服务角色密钥(JWT格式,用于后端全权限访问)
# 来源:Supabase项目Settings > API > Project API keys > service_role
# 权限:允许所有数据库操作(INSERT/UPDATE/DELETE),需严格保密
Enter your Supabase service role key: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.[脱敏]  

 

(四)Step 3/8:收集 Daytona 信息

 

代码输出原文

Step 3/8: Collecting Daytona information
==================================================ℹ️  You'll need to create a Daytona account before continuing  # 提示需先注册Daytona账户
ℹ️  Visit https://app.daytona.io/ to create one  # Daytona注册链接
ℹ️  Then, generate an API key from 'Keys' menu  # 指引生成API密钥的路径
ℹ️  After that, go to Images (https://app.daytona.io/dashboard/images)  # 镜像管理页面
ℹ️  Click '+ Create Image'  # 创建新镜像操作
ℹ️  Enter 'kortix/suna:0.1.3' as the image name  # 指定Suna官方镜像名称及版本
ℹ️  Set '/usr/bin/supervisord -n -c /etc/supervisor/conf.d/supervisord.conf' as the Entrypoint  # 容器启动命令
Press Enter to continue once you've completed these steps...  # 等待用户确认操作完成
用户输入内容

# 操作:按回车键确认已完成Daytona镜像配置
Press Enter to continue once you've completed these steps...# 输入:Daytona API密钥(格式:dtn_开头的字符串)
# 来源:Daytona账户Settings > API Keys > Generate New Key
# 用途:授权Suna访问Daytona镜像仓库
Enter your Daytona API key: dtn_[脱敏]  

 

(五)Step 4/8:收集 LLM API keys

 

代码输出原文

Step 4/8: Collecting LLM API keys
==================================================ℹ️  You need at least one LLM provider API key to use Suna  # 提示必须配置至少一个大语言模型
ℹ️  Available LLM providers: OpenAI, Anthropic, OpenRouter  # 支持的LLM提供商列表Select LLM providers to configure:  # 提示选择要配置的提供商
[1] OpenAI  # 选项1:OpenAI(GPT系列模型)
[2] Anthropic  # 选项2:Anthropic(Claude系列模型)
[3] OpenRouter (access to multiple models)  # 选项3:OpenRouter(聚合多模型平台)
Enter numbers separated by commas (e.g., 1,2,3):  # 允许多选,用逗号分隔
用户输入内容

# 选择:输入3选择OpenRouter(多模型聚合平台,支持免费模型)
# 优势:无需单独申请各模型API,提供免费额度测试
Select providers (required, at least one): 3# 输入:OpenRouter API密钥(格式:sk-or-v1-开头的字符串)
# 来源:OpenRouter官网注册后,在Dashboard > API Keys生成
# 用途:认证Suna对OpenRouter服务的访问权限
Enter your OpenRouter API key: sk-or-v1-[脱敏]  # 选择:输入2选择免费的DeepSeek模型(deepseek-chat-v3-0324:free)
# 替代方案:若需更高性能,可选择1(Gemini Pro)或3(GPT-4o),但需付费
Recommended OpenRouter models:
[1] openrouter/google/gemini-2.5-pro-preview  # Google Gemini专业版(付费)
[2] openrouter/deepseek/deepseek-chat-v3-0324:free  # 深度求索免费模型
[3] openrouter/openai/gpt-4o-2024-11-20  # OpenAI GPT-4o(付费)
Select default model (1-3) or press Enter for gemini-2.5-flash: 2

 

(六)Step 5/8:收集搜索和 web scraping API keys

 

代码输出原文

Step 5/8: Collecting search and web scraping API keys
==================================================ℹ️  You'll need to obtain API keys for search and web scraping  # 提示需要搜索和网页抓取API
ℹ️  Visit https://tavily.com/ to get a Tavily API key  # Tavily搜索API注册链接
ℹ️  Visit https://firecrawl.dev/ to get a Firecrawl API key  # Firecrawl网页抓取API注册链接
Enter your Tavily API key:  # 提示输入搜索API密钥
Enter your Firecrawl API key:  # 提示输入网页抓取API密钥
Are you self-hosting Firecrawl? (y/n):  # 是否自托管Firecrawl服务
用户输入内容

# 输入:Tavily搜索API密钥(格式:tvly-dev-开头的字符串)
# 来源:Tavily官网注册后,在Dashboard > API Keys获取
# 用途:提供实时网络搜索能力给Suna代理
Enter your Tavily API key: tvly-dev-[脱敏]  # 输入:Firecrawl网页抓取API密钥(格式:fc-开头的字符串)
# 来源:Firecrawl官网注册后,在Account > API Keys获取
# 用途:解析和提取网页内容给Suna代理
Enter your Firecrawl API key: fc-[脱敏]  # 选择:输入n表示使用Firecrawl官方云服务(不自托管)
# 自托管选项:若选择y,需自行部署Firecrawl Docker镜像并配置访问地址
Are you self-hosting Firecrawl? (y/n): n  

 

(七)Step 6/8:收集 RapidAPI key

 

代码输出原文

Step 6/8: Collecting RapidAPI key
==================================================ℹ️  To enable API services like LinkedIn, and others, you'll need a RapidAPI key  # 启用第三方API的前提
ℹ️  Each service requires individual activation in your RapidAPI account  # 需在RapidAPI市场单独订阅服务
ℹ️  A RapidAPI key is optional for API services like LinkedIn  # 非必需,可后续添加
ℹ️  Visit https://rapidapi.com/ to get your API key if needed  # 注册获取API密钥的链接
ℹ️  You can leave this blank and add it later if desired  # 允许跳过,后续通过管理界面配置
Enter your RapidAPI key (optional, press Enter to skip):  # 提示输入(可留空)
用户输入内容

# 输入:RapidAPI密钥(可选,用于LinkedIn等第三方API服务)
# 来源:RapidAPI官网注册后,在Dashboard > My Apps > Default-App获取
# 用途:若需要Suna访问LinkedIn等服务,需提供此密钥
Enter your RapidAPI key (optional, press Enter to skip): [脱敏]  

 

(八)Step 7/8:Setting up Supabase

1、第1段输出(验证码登录授权)

代码输出原文

Step 7/8: Setting up Supabase
==================================================ℹ️  Setting up Supabase database...  # 开始配置Supabase数据库连接
✅  Extracted project reference 'gcnijvljsutcxwgcedjz' from your Supabase URL  # 从URL解析项目ID(格式:https://{project_id}.supabase.co)
ℹ️  Changing to backend directory: F:\PythonProjects\suna\backend  # 切换到后端代码目录(包含数据库迁移文件)
ℹ️  Logging into Supabase CLI...  # 启动Supabase命令行工具登录流程
Hello from Supabase! Press Enter to open browser and login automatically.  # 提示按回车打开浏览器登录Here is your login link in case browser did not open https://supabase.com/dashboard/cli/login?session_id=a3931bff-31b6-4cec-9369-eed54a30e305&token_name=cli_AI\love@AI_1749527270&public_key=048da1ff3073da96ee9a4d45b9d78f7392b2098c00b5dc6f0907f50f3b605e5fedf1432ac17d2c450df21db9317d106407d775aa50315b0503cff0289b29b9ac1d  # OAuth登录链接(包含会话ID和令牌信息)Enter your verification code:  # 提示输入浏览器中显示的验证码
Step 7/8:跳转网页获取登录授权临时验证码

 

Step 7/8:粘贴临时验证码并回车

 

用户输入内容

# 操作:按回车键打开浏览器,跳转到Supabase登录授权页面
# 注意:需使用创建Supabase项目时的同一账户登录
Press Enter to open browser and login automatically.# 输入:浏览器中显示的6位验证码(格式:如714c8ac1)
# 来源:Supabase授权页面生成的临时验证码(有效期5分钟)
# 用途:验证用户身份,允许CLI访问Supabase项目
# 安全提示:请勿分享此验证码,仅在受信任环境输入
Enter your verification code: 714c8ac1  # 操作:直接按回车键跳过数据库密码设置(使用默认密钥认证)
# 替代方案:若需使用密码认证,可输入自定义密码并配置Supabase项目
# 注意:Supabase默认使用密钥认证,无需数据库密码
Enter your database password (or leave blank to skip): 

 

2、第2段输出(暴露basejump模式)

后续代码输出原文

Token cli_AI\love@AI_1749527270 created successfully.  # CLI认证令牌创建成功(有效期24小时)
You are now logged in. Happy coding!  # 登录成功提示ℹ️  Linking to Supabase project gcnijvljsutcxwgcedjz...  # 将本地项目与远程Supabase项目关联
Enter your database password (or leave blank to skip):  # 再次提示输入数据库密码(可跳过)Connecting to remote database...  # 尝试连接Supabase托管的PostgreSQL数据库
NOTICE (42P06): schema "supabase_migrations" already exists, skipping  # 迁移管理模式已存在,跳过创建
NOTICE (42P07): relation "schema_migrations" already exists, skipping  # 迁移记录表已存在,跳过创建
NOTICE (42701): column "statements" of relation "schema_migrations" already exists, skipping  # 迁移语句列已存在,跳过创建
NOTICE (42701): column "name" of relation "schema_migrations" already exists, skipping  # 迁移名称列已存在,跳过创建
NOTICE (42P06): schema "supabase_migrations" already exists, skipping  # 重复提示(幂等操作)
NOTICE (42P07): relation "seed_files" already exists, skipping  # 种子数据文件表已存在,跳过创建
Finished supabase link.  # 项目链接完成ℹ️  Pushing database migrations...  # 开始推送本地数据库迁移文件到远程
Connecting to remote database...  # 再次连接数据库
Remote database is up to date.  # 远程数据库已是最新版本(无需迁移)
✅  Supabase database setup completed  # 数据库设置完成⚠️  IMPORTANT: You need to manually expose the 'basejump' schema in Supabase  # 重要提示:需手动暴露basejump模式
ℹ️  Go to the Supabase web platform -> choose your project -> Project Settings -> Data API  # 操作指引
ℹ️  In the 'Exposed Schema' section, add 'basejump' if not already there  # 添加basejump到暴露模式列表
Press Enter once you've completed this step...  # 完成后按回车键继续
后续用户输入内容

# 操作:直接按回车键跳过密码设置(使用默认密钥认证)
# 说明:仅在启用数据库密码认证时需要输入(非默认配置)
Enter your database password (or leave blank to skip): # 操作:打开浏览器,访问Supabase后台,手动暴露basejump schema
# 步骤:
# 1. 登录 https://supabase.com/dashboard
# 2. 选择对应项目
# 3. 进入 Settings > Data API
# 4. 在 "Exposed Schema" 中添加 "basejump"
# 5. 点击 Save 保存设置# 操作:完成上述步骤后,按回车键继续安装流程
Press Enter once you've completed this step...
技术原理与安全说明
  1. Supabase CLI 认证机制

    • 使用 OAuth 2.0 授权码模式,通过浏览器获取临时令牌(Token)。
    • 令牌存储在本地 ~/.supabase/credentials.json,有效期 24 小时。
  2. 数据库迁移系统

    • Suna 使用 supabase db push 命令同步迁移文件。
    • 迁移文件位于 backend/migrations 目录,采用时间戳命名(如 20231001000000_initial_setup.sql)。
  3. Schema 暴露的必要性

    • Supabase 默认仅暴露 public schema,需手动添加 basejump 以允许后端访问。
    • 未暴露可能导致错误:42P01: relation "basejump.agent_tasks" does not exist
  4. 安全最佳实践

    • 避免使用数据库密码认证,优先使用 service_role key
    • 定期轮换 service_role key(Supabase 后台可操作)。
    • 生产环境建议启用行级安全策略(RLS)限制数据访问。

 

3、常见问题排查

问题现象可能原因解决方案
验证码输入后提示 Invalid code验证码过期或输入错误刷新浏览器授权页面获取新验证码
ERROR: schema "basejump" does not exist未暴露 basejump schema按提示在 Supabase 后台暴露 basejump schema
迁移失败提示 401 UnauthorizedCLI 令牌过期或权限不足执行 supabase logout 后重新登录
浏览器无法自动打开终端环境无图形界面或浏览器权限问题手动复制链接到浏览器打开

 

(九)Step 8/8:Installing dependencies & Starting Suna

Step 7 和 Step 8 应该是源代码的问题没有正常的显示序号

 

代码输出原文

Step 8/8: Installing dependencies
==================================================ℹ️  Installing frontend dependencies...  # 开始安装前端依赖
...(省略npm安装日志)  # 实际输出包含大量npm包安装信息
✅  Frontend dependencies installed successfully  # 前端依赖安装成功
ℹ️  Installing backend dependencies...  # 开始安装后端依赖
...(省略poetry安装日志)  # 实际输出包含Python包解析和安装信息
✅  Backend dependencies installed successfully  # 后端依赖安装成功
ℹ️  Configuring environment files...  # 开始配置环境变量文件
✅  Backend .env file created at backend\.env  # 后端环境变量文件创建成功
✅  Frontend .env.local file created at frontend\.env.local  # 前端环境变量文件创建成功Step 8/8: Starting Suna
==================================================ℹ️  You can start Suna using either Docker Compose or by manually starting the services.  # 启动方式说明
How would you like to start Suna?  # 提示选择启动方式
[1] Docker Compose (recommended, starts all services)  # 选项1:Docker Compose(推荐)
[2] Manual startup (requires Redis, RabbitMQ & separate terminals)  # 选项2:手动启动(需单独启动各服务)
Enter your choice (1 or 2):  # 提示输入选择

用户输入内容

# 选择:输入1选择Docker Compose方式启动(一键启动所有微服务)
# 优势:自动管理服务依赖关系,简化部署流程
# 注意:需确保Docker服务已启动
Enter your choice (1 or 2): 1  

(十)Suna Docker 构建与服务启动解析

 

以下是对 Docker 构建与服务启动阶段 的完整解析,包含代码输出原文、逐行注释、服务架构说明及验证方法: 

代码输出原文

……
[+] Running 8/8✔ backend                    Built                                                                      0.0s ✔ frontend                   Built                                                                      0.0s ✔ worker                     Built                                                                      0.0s ✔ Container suna-redis-1     Healthy                                                                  25.6s ✔ Container suna-rabbitmq-1  Healthy                                                                  25.6s ✔ Container suna-worker-1    Started                                                                  25.1s ✔ Container suna-backend-1   Started                                                                  20.4s ✔ Container suna-frontend-1  Started                                                                  18.9s 
ℹ️  Waiting for services to start...                                                                                ✨ Suna Setup Complete! ✨ℹ️  Suna is configured to use openrouter/openai/gpt-4o-2024-11-20 as the default LLM model
ℹ️  Your Suna instance is now running!                                                                          
ℹ️  Access it at: http://localhost:3000                                                                         
ℹ️  Create an account using Supabase authentication to start using Suna                                                                                                       Useful Docker commands:docker compose ps         - Check the status of Suna servicesdocker compose logs       - View logs from all servicesdocker compose logs -f    - Follow logs from all servicesdocker compose down       - Stop Suna servicesdocker compose up -d      - Start Suna services (after they've been stopped)

逐行注释与服务解析

1. 服务构建阶段

 ✔ backend                    Built                                                                      0.0s ✔ frontend                   Built                                                                      0.0s ✔ worker                     Built                                                                      0.0s 

  • backend:基于 FastAPI 的 Python 后端服务,提供 API 接口与业务逻辑
  • frontend:基于 React 的前端应用,构建为静态文件由 Nginx 服务
  • worker:异步任务处理服务,负责执行 LLM 调用、网页抓取等耗时操作
  • 构建时间:显示 0.0s 是因为使用了 Docker 缓存,首次构建通常需要 3-5 分钟
2. 基础设施服务启动

 ✔ Container suna-redis-1     Healthy                                                                  25.6s ✔ Container suna-rabbitmq-1  Healthy                                                                  25.6s 

  • redis-1:内存数据库,用于缓存中间结果与会话数据
    • 端口映射:6379(容器内)→ 6379(宿主机)
    • 健康检查:通过 ping 命令验证服务可用性
  • rabbitmq-1:消息队列服务,协调 backend 与 worker 通信
    • 端口映射:5672(AMQP 协议)、15672(管理界面)
    • 健康检查:通过 HTTP API 验证管理服务状态
3. 核心服务启动

 ✔ Container suna-worker-1    Started                                                                  25.1s ✔ Container suna-backend-1   Started                                                                  20.4s ✔ Container suna-frontend-1  Started                                                                  18.9s 

  • worker-1:依赖 rabbitmq 和 redis,启动稍慢(25.1s)
    • 功能:消费队列任务,调用 LLM 模型与外部 API
  • backend-1:依赖 redis,启动时间中等(20.4s)
    • 功能:处理 HTTP 请求,管理用户会话,调度任务到队列
  • frontend-1:纯静态服务,启动最快(18.9s)
    • 端口映射:3000(容器内 Nginx)→ 3000(宿主机)
4. 服务验证信息

ℹ️  Suna is configured to use openrouter/openai/gpt-4o-2024-11-20 as the default LLM model
ℹ️  Your Suna instance is now running!                                                                          
ℹ️  Access it at: http://localhost:3000                                                                         
ℹ️  Create an account using Supabase authentication to start using Suna                                                                                                       

  • 默认 LLM 模型:显示配置的默认大语言模型(示例中为 GPT-4o)
  • 访问地址:前端服务地址,通过 Nginx 代理到 React 应用
  • 认证方式:使用 Supabase 提供的 OAuth / 密码认证系统
5. 常用 Docker 命令

Useful Docker commands:docker compose ps         - Check the status of Suna servicesdocker compose logs       - View logs from all servicesdocker compose logs -f    - Follow logs from all servicesdocker compose down       - Stop Suna servicesdocker compose up -d      - Start Suna services (after they've been stopped)

  • ps:查看容器状态(健康检查、CPU / 内存占用)
  • logs:诊断服务问题(如 backend 无法连接到 redis)
  • down:停止并移除所有容器(数据不会丢失)
  • up -d:后台启动服务(生产环境推荐方式)

服务架构与通信流程

验证服务运行状态

  1. 检查容器状态

    docker compose ps
    
     

    预期输出:

    NAME                COMMAND                  SERVICE             STATUS              PORTS
    suna-backend-1      "uvicorn main:app --…"   backend             running (healthy)   0.0.0.0:8000->8000/tcp
    suna-frontend-1     "nginx -g 'daemon of…"   frontend            running (healthy)   0.0.0.0:3000->80/tcp
    suna-rabbitmq-1     "docker-entrypoint.s…"   rabbitmq            running (healthy)   0.0.0.0:15672->15672/tcp, 0.0.0.0:5672->5672/tcp
    suna-redis-1        "docker-entrypoint.s…"   redis               running (healthy)   0.0.0.0:6379->6379/tcp
    suna-worker-1       "python -m app.work…"   worker              running (healthy)   8000/tcp
    

  2. 验证前端访问

    • 访问:http://localhost:3000
    • 预期看到 Suna 登录页面,尝试注册账号(通过 Supabase 认证)
  3. 检查后端 API

    curl http://localhost:8000/health
    

     

    预期输出:

    {"status":"healthy","version":"0.1.3","timestamp":"2025-06-10T14:30:00Z"}
    

常见问题排查

  1. 前端无法访问

    • 检查端口占用:netstat -ano | grep 3000
    • 查看 frontend 容器日志:docker compose logs frontend
  2. 后端报错 500

    • 检查 backend 日志:docker compose logs backend
    • 确认 Supabase 连接信息是否正确(检查.env文件)
  3. 任务队列无响应

    • 检查 rabbitmq 管理界面:http://localhost:15672 (默认账号:guest/guest)
    • 查看 worker 日志:docker compose logs worker

通过以上解析,可全面理解 Suna 的 Docker 部署架构、服务依赖关系及验证方法,确保系统正常运行。

三、安全与合规说明

  1. 密钥脱敏规则

    • 所有密钥保留格式前缀(如eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.),中间部分用[脱敏]替代。
    • URL 中的项目 ID(如supabase.co前的部分)全部脱敏。
  2. 操作规范

    • 每行用户输入后需按回车键确认,脚本会验证格式有效性。
    • 敏感信息(如密钥)切勿分享,若泄露需立即在对应平台重置。
  3. 故障排查

    • 若安装失败,可查看backend/logs/setup.log获取详细错误堆栈。
    • 常见问题:端口冲突(修改.env中的BACKEND_PORT)、网络连接超时。

通过此格式,可清晰区分脚本输出与用户输入,同时通过完整注释明确每个步骤的技术含义、操作要求和安全注意事项,便于理解与复现。

 

相关文章:

  • 国产具身大模型首入汽车工厂,全场景验证开启工业智能新阶段
  • Vuex 自动化生成工具
  • BeckHoff <--> 基恩士(CV-X300)三维机械手视觉系统的通讯 控制
  • 在GIS 工作流中实现数据处理
  • 百度之星2021——BD202104 萌新
  • 计算机行业光辉开始暗淡
  • 半导体设备基本通信标准介绍
  • HTML的初步学习
  • 生产安全与设备管理如何分清界限?如何正确用设备管理系统?
  • GitLab Web 界面创建分支后pathspec ... did not match any file(s)
  • 【求1+11+111+1111+11…11(n个1)的和除以7的余数是多少】2022-5-5
  • 【机器视觉】单目测距——运动结构恢复
  • 屋顶变身“发电站” ,中天合创屋面分布式光伏发电项目顺利并网!
  • 【Java】在 Spring Boot 中集成 Spring Security + JWT 实现基于 Token 的身份认证
  • 使用分级同态加密防御梯度泄漏
  • 篇章三 论坛系统——环境搭建
  • Unreal从入门到精通之使用 CheatManager 自定义控制台命令
  • c语言中的hashmap
  • MYSQL备份恢复知识:第十章:xTraBackup备份工具
  • 期末考试复习总结-《从简单的页面开始(上)》
  • 沙田镇网站建设/百度推广引流
  • 怎样看一个网站是哪个公司做的/郑州seo学校
  • 网站模版编辑器/谷歌商店下载安装
  • 对网站做综合搜索引擎优化分析/自媒体平台app下载
  • 英文网站建设580/百度自媒体平台
  • asp.net 4.0网站建设基础教程/一手项目对接app平台