Hoshpoint
اجرای پروژه با Docker در Production
ابتدا Docker Desktop را اجرا کنید و فایل env پروداکشن را بسازید:
cp .env.production.example .env.production
php artisan key:generate --show
خروجی را کپی کنید و داخل .env.production بگذارید (خط APP_KEY نباید خالی بماند):
APP_KEY=base64:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
سپس APP_URL، HTTP_PORT، DB_PASSWORD، MARIADB_PASSWORD و MARIADB_ROOT_PASSWORD را هم تغییر دهید. مقدار پیشفرض HTTP_PORT=8080 است.
اگر قبلاً بدون APP_KEY کانتینرها را بالا آوردهاید، بعد از پر کردن کلید اینها را اجرا کنید:
docker compose --env-file .env.production exec app php artisan config:clear
docker compose --env-file .env.production restart app queue scheduler
برای build کردن imageها:
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 جدا بالا بیاورید:
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 از این دستور استفاده کنید:
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 هم تنظیم کنید:
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 تنظیم کنید:
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
برای اینکه درخواستهای خروجی خود اپلیکیشن هم از پروکسی رد شوند:
APP_HTTP_PROXY=http://vless-proxy:8080 \
APP_HTTPS_PROXY=http://vless-proxy:8080 \
docker compose --env-file .env.production --profile proxy up -d
اول دیتابیس را بالا بیاورید:
docker compose --env-file .env.production up -d mariadb
بعد migrationها را اجرا کنید:
docker compose --env-file .env.production run --rm app php artisan migrate --force --seed
حالا همه سرویسها را بالا بیاورید:
docker compose --env-file .env.production up -d
سایت از طریق پورت تنظیمشده در HTTP_PORT در دسترس است. مقدار پیشفرض:
http://localhost:8080
برای تغییر پورت، مقدار زیر را در .env.production عوض کنید و سرویس nginx را دوباره بالا بیاورید:
HTTP_PORT=8081
docker compose --env-file .env.production up -d --force-recreate nginx
برای دیدن وضعیت سرویسها:
docker compose --env-file .env.production ps
برای دیدن لاگها:
docker compose --env-file .env.production logs -f
برای اجرای دستورهای Artisan داخل کانتینر:
docker compose --env-file .env.production exec app php artisan about
برای متوقف کردن سرویسها:
docker compose --env-file .env.production down
برای حذف کامل دیتای دیتابیس و volumeها، فقط وقتی مطمئن هستید:
docker compose --env-file .env.production down -v
خطای No application encryption key has been specified
یعنی APP_KEY در .env.production خالی است یا بعد از تغییر env، cache قدیمی مانده.
- مقدار
APP_KEYرا در.env.productionتنظیم کنید. - cache را پاک و سرویسها را restart کنید:
docker compose --env-file .env.production exec app php artisan config:clear
docker compose --env-file .env.production restart app queue scheduler