# Docker Setup for Enchun Website

This project includes Docker configuration for both frontend (Astro) and backend (Payload CMS).

## Quick Start

### 1. Set Environment Variables

Create a `.env` file in the project root with your configuration:

```bash
# Docker Hub username
DOCKER_USERNAME=your-dockerhub-username

# Database
DATABASE_URI=mongodb://root:EBJkOS1sikkUqVH8dJdNgCF1uIue41YRYUHQtNJS3l9GbBHQcmJlCiB1tEfB5HCY@dcsgw0oc4400wsgcswwocg4k:27017/?directConnection=true

# Payload CMS
PAYLOAD_SECRET=your-payload-secret
NEXT_PUBLIC_SERVER_URL=https://enchun-admin.anlstudio.cc
PREVIEW_SECRET=your-preview-secret
RESEND_API_KEY=your-resend-api-key
RESEND_FROM_EMAIL=your-email@domain.com

# R2 Storage
R2_ACCESS_KEY_ID=your-r2-access-key-id
R2_ACCOUNT_ID=your-r2-account-id
R2_BUCKET=your-r2-bucket
R2_SECRET_ACCESS_KEY=your-r2-secret-access-key

# Velcer
VERCEL_PROJECT_PRODUCTION_URL=https://your-vercel-project.vercel.app
```

### 2. Build and Push Images

Run the build script:

```bash
./docker-build-push.sh
```

This will:
- Build Docker images for both frontend and backend
- Push them to Docker Hub under `${DOCKER_USERNAME}/frontend` and `${DOCKER_USERNAME}/backend`
- Give you option to build/push each service individually or both

### 3. Deploy to Coolify

Since this project uses Coolify for deployment:

#### Option A: Use Coolify Docker Image Deployment

1. Go to Coolify dashboard
2. Create/Edit service → Select **Docker Image** as source
3. Enter image: `your-dockerhub-username/frontend` or `your-dockerhub-username/backend`
4. Configure environment variables in Coolify
5. Deploy

#### Option B: Trigger Coolify from GitHub Actions (Recommended)

1. Create GitHub repository secret `COOLIFY_WEBHOOK_URL`
2. Get webhook URL from Coolify Service settings → Webhooks
3. Create `.github/workflows/deploy.yml`:

```yaml
name: Deploy to Coolify

on:
  push:
    branches:
      - main

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - name: Trigger Coolify Deployment
        run: |
          curl -X POST "${{ secrets.COOLIFY_WEBHOOK_URL }}"
```

When you push to main branch, GitHub will trigger Coolify to deploy the latest Docker image.

## Docker Compose

Run both services locally:

```bash
docker-compose up -d
```

This will start:
- **Frontend**: nginx on port 4321
- **Backend**: Payload CMS on port 3000

## Manual Deployment

If you want to deploy manually to your own server:

### Push to Docker Hub
```bash
docker push your-dockerhub-username/frontend
docker push your-dockerhub-username/backend
```

### Run on Your Server

```bash
# Frontend
docker run -d -p 80:4321 --name enchun-frontend your-dockerhub-username/frontend

# Backend
docker run -d -p 3000:3000 --env-file .env --name enchun-backend your-dockerhub-username/backend
```

## Project Structure

```
website-enchun-mgr/
├── apps/
│   ├── frontend/          # Astro application
│   └── backend/           # Payload CMS
├── docker-compose.yml     # Orchestrate both services
├── Dockerfile.frontend  # Frontend container config
├── Dockerfile.backend  # Backend container config
├── nginx.conf            # Frontend nginx configuration
├── .dockerignore         # Files to exclude from Docker context
└── docker-build-push.sh # Build and push script
```

## Notes

- **Frontend**: Uses nginx to serve static Astro build
- **Backend**: Next.js-based Payload CMS with Node.js
- **Ports**: Frontend on 4321, Backend on 3000
- **Network**: Both services share a bridge network `enchun-network`
- **Environment Variables**: All sensitive values should be in `.env` file (not committed to git)
