# 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.