Brauzerda ishlaydigan ikki tomonlama (mesh) video chat: foydalanuvchilar bir xona ID bilan kirib, bir-birini kamera + mikrofon orqali real vaqtda ko'radi, ekranni ulasha oladi.
- Backend: FastAPI — faqat WebSocket signaling (SDP/ICE uzatadi).
- Frontend: React + Vite.
- Media: brauzerlar orasida to'g'ridan-to'g'ri P2P (server orqali o'tmaydi).
Arxitektura va signaling protokoli batafsil: ../docs/07-web-fullstack.md.
Ikkita terminal:
Terminal 1 — backend:
cd web/backend
pip install -r requirements.txt
uvicorn main:app --port 8000 --reloadTerminal 2 — frontend:
cd web/frontend
npm install
npm run devBrauzerda http://localhost:5173 ni oching. Sinash uchun ikkita oyna/tabda bir xil xona ID bilan kiring — bir-biringizni ko'rasiz.
Vite dev-server
/wsni avtomatik backend (:8000) ga proksi qiladi.
cd web
docker compose up --buildSo'ng http://localhost:8080 ni oching. nginx qurilgan React'ni beradi va /ws ni
backend konteyneriga proksi qiladi.
# Railway CLI o'rnatish (bir marta)
npm install -g @railway/cli
# Login
railway login
# Deploy (web/ papkasida)
cd web
railway upYoki PowerShell script:
cd web
.\deploy.ps1Railway dashboard'da:
- Project → Add PostgreSQL (yoki Add Service → PostgreSQL)
- Database avtomatik provision qilinadi
DATABASE_URLenvironment variable avtomatik qo'shiladi
Railway dashboard → Variables bo'limida:
# Majburiy
DATABASE_URL=postgresql+asyncpg://user:pass@host:5432/dbname
JWT_SECRET=<kuchli kalit>
# Production sozlamalar
ENVIRONMENT=prod
CORS_ORIGINS=https://your-app.railway.app
COOKIE_SECURE=true
PERSIST_CHAT=trueJWT_SECRET generatsiya:
python -c "import secrets; print(secrets.token_urlsafe(48))"Har safar main branch'ga push qilinganda avtomatik deploy:
- Railway dashboard'da GitHub ni ulang
- Repository va branch tanlang
- Root Directory =
web - Auto-deploy yoqilgan bo'ladi
Yoki GitHub Actions workflow ishlatiladi (.github/workflows/deploy.yml).
# Full deploy script (PowerShell)
.\deploy.ps1
# Yoki bash
bash deploy.shDatabase'ni tekshirish:
# Railway CLI bilan
railway run psql $DATABASE_URL -c "\dt"
# Yoki Railway dashboard → Postgres → Open PSQL- HTTPS shart.
getUserMediavagetDisplayMediafaqatlocalhostyoki HTTPS saytlarda ishlaydi. Railway avtomatik HTTPS beradi. - STUN kiritilgan (
stun.l.google.com). Turli tarmoqlar (uy ↔ ofis) orqali ishonchli ulanish uchun TURN server kerak bo'lishi mumkin. - Mesh arxitekturasi 2–4 ishtirokchi uchun qulay; ko'proq foydalanuvchi uchun SFU (server-tomon media) kerak bo'ladi.
web/
├── backend/ FastAPI signaling (main.py, rooms.py)
│ ├── Dockerfile
│ ├── requirements.txt
│ └── .env.example
├── frontend/ React + Vite
│ ├── Dockerfile
│ ├── package.json
│ └── nginx.conf
├── Dockerfile # Full-stack monolith (Railway)
├── docker-compose.yml # Local development
├── railway.json # Railway config
├── deploy.ps1 # PowerShell deploy script
├── deploy.sh # Bash deploy script
└── RAILWAY_DEPLOY.md # Batafsil deploy qo'llanma
- RAILWAY_DEPLOY.md — Railway deploy batafsil
- ../docs/07-web-fullstack.md — Arxitektura
- ../README.md — Asosiy loyiha