# Deployment Guide

## Automated Deployment

Use the deployment script for zero-downtime deployments:

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

This script will:
1. Create a database backup
2. Pull latest changes from git
3. Fetch all git tags (for version display)
4. Build the new Docker image
5. Restart the container with minimal downtime
6. Clean up old images

## Manual Deployment

If you need to deploy manually:

```bash
# Pull latest changes
git pull

# Fetch tags (important for version display!)
git fetch --tags

# Build and restart
docker compose build
docker compose up -d
```

## Version Display

The app displays the current version in the footer. The version is determined as follows:

1. **During Docker build**: The version is extracted from git tags using `git describe --tags --always`
2. **At runtime**: The version is read from `/app/version.txt` and exposed via the `/api/version` endpoint
3. **Local development**: The version is extracted directly from git on each request

### Building with a specific version

You can override the version during build:

```bash
docker compose build --build-arg APP_VERSION=v1.2.3
```

### Troubleshooting

If the version shows as "dev" or "unknown":

1. Make sure git tags are pushed to the remote repository:
   ```bash
   git push --tags
   ```

2. On the deployment server, fetch the tags:
   ```bash
   git fetch --tags
   ```

3. Verify tags are available:
   ```bash
   git describe --tags --always
   ```

4. Rebuild the Docker image:
   ```bash
   docker compose build --no-cache
   docker compose up -d
   ```

## Health Check

The container includes a health check that monitors the `/api/daily` endpoint. Check the health status:

```bash
docker ps
```

Look for the "healthy" status in the STATUS column.

## Caddy Reverse Proxy (Optional - Production)

For production deployments with automatic SSL/TLS certificates, Caddy can be used as a reverse proxy. Caddy provides:

- Automatic Let's Encrypt certificates (including wildcard certificates)
- HTTP to HTTPS redirect
- Optimized settings for audio streaming and file uploads
- Support for both `hoerdle.de` and `hördle.de` (Punycode: `xn--hrdle-jua.de`)

### Quick Start

1. **Follow the setup guide**: See `CADDY_SETUP.md` for detailed instructions
2. **Configure environment variables**: Add GoDaddy API credentials to your `.env` file
3. **Start with Caddy**:
   ```bash
   docker compose -f docker-compose.yml -f docker-compose.caddy.yml --profile production up -d
   ```

### Without Caddy

If you don't want to use Caddy, you can deploy normally:

```bash
docker compose -f docker-compose.yml up -d
```

The application will still be accessible on port 3010, but you'll need to configure SSL/TLS separately (e.g., with nginx).

### Caddy Troubleshooting

See `CADDY_SETUP.md` for detailed troubleshooting information.
