Files
qlockify-core-deployment/README.md

251 lines
5.2 KiB
Markdown

# Qlockify Deployment
Main deployment and operations repository for Qlockify.
This repo is the entrypoint for running the full product stack in production.
## Related Repositories
- Deployment repository declared by `origin`: `https://git.amiirkhl.ir/Qlockify/qlockify-core-deployment.git`
- Backend repository declared by its `origin`: `https://git.amiirkhl.ir/Qlockify/qlockify-backend-deployment.git`
- Frontend repository declared by its `origin`: `https://git.amiirkhl.ir/Qlockify/qlockify-frontend-deployment.git`
Use this repo for:
- Docker Compose orchestration
- Nginx
- SSL certificate mounting
- domain routing
- environment layout
- production service startup
Use the backend and frontend repos for application-level implementation details.
## What This Repo Contains
- `docker-compose.yml`
- Nginx config
- Postgres support files
- Dockerfiles for production images
- deployment environment samples
- container networking and volume wiring
## Architecture
Main deployed services:
- `nginx`
- `frontend`
- `backend`
- `celery`
- `celery-beat`
- `redis`
- `db`
Traffic pattern:
- `qlockify.ir` serves the frontend
- `api.qlockify.ir` serves the backend API, admin, docs, static, and media
- Nginx terminates TLS and proxies requests to the frontend and backend containers
## Expected Repository Layout
Docker builds read from nested application directories inside this repository:
- `./backend/qlockify-backend-deployment`
- `./frontend/qlockify-frontend-deployment`
Expected layout:
```text
qlockify-deployment/
backend/
Dockerfile
.env.sample
qlockify-backend-deployment/
frontend/
Dockerfile
.env.sample
qlockify-frontend-deployment/
nginx/
postgres/
docker-compose.yml
```
## Deployment Flow
### 1. Place application source
Put the app repos into:
- `./backend/qlockify-backend-deployment`
- `./frontend/qlockify-frontend-deployment`
### 2. Configure env files
Create and fill:
- `./.env`
- `./backend/qlockify-backend-deployment/.env`
- `./frontend/qlockify-frontend-deployment/.env`
### 3. Build and run
```powershell
docker compose up -d --build
```
The backend container runs:
- database migrations
- `collectstatic`
- Gunicorn startup
## Domain and Routing
Configured domains:
- `qlockify.ir`
- `www.qlockify.ir`
- `api.qlockify.ir`
Behavior:
- `www.qlockify.ir` redirects to `qlockify.ir`
- `http` redirects to `https`
- frontend is served from `qlockify.ir`
- backend traffic is served from `api.qlockify.ir`
Before production startup:
1. Point DNS records for `qlockify.ir`, `www.qlockify.ir`, and `api.qlockify.ir` to the server.
2. Make sure `80` and `443` are open on the server firewall.
3. Make sure the TLS certificate covers all required names.
## SSL Certificates
Place certificate files here:
```text
./nginx/certs/fullchain.pem
./nginx/certs/privkey.pem
```
The repository intentionally keeps only:
- `./nginx/certs/.gitkeep`
Real certificate files are ignored by git.
## Required Backend Environment
Set these in:
```text
./backend/qlockify-backend-deployment/.env
```
Core production values:
- `DJANGO_ALLOWED_HOSTS=api.qlockify.ir,qlockify.ir,www.qlockify.ir`
- `CORS_ALLOWED_ORIGINS=https://qlockify.ir,https://www.qlockify.ir`
- `CSRF_TRUSTED_ORIGINS=https://api.qlockify.ir,https://qlockify.ir,https://www.qlockify.ir`
- `BASE_URL=https://api.qlockify.ir`
- `POSTGRES_HOST=db`
- `REDIS_HOST=redis`
- `REDIS_URL=redis://redis:6379/0`
- `CELERY_BROKER_URL=redis://redis:6379/0`
- `CELERY_RESULT_BACKEND=redis://redis:6379/1`
Google OAuth values:
- `GOOGLE_OAUTH_CLIENT_ID=...`
- `GOOGLE_OAUTH_CLIENT_SECRET=...`
- `GOOGLE_OAUTH_REDIRECT_URI=https://api.qlockify.ir/api/users/oauth/google/callback/`
- `GOOGLE_OAUTH_FRONTEND_CALLBACK_URL=https://qlockify.ir/auth/google/callback`
## Required Frontend Environment
Set this in:
```text
./frontend/qlockify-frontend-deployment/.env
```
```text
VITE_API_BASE_URL=https://api.qlockify.ir/api
```
## Background Workers
This stack includes:
- `celery` for async jobs
- `celery-beat` for scheduled jobs
If background scheduling stops working, inspect:
```powershell
docker compose logs -f celery
docker compose logs -f celery-beat
```
## Notifications and SSE
Notifications use Server-Sent Events at `/api/notifications/stream/`.
Current behavior:
- Nginx disables buffering for the SSE endpoint
- Gunicorn is tuned to tolerate connected streams for current traffic
- if concurrency grows materially, move SSE to async workers or a dedicated ASGI service
## Useful Operations
Build/rebuild:
```powershell
docker compose up -d --build
```
Restart a subset:
```powershell
docker compose up -d --build nginx backend frontend
```
Inspect running services:
```powershell
docker compose ps
```
Follow logs:
```powershell
docker compose logs -f nginx
docker compose logs -f backend
docker compose logs -f celery
docker compose logs -f celery-beat
```
Stop everything:
```powershell
docker compose down
```
## Scope Boundary
This repo should document:
- infrastructure
- runtime topology
- domains
- Nginx
- Docker Compose
- SSL
- operational startup and troubleshooting
It should not duplicate the application-specific implementation details already documented in the backend and frontend repositories.