PageSourceSearch

https://www.puppyone.ai/_next/static/chunks/7959.cf371aaa41b5df3e.js

js puppyone.ai collected 2026-10-05 12:33:10 UTC 6,197 bytes, 1 lines download raw bytes

1"use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[7959],{10798:function(n,e,s){s.d(e,{a:function(){return r}});function r(n){return n}},47959:function(n,e,s){s.r(e),s.d(e,{default:function(){return h}});var r=s(57437),c=s(10798);function l(n){let e={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",hr:"hr",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,c.a)(),...n.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(e.h1,{children:"Self-Hosted Quick Start"}),"\n",(0,r.jsx)(e.p,{children:"Run puppyone locally."}),"\n",(0,r.jsx)(e.hr,{}),"\n",(0,r.jsx)(e.h2,{children:"Prerequisites"}),"\n",(0,r.jsxs)(e.ul,{children:["\n",(0,r.jsx)(e.li,{children:"Docker and Docker Compose"}),"\n",(0,r.jsxs)(e.li,{children:["Or: Python 3.12+, Node.js 18+, and the ",(0,r.jsx)(e.a,{href:"https://docs.astral.sh/uv/",children:"uv"})," package manager"]}),"\n"]}),"\n",(0,r.jsx)(e.hr,{}),"\n",(0,r.jsx)(e.h2,{children:"Option 1: Docker Compose (recommended)"}),"\n",(0,r.jsx)(e.h3,{children:"1. Clone the repository"}),"\n",(0,r.jsx)(e.pre,{children:(0,r.jsx)(e.code,{className:"language-bash",children:"git clone https://github.com/puppyone-ai/puppyone.git\ncd puppyone\n"})}),"\n",(0,r.jsx)(e.h3,{children:"2. Configure environment variables"}),"\n",(0,r.jsx)(e.pre,{children:(0,r.jsx)(e.code,{className:"language-bash",children:"cp .env.example .env\n"})}),"\n",(0,r.jsxs)(e.p,{children:["Edit ",(0,r.jsx)(e.code,{children:".env"})," and fill in the required values. See the environment variable section below."]}),"\n",(0,r.jsx)(e.h3,{children:"3. Start the services"}),"\n",(0,r.jsx)(e.pre,{children:(0,r.jsx)(e.code,{className:"language-bash",children:"docker compose up --build\n"})}),"\n",(0,r.jsx)(e.h3,{children:"4. Access the services"}),"\n",(0,r.jsxs)(e.ul,{children:["\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.strong,{children:"Frontend"}),": ",(0,r.jsx)(e.a,{href:"http://localhost:3000",children:"http://localhost:3000"})]}),"\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.strong,{children:"Backend API"}),": ",(0,r.jsx)(e.a,{href:"http://localhost:9090",children:"http://localhost:9090"})]}),"\n"]}),"\n",(0,r.jsx)(e.hr,{}),"\n",(0,r.jsx)(e.h2,{children:"Option 2: Start services manually"}),"\n",(0,r.jsx)(e.h3,{children:"1. Clone the repository"}),"\n",(0,r.jsx)(e.pre,{children:(0,r.jsx)(e.code,{className:"language-bash",children:"git clone https://github.com/puppyone-ai/puppyone.git\ncd puppyone\n"})}),"\n",(0,r.jsx)(e.h3,{children:"2. Start the backend"}),"\n",(0,r.jsx)(e.pre,{children:(0,r.jsx)(e.code,{className:"language-bash",children:"cd backend\ncp .env.example .env  # configure environment variables\nuv sync\nuv run uvicorn src.main:app --host 0.0.0.0 --p
1ort 9090 --reload --log-level info --no-access-log\n"})}),"\n",(0,r.jsx)(e.h3,{children:"3. Start the frontend"}),"\n",(0,r.jsx)(e.pre,{children:(0,r.jsx)(e.code,{className:"language-bash",children:"cd frontend\ncp .env.example .env\nnpm install\nnpm run dev\n"})}),"\n",(0,r.jsx)(e.h3,{children:"4. Access the services"}),"\n",(0,r.jsxs)(e.ul,{children:["\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.strong,{children:"Frontend"}),": ",(0,r.jsx)(e.a,{href:"http://localhost:3000",children:"http://localhost:3000"})]}),"\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.strong,{children:"Backend API"}),": ",(0,r.jsx)(e.a,{href:"http://localhost:9090",children:"http://localhost:9090"})]}),"\n"]}),"\n",(0,r.jsx)(e.hr,{}),"\n",(0,r.jsx)(e.h2,{children:"Environment variables"}),"\n",(0,r.jsxs)(e.p,{children:["Key settings in your ",(0,r.jsx)(e.code,{children:".env"})," file:"]}),"\n",(0,r.jsx)(e.pre,{children:(0,r.jsx)(e.code,{className:"language-bash",children:"# Supabase (required)\nSUPABASE_URL=https://your-project.supabase.co\nSUPABASE_KEY=your-supabase-anon-key\nSUPABASE_SERVICE_KEY=your-supabase-service-role-key\n\n# S3 storage\nS3_BUCKET=your-bucket\nAWS_ACCESS_KEY_ID=...\nAWS_SECRET_ACCESS_KEY=...\n\n# LLM (used for ETL and agent chats)\nOPENAI_API_KEY=sk-...\n\n# Redis (task queue)\nREDIS_URL=redis://localhost:6379\n"})}),"\n",(0,r.jsx)(e.hr,{}),"\n",(0,r.jsx)(e.h2,{children:"Connect an agent"}),"\n",(0,r.jsx)(e.p,{children:"In a self-hosted setup, your MCP Server URL looks like this:"}),"\n",(0,r.jsx)(e.pre,{children:(0,r.jsx)(e.code,{children:"http://localhost:9090/api/v1/mcp/proxy/{API_KEY}\n"})}),"\n",(0,r.jsx)(e.p,{children:"Cursor configuration:"}),"\n",(0,r.jsx)(e.pre,{children:(0,r.jsx)(e.code,{className:"language-json",children:'{\n  "mcpServers": {\n    "puppyone-local": {\n      "command": "npx",\n      "args": ["-y", "mcp-remote", "http://localhost:9090/api/v1/mcp/proxy/sk_xxx"]\n    }\n  }\n}\n'})}),"\n",(0,r.jsx)(e.hr,{}),"\n",(0,r.jsx)(e.h2,{children:"Common issues"}),"\n",(0,r.jsx)(e.h3,{children:"Port conflicts"}),"\n",(0,r.jsxs)(e.p,{children:["Change the ports in ",(0,r.jsx)(e.code,{children:"docker-compose.yml"})," or in your startup commands."]}),"\n",(0,r.jsx)(e.h3,{children:"Database connection failed"}),"\n",(0,r.jsxs)(e.p,{children:["Check that ",(0,r.jsx)(e.code,{children:"SUPABASE_URL"})," and ",(0,r.jsx)(e.code,{children:"SUPABASE_KEY"})," are configured correctly."]}),"\n",(0,r.jsx)(e.h3,{children:"MCP connection failed"}),"\n",(0,r.jsx)(e.p,{children:"Make sure the backend service is running and the API key is valid."}),"\n",(0,r.jsx)(e.hr,{}),"\n",(0,r.jsx)(e.h2,{children:"Next steps"}),"\n",(0,r.jsxs)(e.ul,{children:["\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.a,{href:"/en/docs/quickstart/cli",children:"CLI Quick Start"})," - Manage your data from the command line"]}),"\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.a,{href:"/en/docs/connect",children:"Data Connections"})," - Connect Notion, GitHub, and more"]}),"\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.a,{href:"/en/docs/concepts",children:"Core Concepts"})," - Learn the key ideas behind Content Nodes and Connections"]}),"\n",(0,r.jsxs)(e.li,{children:[(0,r.jsx)(e.a,{href:"/en/docs/distribute",children:"Distribute to Agents"})," - Use MCP, OpenClaw, and the REST API"]}),"\n"]})]})}function h(){let n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},{wrapper:e}={...(0,c.a)(),...n.components};return e?(0,r.jsx)(e,{...n,children:(0,r.jsx)(l,{...n})}):l(n)}}}]);

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.