Herramientas de usuario

Herramientas del sitio


informatica:sistemas_operativos:virtualizacion:docker:docker_compose:lemp

¡Esta es una revisión vieja del documento!


Docker Compose: nginx + PHP + MariaDB

Despliegue de una arquitectura multicontenedor compuesta por un servidor web Ngin, un intérprete de PHP y un motor de base de datos MariaDB

Imágenes

La imagen de Adminer no es necesaria, aunque la incluyo por la comodida de tener una aplicación web para gestionar la base de datos y así no depender de tener instalado un cliente de base de datos

Ficheros

La estructura sería la siguiente:

├── app
├── docker
│   ├── nginx
│   │   ├── site.conf
│   ├── php
│   │   ├── Dockerfile
├── docker-compose.yml
  • app: directorio que va a servir nginx.
  • nginx/site.conf: configuración del virtual host de nginx.
  • php/Dockerfile: Dockerfile para adaptar la imagen de PHP a nuestro gusto.
  • docker-compose.yml

docker-compose.yml

version: '3'

services:
  webserver:
    image: nginx:alpine
    # For different app you can use different names. (eg: )
    #    container_name: web-server
    volumes:
      # app source code
      - ./app:/usr/share/nginx/html
      - ./config/nginx/site.conf:/etc/nginx/conf.d/default.conf
      # db data persistence
    ports:
      - 8080:80
  php:
    # image: php:fpm-alpine
    build: .
    volumes:
      - ./app:/usr/share/nginx/html
  database:
    image: mariadb:focal
    environment:
      - MYSQL_ROOT_PASSWORD=abcd1234.
  adminer:
    image: adminer
    restart: always
    ports: 
      - 8123:8080

Contenido del fichero site.conf:

server {
    listen 80;
    index index.php index.html;
    server_name localhost;
    root /usr/share/nginx/html/;

    location ~ \.php$ {
        try_files $uri =404;
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass php:9000;
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param PATH_INFO $fastcgi_path_info;
    }
}

El nombre del host que se le pasa a fastcgi_pass debe coincidir con lo establecido en container_name.

Dockerfile

En este fichero modificaremos la imagen de base de PHP para adaptarlo a nuestros requisitos:

FROM php:fpm-alpine
 
# Modificamos UID y GID del usuario www-data para que coincida con el
# del usuario que ejecuta el servidor web en el contenedor con nginx
# Si no fuese Alpine, se podría hacer con `usermod -u <UID> www-data`
# Más info: 
# https://stackoverflow.com/questions/36824222/how-to-change-the-nginx-process-user-of-the-official-docker-image-nginx
 
RUN deluser www-data && adduser -DH -h /home/www-data -s /sbin/nologin -u 101 www-data
RUN docker-php-ext-install mysqli pdo_mysql
informatica/sistemas_operativos/virtualizacion/docker/docker_compose/lemp.1621166809.txt.gz · Última modificación: por tempwin