Good advice above especially splitting services instead of putting everything into one container.
For a PHP/MySQL/Apache CRM, a clean starting point is usually:
php:apache (or php:fpm + nginx) for the app
mysql as a separate container
- a reverse proxy container (nginx/traefik) for SSL and routing
- certbot (or built-in Traefik/NGINX automation) for Let’s Encrypt
That setup is easier to maintain, debug, and scale later. Starting from a full Ubuntu image usually makes the container heavier than necessary and harder to manage long term.
Also, if this CRM is expected to grow and collect a lot of operational data, it’s worth thinking ahead about analytics architecture too (not just app containers). Planning storage/ETL early can save a lot of rework later, something like data lake consulting can be useful when the project moves beyond the first deployment.