Sign inSign up

naif775devops/assendline-erp

By naif775devops

Updated 3 days ago

Image
0

1.7K

naif775devops/assendline-erp repository overview

AscendLine ERP — دليل التشغيل والنشر على Docker Hub

المستودع الرسمي لصورة AscendLine ERP: نظام إدارة الموارد المالية والإدارية متكامل.

  • رابط المستودع (Repository): naif775devops/assendline-erp
  • بيئة التشغيل الأساسية: PHP 8.3-FPM (Debian Bookworm) مزود بالمعالجات المحسنة (Opcache, Redis client, PDO MySQL, GD).

🏷️ وسم الصور والتراجع عند المشاكل (Tags & Rollback Strategy)

يتم رفع وسوم (Tags) متعددة مع كل إصدار لمنحك المرونة الكاملة والتراجع الفوري لأي إصدار سابق عند الحاجة:

الوسم (Tag)الاستخداممثال
latestيعكس دائماً أحدث بناء مستقر تم رفعه على النظامnaif775devops/assendline-erp:latest
v1.0.0وسم الإصدار المحدد (Release Version) للتثبيت المستقرnaif775devops/assendline-erp:v1.0.0
🔄 كيفية التراجع لإصدار سابق (Rollback):

في حال واجهتك أي مشكلة في أحدث إصدار، يمكنك بكل بساطة تغيير الوسم في ملف docker-compose.yml من latest إلى رقم الإصدار المضمون السابق مثل v1.0.0:

services:
  app:
    image: naif775devops/assendline-erp:v1.0.0
  queue:
    image: naif775devops/assendline-erp:v1.0.0

ثم تشغيل الأمر:

docker compose up -d

🚀 ملف التشغيل الإنتاجي (docker-compose.yml)

قم بنسخ هذا الملف وتسميته docker-compose.yml في سيرفر التشغيل:

version: '3.8'

services:
  # 1. Traefik Reverse Proxy & Automatic SSL (Let's Encrypt)
  traefik:
    image: traefik:v3.0
    container_name: ascendline_traefik
    restart: always
    command:
      - "--api.dashboard=true"
      - "--api.insecure=false"
      - "--providers.docker=true"
      - "--providers.docker.exposedbydefault=false"
      - "--entrypoints.web.address=:80"
      - "--entrypoints.websecure.address=:443"
      - "--certificatesresolvers.myresolver.acme.httpchallenge=true"
      - "--certificatesresolvers.myresolver.acme.httpchallenge.entrypoint=web"
      - "--certificatesresolvers.myresolver.acme.email=${ACME_EMAIL:[email protected]}"
      - "--certificatesresolvers.myresolver.acme.storage=/letsencrypt/acme.json"
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - "/var/run/docker.sock:/var/run/docker.sock:ro"
      - "traefik_letsencrypt:/letsencrypt"
    networks:
      - ascendline_net

  # 2. AscendLine ERP Core App (PHP 8.3 FPM)
  app:
    image: naif775devops/assendline-erp:v1.0.0
    container_name: ascendline_app
    restart: always
    env_file:
      - .env
    volumes:
      - app_storage:/var/www/html/storage
    depends_on:
      - db
      - redis
    networks:
      - ascendline_net

  # 3. Nginx Web Server (Serves static assets & handles FastCGI)
  web:
    image: nginx:1.25-alpine
    container_name: ascendline_web
    restart: always
    ports:
      - "8000:80"
    volumes:
      - ./docker/nginx/nginx.conf:/etc/nginx/conf.d/default.conf:ro
      - app_storage:/var/www/html/storage:ro
    depends_on:
      - app
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.ascendline.rule=Host(`${DOMAIN:-erp.ascendline.com}`)"
      - "traefik.http.routers.ascendline.entrypoints=websecure"
      - "traefik.http.routers.ascendline.tls.certresolver=myresolver"
      - "traefik.http.services.ascendline.loadbalancer.server.port=80"
    networks:
      - ascendline_net

  # 4. MySQL 8.0 Database
  db:
    image: mysql:8.0
    container_name: ascendline_db
    restart: always
    environment:
      MYSQL_DATABASE: ${DB_DATABASE:-ascendline_erp}
      MYSQL_USER: ${DB_USERNAME:-ascendline}
      MYSQL_PASSWORD: ${DB_PASSWORD:-secret_password}
      MYSQL_ROOT_PASSWORD: ${DB_ROOT_PASSWORD:-root_secret_password}
    volumes:
      - db_data:/var/lib/mysql
    networks:
      - ascendline_net

  # 5. Redis Cache & Queue Broker
  redis:
    image: redis:7-alpine
    container_name: ascendline_redis
    restart: always
    command: redis-server --requirepass ${REDIS_PASSWORD:-secret_redis_pass}
    volumes:
      - redis_data:/data
    networks:
      - ascendline_net

  # 6. Background Queue Worker
  queue:
    image: naif775devops/assendline-erp:v1.0.0
    container_name: ascendline_queue
    restart: always
    command: php artisan queue:work --tries=3 --timeout=90
    env_file:
      - .env
    volumes:
      - app_storage:/var/www/html/storage
    depends_on:
      - app
      - redis
      - db
    networks:
      - ascendline_net

volumes:
  db_data:
  redis_data:
  app_storage:
  traefik_letsencrypt:

networks:
  ascendline_net:
    driver: bridge

⚙️ ملف المتغيرات الإعدادية (.env)

قم بإنشاء ملف باسم .env بجانب ملف docker-compose.yml وضعه بالمتغيرات التالية:

APP_NAME="AscendLine ERP"
APP_ENV=production
APP_KEY=base64:YOUR_GENERATED_32_CHAR_APP_KEY_HERE
APP_DEBUG=false
APP_URL=https://erp.ascendline.com

# Domain & SSL Settings
DOMAIN=erp.ascendline.com
[email protected]

# Database Settings
DB_CONNECTION=mysql
DB_HOST=db
DB_PORT=3306
DB_DATABASE=ascendline_erp
DB_USERNAME=ascendline
DB_PASSWORD=change_this_secure_password
DB_ROOT_PASSWORD=change_this_root_password

# Redis Settings
REDIS_HOST=redis
REDIS_PASSWORD=change_this_redis_password
REDIS_PORT=6379

SESSION_DRIVER=redis
CACHE_STORE=redis
QUEUE_CONNECTION=redis

FILESYSTEM_DISK=local
BACKUP_DISK=backups

🛠️ خطوات التشغيل لأول مرة (Deployment Steps)

  1. إنشاء مفتاح التطبيق (App Key):
    docker run --rm naif775devops/assendline-erp:v1.0.0 php artisan key:generate --show
    
  2. بدء التشغيل بالكامل:
    docker compose up -d
    
  3. التحقق من حالة الحاويات:
    docker compose ps
    

Tag summary

Content type

Image

Digest

sha256:63492189f

Size

403.7 MB

Last updated

3 days ago

docker pull naif775devops/assendline-erp