﻿# Деплой MEOW DevOps

## Схема

```
Cloudflare Pages  →  devops.xxxxmeooow.uk   (frontend dist/)
        │
        │  VITE_API_URL=https://api.…   (когда появится хост)
        ▼
API + PostgreSQL  →  VPS / free tier + Docker Compose
```

Пока VPS нет — курс полностью работает **локально** (`docker compose` + `npm run dev`).

---

## 1. Локально (сейчас)

```bash
cp .env.example .env
```

Минимум в `.env`:

```
POSTGRES_USER=devops
POSTGRES_PASSWORD=local_dev_password_change_me
POSTGRES_DB=devops
DEV_MODE=true
EMAIL_FALLBACK_SHOW_CODE=true
ADMIN_PASSWORD=admin123
CORS_ORIGINS=http://localhost:5173,http://127.0.0.1:5173,http://localhost:18081
HTTP_PORT=18081
```

```bash
docker compose up -d --build
npm install && npm run build && npm run dev
```

- UI: http://localhost:5173  
- API через nginx: http://localhost:18081/api/health  

Вход: вкладка «По паролю» → `admin` / `ADMIN_PASSWORD`,  
или email-код (в ответе API / логах при `EMAIL_FALLBACK_SHOW_CODE`).

---

## 2. Cloudflare Pages (когда готовы отдать фронт)

**От Cloudflare сейчас не нужно ничего**, кроме доступа к зоне `xxxxmeooow.uk` в момент публикации.

Шаги:

1. Репозиторий на GitHub (этот проект).
2. Cloudflare Dashboard → **Workers & Pages** → Create → Connect Git.
3. Build:
   - Framework preset: Vite (или None)
   - Build command: `npm run build`
   - Output directory: `dist`
4. Environment variable (после появления API):
   - `VITE_API_URL` = `https://api.ваш-хост` (без слэша в конце)
5. Custom domain: `devops.xxxxmeooow.uk`
   - DNS: CNAME `devops` → `*.pages.dev` проекта (Cloudflare подскажет).

CLI:

```bash
npm run build
npx wrangler pages deploy dist --project-name=devops-course
```

Без публичного API Pages покажет gate, но логин/курс не заработают — либо подождите API, либо тестируйте локально.

---

## 3. API / Postgres (когда появится хост)

Варианты free/cheap: Oracle Cloud Free Tier, Fly.io, Railway trial, любой VPS.

На сервере:

```bash
# например /opt/devops-course
git clone <repo> .
cp .env.example .env
# заполнить ADMIN_PASSWORD, POSTGRES_*, RESEND_*, CORS_ORIGINS, DEV_MODE=false
./deploy.sh
```

DNS для API (пример):

- `A`/`AAAA` `api.devops` → IP VPS, proxy через Cloudflare  
- или тот же хост с путём `/api` через nginx

`CORS_ORIGINS` должен включать `https://devops.xxxxmeooow.uk`.

Почта: **Resend** (HTTPS), не сырой SMTP с блокирующих VPS:

```
RESEND_API_KEY=re_...
SMTP_FROM=MEOW DevOps <noreply@xxxxmeooow.uk>
```

(домен в Resend нужно верифицировать).

---

## 4. Чеклист прод

- [ ] `/api/health` → ok
- [ ] Регистрация/вход по email-коду
- [ ] Курс: модули + задания Python/shell
- [ ] Shell mock: виртуальная FS `/home/student`, `pwd`/`ls`/`cat`/…
- [ ] Admin видит «Редактор»; student — нет
- [ ] Pages: `devops.xxxxmeooow.uk` + `VITE_API_URL`
- [ ] Не деплоить на сервер DE Course (`/opt/de-course`)

---

## Что прислать позже (не сейчас)

| Что | Зачем |
|-----|--------|
| Подтверждение зоны CF `xxxxmeooow.uk` | CNAME для Pages |
| Resend API key + verified domain | коды входа в проде |
| IP/SSH VPS или free tier | Docker API+DB |
