diff --git a/back/Dockerfile b/back/Dockerfile index dbf3ae5..d048dfe 100644 --- a/back/Dockerfile +++ b/back/Dockerfile @@ -49,7 +49,15 @@ RUN echo "opcache.enable=1" >> /usr/local/etc/php/conf.d/opcache.ini \ # PHP production settings RUN echo "upload_max_filesize=20M" >> /usr/local/etc/php/conf.d/uploads.ini \ - && echo "post_max_size=25M" >> /usr/local/etc/php/conf.d/uploads.ini + && echo "post_max_size=25M" >> /usr/local/etc/php/conf.d/uploads.ini \ + && echo "memory_limit=128M" >> /usr/local/etc/php/conf.d/uploads.ini \ + && echo "max_execution_time=60" >> /usr/local/etc/php/conf.d/uploads.ini + +# PHP-FPM pool settings para 100 usuarios concurrentes +RUN sed -i 's/pm.max_children = 5/pm.max_children = 15/' /usr/local/etc/php-fpm.d/www.conf \ + && sed -i 's/pm.start_servers = 2/pm.start_servers = 5/' /usr/local/etc/php-fpm.d/www.conf \ + && sed -i 's/pm.min_spare_servers = 1/pm.min_spare_servers = 3/' /usr/local/etc/php-fpm.d/www.conf \ + && sed -i 's/pm.max_spare_servers = 3/pm.max_spare_servers = 10/' /usr/local/etc/php-fpm.d/www.conf WORKDIR /var/www/html diff --git a/docker-compose.prod.yml b/docker-compose.prod.yml index faa3617..8ed10fa 100644 --- a/docker-compose.prod.yml +++ b/docker-compose.prod.yml @@ -3,6 +3,7 @@ services: image: nginx:alpine container_name: admision_prod_nginx restart: unless-stopped + mem_limit: 64m ports: - "127.0.0.1:${APP_PORT:-8080}:80" volumes: @@ -18,6 +19,7 @@ services: image: ghcr.io/${GITHUB_REPO:-usuario/repo}/backend:${IMAGE_TAG:-latest} container_name: admision_prod_backend restart: unless-stopped + mem_limit: 1g env_file: - .env.prod volumes: @@ -38,6 +40,7 @@ services: image: ghcr.io/${GITHUB_REPO:-usuario/repo}/frontend:${IMAGE_TAG:-latest} container_name: admision_prod_frontend restart: unless-stopped + mem_limit: 64m networks: - admision_net @@ -45,6 +48,7 @@ services: image: mysql:8.0 container_name: admision_prod_db restart: unless-stopped + mem_limit: 512m ports: - "127.0.0.1:3306:3306" environment: @@ -52,6 +56,7 @@ services: MYSQL_DATABASE: ${DB_DATABASE:-admision_2026} volumes: - mysql_data:/var/lib/mysql + - ./mysql/my.cnf:/etc/mysql/conf.d/custom.cnf:ro healthcheck: test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-p${DB_PASSWORD}"] interval: 10s diff --git a/mysql/my.cnf b/mysql/my.cnf new file mode 100644 index 0000000..ffc4c60 --- /dev/null +++ b/mysql/my.cnf @@ -0,0 +1,10 @@ +[mysqld] +# Memoria +innodb_buffer_pool_size = 128M +innodb_log_buffer_size = 16M + +# Conexiones (suficiente para 100 usuarios) +max_connections = 50 + +# Deshabilitar herramienta de diagnostico que consume ~70MB RAM innecesariamente +performance_schema = OFF