Despliegue de Nginx con Docker: Configuración y Ejemplo Práctico

Obtener y ejecutar el contenedor de Nginx

Para iniciar, descarguemos la imagen oficial de Nginx y ejecutemos un contenedor básico.

$ docker pull nginx
$ docker run --name servidor-nginx-prueba -p 9090:80 -d nginx

Preparar la estructura de diretcorios

Creemos directorios en el host para almacenar contenido web, registros y configuraciones personalizadas.

$ mkdir -p ~/proyecto-nginx/www ~/proyecto-nginx/logs ~/proyecto-nginx/conf

Copiar archivos de configuración iniciales

Extraigamos el archivo de configuración predeterminado del contenedor en ejecución para usarlo como base.

$ docker cp ID_CONTENEDOR:/etc/nginx/nginx.conf ~/proyecto-nginx/conf/nginx.conf
  • www: Se mapeará como el directorio raíz de documentos en el contenedor.
  • logs: Almacenará los archivos de registro generados por Nginx.
  • conf: Contendrá las configuraciones principales que se aplicarán al contenedor.

Ejecutar Nginx con volúmenes montados

Configuremos el contneedor para que utilice nuestros directorios locales, asegurando persistencia y personalización.

$ docker run -d -p 9091:80 \
    --name servidor-nginx-prod \
    -v ~/proyecto-nginx/www:/var/www/html \
    -v ~/proyecto-nginx/conf/nginx.conf:/etc/nginx/nginx.conf \
    -v ~/proyecto-nginx/logs:/var/log/nginx \
    nginx
  • -p 9091:80: Redirige el puerto 80 del contenedor al puerto 9091 del host.
  • --name servidor-nginx-prod: Asigna un nombre identificativo al contenedor.
  • -v ~/proyecto-nginx/www:/var/www/html: Sincroniza el directorio local www con la ruta de contenido web del conteneder.
  • -v ~/proyecto-nginx/conf/nginx.conf:/etc/nginx/nginx.conf: Sustituye la configuración predeterminada por la nuestra.
  • -v ~/proyecto-nginx/logs:/var/log/nginx: Centraliza los registros en el host.

Desplegar archivos estáticos

Ubica los archivos de tu aplicación web, como HTML, CSS y JavaScript, en el directorio ~/proyecto-nginx/www. Para aplicar cambios en la configuración sin detener el servicio, envía una señal al contenedor o reinícialo.

$ docker kill -s HUP nombre-del-contenedor
$ docker restart nombre-del-contenedor

Configurar Nginx para aplicaciones SPA (Single Page Application)

Para que las rutas de aplicaciones basadas en frameworks como Vue.js o React funcionen correctamente, modifica el bloque de servidor en nginx.conf usando try_files.

location / {
    try_files $uri $uri/ /index.html;
}

A continuación, un ejemplo de archivo nginx.conf completo adaptado para una aplicación con modo historial HTML5.

user  nginx;
worker_processes  auto;

error_log  /var/log/nginx/error.log info;
pid        /tmp/nginx.pid;

events {
    worker_connections  1024;
    multi_accept on;
}

http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  avanzado  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  avanzado;

    sendfile        on;
    tcp_nopush      on;
    tcp_nodelay     on;

    keepalive_timeout  65;

    gzip  on;
    gzip_types text/plain text/css application/json application/javascript text/xml;

    include /etc/nginx/conf.d/*.conf;

    server {
        listen 8080 default_server;
        listen [::]:8080 default_server;

        root /var/www/html;
        index index.htm;

        location / {
            try_files $uri $uri/ @redirects;
        }

        location @redirects {
            rewrite ^(.*)$ /index.htm last;
        }

        location ~* \.(?:ico|css|js|woff2?|ttf|svg|png|jpg|jpeg|gif)$ {
            expires 1y;
            add_header Cache-Control "public, immutable";
            access_log off;
        }
    }
}

Etiquetas: Docker Nginx nginx.conf html5-history-mode despliegue

Publicado el 6-9 21:12