Como executar o NGINX Inside Docker (para fácil escalonamento automático)
Uma das cargas de trabalho mais comuns do Docker é usá-lo para armazenar servidores da web como NGINX e Apache para executar uma frota de entrega de conteúdo de alto desempenho que pode ser facilmente dimensionada e gerenciada automaticamente. Mostraremos como configurá-lo com o NGINX.
Configurando o NGINX Inside Docker
Docker é uma plataforma de contentorização, usada para empacotar seu aplicativo e todo o seu código em uma imagem de contêiner facilmente gerenciável. O processo para fazer isso é muito semelhante a como você faria para configurar um novo servidor — o contêiner é uma folha em branco, então você &’ precisará instalar dependências, construir seu código, copiar o construir artefatos e copiar sobre qualquer configuração. Felizmente, você não precisa automatizar tanto. O NGINX já tem um contêiner do Docker disponível publicamente, que você pode usar como ponto de partida para seu aplicativo.
Claro, dependendo do aplicativo que você está reencontrando, isso pode ser um pouco mais complicado. Se você estiver implantando um CMS como o WordPress, provavelmente precisará ter um banco de dados externo, pois os contêineres não são projetados para serem persistentes. Um bom lugar para começar com o WordPress em particular seria o contêiner Docker do WordPress.
Com o objetivo de ter algo um pouco mais envolvido do que uma simples página da web Hello World, nós &’ criaremos um novo diretório de projeto e inicializaremos um aplicativo Vue. js básico. Sua configuração será diferente dependendo do conteúdo que você está servindo, mas a ideia geral é a mesma.
Na raiz do seu projeto, crie um novo arquivo simplesmente denominado Dockerfile sem extensão. Isso funcionará como a configuração de construção. Por padrão, o contêiner está vazio e inclui apenas os aplicativos e dependências que vêm instalados com a imagem base. Você precisará copiar o código do seu aplicativo; se você estiver apenas exibindo conteúdo estático, isso é fácil, mas se estiver trabalhando com aplicativos do lado do servidor como o WordPress, pode ser necessário instalar dependências adicionais.
A configuração a seguir é bem básica. Como este é um aplicativo de nó, precisamos executar npm run build para obter um build pronto para distribuição. Podemos lidar com tudo isso no Dockerfile, configurando uma construção de contêiner de duas partes:
FROM node: mais recente como pacote WORKDIR / src COPY em estágio de construção * . json ./ RUN npm install COPY ./. RUN npm execute build FROM nginx como estágio de produção RUN mkdir / src COPY --from = build-stage / src / dist / src COPY nginx. conf /etc/nginx/nginx. conf
O comando FROM da primeira linha puxa o contêiner de nó do Docker Hub e cria um novo contêiner denominado estágio de construção. O próximo cd & # 8216; s para esse diretório e copia sobre o package. json. Em seguida, ele executa o npm install, copia o código do aplicativo e inicia o processo de compilação. Se seu aplicativo precisa ser criado a partir do código-fonte, você vai querer fazer algo semelhante a isto.
O próximo estado puxa o contêiner nginx para servir como implantação de produção. Ele cria o diretório src e depois copia, do contêiner de estágio de construção, a pasta / src / dist / contendo os artefatos de construção, para a pasta / src do contêiner de produção. Em seguida, ele copia um arquivo de configuração NGINX.
Você também vai querer fazer um novo arquivo chamado . dockerignore, para dizer a ele para ignorar node_modules, bem como quaisquer artefatos de construção de construções locais.
** / node_modules ** / dist
O Dockerfile faz referência a um nginx. conf, que você também precisará criar. Se você estiver executando uma configuração mais complexa com vários configs em / sites-available, convém criar uma nova pasta para sua configuração NGINX e copiá-la.
usuário nginx; worker_processes 1; error_log /var/log/nginx/error. log warn; pid /var/run/nginx. pid; eventos {worker_connections 1024; } http {inclua /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 ativado; keepalive_timeout 65; servidor {escuta 80; server_name localhost; localização / {root / src; index index. html; try_files $ uri $ uri / /index. html; } error_page 500 502 503 504 /50x. html; localização = /50x. html {root / usr / share / nginx / html; }}}
Este é apenas um servidor da web HTTP. A maneira mais simples de configurar HTTPS seria executar o certbot do LetsEncrypt &’ localmente e copiar o certificado de /etc/letsencrypt/live/example. com/fullchain. pem para o contêiner de produção. Esses certificados são válidos por 90 dias, portanto, você precisará renová-los regularmente. Você pode automatizar isso como parte do processo de construção do contêiner.
Depois que tudo estiver em ordem, você pode executar a compilação do Docker:
compilação do docker. -t my-app
Isso criará o contêiner como my-app, após o qual você estará livre para marcá-lo e enviá-lo ao ECS ou a um registro de contêiner para eventual implantação. Você deve, ou claro, testá-lo primeiro localmente com docker run binding localhost: 8080 para a porta 80 da instância NGINX:
docker run -d -p 8080: 80 my-app
Depois de criar uma imagem, implantá-la na produção é bastante simples. Você pode ler nosso guia para configurar uma implantação de contêiner de escalonamento automático no AWS ECS para saber mais ou ler nosso guia sobre como configurar um pipeline de CI / CD com contêineres para lidar com compilações e implantações automatizadas.
Nenhum comentário