# Deploying to Fly.io This backend service uses `Docker` and `uv` for easy deployment. Since it uses SQLite for data persistence, we need to configure a persistent volume on Fly.io. ## Prerequisites 1. Install `flyctl` (Fly.io CLI). 2. Login: `fly auth login`. ## Deployment Steps ### 1. Initialize the App Run the launch command in this directory (`backend/`): ```bash fly launch ``` - **Choose a unique app name** (e.g., `my-chatkit-backend`). - **Select a region** (choose one close to you). - **Would you like to set up a Postgresql database now?** -> **No** (we use SQLite). - **Would you like to set up an Upstash Redis database now?** -> **No**. - **Do you want to deploy now?** -> **No** (we need to set secrets first). This creates a `fly.toml` file. ### 2. Set Up Data Persistence (Volumes) Since the app uses SQLite (`chatkit_threads.db` and `user_state.db`), you need a persistent volume so data isn't lost when the app restarts. Create a 1GB volume (adjust size if needed): ```bash fly volumes create chatkit_data --size 1 --region ``` *Make sure to use the same region you selected in step 1.* ### 3. Update `fly.toml` Open `fly.toml` and add the `[mounts]` section to mount the volume to `/data` in the container. Also add the environment variables to tell the app to use that path. Add this to `fly.toml`: ```toml [mounts] source = "chatkit_data" destination = "/data" [env] CHATKIT_DB_PATH = "/data/chatkit_threads.db" USER_STATE_DB_PATH = "/data/user_state.db" PORT = "8000" ``` ### 4. Set Secrets Set your API keys using `fly secrets`. Copy values from your `.env.local`: ```bash fly secrets set \ GROQ_API_KEY=your_groq_key \ OPENAI_API_KEY=your_openai_key \ OPENROUTER_API_KEY=your_openrouter_key \ DEEPSEEK_API_KEY=your_deepseek_key \ GOOGLE_API_KEY=your_google_key \ CARTESIA_API=your_cartesia_key ``` ### 5. Deploy Now you are ready to deploy: ```bash fly deploy ``` ## Verifying Deployment Check the logs to ensure everything started correctly: ```bash fly logs ``` Your app should now be running!