# Deployment Guide (Go)

This guide covers deploying the Go-based GopherGate.

## Environment Setup

1. **Mandatory Configuration:**
   Create a `.env` file from the example:
   ```bash
   cp .env.example .env
   ```
   Ensure `LLM_PROXY__ENCRYPTION_KEY` is set to a secure 32-byte string.

2. **Data Directory:**
   The proxy stores its database in `./data/llm_proxy.db` by default. Ensure this directory exists and is writable.

## Binary Deployment

### 1. Build
```bash
go build -o gophergate ./cmd/gophergate
```

### 2. Run
```bash
./gophergate
```

### Quick Deploy Script

A `deploy.sh` script is provided for production restarts:

```bash
./deploy.sh
```

This script will:
1. Stop any running gophergate process
2. Pull latest changes from git
3. Build the application
4. Start it in the background (logs to `gophergate.log`)

If the build fails, the previous binary is left untouched and the script exits.

## Docker Deployment

The project includes a multi-stage `Dockerfile` for minimal image size.

### 1. Build Image
```bash
docker build -t gophergate .
```

### 2. Run Container
```bash
docker run -d \
  --name gophergate \
  -p 8080:8080 \
  -v $(pwd)/data:/app/data \
  --env-file .env \
  gophergate
```

## Production Considerations

- **SSL/TLS:** It is recommended to run the proxy behind a reverse proxy like Nginx or Caddy for SSL termination.
- **Backups:** Regularly backup the `data/llm_proxy.db` file.
- **Monitoring:** Monitor the `/health` endpoint for system status.
- **Logs:** When started with `deploy.sh` or `nohup`, logs are written to `gophergate.log`.
