FeaturedNOTICIAS

Cómo ejecutar NGINX Inside Docker (para un escalado automático fácil) – CloudSavvy IT


Logotipo de Docker

Una de las cargas de trabajo más comunes de Docker es usarlo para contener servidores web como NGINX y Apache para ejecutar una flota de entrega de contenido de alto rendimiento que se puede escalar fácilmente y administrar automáticamente. Le mostraremos cómo configurarlo con NGINX.

Configuración de NGINX dentro de Docker

Docker es una plataforma de contenedorización que se utiliza para empaquetar su aplicación y todo su código en una única imagen de contenedor fácilmente administrable. El proceso para hacer esto es bastante similar a cómo configuraría un nuevo servidor: el contenedor es una pizarra en blanco, por lo que deberá instalar dependencias, crear su propio código, copiar los artefactos de compilación y copiar cualquier configuración. Afortunadamente, no es necesario automatizar tanto. NGINX ya tiene un contenedor Docker disponible públicamente, que puede usar como punto de partida para su aplicación.

Por supuesto, dependiendo de la aplicación que esté contenedorizando, esto puede ser un poco más complicado. Si está implementando un CMS como WordPress, es probable que necesite una base de datos externa, ya que los contenedores no están diseñados para ser persistentes. Un buen punto de partida para WordPress, en particular, sería el contenedor de WordPress Docker.

Para tener algo un poco más complicado que una simple página web de Hello World, crearemos un nuevo directorio de proyecto e inicializaremos una aplicación básica de Vue.js. Su configuración será diferente según el contenido que esté ofreciendo, pero la idea general es la misma.

plantilla de proyecto

En la raíz de su proyecto, cree un nuevo archivo llamado simplemente Dockerfile sin extensión. Esto actuará como la configuración de construcción. De forma predeterminada, el contenedor está vacío e incluye solo aplicaciones y dependencias instaladas con la imagen base. Deberá copiar el código de su aplicación; Si solo está ofreciendo contenido estático, esto es fácil, pero si está trabajando con aplicaciones del lado del servidor como WordPress, es posible que deba instalar dependencias adicionales.

La siguiente configuración es bastante simple. Dado que esta es una aplicación de nodo, necesitamos ejecutar npm run build para tener una construcción lista para su distribución. Podemos manejar todo esto en el Dockerfile, configurando una compilación de contenedor de dos partes:

FROM node:latest as build-stage
WORKDIR /src
COPY package*.json ./
RUN npm install
COPY ./ .
RUN npm run build

FROM nginx as production-stage
RUN mkdir /src
COPY --from=build-stage /src/dist /src
COPY nginx.conf /etc/nginx/nginx.conf

La primera linea FROM el comando tira del node contenedor de Docker Hub y cree un nuevo contenedor llamado build-stage. El siguiente cd‘conoce ese directorio y copia package.json. Entonces, funciona npm install, luego copie el código de la aplicación e inicie el proceso de compilación. Si su aplicación necesita ser compilada desde la fuente, le recomendamos hacer algo similar a esto.

El siguiente estado lanza el nginx contenedor para servir como distribución de la producción. hace el src directorio y luego copiar, desde build-stage contenedor, el /src/dist/ carpeta que contiene los artefactos de compilación, además de la /src Carpeta contenedor de producción. Luego copie a un archivo de configuración NGINX.

También necesitará crear un nuevo archivo llamado .dockerignore, para decirle que ignore node_modules así como cualquier artefacto de construcción de construcciones locales.

**/node_modules
**/dist

El Dockerfile se refiere a un nginx.conf, que también deberá crear. Si está ejecutando una configuración más compleja con varias configuraciones en el /sites-available, es posible que desee crear una nueva carpeta para su configuración NGINX y copiarla.

user  nginx;
worker_processes  1;
error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;
events {
  worker_connections  1024;
}
http {
  include       /etc/nginx/mime.types;
  default_type  application/octet-stream;
  log_format  main  '$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  main;
  sendfile        on;
  keepalive_timeout  65;
  server {
    listen       80;
    server_name  localhost;
    location / {
      root   /src;
      index  index.html;
      try_files $uri $uri/ /index.html;
    }
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
      root   /usr/share/nginx/html;
    }
  }
}

Este es solo un servidor web HTTP. La forma más sencilla de configurar HTTPS sería ejecutar el certbot LetsEncrypt localmente y copiar el certificado de /etc/letsencrypt/live/example.com/fullchain.pem en el contenedor de producción. Estos certificados tienen una validez de 90 días, por lo que deberá renovarlos periódicamente. Puede automatizarlo como parte del proceso de creación del contenedor.

Una vez que todo esté en orden, puede ejecutar la compilación de Docker:

docker build . -t my-app

Esto construirá el contenedor como my-app, después de lo cual puede etiquetarlo y enviarlo a ECS oa un registro de contenedor para una posible distribución. Por supuesto, primero debe probarlo localmente con docker run Enlace localhost:8080 en el puerto 80 de la instancia NGINX:

docker run -d -p 8080:80 my-app

Una vez que haya creado una imagen, implementarla en producción es bastante sencillo. Puede leer nuestra guía para configurar un Implementación de contenedores con ajuste de escala automático en AWS ECS para obtener más información o lea nuestra guía sobre configuración de una canalización de CI / CD con contenedores para administrar construcciones e implementaciones automatizadas.

RELACIONADA: ¿Qué es un archivo PEM y cómo se usa?

TE INTERESA>>  Sentencia de muerte por asesinato de ex esposa Streaming - SupChina

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Botón volver arriba