141 lines
4.2 KiB
YAML
141 lines
4.2 KiB
YAML
# ============================================================
|
|
# سيرو في حاويات — نسخة واحدة كاملة على سيرفر واحد
|
|
# ============================================================
|
|
# المبدأ: التقسيم بالدور (nginx / fpm / سوكيتات / mysql / redis)
|
|
# لا حاوية-واحدة-فيها-كل-شيء، ولا تفتيت microservices.
|
|
# الأداء = نفس العمليات على نفس النواة؛ الفرق تشغيلي فقط.
|
|
#
|
|
# التشغيل: docker compose up -d --build (انظر README.md)
|
|
# ============================================================
|
|
|
|
name: siro
|
|
|
|
services:
|
|
nginx:
|
|
image: nginx:1.27-alpine
|
|
ports:
|
|
- "${HTTP_PORT:-8080}:80"
|
|
volumes:
|
|
- ./nginx/default.conf:/etc/nginx/conf.d/default.conf:ro
|
|
- ../backend:/var/www/backend:ro
|
|
- ../payment_server/v2:/var/www/v2:ro
|
|
depends_on:
|
|
- php
|
|
mem_limit: 256m
|
|
restart: unless-stopped
|
|
|
|
# php-fpm واحدة تخدم كل الخدمات الطلبية (backend + payment v2)
|
|
# التقسيم لأبعد من هذا لا يضيف أداءً — نفس الصورة، نفس النواة.
|
|
php:
|
|
build:
|
|
context: ./php
|
|
dockerfile: Dockerfile.fpm
|
|
args:
|
|
PHP_VERSION: "${PHP_VERSION:-8.2}"
|
|
volumes:
|
|
- ../backend:/var/www/backend
|
|
- ../payment_server/v2:/var/www/v2
|
|
- ./php/opcache.ini:/usr/local/etc/php/conf.d/zz-opcache.ini:ro
|
|
- ./php/www-pool.conf:/usr/local/etc/php-fpm.d/zz-pool.conf:ro
|
|
- ./keys:/keys:ro
|
|
env_file: .env
|
|
depends_on:
|
|
- mysql
|
|
- redis
|
|
mem_limit: 2g
|
|
restart: unless-stopped
|
|
|
|
# سوكيت السائقين (Workerman + PHPSocketIO) — WS بورت 2020 + HTTP داخلي 2021
|
|
# عملية دائمة، لا علاقة لها بـ fpm — حاوية مستقلة إجبارياً.
|
|
socket_driver:
|
|
build:
|
|
context: ./php
|
|
dockerfile: Dockerfile.socket
|
|
args:
|
|
PHP_VERSION: "${PHP_VERSION:-8.2}"
|
|
command: ["php", "driver_socket.php", "start"]
|
|
working_dir: /app
|
|
volumes:
|
|
- ../loction_server:/app
|
|
- ./keys:/keys:ro
|
|
env_file: .env
|
|
ports:
|
|
- "2020:2020" # WS للسائقين — عام
|
|
# 2021 داخلي فقط: الباك إند يناديه عبر http://socket_driver:2021
|
|
depends_on:
|
|
- redis
|
|
mem_limit: 768m
|
|
restart: unless-stopped
|
|
|
|
# سوكيت الركاب (ride_server) — WS بورت 3030 + HTTP داخلي 3031
|
|
socket_passenger:
|
|
build:
|
|
context: ./php
|
|
dockerfile: Dockerfile.socket
|
|
args:
|
|
PHP_VERSION: "${PHP_VERSION:-8.2}"
|
|
command: ["php", "passenger_socket.php", "start"]
|
|
working_dir: /app
|
|
volumes:
|
|
- ../ride_server:/app
|
|
- ./keys:/keys:ro
|
|
env_file: .env
|
|
ports:
|
|
- "3030:3030"
|
|
depends_on:
|
|
- redis
|
|
mem_limit: 512m
|
|
restart: unless-stopped
|
|
|
|
mysql:
|
|
image: mysql:8.4
|
|
environment:
|
|
MYSQL_ROOT_PASSWORD: "${MYSQL_ROOT_PASSWORD:?set in .env}"
|
|
# بيانات القاعدة على volume مسمّى — يتجاوز overlayfs = أداء قرص شبه أصلي.
|
|
volumes:
|
|
- mysql-data:/var/lib/mysql
|
|
- ./mysql/init:/docker-entrypoint-initdb.d:ro
|
|
command:
|
|
- --innodb-buffer-pool-size=1G
|
|
- --max-connections=300
|
|
- --innodb-flush-log-at-trx-commit=1
|
|
- --slow-query-log=1
|
|
- --long-query-time=0.2
|
|
- --slow-query-log-file=/var/lib/mysql/slow.log
|
|
ports:
|
|
- "127.0.0.1:33061:3306" # للإدارة من السيرفر نفسه فقط — ليس للعامة
|
|
mem_limit: 2560m
|
|
restart: unless-stopped
|
|
|
|
phpmyadmin:
|
|
image: phpmyadmin/phpmyadmin
|
|
environment:
|
|
PMA_HOST: mysql
|
|
PMA_PORT: 3306
|
|
UPLOAD_LIMIT: 300M
|
|
ports:
|
|
- "8082:80" # ادخل عليه عبر http://your-domain:8082 أو افتح بورت 8082 في CloudPanel
|
|
depends_on:
|
|
- mysql
|
|
mem_limit: 256m
|
|
restart: unless-stopped
|
|
|
|
redis:
|
|
image: redis:7-alpine
|
|
command:
|
|
- redis-server
|
|
- --maxmemory
|
|
- 400mb
|
|
- --maxmemory-policy
|
|
- noeviction
|
|
- --appendonly
|
|
- "yes"
|
|
volumes:
|
|
- redis-data:/data
|
|
mem_limit: 512m
|
|
restart: unless-stopped
|
|
|
|
volumes:
|
|
mysql-data:
|
|
redis-data:
|