Compare commits
4 Commits
b01da2e04e
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
| 7b6b90f110 | |||
| 8c4e50e98c | |||
| 217f5a1a6d | |||
| 112b196809 |
+1
-7
@@ -2,12 +2,6 @@
|
||||
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
|
||||
PUBLIC_API_URL=https://brainito.ir/api/v1
|
||||
|
||||
@@ -19,13 +19,15 @@ cp .env.example .env # مقادیر رو با دامنه/رمزهای واقع
|
||||
docker compose up -d --build
|
||||
```
|
||||
|
||||
این کار ۴ کانتینر بالا میآره: `postgres`, `backend` (پورت `APP_PORT`), `web` (پورت `WEB_PORT`), `admin` (پورت `ADMIN_PORT`).
|
||||
کامپوز هیچ وبسروری بالا نمیآره؛ ریورسپروکسی و سابدامینها با nginx خودت روی هاست ست میشن، مثلاً:
|
||||
این کار ۴ کانتینر بالا میآره: `postgres`, `backend`, `web`, `admin`.
|
||||
کامپوز هیچ وبسروری بالا نمیآره؛ ریورسپروکسی و سابدامینها با nginx خودت روی هاست ست میشن. چون کانتینر nginx روی همون شبکهی داکری این کامپوز نشسته، میتونه مستقیم با نام کانتینر بهشون proxy_pass بده (بهجای پورت هاست):
|
||||
|
||||
| سابدامین | proxy_pass به |
|
||||
| دامنه | 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}` |
|
||||
| `brainito.ir` | `http://dating-app-backend-1:8080` |
|
||||
| `app.brainito.ir` | `http://dating-app-web-1:3000` |
|
||||
| `panel.brainito.ir` | `http://dating-app-admin-1:3000` |
|
||||
|
||||
سکرتهای اختصاصی بکاند (JWT، DB و...) توی `backend/.env` میمونن و از اونجا با `env_file` به سرویس `backend` پاس داده میشن؛ `.env` ریشه فقط برای متغیرهای مشترک کامپوز (پورتها، اطلاعات پستگرس، آدرس عمومی API) استفاده میشه.
|
||||
(نام کانتینرها بر اساس `name: dating-app` توی کامپوز و پیشوند سرویس ساخته میشن؛ اگه پروژه رو با نام دیگهای بالا بیاری این نامها عوض میشن.)
|
||||
|
||||
هیچ سرویسی پورتی روی هاست منتشر نمیکنه؛ فقط روی شبکهی داکلی کامپوز با نام کانتینر در دسترسن (nginx باید به همون شبکه متصل باشه). سکرتهای اختصاصی بکاند (JWT، DB و...) توی `backend/.env` میمونن و از اونجا با `env_file` به سرویس `backend` پاس داده میشن؛ `.env` ریشه فقط برای اطلاعات پستگرس و آدرس عمومی API استفاده میشه.
|
||||
|
||||
+1
-14
@@ -1,16 +1,3 @@
|
||||
# ---- مرحلهی build ----
|
||||
FROM golang:1.22-alpine AS builder
|
||||
WORKDIR /app
|
||||
|
||||
RUN sed -i 's|dl-cdn.alpinelinux.org|mirror.mobinhost.com|g' /etc/apk/repositories
|
||||
|
||||
COPY go.mod go.sum ./
|
||||
RUN go mod download
|
||||
|
||||
COPY . .
|
||||
RUN CGO_ENABLED=0 GOOS=linux go build -ldflags="-s -w" -o /out/server ./cmd/api
|
||||
|
||||
# ---- مرحلهی اجرا (ایمیج نهایی سبک) ----
|
||||
FROM alpine:3.20
|
||||
|
||||
RUN sed -i 's|dl-cdn.alpinelinux.org|mirror.mobinhost.com|g' /etc/apk/repositories \
|
||||
@@ -18,7 +5,7 @@ RUN sed -i 's|dl-cdn.alpinelinux.org|mirror.mobinhost.com|g' /etc/apk/repositori
|
||||
|
||||
WORKDIR /app
|
||||
|
||||
COPY --from=builder /out/server ./server
|
||||
COPY server ./server
|
||||
RUN chmod +x /app/server
|
||||
|
||||
RUN mkdir -p /app/uploads/photos
|
||||
|
||||
@@ -10,8 +10,6 @@ services:
|
||||
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
|
||||
@@ -32,8 +30,6 @@ services:
|
||||
DB_HOST: postgres
|
||||
DB_PORT: 5432
|
||||
TZ: Asia/Tehran
|
||||
ports:
|
||||
- "${APP_PORT:-8080}:8080"
|
||||
volumes:
|
||||
- backend_uploads:/app/uploads
|
||||
|
||||
@@ -46,8 +42,6 @@ services:
|
||||
restart: unless-stopped
|
||||
depends_on:
|
||||
- backend
|
||||
ports:
|
||||
- "${WEB_PORT:-3000}:3000"
|
||||
|
||||
admin:
|
||||
build:
|
||||
@@ -58,8 +52,6 @@ services:
|
||||
restart: unless-stopped
|
||||
depends_on:
|
||||
- backend
|
||||
ports:
|
||||
- "${ADMIN_PORT:-3001}:3000"
|
||||
|
||||
volumes:
|
||||
postgres_data:
|
||||
|
||||
+2
-1
@@ -24,13 +24,14 @@ self.addEventListener("fetch", (event) => {
|
||||
const url = new URL(event.request.url);
|
||||
|
||||
if (event.request.method !== "GET") return;
|
||||
if (!url.protocol.startsWith("http")) return;
|
||||
if (url.pathname.startsWith("/api")) return;
|
||||
|
||||
event.respondWith(
|
||||
fetch(event.request)
|
||||
.then((res) => {
|
||||
const resClone = res.clone();
|
||||
caches.open(CACHE_NAME).then((cache) => cache.put(event.request, resClone));
|
||||
caches.open(CACHE_NAME).then((cache) => cache.put(event.request, resClone).catch(() => {}));
|
||||
return res;
|
||||
})
|
||||
.catch(() => caches.match(event.request))
|
||||
|
||||
Reference in New Issue
Block a user