chore(deploy): prod deploy config
This commit is contained in:
114
deploy/readme.md
Normal file
114
deploy/readme.md
Normal file
@@ -0,0 +1,114 @@
|
||||
# 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.
|
||||
Reference in New Issue
Block a user