Files
codetutor/deploy/readme.md

115 lines
2.2 KiB
Markdown

# CodeTutor Deployment
Production deployment configuration using Docker Compose and Cloudflare Tunnel.
## Architecture
```
Internet -> Cloudflare Tunnel -> nginx -> frontend (Next.js)
\-> backend (FastAPI)
\-> PostgreSQL
```
## Prerequisites
- Docker and Docker Compose
- Cloudflare account with Zero Trust access
- External Docker network: `public-network`
Create the external network if it doesn't exist:
```bash
docker network create public-network
```
## Setup
### 1. Configure Environment
```bash
cp .env.example .env
```
Edit `.env` with:
- `POSTGRES_PASSWORD`: Strong password for the database
- `CLOUDFLARE_TUNNEL_TOKEN`: Token from Cloudflare Zero Trust dashboard
### 2. Create Cloudflare Tunnel
1. Go to [Cloudflare Zero Trust Dashboard](https://one.dash.cloudflare.com/)
2. Navigate to Networks > Tunnels
3. Create a new tunnel named `codetutor-demo`
4. Add public hostname:
- Subdomain: `codetutor-demo`
- Domain: `kschappell.com`
- Service: `http://nginx:80`
5. Copy the tunnel token to your `.env` file
### 3. Deploy
```bash
docker compose up -d --build
```
### 4. Verify
- Check service health: `docker compose ps`
- View logs: `docker compose logs -f`
- Test endpoint: `curl https://codetutor-demo.kschappell.com/health`
## Database Management
### Initial Setup
The database is automatically created on first run. To seed with initial data:
```bash
docker compose exec backend python -m alembic upgrade head
docker compose exec backend python -m scripts.seed_db
```
### Backups
```bash
docker compose exec db pg_dump -U codetutor codetutor > backup.sql
```
### Restore
```bash
docker compose exec -T db psql -U codetutor codetutor < backup.sql
```
## Updating
```bash
git pull
docker compose up -d --build
```
## Troubleshooting
### Services not starting
Check logs for specific service:
```bash
docker compose logs backend
docker compose logs frontend
docker compose logs nginx
```
### Database connection issues
Ensure the database is healthy:
```bash
docker compose ps db
docker compose logs db
```
### Tunnel not connecting
Verify the tunnel token is correct and the tunnel is active in the Cloudflare dashboard.