From 19ced3bb6db2a7c061c7fb31e2269ac5c9d5772a Mon Sep 17 00:00:00 2001 From: mobiniqow Date: Sun, 27 Sep 2026 10:28:43 +0330 Subject: [PATCH] chore: add root docker-compose orchestration for backend/web/admin --- .env.example | 13 +++++++++ .gitignore | 6 +++++ README.md | 31 ++++++++++++++++++++++ docker-compose.yml | 66 ++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 116 insertions(+) create mode 100644 .env.example create mode 100644 .gitignore create mode 100644 README.md create mode 100644 docker-compose.yml diff --git a/.env.example b/.env.example new file mode 100644 index 0000000..482da21 --- /dev/null +++ b/.env.example @@ -0,0 +1,13 @@ +# Postgres +DB_USER=postgres +DB_PASSWORD=postgres +DB_NAME=dating_app +DB_PORT=5432 + +# پورت‌هایی که روی هاست منتشر می‌شن؛ نگینکس خودت رو به این پورت‌ها proxy_pass کن +APP_PORT=8080 # -> api.brainito.ir +WEB_PORT=3000 # -> brainito.ir +ADMIN_PORT=3001 # -> admin.brainito.ir + +# آدرس API که موقع build توی باندل کلاینت web/admin جاسازی می‌شه (باید از مرورگر کاربر قابل‌دسترس باشه) +PUBLIC_API_URL=https://api.brainito.ir/api/v1 diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..cff353a --- /dev/null +++ b/.gitignore @@ -0,0 +1,6 @@ +# این‌ها هرکدوم ریپوی گیت جدای خودشونن، اینجا فقط فایل‌های orchestration ردیابی می‌شن +/backend/ +/admin/ +/web/ +/twa/ +.env diff --git a/README.md b/README.md new file mode 100644 index 0000000..b08f173 --- /dev/null +++ b/README.md @@ -0,0 +1,31 @@ +# دلدل (dating-app) + +پوشه‌ی مادر پروژه؛ همه‌ی بخش‌ها به‌صورت ریپوی گیت جدا زیر همین پوشه‌ان: + +``` +dating-app/ +├── backend/ بک‌اند Go (ریپوی گیت جدا) +├── admin/ پنل ادمین Next.js (ریپوی گیت جدا) +├── web/ وب‌اپ Next.js (ریپوی گیت جدا) +├── twa/ پروژه‌ی اندروید TWA (بدون گیت) +├── docker-compose.yml +└── .env.example +``` + +## اجرا روی سرور + +```bash +cp .env.example .env # مقادیر رو با دامنه/رمزهای واقعی پر کن +docker compose up -d --build +``` + +این کار ۴ کانتینر بالا می‌آره: `postgres`, `backend` (پورت `APP_PORT`), `web` (پورت `WEB_PORT`), `admin` (پورت `ADMIN_PORT`). +کامپوز هیچ وب‌سروری بالا نمی‌آره؛ ریورس‌پروکسی و ساب‌دامین‌ها با nginx خودت روی هاست ست می‌شن، مثلاً: + +| ساب‌دامین | proxy_pass به | +|---|---| +| `brainito.ir` | `127.0.0.1:${WEB_PORT}` | +| `admin.brainito.ir` | `127.0.0.1:${ADMIN_PORT}` | +| `api.brainito.ir` | `127.0.0.1:${APP_PORT}` | + +سکرت‌های اختصاصی بک‌اند (JWT، DB و...) توی `backend/.env` می‌مونن و از اونجا با `env_file` به سرویس `backend` پاس داده می‌شن؛ `.env` ریشه فقط برای متغیرهای مشترک کامپوز (پورت‌ها، اطلاعات پستگرس، آدرس عمومی API) استفاده می‌شه. diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..cab3336 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,66 @@ +name: dating-app + +services: + postgres: + image: postgres:16-alpine + restart: unless-stopped + environment: + POSTGRES_USER: ${DB_USER:-postgres} + POSTGRES_PASSWORD: ${DB_PASSWORD:-postgres} + POSTGRES_DB: ${DB_NAME:-dating_app} + volumes: + - postgres_data:/var/lib/postgresql/data + ports: + - "${DB_PORT:-5432}:5432" + healthcheck: + test: ["CMD-SHELL", "pg_isready -U ${DB_USER:-postgres} -d ${DB_NAME:-dating_app}"] + interval: 5s + timeout: 5s + retries: 10 + + backend: + build: + context: ./backend + dockerfile: Dockerfile + restart: unless-stopped + depends_on: + postgres: + condition: service_healthy + env_file: + - ./backend/.env + environment: + DB_HOST: postgres + DB_PORT: 5432 + TZ: Asia/Tehran + ports: + - "${APP_PORT:-8080}:8080" + volumes: + - backend_uploads:/app/uploads + + web: + build: + context: ./web + dockerfile: Dockerfile + args: + NEXT_PUBLIC_API_URL: ${PUBLIC_API_URL:-http://localhost:8080/api/v1} + restart: unless-stopped + depends_on: + - backend + ports: + - "${WEB_PORT:-3000}:3000" + + admin: + build: + context: ./admin + dockerfile: Dockerfile + args: + NEXT_PUBLIC_API_URL: ${PUBLIC_API_URL:-http://localhost:8080/api/v1} + restart: unless-stopped + depends_on: + - backend + ports: + - "${ADMIN_PORT:-3001}:3000" + +volumes: + postgres_data: + backend_uploads: