import { Callout, Tabs, Steps } from 'nextra/components' import { FaInfoCircle, FaExclamationCircle } from 'react-icons/fa' import YouTube from 'react-youtube'; # Self-Hosting Sweep via Docker This is a guide for self-hosting Sweep. If you are interested in our hosted version please visit https://github.com/apps/sweep-ai. Sweep GitHub App is an **air-gapped**, **self-hostable** version of Sweep which serves many repositories at once.
Setting up the Sweep GitHub App involves: 1. Creating the GitHub App and getting a trial license key. 2. Hosting the Sweep backend on a cloud provider like DigitalOcean. **The trial license key is valid for 14 days.** To upgrade to an enterprise license key, contact us at team@sweep.dev. Feel free to reach out to us for any help or questions. ### Create GitHub App Create a [GitHub App here](https://deploy.sweep.dev/) (1 minute). This tool will guide you through the process of creating a GitHub App, create a license key, and provide you with the necessary `.env` file. It will be named `.env.txt` and you will need to rename it to `.env` (browser security reasons). It should look something like this. ```sh filename=".env" GITHUB_APP_ID=123456 GITHUB_APP_PEM=-----BEGIN RSA PRIVATE KEY-----\n...\n-----END RSA PRIVATE KEY-----\n GITHUB_BOT_USER=sweepai-self-hosted LICENSE_KEY=ABCDE-FGHIJ-KLMNO-PQRST-UVWXY WEBHOOK_SECRET=abc123 ``` --- ### Anthropic and OpenAI API keys Create an [OpenAI API key](https://platform.openai.com/account/api-keys) and an [Anthropic API key](https://console.anthropic.com/settings/keys) add it to your `.env`: ```sh filename=".env" ... ANTHROPIC_API_KEY=sk-ant-api03-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx OPENAI_API_KEY=sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ``` --- ### Hosting Sweep To host Sweep you need to run the Sweep webhook on a publicly accessible server. We recommend using a cloud provider (DigitalOcean, AWS, or Azure) but you can also run it locally and use a reverse proxy like Ngrok. *If you encounter issues please reach out to us at team@sweep.dev.* We recommend deploying on the cloud for most users as the networking setup is easier. For this guide, we will use DigitalOcean. ##### 1. Create Instance Recommended specs: - OS: Ubuntu - RAM: 32 GB - CPU: 4 vCPUs - Storage: 200 GB The cheapest instance with these specs is `t3.xlarge` on AWS.
If you do not have Docker/Docker Compose setup ```sh filename="terminal" sudo apt install -y apt-transport-https ca-certificates curl software-properties-common -y curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - sudo add-apt-repository -y "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" sudo apt update -y sudo apt install docker-ce -y sudo systemctl enable docker sudo systemctl start docker sudo usermod -aG docker ${USER} ```
Start the docker client if you are on Mac/Windows. ##### 2. Configure `.env` and pull Sweep ```sh filename="terminal" git clone https://github.com/sweepai/sweep cd sweep vim .env ``` Then, copy the contents from your local `.env` to your remote `.env`. ##### 3. Deploy the Sweep backend ```sh filename="terminal" docker compose up --build hosted # To run in background: docker compose up --build -d hosted ``` ##### 4. Update the GitHub Webhook URL Get the IP address of your instance and add the port Sweep is deployed to (in this case, 8080): ```sh http://YOUR_IP:8080 ``` Go to your GitHub app and update `Webhook URL` to the link above. You can find the GitHub App settings page in your `.env` file. {/* For user accounts: ```txt /GITHUB_BOT_USERNAME/ https://github.com/settings/apps/GITHUB_BOT_USERNAME ``` For organizations: ```txt /GITHUB_BOT_USERNAME/, /YOUR_ORGANIZATION/ https://github.com/YOUR_ORGANIZATION/sweepai/settings/apps/GITHUB_BOT_USERNAME ``` */} Sweep has several long-running processes, so naive redeployment may kill these processes. For a script to redeploy gracefully without downtime, see https://github.com/sweepai/sweep/blob/main/bin/redeploy.sh.
If prefer to deploy on your local machine, you can do so by following the steps below. #### Prerequisites You need to install [Docker](https://docs.docker.com/engine/install/) to host Sweep. #### 1. Download the Docker Image Pull our image from Docker Hub: ```sh filename="terminal" git clone https://github.com/sweepai/sweep cd sweep docker compose pull hosted ``` It may take 5-10 minutes to download the image and you can move on to the next step while it's downloading. #### 2. Set up the environment Create a `.env` file with the contents from steps 1 and 2. #### 3. Run the Docker Image Then in the same directory, run: ```bash filename="terminal" docker compose up hosted # Add -d to run in background ``` #### 4. Set up the Reverse Proxy We're going to use [Ngrok](https://ngrok.com/) for a reverse proxy. Sign up for an Ngrok account and install the CLI from https://dashboard.ngrok.com/signup. Your terminal must be in the same directory as your ngrok installation. Start the reverse proxy with `ngrok http 8080`. The second last line should say something like ```sh filename="terminal" Forwarding https://4d8d8bf053be.ngrok.app -> http://localhost:8080 ``` Then proceed with step 4.
--- ### You have successfully deployed Sweep! *For enterprise support such as fine-tuning (20% performance gain), search index caching, usage tracking, and progress dashboards please contact team@sweep.dev.* **Creating a Pull Request with Sweep** Use Sweep by creating a new issue on the repository with a title prefixed with `Sweep:` like `Sweep: add type hints to BaseIndex.tsx`. For more details see [how to use Sweep](https://docs.sweep.dev/#-how-to-use-sweep).