# Dyolink Monorepo: **NestJS** backend (`backend/`), **Next.js** frontend (`frontend/`), **Docker** stack under `infrastructure/`.. Local development: see **`backend/README.md`** and **`frontend/README.md`**. **Cursor AI:** project conventions for agents are in [`AGENTS.md`](AGENTS.md), [`.cursor/rules/`](.cursor/rules/), and [`.cursor/skills/`](.cursor/skills/). --- ## Production deploy (Docker Hub + HTTPS + Let's Encrypt) **Full step-by-step guide:** [`infrastructure/DEPLOY.md`](infrastructure/DEPLOY.md) Minimal server setup: install Docker, create `.env` + `secrets/`, `docker login`, run one script. | On server (once) | In repo / Docker | |------------------|------------------| | DNS A record → server IP | `docker-compose.prod.yml`, nginx, certbot | | `docker login` (private Hub) | Build & push images from dev machine | | `secrets/database.env`, `secrets/backend.env` | Examples: `database.prod.env.example`, `backend.prod.env.example` | | `infrastructure/.env` (`DOMAIN`, `LETSENCRYPT_EMAIL`) | `deploy.prod.env.example` | **Dev machine** — build frontend with the public domain baked in, push to Docker Hub: ```bash ./infrastructure/scripts/build-and-push-prod.sh wixur.ir latest ``` **Server** — from `infrastructure/`: ```bash cp deploy.prod.env.example .env # edit DOMAIN, paths mkdir -p ../secrets && cp database.prod.env.example ../secrets/database.env cp backend.prod.env.example ../secrets/backend.env # set passwords + FRONTEND_URL docker login chmod +x scripts/*.sh ./scripts/deploy-prod.sh ``` SSL is issued automatically via **Certbot** (`scripts/init-letsencrypt.sh`). Nginx config is generated from `DOMAIN` in `.env`. When you move to another domain (e.g. `dyolink.com`), update `.env` + `backend.env`, re-run `init-letsencrypt.sh`, and **rebuild the frontend image** with the new URL. --- ## Staging deploy (Gitea Actions + Windows) **Full guide:** [`infrastructure/STAGING-DEPLOY.md`](infrastructure/STAGING-DEPLOY.md) Merge or push to **`master`** → Gitea Actions builds images → deploys to `http://:8088`. Workflow: [`.gitea/workflows/registry-build-deploy.yml`](.gitea/workflows/registry-build-deploy.yml) --- ## Related paths | Path | Role | |------|------| | `backend/Dockerfile` | API image | | `frontend/Dockerfile` | Web image | | `infrastructure/STAGING-DEPLOY.md` | Staging setup, CI variables, testing | | `infrastructure/docker-compose.registry.yml` | Pull-only staging stack (registry images + nginx + postgres) | | `infrastructure/deploy.registry.env.example` | Template for `deploy.registry.env` |