85 lines
1.7 KiB
Markdown
85 lines
1.7 KiB
Markdown
# 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.
|