### Hoshpoint ## اجرای پروژه با Docker در Production ابتدا Docker Desktop را اجرا کنید و فایل env پروداکشن را بسازید: ```bash cp .env.production.example .env.production php artisan key:generate --show ``` خروجی را کپی کنید و داخل `.env.production` بگذارید (خط `APP_KEY` نباید خالی بماند): ```env APP_KEY=base64:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx= ``` سپس `APP_URL`، `HTTP_PORT`، `DB_PASSWORD`، `MARIADB_PASSWORD` و `MARIADB_ROOT_PASSWORD` را هم تغییر دهید. مقدار پیش‌فرض `HTTP_PORT=8080` است. اگر قبلاً بدون `APP_KEY` کانتینرها را بالا آورده‌اید، بعد از پر کردن کلید این‌ها را اجرا کنید: ```bash docker compose --env-file .env.production exec app php artisan config:clear docker compose --env-file .env.production restart app queue scheduler ``` برای build کردن imageها: ```bash docker compose --env-file .env.production build ``` ### حالت fallback با VLESS/Xray کانفیگ VLESS داخل `docker/xray/config.local.json` قرار دارد و این فایل در git ignore شده است. فایل نمونه‌ی بدون اطلاعات اتصال هم در `docker/xray/config.example.json` موجود است. اگر این فایل local را نداشتید، از نمونه کپی بگیرید و مقدارهای اتصال را پر کنید. برای وقتی که اینترنت مستقیم یا mirrorها درست جواب نمی‌دهند، اول پروکسی را با profile جدا بالا بیاورید: ```bash docker compose --env-file .env.production --profile proxy up -d vless-proxy ``` پروکسی HTTP روی سیستم میزبان از `127.0.0.1:2080` و SOCKS از `127.0.0.1:2081` در دسترس است. برای build stepهای داخل Dockerfile از این دستور استفاده کنید: ```bash DOCKER_BUILD_HTTP_PROXY=http://host.docker.internal:2080 \ DOCKER_BUILD_HTTPS_PROXY=http://host.docker.internal:2080 \ docker compose --env-file .env.production build ``` اگر خود pull کردن imageهای Docker مشکل داشت، این پروکسی را در Docker Desktop هم تنظیم کنید: ```text HTTP proxy: http://127.0.0.1:2080 HTTPS proxy: http://127.0.0.1:2080 ``` برای Debian apt، پیش‌فرض روی repository رسمی Debian می‌ماند چون mirror آروان ممکن است با نسخه‌ی base image sync نباشد و dependency conflict بدهد. اگر عمداً خواستید apt را هم به mirror دیگری ببرید، این متغیرها را هنگام build تنظیم کنید: ```bash DEBIAN_APT_MIRROR=http://mirror.example/debian \ DEBIAN_SECURITY_APT_MIRROR=http://mirror.example/debian-security \ DEBIAN_APT_DISABLE_UPDATES=true \ docker compose --env-file .env.production build ``` برای اینکه درخواست‌های خروجی خود اپلیکیشن هم از پروکسی رد شوند: ```bash APP_HTTP_PROXY=http://vless-proxy:8080 \ APP_HTTPS_PROXY=http://vless-proxy:8080 \ docker compose --env-file .env.production --profile proxy up -d ``` اول دیتابیس را بالا بیاورید: ```bash docker compose --env-file .env.production up -d mariadb ``` بعد migrationها را اجرا کنید: ```bash docker compose --env-file .env.production run --rm app php artisan migrate --force --seed ``` حالا همه سرویس‌ها را بالا بیاورید: ```bash docker compose --env-file .env.production up -d ``` سایت از طریق پورت تنظیم‌شده در `HTTP_PORT` در دسترس است. مقدار پیش‌فرض: ```text http://localhost:8080 ``` برای تغییر پورت، مقدار زیر را در `.env.production` عوض کنید و سرویس `nginx` را دوباره بالا بیاورید: ```env HTTP_PORT=8081 ``` ```bash docker compose --env-file .env.production up -d --force-recreate nginx ``` برای دیدن وضعیت سرویس‌ها: ```bash docker compose --env-file .env.production ps ``` برای دیدن لاگ‌ها: ```bash docker compose --env-file .env.production logs -f ``` برای اجرای دستورهای Artisan داخل کانتینر: ```bash docker compose --env-file .env.production exec app php artisan about ``` برای متوقف کردن سرویس‌ها: ```bash docker compose --env-file .env.production down ``` برای حذف کامل دیتای دیتابیس و volumeها، فقط وقتی مطمئن هستید: ```bash docker compose --env-file .env.production down -v ``` ## خطای `No application encryption key has been specified` یعنی `APP_KEY` در `.env.production` خالی است یا بعد از تغییر env، cache قدیمی مانده. 1. مقدار `APP_KEY` را در `.env.production` تنظیم کنید. 2. cache را پاک و سرویس‌ها را restart کنید: ```bash docker compose --env-file .env.production exec app php artisan config:clear docker compose --env-file .env.production restart app queue scheduler ```