# Docker Compose

> پنل، PostgreSQL و Prometheus را با فایل compose همراه مخزن، با هم اجرا کنید.

Source: https://joinnasnet.com/fa/guides/nasnet-linux/install/docker-compose/
Last updated: 2026-08-14

---

## مرور کلی

مخزن یک `docker-compose.yml` همراه دارد که سه سرویس را بالا می‌آورد: برنامه
(`nasnet_panel_backend`)، **`PostgreSQL 16`** (`nasnet_panel_db`) و
**Prometheus** (`nasnet_panel_prometheus`). این مسیر وقتی توصیه می‌شود که از قبل
Docker روی میزبان دارید و ترجیح می‌دهید خودتان پیکربندی را ویرایش کنید، نه اینکه
به یک ویزارد جواب بدهید.

## پیش از شروع

- Docker Engine و افزونهٔ Docker Compose نصب باشند.
- `JWT_SECRET_KEY` و `ADMIN_PASSWORD_HASH` شما ساخته شده باشند، همان‌طور که در
  [نصب](/fa/guides/nasnet-linux/install/) آمده است.
- پورت `9761` در دسترس باشد، یا مقدار دیگری برای `APP_PORT` آماده باشد.

## گام‌ها

1. مخزن را clone کنید و فایل پیکربندی خودتان را بسازید.

```bash
git clone https://github.com/nasnet-community/nasnet-panel-linux.git
cd nasnet-panel-linux
cp .env.example .env
```

2. `.env` را ویرایش کنید و دست‌کم `ADMIN_USERNAME`، `ADMIN_PASSWORD_HASH`،
`JWT_SECRET_KEY`، `APP_BASE_URL` و `DB_PASSWORD` را مقدار بدهید.

3. استک را بالا بیاورید و بالا آمدنش را تماشا کنید.

```bash
docker compose up -d
docker compose logs -f app
```

4. وقتی کانتینر `app` سلامت را گزارش داد، `APP_BASE_URL` خودتان را باز کنید و
وارد شوید. Compose سلامت برنامه را روی
`http://localhost:${APP_PORT}/health/ready` وارسی می‌کند.

### استفاده از SQLite به جای PostgreSQL

برای یک راه‌اندازی کوچک تک‌سروری می‌توانید کانتینر پایگاه‌داده را بردارید. این را
در `.env` بگذارید:

```dotenv
DB_DRIVER=sqlite
DB_PATH=/app/data/nasnet_panel.db
```

بعد با فایل override بالا بیاورید، که وابستگی به PostgreSQL را برمی‌دارد و یک
والیوم SQLite را mount می‌کند:

```bash
docker compose -f docker-compose.yml -f docker-compose.sqlite.yml up -d
```

### منتشر کردن پورت‌های پروکسی

فایل compose به‌طور پیش‌فرض فقط `${APP_PORT:-9761}` را منتشر می‌کند. پورت‌هایی که
inboundهای Xray شما روی آن‌ها گوش می‌دهند را به فهرست `ports` سرویس `app` اضافه
کنید، چون فایل یک نمونهٔ کامنت‌شده برای `443` دارد.

## مرجع

| مورد | مقدار |
| ---- | ----- |
| کانتینر برنامه | `nasnet_panel_backend` |
| کانتینر پایگاه‌داده | `nasnet_panel_db` (`postgres:16-alpine`) |
| کانتینر Prometheus | `nasnet_panel_prometheus` (`prom/prometheus:v3.2.1`) |
| پورت پنل | `${APP_PORT:-9761}` |
| پورت Prometheus | `${PROMETHEUS_PORT:-9090}` |
| وارسی سلامت | `/health/ready` |
| والیوم‌های نام‌دار | `postgres_data`، `acme_data`، `prometheus_data`، `xray_config`، `backups_data` |

سرویس `app` قابلیت‌های `NET_ADMIN` و `NET_BIND_SERVICE` را هم می‌گیرد تا Xray
بتواند پورت‌های ممتاز را بگیرد و رابط‌ها را مدیریت کند.

## رفع مشکلات

| نشانه | چه کنید |
| ----- | ------- |
| کانتینر برنامه پیش از آماده شدن Postgres دوباره راه می‌افتد. | Compose از قبل بالا آمدن `app` را به وارسی سلامت `pg_isready` پایگاه‌داده مشروط کرده است، پس حلقه خوردن در اینجا معمولاً یعنی `DB_PASSWORD` در `.env` با آن چیزی که کانتینر Postgres بار اول با آن راه‌اندازی شد نمی‌خواند. رمز در اولین بالا آمدن داخل `postgres_data` ثبت می‌شود، پس یا رمز اصلی را برگردانید یا والیوم را حذف کنید، که کار مخربی است. |

## مرتبط

- [نصب‌کنندهٔ راهنما](/fa/guides/nasnet-linux/install/installer-script/)
- [اولین اجرا و ورود مدیر](/fa/guides/nasnet-linux/first-run/)
- [پشتیبان‌گیری](/fa/guides/nasnet-linux/backup/)
