AGRO-ERP is a full-featured, cloud-native Enterprise Resource Planning (ERP) platform purpose-built for agricultural processing, olive & seed oil pressing, raw material inventory, batch costing, supplier pricing matrices, and export management.
tabular-nums), currency converters, and dynamic locale switching.#F9F8F6) and deep slate dark mode, responsive collapsible icon-rail navigation, and mobile slide-over drawers.8080.Official Docker Hub Repository: naif775devops/agro19portal.com
| Image Role | Tag | Description | Size |
|---|---|---|---|
| Backend & Workers | v1.0.0 / 1.0.0 | Recommended Production Release. PHP 8.3 FPM, Composer, Livewire runtime. | ~257 MB |
| Backend (Latest) | latest / app-latest | Rolling latest build of the backend container. | ~257 MB |
| Web Server (Nginx) | web-v1.0.0 | Production Nginx Alpine with pre-compiled Vite JS/CSS assets baked in. | ~64 MB |
| Web Server (Latest) | web-latest | Rolling latest build of the Nginx web container. | ~64 MB |
Deploying AGRO-ERP on any VPS, cloud instance, or on-premise Docker server takes less than 2 minutes using the provided docker-compose-prod.yml.
mkdir -p /opt/agro-erp && cd /opt/agro-erp
docker-compose-prod.ymlcurl -fsSL https://raw.githubusercontent.com/naif-saleh/agro-erp/develop/docker-compose-prod.yml -o docker-compose-prod.yml
.env Production Environment FileCreate a .env file in the same directory:
cat << 'EOF' > .env
APP_NAME=AGRO-ERP
APP_ENV=production
APP_KEY=base64:KbnNDxbijxbhBS1NHElZKKRlPkrvcKL0AWxJwHsyKQI=
APP_DEBUG=false
APP_URL=http://your-domain-or-ip
APP_LOCALE=ar
APP_FALLBACK_LOCALE=en
# Database Configuration
DB_CONNECTION=mysql
DB_HOST=db
DB_PORT=3306
DB_DATABASE=agro_erp
DB_USERNAME=agro_user
DB_PASSWORD=YourStrongDatabasePassword123!
DB_FORWARD_PORT=3307
# Redis Configuration
REDIS_CLIENT=predis
REDIS_HOST=redis
REDIS_PASSWORD=null
REDIS_PORT=6379
REDIS_FORWARD_PORT=6380
CACHE_STORE=redis
QUEUE_CONNECTION=redis
SESSION_DRIVER=database
# WebSockets (Laravel Reverb)
BROADCAST_CONNECTION=reverb
REVERB_APP_ID=669658
REVERB_APP_KEY=m1sdy0kbkj1wxqbdourd
REVERB_APP_SECRET=i94xl6nochsadfxfmlng
REVERB_HOST=0.0.0.0
REVERB_PORT=8080
REVERB_SCHEME=http
# Port Bindings
APP_PORT=80
EOF
Tip
Generate a new unique `APP_KEY` if desired by executing: `docker run --rm naif775devops/agro19portal.com:v1.0.0 php artisan key:generate --show`
docker compose -f docker-compose-prod.yml up -d
Check the health status of running services:
docker compose -f docker-compose-prod.yml ps
All 6 services will initialize automatically:
agro_app: PHP-FPM core application engineagro_web: Nginx reverse proxy serving port 80agro_db: MySQL 8.0 database engine (healthy with ping checks)agro_redis: Redis 7.0 in-memory cache & queuesagro_worker: Laravel Horizon background queue daemonagro_scheduler: Background cron task runneragro_reverb: High-throughput WebSocket server on port 8080Upon first startup, the database migrations and seeders execute automatically:
http://<YOUR_SERVER_IP>[email protected]passwordImportant
Change the default admin password immediately upon first login under **Settings > Users**.
# View all services in real-time
docker compose -f docker-compose-prod.yml logs -f
# View application errors specifically
docker compose -f docker-compose-prod.yml logs -f app
# Clear & rebuild application caches
docker exec -it agro_app php artisan optimize:clear
docker exec -it agro_app php artisan optimize
# Run database migrations manually
docker exec -it agro_app php artisan migrate --force
# Access Laravel Tinker shell
docker exec -it agro_app php artisan tinker
# Backup MySQL database
docker exec agro_db mysqldump -u agro_user -pYourStrongDatabasePassword123! agro_erp > backup_$(date +%F).sql
# Restore MySQL database
docker exec -i agro_db mysql -u agro_user -pYourStrongDatabasePassword123! agro_erp < backup_file.sql
graph TD
Client[Browser / Mobile Client] -->|Port 80 HTTP| Web[agro_web / Nginx Alpine]
Client -->|Port 8080 WS| Reverb[agro_reverb / WebSockets]
Web -->|FastCGI 9000| App[agro_app / PHP 8.3-FPM]
App --> DB[(agro_db / MySQL 8.0)]
App --> Redis[(agro_redis / Redis 7)]
Worker[agro_worker / Horizon] --> Redis
Worker --> DB
Scheduler[agro_scheduler / Cron] --> App
80 and 443 (HTTP/HTTPS) and 8080 (WebSockets) publicly. Keep 3307 and 6380 closed or bound to 127.0.0.1.agro_web to terminate SSL certificates.APP_DEBUG=false in production .env.db-data), Redis data (redis-data), and user documents (storage-data) are stored in named Docker volumes and will never be lost across container restarts or image upgrades.Maintained by Naif Saleh (naif775devops). Repository: naif-saleh/agro-erp
Content type
Image
Digest
sha256:9a0eeb2b4…
Size
321.8 MB
Last updated
about 14 hours ago
docker pull naif775devops/agro19portal.com